diff --git a/.github/ISSUE_TEMPLATE/application_request.md b/.github/ISSUE_TEMPLATE/application_request.md new file mode 100644 index 00000000..952e580e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/application_request.md @@ -0,0 +1,15 @@ +--- +name: Application Request +about: Suggest an application to be added to Ansible-NAS +title: '' +labels: 'enhancement' +assignees: '' + +--- + +**Application you'd like to add:** + +**Link to Docker image:** + +**Why you'd like this application added:** + diff --git a/README.md b/README.md index f57c4ee9..41e1b56e 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ Ansible config and a bunch of Docker containers. * Content management with Joomla * A dual panel local file manager * Self-service media request web application +* SEO tracking with Serposcope ### Available Applications @@ -67,6 +68,7 @@ Ansible config and a bunch of Docker containers. * [Portainer](https://portainer.io/) - for managing Docker and running custom images * [pyLoad](https://pyload.net/) - A download manager with a friendly web-interface * [Radarr](https://radarr.video/) - for organising and downloading movies +* [Serposcope](https://serposcope.serphacker.com/en/) - tracker to monitor website ranking * [Sickchill](https://sickchill.github.io/) - for managing TV episodes * [Sonarr](https://sonarr.tv/) - for downloading and managing TV episodes * [Tautulli](http://tautulli.com/) - Monitor Your Plex Media Server @@ -76,6 +78,7 @@ Ansible config and a bunch of Docker containers. * [Traefik](https://traefik.io/) - Web proxy and SSL certificate manager * [Transmission](https://transmissionbt.com/) - BitTorrent client (with OpenVPN if you have a supported VPN provider) * [Ubooquity](http://vaemendis.net/ubooquity/) - Book and comic server +* [Virtual Desktop](https://github.com/RattyDAVE/docker-ubuntu-xrdp-mate-custom) - A virtual desktop running on your NAS. * [Wallabag](https://wallabag.org/) - Save and classify articles. Read them later. * [Watchtower](https://github.com/v2tec/watchtower) - Monitor your Docker containers and update them if a new version is available * [ZNC](https://wiki.znc.in/ZNC) - IRC bouncer to stay connected to favourite IRC networks and channels diff --git a/docs/applications/airsonic.md b/docs/applications/airsonic.md index 8b4eb765..2ecd99f6 100644 --- a/docs/applications/airsonic.md +++ b/docs/applications/airsonic.md @@ -6,7 +6,7 @@ Airsonic is a free, web-based media streamer, providing ubiquitous access to you ## Usage -Set `airsonic_enabled: true` in your `group_vars/all.yml` file. +Set `airsonic_enabled: true` in your `inventories//nas.yml` file. The Airsonic web interface can be found at http://ansible_nas_host_or_ip:4040. diff --git a/docs/applications/bazarr.md b/docs/applications/bazarr.md index 7a86f09c..328e73cf 100644 --- a/docs/applications/bazarr.md +++ b/docs/applications/bazarr.md @@ -8,7 +8,7 @@ Bazarr is a companion application to Sonarr and Radarr. It manages and downloads ## Usage -Set `bazarr_enabled: true` in your `group_vars/all.yml` file. +Set `bazarr_enabled: true` in your `inventories//nas.yml` file. ## Specific Configuration diff --git a/docs/applications/bitwarden.md b/docs/applications/bitwarden.md index 5cfc0ae6..be562b2f 100644 --- a/docs/applications/bitwarden.md +++ b/docs/applications/bitwarden.md @@ -7,7 +7,7 @@ This is a Bitwarden server API implementation written in Rust compatible with up ## Usage -Set `bitwarden_enabled: true` in your `group_vars/all.yml` file. +Set `bitwarden_enabled: true` in your `inventories//nas.yml` file. ## Specific Configuration diff --git a/docs/applications/calibre.md b/docs/applications/calibre.md index 07968bac..afef056d 100644 --- a/docs/applications/calibre.md +++ b/docs/applications/calibre.md @@ -7,7 +7,7 @@ Calibre-Web is a web app providing a clean interface for browsing, reading and d ## Usage -Set `calibre_enabled: true` in your `group_vars/all.yml` file. +Set `calibre_enabled: true` in your `inventories//nas.yml` file. ## Specific Configuration diff --git a/docs/applications/cloudcmd.md b/docs/applications/cloudcmd.md index 7db954e2..1c9271e3 100644 --- a/docs/applications/cloudcmd.md +++ b/docs/applications/cloudcmd.md @@ -8,10 +8,10 @@ Cloud Commander is a file manager for the web. It includes a command-line consol ## Usage -Set `cloudcmd_enabled: true` in your `group_vars/all.yml` file. +Set `cloudcmd_enabled: true` in your `inventories//nas.yml` file. By default your the root of your Ansible-NAS box (`/`) is mounted into `/mnt/fs` within the container. If you'd like to -change this update `cloudcmd_browse_directory` in your `group_vars/all.yml` file. +change this update `cloudcmd_browse_directory` in your `inventories//nas.yml` file. If you enable external access to Cloud Commander (note that this is not recommended) then ensure you configure authorisation within the application (F10 from the main menu). \ No newline at end of file diff --git a/docs/applications/cloudflare_ddns.md b/docs/applications/cloudflare_ddns.md index 3f2bef57..46d239bc 100644 --- a/docs/applications/cloudflare_ddns.md +++ b/docs/applications/cloudflare_ddns.md @@ -8,8 +8,8 @@ host A record to point to your static IP, or enable this container to automatica ## Usage -Set `cloudflare_ddns_enabled: true` in your `group_vars/all.yml` file. +Set `cloudflare_ddns_enabled: true` in your `inventories//nas.yml` file. ## Specific Configuration -Make sure you set your Cloudflare login, domain and API key details within your `group_vars/all.yml` file. \ No newline at end of file +Make sure you set your Cloudflare login, domain and API key details within your `inventories//nas.yml` file. \ No newline at end of file diff --git a/docs/applications/emby.md b/docs/applications/emby.md index 45f6995b..4ece0ae6 100644 --- a/docs/applications/emby.md +++ b/docs/applications/emby.md @@ -11,7 +11,7 @@ similar functionality. ## Usage -Set `emby_enabled: true` in your `group_vars/all.yml` file. There are further +Set `emby_enabled: true` in your `inventories//nas.yml` file. There are further parameters you can edit such as `movies_root` and `tv_root` lower down. ## Specific Configuration diff --git a/docs/applications/firefly.md b/docs/applications/firefly.md index d7a8ee3e..d92ecd40 100644 --- a/docs/applications/firefly.md +++ b/docs/applications/firefly.md @@ -6,6 +6,6 @@ Firefly III is a self-hosted financial manager. It can help you keep track of ex ## Usage -Set `firefly_enabled: true` in your `group_vars/all.yml` file. +Set `firefly_enabled: true` in your `inventories//nas.yml` file. The Firefly III web interface can be found at http://ansible_nas_host_or_ip:8066. diff --git a/docs/applications/get_iplayer.md b/docs/applications/get_iplayer.md index b5825475..49e5ed20 100644 --- a/docs/applications/get_iplayer.md +++ b/docs/applications/get_iplayer.md @@ -6,6 +6,6 @@ Downloads TV and radio programmes from BBC iPlayer. ## Usage -Set `get_iplayer_enabled: true` in your `group_vars/all.yml` file. +Set `get_iplayer_enabled: true` in your `inventories//nas.yml` file. The get_iplayer web interface can be found at http://ansible_nas_host_or_ip:8182. diff --git a/docs/applications/guacamole.md b/docs/applications/guacamole.md new file mode 100644 index 00000000..b4e3225b --- /dev/null +++ b/docs/applications/guacamole.md @@ -0,0 +1,17 @@ +# Guacamole + +Homepage: [hhttps://guacamole.apache.org/](https://guacamole.apache.org/) + +Apache Guacamole is a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH. + +## Usage + +Set `guacamole_enabled: true` in your `inventories//nas.yml` file. + +## Specific Configuration + +The default username and password is `guacadmin`. Change it! + +## What to connect to? + +You can run a virtual desktop from your Ansible-NAS box, check out the [Virtual Desktop docs](virtual_desktop.md). \ No newline at end of file diff --git a/docs/applications/homeassistant.md b/docs/applications/homeassistant.md index 29983c2e..51a6329d 100644 --- a/docs/applications/homeassistant.md +++ b/docs/applications/homeassistant.md @@ -5,8 +5,8 @@ Homepage: [https://www.home-assistant.io/](https://www.home-assistant.io/) ## Usage -Set `homeassistant_enabled: true` in your `group_vars/all.yml` file. +Set `homeassistant_enabled: true` in your `inventories//nas.yml` file. -If you want to access Home Assistant externally, don't forget to set `homeassistant_available_externally: "true"` in your `group_vars/all.yml` file. +If you want to access Home Assistant externally, don't forget to set `homeassistant_available_externally: "true"` in your `inventories//nas.yml` file. The Home Assistant web interface can be found at http://ansible_nas_host_or_ip:8123. diff --git a/docs/applications/homebridge.md b/docs/applications/homebridge.md index 645df83d..e00e382e 100644 --- a/docs/applications/homebridge.md +++ b/docs/applications/homebridge.md @@ -6,6 +6,6 @@ Homebridge is a lightweight NodeJS server you can run on your home network that ## Usage -Set `homebridge_enabled: true` in your `group_vars/all.yml` file. +Set `homebridge_enabled: true` in your `inventories//nas.yml` file. The Homebridge web interface can be found at http://ansible_nas_host_or_ip:8087. The default username and password is 'admin' - change this after your first login! diff --git a/docs/applications/jackett.md b/docs/applications/jackett.md index cc328774..582f99bd 100644 --- a/docs/applications/jackett.md +++ b/docs/applications/jackett.md @@ -6,6 +6,6 @@ Jackett works as a proxy server: it translates queries from apps (Sonarr, Radarr ## Usage -Set `jackett: true` in your `group_vars/all.yml` file. +Set `jackett: true` in your `inventories//nas.yml` file. The Jackett web interface can be found at http://ansible_nas_host_or_ip:9117. diff --git a/docs/applications/jellyfin.md b/docs/applications/jellyfin.md index ece01435..367cde3a 100644 --- a/docs/applications/jellyfin.md +++ b/docs/applications/jellyfin.md @@ -9,7 +9,7 @@ similar functionality. ## Usage -Set `jellyfin_enabled: true` in your `group_vars/all.yml` file. There are further +Set `jellyfin_enabled: true` in your `inventories//nas.yml` file. There are further parameters you can edit such as `movies_root` and `tv_root` lower down. ## Specific Configuration diff --git a/docs/applications/joomla.md b/docs/applications/joomla.md index 5f0ada71..4f3bc2e2 100644 --- a/docs/applications/joomla.md +++ b/docs/applications/joomla.md @@ -6,9 +6,9 @@ Joomla! is an award-winning content management system (CMS), which enables you t ## Usage -Set `joomla_enabled: true` in your `group_vars/all.yml` file. +Set `joomla_enabled: true` in your `inventories//nas.yml` file. -If you want to access Joomla externally, set `joomla_available_externally: "true"` in your `group_vars/all.yml` file. +If you want to access Joomla externally, set `joomla_available_externally: "true"` in your `inventories//nas.yml` file. The Joomla web interface can be found at http://ansible_nas_host_or_ip:8181. diff --git a/docs/applications/lidarr.md b/docs/applications/lidarr.md index aa4852db..7a73f1d8 100644 --- a/docs/applications/lidarr.md +++ b/docs/applications/lidarr.md @@ -9,4 +9,4 @@ Lidarr is a music collection manager for Usenet and BitTorrent users. It can mon ## Usage -Set `lidarr_enabled: true` in your `group_vars/all.yml` file. +Set `lidarr_enabled: true` in your `inventories//nas.yml` file. diff --git a/docs/applications/minidlna.md b/docs/applications/minidlna.md index 795f5858..61c4298e 100644 --- a/docs/applications/minidlna.md +++ b/docs/applications/minidlna.md @@ -6,6 +6,6 @@ MiniDLNA is server software with the aim of being fully compliant with DLNA/UPnP ## Usage -Set `minidlna_enabled: true` in your `group_vars/all.yml` file. +Set `minidlna_enabled: true` in your `inventories//nas.yml` file. The very basic MiniDLNA web interface can be found at http://ansible_nas_host_or_ip:8201. diff --git a/docs/applications/miniflux.md b/docs/applications/miniflux.md index 6b329c2d..d79ea242 100644 --- a/docs/applications/miniflux.md +++ b/docs/applications/miniflux.md @@ -6,7 +6,7 @@ Miniflux is a minimalist and opinionated feed reader. ## Usage -Set `miniflux_enabled: true` in your `group_vars/all.yml` file. +Set `miniflux_enabled: true` in your `inventories//nas.yml` file. The Miniflux web interface can be found at http://ansible_nas_host_or_ip:8070, the default username is `admin` and password `supersecure`. diff --git a/docs/applications/mosquitto.md b/docs/applications/mosquitto.md index 26da7021..5c981369 100644 --- a/docs/applications/mosquitto.md +++ b/docs/applications/mosquitto.md @@ -6,5 +6,5 @@ Mosquitto is a lightweight open source MQTT message broker. ## Usage -Set `mosquitto_enabled: true` in your `group_vars/all.yml` file. +Set `mosquitto_enabled: true` in your `inventories//nas.yml` file. diff --git a/docs/applications/mymediaforalexa.md b/docs/applications/mymediaforalexa.md index fe34eb71..e9c83646 100644 --- a/docs/applications/mymediaforalexa.md +++ b/docs/applications/mymediaforalexa.md @@ -6,6 +6,6 @@ My Media lets you stream your music collection to your Amazon Echo or Amazon Dot ## Usage -Set `mymediaforalexa_enabled: true` in your `group_vars/all.yml` file. +Set `mymediaforalexa_enabled: true` in your `inventories//nas.yml` file. The My Media for Alexa web interface can be found at http://ansible_nas_host_or_ip:52051. diff --git a/docs/applications/nextcloud.md b/docs/applications/nextcloud.md index 2c4e492d..f68d95e3 100644 --- a/docs/applications/nextcloud.md +++ b/docs/applications/nextcloud.md @@ -5,6 +5,8 @@ Homepage: [https://nextcloud.com](https://nextcloud.com) ## Usage +Set `nextcloud_enabled: true` in your `inventories//nas.yml` file. + Tread carefully. External access may require that you manually configure your Fully Qualified Domain Name (FQDN) as a trusted domain within the application. There is an evnironment variable set up for this in the "nextcloud task" which will most likely make manual configuration unneccessary. If you get the following [screenshot](https://docs.nextcloud.com/server/14/admin_manual/installation/installation_wizard.html#trusted-domains) warning when trying to access nextcloud externally you'll need to manually set it up. diff --git a/docs/applications/nzbget.md b/docs/applications/nzbget.md index d04d152e..95cd0e07 100644 --- a/docs/applications/nzbget.md +++ b/docs/applications/nzbget.md @@ -6,6 +6,6 @@ The most efficient Usenet downloader. NZBGet is written in C++ and designed with ## Usage -Set `nzbget_enabled: true` in your `group_vars/all.yml` file. +Set `nzbget_enabled: true` in your `inventories//nas.yml` file. The NZBget web interface can be found at http://ansible_nas_host_or_ip:6789, the default username is `nzbget` and password `tegbzn6789`. Change this once you've logged in! diff --git a/docs/applications/ombi.md b/docs/applications/ombi.md index f88b2492..8f5f6100 100644 --- a/docs/applications/ombi.md +++ b/docs/applications/ombi.md @@ -9,4 +9,4 @@ Ombi is a self-hosted web application that automatically gives your shared Plex ## Usage -Set `ombi_enabled: true` in your `group_vars/all.yml` file. +Set `ombi_enabled: true` in your `inventories//nas.yml` file. diff --git a/docs/applications/openhab.md b/docs/applications/openhab.md index aee723ef..7a517ac5 100644 --- a/docs/applications/openhab.md +++ b/docs/applications/openhab.md @@ -7,7 +7,7 @@ It allows you to connect many different IoT-Devices (which in this case means "I ## Usage -Set `openhab_enabled: true` in your `group_vars/all.yml` file. +Set `openhab_enabled: true` in your `inventories//nas.yml` file. ## Specific Configuration diff --git a/docs/applications/pyload.md b/docs/applications/pyload.md index c4e537b6..61b7694e 100644 --- a/docs/applications/pyload.md +++ b/docs/applications/pyload.md @@ -6,7 +6,7 @@ Free and Open Source download manager written in Python and designed to be extre . ## Usage -Set `pyload_enabled: true` in your `group_vars/all.yml` file. +Set `pyload_enabled: true` in your `inventories//nas.yml` file. pyLoad's web interface can be found at http://ansible_nas_host_or_ip:8000 diff --git a/docs/applications/radarr.md b/docs/applications/radarr.md new file mode 100644 index 00000000..fd2c3897 --- /dev/null +++ b/docs/applications/radarr.md @@ -0,0 +1,21 @@ +# Sonarr & Radarr +Homepage: [radarr](https://radarr.video/) + +**Radarr** is an independent fork of Sonarr reworked for automatically downloading movies via Usenet and BitTorrent. + +## Usage + +Set `radarr_enabled: true` in your `/inventories/[my inventory]/group_vars/nas.yml` file. + +The Radarr web interface can be found at `http://ansible_nas_host_or_ip:7878` by default + +## Specific Configuration + +**First make sure Radarr has permissions to write and read the `/download`, and `/movies` folders**. Do this by ensuring the `radarr_movies_directory:` and `radarr_download_directory` settings are correct. + +Radarr will get the file path from the Download client. On default settings with Transmission the path is `/storage/downloads/complete`. You will need to create a path mapping in the **Remote Path Mappings** settings under **Download Client** to point to your internal path that is by default `/downloads`. *If you have difficulties with the path mapping you could also just add a new volume path for the Transmission container and use `/downloads` as the download directory.* + +For Radarr to understand that the `/movies` folder is a folder, you'll need to add a new subfolder into it. +You can also do this by adding a random movie to the folder. Keep in mind to have the internal setting **Create empty movie folders** on **yes** + +Comprehensive setup information can be found on the [Radarr github wiki](https://github.com/Radarr/Radarr/wiki/Setup-Guide) \ No newline at end of file diff --git a/docs/applications/serposcope.md b/docs/applications/serposcope.md new file mode 100644 index 00000000..c450691d --- /dev/null +++ b/docs/applications/serposcope.md @@ -0,0 +1,11 @@ +# Serposcope + +Homepage: [https://serposcope.serphacker.com/en/](https://serposcope.serphacker.com/en/) + +Serposcope is a free and open-source rank tracker to monitor websites ranking in Google and improve your SEO performances + +## Usage + +Set `serposcope_enabled: true` in your `inventories//nas.yml` file. + +The Serposcope web interface can be found at http://ansible_nas_host_or_ip:7134. diff --git a/docs/applications/sonarr.md b/docs/applications/sonarr.md new file mode 100644 index 00000000..924d5792 --- /dev/null +++ b/docs/applications/sonarr.md @@ -0,0 +1,22 @@ +# Sonarr & Radarr +Homepages: [sonarr](https://sonarr.tv/) + +**Sonarr** is a PVR for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available. + +## Usage + +Set `sonarr_enabled: true` in your `/inventories/[my inventory]/group_vars/nas.yml` file. + +The Sonarr web interface can be found at `http://ansible_nas_host_or_ip:8989` by default + + +## Specific Configuration + +**First make sure Sonarr has permissions to write and read the `/download` and `/tv` folders**. Do this by ensuring the `sonarr_movies_directory:` and `sonarr_download_directory` settings are correct. + +Sonarr will get the file path from the Download client. On default settings with Transmission the path is `/storage/downloads/complete`. You will need to create a path mapping in the **Remote Path Mappings** settings under **Download Client** to point to your internal path that is by default `/downloads`. *If you have difficulties with the path mapping you could also just add a new volume path for the Transmission container and use `/downloads` as the download directory.* + +For Sonarr to understand that the `/tv` folder is a folder, you'll need to add a folder into it. +You can also do this by adding a random series to the folder. Keep in mind to have the setting **Create empty movie folders** on **yes** + +For comprehensive configuration instructions see the [Sonarr github wiki](https://github.com/Sonarr/Sonarr/wiki) \ No newline at end of file diff --git a/docs/applications/thelounge.md b/docs/applications/thelounge.md index 9a25330c..702c7baf 100644 --- a/docs/applications/thelounge.md +++ b/docs/applications/thelounge.md @@ -6,7 +6,7 @@ The Lounge is a self-hosted web IRC client. ## Usage -Set `thelounge_enabled: true` in your `group_vars/all.yml` file. +Set `thelounge_enabled: true` in your `inventories//nas.yml` file. The Lounge web interface can be found at http://ansible_nas_host_or_ip:9000. diff --git a/docs/applications/timemachine.md b/docs/applications/timemachine.md index 202e3ec9..34c9ba98 100644 --- a/docs/applications/timemachine.md +++ b/docs/applications/timemachine.md @@ -9,7 +9,7 @@ Older versions of Time Machine relied on AFP (netatalk) shares. Apple has deprec ## Usage -Set `timemachine_enabled: true` in your `group_vars/all.yml` file. +Set `timemachine_enabled: true` in your `inventories//nas.yml` file. Enabling Time Machine will result in the installation of Avahi on the NAS system (if it is not already installed) and a Time Machine service configuration file for Avahi will be added to the system (at `/etc/avahi/services/timemachine.service`) to allow for Time Machine discovery by Macs on the local network. Avahi runs on the system, rather than in a container, as the same Avahi instance can be used to announce any number of services. diff --git a/docs/applications/traefik.md b/docs/applications/traefik.md index 344aea8f..5ea3ffb6 100644 --- a/docs/applications/traefik.md +++ b/docs/applications/traefik.md @@ -11,7 +11,7 @@ See [External Access](configuration/external_access) for more info. ## Usage -Set `traefik_enabled: true` in your `group_vars/all.yml` file. +Set `traefik_enabled: true` in your `inventories//nas.yml` file. Traefik's web interface can be found at http://ansible_nas_host_or_ip:8083. diff --git a/docs/applications/transmission.md b/docs/applications/transmission.md index 9f2638d2..0db9b461 100644 --- a/docs/applications/transmission.md +++ b/docs/applications/transmission.md @@ -7,7 +7,7 @@ directly. ## Usage -Set `transmission_enabled: true`, or `transmission_with_openvpn_enabled: true` in your `group_vars/all.yml` file. +Set `transmission_enabled: true`, or `transmission_with_openvpn_enabled: true` in your `inventories//nas.yml` file. Transmission's web interface can be found at http://ansible_nas_host_or_ip:9091 (with VPN) or http://ansible_nas_host_or_ip:9092 (without VPN). diff --git a/docs/applications/ubooquity.md b/docs/applications/ubooquity.md index 293d79d1..71afb093 100644 --- a/docs/applications/ubooquity.md +++ b/docs/applications/ubooquity.md @@ -8,7 +8,7 @@ Ubooquity is a free, lightweight and easy-to-use home server for your comics and ## Usage -Set `ubooquity_enabled: true` in your `group_vars/all.yml` file. +Set `ubooquity_enabled: true` in your `inventories//nas.yml` file. Access the webui at http://:2202/ubooquity by default. See specific configuration section below for information on setting up external access. diff --git a/docs/applications/virtual_desktop.md b/docs/applications/virtual_desktop.md new file mode 100644 index 00000000..282f0e04 --- /dev/null +++ b/docs/applications/virtual_desktop.md @@ -0,0 +1,30 @@ +# Virtual Desktop + +It's possible to run a cut down desktop within a Docker container. We use [RattyDAVE's custom Ubuntu Mate image](https://github.com/RattyDAVE/docker-ubuntu-xrdp-mate-custom). + +## Usage + +Set `virtual_desktop_enabled: true` in your `inventories//nas.yml` file. + +## Specific Configuration + +By default `{{ ansible_nas_user }}` will be granted access with a password of `topsecret` with sudo rights. To change or add additional users override `vd_users` in your `nas.yml`: + +``` +vd_users: + - username: "{{ ansible_nas_user }}" + password: "topsecret" + sudo: "Y" + - username: "larrylaffer" + password: "kensentme" + sudo: "Y" +``` + +## Mounts + +`{{ samba_shares_root }}` is mounted to `/samba`. +`{{ docker_home }}` is mounted to `/docker`. + +## Remote Access + +It's possible to access your virtual desktop through a web browser! Check out [Guacamole](guacamole.md). \ No newline at end of file diff --git a/docs/applications/wallabag.md b/docs/applications/wallabag.md index 03ac4f2a..9898aff0 100644 --- a/docs/applications/wallabag.md +++ b/docs/applications/wallabag.md @@ -6,9 +6,9 @@ wallabag is a self-hostable PHP application allowing you to not miss any content ## Usage -Set `wallabag_enabled: true` in your `group_vars/all.yml` file. +Set `wallabag_enabled: true` in your `inventories//nas.yml` file. -If you want to access Wallabag externally, don't forget to set `wallabag_available_externally: "true"` in your `group_vars/all.yml` file. +If you want to access Wallabag externally, don't forget to set `wallabag_available_externally: "true"` in your `inventories//nas.yml` file. I reccomend using the mobile app, which will sync with this installation so you have access to your saved articles even if you don't have signal or wifi access. diff --git a/docs/applications/watchtower.md b/docs/applications/watchtower.md index 516fe30b..61a19809 100644 --- a/docs/applications/watchtower.md +++ b/docs/applications/watchtower.md @@ -6,10 +6,10 @@ A process for watching your Docker containers and automatically updating and res ## Usage -Set `watchtower_enabled: true` in your `group_vars/all.yml` file. +Set `watchtower_enabled: true` in your `inventories//nas.yml` file. ## Specific Configuration By default Watchtower is configured to check daily at 5am for updates. -Various notification options are available, and can be configured by updating `watchtower_command` in your `group_vars/all.yml` file. A few examples are provided. The full set of options can be found at the [Watchtower GitHub project page](https://github.com/v2tec/watchtower). +Various notification options are available, and can be configured by updating `watchtower_command` in your `inventories//nas.yml` file. A few examples are provided. The full set of options can be found at the [Watchtower GitHub project page](https://github.com/v2tec/watchtower). diff --git a/docs/configuration/application_ports.md b/docs/configuration/application_ports.md index 492d9b7f..3718e2ec 100644 --- a/docs/configuration/application_ports.md +++ b/docs/configuration/application_ports.md @@ -43,6 +43,7 @@ By default, applications can be found on the ports listed below. | Portainer | 9000 | | | pyload | 8000 | | | Radarr | 7878 | | +| Serposcope | 7134 | | | Sickchill | 8081 | | | Sonarr | 8989 | | | Tautulli | 8181 | | diff --git a/docs/installation.md b/docs/installation.md index 42a9e85c..bafb1019 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -11,6 +11,12 @@ You can run Ansible-NAS from the computer you plan to use for your NAS, or from 2. Install Ansible: + `sudo apt update` + + `sudo apt install software-properties-common` + + `sudo apt-add-repository --yes --update ppa:ansible/ansible` + `sudo apt install ansible` 3. Clone Ansible-NAS: @@ -27,4 +33,4 @@ You can run Ansible-NAS from the computer you plan to use for your NAS, or from 7. Install the dependent roles: `ansible-galaxy install -r requirements.yml` (you might need `sudo` to install Ansible roles). -8. Run the playbook - something like `ansible-playbook -i inventories/my-ansible-nas/inventory nas.yml -b -K` should do you nicely. \ No newline at end of file +8. Run the playbook - something like `ansible-playbook -i inventories/my-ansible-nas/inventory nas.yml -b -K` should do you nicely. diff --git a/group_vars/all.yml b/group_vars/all.yml index 68f5fc26..32d96f65 100644 --- a/group_vars/all.yml +++ b/group_vars/all.yml @@ -56,6 +56,7 @@ netdata_enabled: false watchtower_enabled: false cloudflare_ddns_enabled: false cloudcmd_enabled: false +virtual_desktop_enabled: false # Backup & Restore duplicati_enabled: false @@ -93,13 +94,18 @@ ubooquity_enabled: false # Joomla joomla_enabled: false +# SEO +serposcope_enabled: false + # External Access # Traefik will allow access to certain applications externally. To enable this you'll either; a domain name that points to your # home static IP address, the cloudflare with the cloudflare_ddns dynamic DNS container enabled, or use a dynamic DNS provider like no-ip. # You'll also need to map ports 80 and 443 from your router to your ansible-nas server, then enable the per-app "available_externally" # settings. traefik_enabled: false - +traefik_port_http: "80" +traefik_port_https: "443" +traefik_port_ui: "8083" ### ### General ### @@ -284,7 +290,6 @@ cloudflare_email: "{{ ansible_nas_email }}" # Cloudflare 'Global API Key', can be found on the 'My Profile' page cloudflare_api_key: abcdeabcdeabcdeabcde1234512345 - ### ### General ### @@ -332,6 +337,8 @@ traefik_debug: "false" heimdall_available_externally: "false" heimdall_docker_image: linuxserver/heimdall:latest heimdall_data_directory: "{{ docker_home }}/heimdall" +heimdall_port_http: "10080" +heimdall_port_https: "10443" ### ### Transmission @@ -344,6 +351,10 @@ transmission_watch_directory: "{{ torrents_root }}" transmission_user_id: "0" transmission_group_id: "0" transmission_local_network: "192.168.1.0/24" +transmission_webui_port: "9092" +transmission_external_port: "51414" +transmission_openvpn_webui_port: "9093" +transmission_openvpn_external_port: "51415" # Transmission VPN Credentials # If you're using Transmission with a VPN, you'll need to set these credentials. @@ -359,6 +370,7 @@ openvpn_config: United-Kingdom joomla_data_directory: "{{ docker_home }}/joomla" joomla_available_externally: "false" joomla_database_password: top_secret +joomla_port: "8181" ### ### pyLoad @@ -368,6 +380,7 @@ pyload_config_directory: "{{ docker_home }}/pyload" pyload_download_directory: "{{ downloads_root }}" pyload_user_id: "0" pyload_group_id: "0" +pyload_port: "8000" ### ### Plex @@ -387,6 +400,7 @@ plex_music_directory: "{{ music_root }}" plex_music_permissions: "rw" plex_user_id: "0" plex_group_id: "0" +plex_port: "32400" ### ### Homebridge @@ -395,6 +409,7 @@ homebridge_available_externally: "false" homebridge_config_directory: "{{ docker_home }}/homebridge/config" homebridge_user_id: "0" homebridge_group_id: "0" +homebridge_port: "8087" ### ### Emby @@ -409,6 +424,8 @@ emby_tv_directory: "{{ tv_root }}" emby_tv_permissions: "rw" emby_user_id: "0" emby_group_id: "0" +emby_port_http: "8096" +emby_port_https: "8920" ### ### Tautulli @@ -417,6 +434,7 @@ tautulli_available_externally: "false" tautulli_config_directory: "{{ docker_home }}/tautulli/config" tautulli_user_id: "0" tautulli_group_id: "0" +tautulli_port: "8185" ### @@ -424,7 +442,7 @@ tautulli_group_id: "0" ### duplicati_available_externally: "false" duplicati_data_directory: "{{ docker_home }}/duplicati/config" - +duplicati_port: "8200" ### ### Sonarr @@ -435,7 +453,7 @@ sonarr_tv_directory: "{{ tv_root }}" sonarr_download_directory: "{{ downloads_root }}" sonarr_user_id: "0" sonarr_group_id: "0" - +sonarr_port: "8989" ### ### Radarr @@ -446,6 +464,7 @@ radarr_download_directory: "{{ downloads_root }}" radarr_data_directory: "{{ docker_home }}/radarr" radarr_user_id: "0" radarr_group_id: "0" +radarr_port: "7878" ### ### Bazarr @@ -456,6 +475,7 @@ bazarr_tv_directory: "{{ tv_root }}" bazarr_movies_directory: "{{ movies_root }}" bazarr_user_id: "0" bazarr_group_id: "0" +bazarr_port: "6767" ### ### lidarr @@ -466,7 +486,7 @@ lidarr_music_directory: "{{ music_root }}" lidarr_downloads_directory: "{{ downloads_root }}" lidarr_user_id: "0" lidarr_group_id: "0" - +lidarr_port: "8686" ### ### Couchpotato @@ -478,7 +498,7 @@ couchpotato_downloads_directory: "{{ downloads_root }}" couchpotato_torrents_directory: "{{ torrents_root }}" couchpotato_user_id: "0" couchpotato_group_id: "0" - +couchpotato_port: "5050" ### ### Sickchill @@ -489,6 +509,8 @@ sickchill_tv_directory: "{{ tv_root }}" sickchill_downloads_directory: "{{ downloads_root }}/completed" sickchill_user_id: "0" sickchill_group_id: "0" +sickchill_port: "8081" + ### ### Ombi @@ -502,6 +524,7 @@ ombi_group_id: "0" ### Netdata ### netdata_available_externally: "false" +netdata_port: "19999" ### ### OpenVPN @@ -514,7 +537,7 @@ openvpn_config_directory: "{{ docker_home }}/openvpn" ### portainer_available_externally: "false" portainer_data_directory: "{{ docker_home }}/portainer/config" - +portainer_port: "9000" ### ### ZNC @@ -523,6 +546,7 @@ znc_available_externally: "false" znc_data_directory: "{{ docker_home }}/znc" znc_user_id: "0" znc_group_id: "0" +znc_port: "6677" ### @@ -533,36 +557,44 @@ telegraf_data_directory: "{{ docker_home }}/telegraf" influxdb_data_directory: "{{ docker_home }}/influxdb" grafana_data_directory: "{{ docker_home }}/grafana" stat_collection_interval: 15s +grafana_influxdb_port: "8086" +grafana_port: "3000" ### ### Gitea ### gitea_available_externally: "false" gitea_data_directory: "{{ docker_home }}/gitea" +gitea_port_http: "3001" +gitea_port_ssh: "222" ### ### Glances ### glances_available_externally: "false" +glances_port_one: "61208" +glances_port_two: "61209" ### ### Nextcloud ### nextcloud_available_externally: "false" nextcloud_data_directory: "{{ docker_home }}/nextcloud" +nextcloud_port: "8080" ### ### nginx ### nginx_data_directory: "{{ docker_home }}/nginx" +nginx_port_http: "80" +nginx_port_https: "443" ### ### Guacamole ### guacamole_available_externally: "false" -guacamole_docker_image: guacamole/guacamole:0.9.14 -guacamole_guacd_docker_image: guacamole/guacd:0.9.14 guacamole_data_directory: "{{ docker_home }}/guacamole" +guacamole_port: "8090" ### ### Miniflux @@ -571,12 +603,17 @@ miniflux_available_externally: "false" miniflux_data_directory: "{{ docker_home }}/miniflux" miniflux_admin_username: admin miniflux_admin_password: supersecure +miniflux_port: "8070" ### ### Airsonic ### airsonic_available_externally: "false" airsonic_data_directory: "{{ docker_home }}/airsonic" +airsonic_music_directory: "{{ music_root }}" +airsonic_podcasts_directory: "{{ podcasts_root }}" +airsonic_port: "4040" + ### ### CloudCmd @@ -586,6 +623,7 @@ cloudcmd_data_directory: "{{ docker_home }}/cloudcmd/config" cloudcmd_browse_directory: "/" cloudcmd_user_id: "0" cloudcmd_group_id: "0" +cloudcmd_port: "7373" ### ### Watchtower @@ -621,12 +659,14 @@ timemachine_port: "10445" minidlna_media_directory1: "{{ movies_root }}" minidlna_media_directory2: "{{ tv_root }}" minidlna_friendly_name: "{{ ansible_nas_hostname }}" +minidlna_port: "8201" ### ### get_iplayer ### get_iplayer_config_directory: "{{ docker_home }}/get_iplayer" get_iplayer_download_directory: "{{ tv_root }}/iplayer_downloads" +get_iplayer_port: "8182" ### ### mymediaforalexa @@ -639,18 +679,24 @@ mymediaforalexa_data_directory: "{{ docker_home }}/mymediaforalexa" ### jackett_available_externally: "false" jackett_data_directory: "{{ docker_home }}/jackett" +jackett_torrents_root: "{{ torrents_root }}" +jackett_port: "9117" ### ### The Lounge ### thelounge_available_externally: "false" thelounge_data_directory: "{{ docker_home }}/thelounge" +thelounge_port_one: "113" +thelounge_port_two: "9002" ### ### Bitwarden ### bitwarden_available_externally: "false" bitwarden_data_directory: "{{ docker_home }}/bitwarden" +bitwarden_port_a: "19080" +bitwarden_port_b: "3012" # Keep this token secret, this is password to access admin area of your server! # This token can be anything, but it's recommended to use a long, randomly generated string of characters, @@ -667,6 +713,7 @@ bitwarden_allow_signups: false ### firefly_available_externally: "false" firefly_data_directory: "{{ docker_home }}/firefly" +firefly_port: "8066" ### ### Nzbget @@ -676,18 +723,22 @@ nzbget_data_directory: "{{ docker_home }}/nzbget" nzbget_download_directory: "{{ downloads_root }}" nzbget_user_id: "0" nzbget_group_id: "0" +nzbget_port: "6789" ### ### Wallabag ### wallabag_available_externally: "false" wallabag_data_directory: "{{ docker_home }}/wallabag" +wallabag_port: "7780" ### ### Mosquitto ### mosquitto_available_externally: "false" mosquitto_data_directory: "{{ docker_home }}/mosquitto" +mosquitto_port_a: "1883" +mosquitto_port_b: "9001" ### ### Calibre @@ -696,6 +747,8 @@ calibre_available_externally: "false" calibre_data_directory: "{{ docker_home }}/calibre" calibre_user_id: "0" calibre_group_id: "0" +calibre_books_root: "{{ books_root }}" +calibre_port: "8084" # To disable ebook conversion set calibre_ebook_conversion to "". To enable it set it to "linuxserver/calibre-web:calibre" calibre_ebook_conversion: "linuxserver/calibre-web:calibre" @@ -704,6 +757,7 @@ calibre_ebook_conversion: "linuxserver/calibre-web:calibre" ### homeassistant_available_externally: "false" homeassistant_data_directory: "{{ docker_home }}/homeassistant" +homeassistant_port: "8123" ### ### openHAB @@ -711,6 +765,8 @@ homeassistant_data_directory: "{{ docker_home }}/homeassistant" openhab_available_externally: "false" openhab_docker_image: openhab/openhab:latest openhab_data_directory: "{{ docker_home }}/openhab" +openhab_port_http: "7777" +openhab_port_https: "7778" ### ### Jellyfin @@ -725,6 +781,8 @@ jellyfin_tv_directory: "{{ tv_root }}" jellyfin_tv_permissions: "rw" jellyfin_user_id: "0" jellyfin_group_id: "0" +jellyfin_port_http: "8896" +jellyfin_port_https: "8928" ### ### Ubooquity @@ -733,3 +791,23 @@ ubooquity_available_externally: "false" ubooquity_data_directory: "{{ docker_home }}/ubooquity" ubooquity_user_id: "0" ubooquity_group_id: "0" +ubooquity_port_webui: "2202" +ubooquity_port_admin: "2203" + +### +### Serposcope +### +serposcope_data_directory: "{{ docker_home }}/serposcope" +serposcope_port: 7134 +serposcope_available_externally: "false" + +### +### Virtual Desktop +### +vd_data_directory: "{{ docker_home }}/virtual_desktop" +vd_docker_image: "rattydave/docker-ubuntu-xrdp-mate-custom:19.10-tools" +vd_users: + - username: "{{ ansible_nas_user }}" + password: "topsecret" + sudo: "Y" +vd_rdp_port: 3389 \ No newline at end of file diff --git a/nas.yml b/nas.yml index 56aeedc0..f74093df 100644 --- a/nas.yml +++ b/nas.yml @@ -215,3 +215,11 @@ - import_tasks: tasks/lidarr.yml when: (lidarr_enabled | default(False)) tags: lidarr + + - import_tasks: tasks/serposcope.yml + when: (serposcope_enabled | default(False)) + tags: serposcope + + - import_tasks: tasks/virtual_desktop.yml + when: (virtual_desktop_enabled | default(False)) + tags: virtual_desktop diff --git a/tasks/airsonic.yml b/tasks/airsonic.yml index c28bbf57..dcf21cca 100644 --- a/tasks/airsonic.yml +++ b/tasks/airsonic.yml @@ -16,10 +16,10 @@ volumes: - "{{ airsonic_data_directory }}/data:/airsonic/data:rw" - "{{ airsonic_data_directory }}/playlists:/airsonic/playlists:rw" - - "{{ samba_shares_root }}/music:/airsonic/music:rw" - - "{{ samba_shares_root }}/podcasts:/airsonic/podcasts:rw" + - "{{ airsonic_music_directory }}:/airsonic/music:rw" + - "{{ airsonic_podcasts_directory }}:/airsonic/podcasts:rw" ports: - - "4040:4040" + - "{{ airsonic_port }}:4040" restart_policy: unless-stopped memory: 1g labels: diff --git a/tasks/bazarr.yml b/tasks/bazarr.yml index ee8bd82a..a606f5bc 100644 --- a/tasks/bazarr.yml +++ b/tasks/bazarr.yml @@ -16,7 +16,7 @@ - "{{ bazarr_movies_directory }}:/movies:rw" - "{{ bazarr_data_directory }}:/config:rw" ports: - - "6767:6767" + - "{{ bazarr_port }}:6767" env: TZ: "{{ ansible_nas_timezone }}" PUID: "{{ bazarr_user_id }}" diff --git a/tasks/bitwarden.yml b/tasks/bitwarden.yml index 07f523cc..9d118c0f 100644 --- a/tasks/bitwarden.yml +++ b/tasks/bitwarden.yml @@ -11,8 +11,8 @@ image: mprasil/bitwarden:latest pull: true ports: - - "19080:80" - - "3012:3012" + - "{{ bitwarden_port_a }}:80" + - "{{ bitwarden_port_b }}:3012" volumes: - "{{ bitwarden_data_directory }}:/data:rw" env: @@ -25,7 +25,7 @@ traefik.enable: "{{ bitwarden_available_externally }}" traefik.web.port: "80" traefik.hub.frontend.rule: "Host:bitwarden.{{ ansible_nas_domain }};Path:/notifications/hub" - traefik.hub.port: "3012" + traefik.hub.port: "bitwarden_port_b" traefik.hub.protocol: "ws" restart_policy: unless-stopped #memory: 1g diff --git a/tasks/calibre.yml b/tasks/calibre.yml index f42e0dc1..321fe00d 100644 --- a/tasks/calibre.yml +++ b/tasks/calibre.yml @@ -12,14 +12,14 @@ pull: true volumes: - "{{ calibre_data_directory }}/config:/config" - - "{{ books_root }}:/books" + - "{{ calibre_books_root }}:/books" env: TZ: "{{ ansible_nas_timezone }}" PUID: "{{ calibre_user_id }}" PGID: "{{ calibre_group_id }}" DOCKER_MODS: "{{ calibre_ebook_conversion }}" ports: - - "8084:8083" + - "{{ calibre_port }}:8083" restart_policy: unless-stopped labels: traefik.backend: "calibre" diff --git a/tasks/cloudcmd.yml b/tasks/cloudcmd.yml index 6eed807c..3943b761 100644 --- a/tasks/cloudcmd.yml +++ b/tasks/cloudcmd.yml @@ -15,7 +15,7 @@ - "{{ cloudcmd_data_directory }}:/config:rw" - "{{ cloudcmd_browse_directory }}:/mnt/fs" ports: - - "7373:8000" + - "{{ cloudcmd_port }}:8000" env: TZ: "{{ ansible_nas_timezone }}" PUID: "{{ cloudcmd_user_id }}" diff --git a/tasks/couchpotato.yml b/tasks/couchpotato.yml index 04dacb7b..c084a5bc 100644 --- a/tasks/couchpotato.yml +++ b/tasks/couchpotato.yml @@ -18,7 +18,7 @@ - "{{ couchpotato_movies_directory }}:/movies:rw" - "{{ couchpotato_torrents_directory }}:/torrents:rw" ports: - - "5050:5050" + - "{{ couchpotato_port }}:5050" env: TZ: "{{ ansible_nas_timezone }}" PUID: "{{ couchpotato_user_id }}" diff --git a/tasks/docker.yml b/tasks/docker.yml index 1b13dcfa..f7ff349c 100644 --- a/tasks/docker.yml +++ b/tasks/docker.yml @@ -6,9 +6,16 @@ register: result until: result is succeeded -- name: 'Install docker-py' +- name: 'Remove docker-py python module' pip: name: docker-py + state: absent + register: result + until: result is succeeded + +- name: 'Install docker python module' + pip: + name: docker state: present register: result until: result is succeeded @@ -37,4 +44,4 @@ state: restarted when: docker_config.changed tags: - - skip_ansible_lint \ No newline at end of file + - skip_ansible_lint diff --git a/tasks/duplicati.yml b/tasks/duplicati.yml index 3b6145e2..593ce80e 100644 --- a/tasks/duplicati.yml +++ b/tasks/duplicati.yml @@ -12,7 +12,7 @@ image: linuxserver/duplicati pull: true ports: - - "8200:8200" + - "{{ duplicati_port }}:8200" volumes: - "{{ duplicati_data_directory }}:/config:rw" - "{{ samba_shares_root }}:/source/shares:ro" diff --git a/tasks/emby.yml b/tasks/emby.yml index fdded57c..38ec652c 100644 --- a/tasks/emby.yml +++ b/tasks/emby.yml @@ -15,8 +15,8 @@ - "{{ emby_movies_directory }}:/movies:{{ emby_movies_permissions }}" - "{{ emby_tv_directory }}:/tv:{{ emby_tv_permissions }}" ports: - - "8096:8096" # HTTP port - - "8920:8920" # HTTPS port + - "{{ emby_port_http }}:8096" + - "{{ emby_port_https }}:8920" network_mode: host env: TZ: "{{ ansible_nas_timezone }}" @@ -28,4 +28,4 @@ traefik.backend: "emby" traefik.frontend.rule: "Host:emby.{{ ansible_nas_domain }}" traefik.enable: "{{ emby_available_externally }}" - traefik.port: "8096" + traefik.port: "8096" \ No newline at end of file diff --git a/tasks/firefly.yml b/tasks/firefly.yml index c72a7a15..5955d334 100644 --- a/tasks/firefly.yml +++ b/tasks/firefly.yml @@ -38,7 +38,7 @@ links: - firefly-mysql:db ports: - - "8066:80" + - "{{ firefly_port }}:80" env: APP_ENV: "local" APP_KEY: "S0m3R@nd0mString0f32Ch@rsEx@ct1y" @@ -53,4 +53,4 @@ traefik.backend: "firefly" traefik.frontend.rule: "Host:firefly.{{ ansible_nas_domain }}" traefik.enable: "{{ firefly_available_externally }}" - traefik.port: "8080" + traefik.port: "80" \ No newline at end of file diff --git a/tasks/get_iplayer.yml b/tasks/get_iplayer.yml index 85a4ec68..2a25a4b0 100644 --- a/tasks/get_iplayer.yml +++ b/tasks/get_iplayer.yml @@ -15,7 +15,7 @@ - "{{ get_iplayer_config_directory }}:/root/.get_iplayer:rw" - "{{ get_iplayer_download_directory }}:/root/output:rw" ports: - - "8182:8181" + - "{{ get_iplayer_port }}:8181" restart_policy: unless-stopped memory: 1g diff --git a/tasks/gitea.yml b/tasks/gitea.yml index c44cb26d..34efdfad 100644 --- a/tasks/gitea.yml +++ b/tasks/gitea.yml @@ -51,8 +51,8 @@ volumes: - "{{ gitea_data_directory }}/gitea:/data:rw" ports: - - "3001:3000" - - "222:22" + - "{{ gitea_port_http }}:3000" + - "{{ gitea_port_ssh }}:22" env: DB_TYPE: "mysql" DB_HOST: "db:3306" @@ -61,8 +61,8 @@ DB_PASSWD: "gitea" RUN_MODE: "prod" SSH_DOMAIN: "{{ ansible_nas_hostname }}" - SSH_PORT: "222" - ROOT_URL: "http://{{ ansible_nas_hostname }}:3001/" + SSH_PORT: "{{ gitea_port_ssh }}" + ROOT_URL: "http://{{ ansible_nas_hostname }}:{{ gitea_port_http }}/" USER_UID: "1309" USER_GID: "1309" restart_policy: unless-stopped diff --git a/tasks/glances.yml b/tasks/glances.yml index 8e3808c2..8b93b1f5 100644 --- a/tasks/glances.yml +++ b/tasks/glances.yml @@ -4,8 +4,8 @@ image: nicolargo/glances pull: true ports: - - "61208:61208" - - "61209:61209" + - "{{ glances_port_one }}:61208" + - "{{ glances_port_two }}:61209" volumes: #- "/glances.conf:/glances/conf/glances.conf" - "/var/run/docker.sock:/var/run/docker.sock:ro" @@ -20,4 +20,4 @@ traefik.backend: "glances" traefik.frontend.rule: "Host:glances.{{ ansible_nas_domain }}" traefik.enable: "{{ glances_available_externally }}" - traefik.port: "61208" + traefik.port: "61208" \ No newline at end of file diff --git a/tasks/guacamole.yml b/tasks/guacamole.yml index 92578602..09f167c3 100644 --- a/tasks/guacamole.yml +++ b/tasks/guacamole.yml @@ -4,51 +4,39 @@ path: "{{ item }}" state: directory with_items: - - "{{ guacamole_data_directory }}/mysql" + - "{{ guacamole_data_directory }}/config" -- name: Copy Guacamole database init script - copy: - src: files/guacamole/initdb-0.9.14.sql - dest: "{{ guacamole_data_directory }}/initdb-0.9.14.sql" - -- name: Guacamole Mysql Docker Container +- name: Remove Old Guacamole Mysql Docker Container docker_container: name: guacamole-mysql - image: mysql:5.7 - pull: true - volumes: - - "{{ guacamole_data_directory }}/mysql:/var/lib/mysql:rw" - - "{{ guacamole_data_directory }}/initdb-0.9.14.sql:/docker-entrypoint-initdb.d/initdb-0.9.14.sql:ro" - env: - MYSQL_DATABASE: "guacamole" - MYSQL_USER: "guacamole-user" - MYSQL_PASSWORD: "guacamole-pass" - MYSQL_ROOT_PASSWORD: "guacamole-secret" - restart_policy: unless-stopped - memory: 1g + state: absent + keep_volumes: true -- name: Guacamole guacd Container +- name: Remove Old Guacamole guacd Docker Container docker_container: name: guacamole-guacd - image: "{{ guacamole_guacd_docker_image }}" - pull: true - restart_policy: unless-stopped - memory: 1g + state: absent + keep_volumes: true -- name: Guacamole guacamole Container +- name: Remove old Guacamole directories + file: + path: "{{ item }}" + state: absent + with_items: + - "{{ guacamole_data_directory }}/mysql" + +# docker run -v /home/david/.guac:/config:rw -p 8080:8080 oznu/guacamole + + +- name: Guacamole Container docker_container: name: guacamole - image: "{{ guacamole_docker_image }}" + image: "oznu/guacamole" pull: true - links: - - guacamole-mysql:mysql - - guacamole-guacd:guacd + volumes: + - "{{ guacamole_data_directory }}/config:/config:rw" ports: - - "8090:8080" - env: - MYSQL_DATABASE: "guacamole" - MYSQL_USER: "guacamole-user" - MYSQL_PASSWORD: "guacamole-pass" + - "{{ guacamole_port }}:8080" restart_policy: unless-stopped memory: 1g labels: @@ -56,3 +44,9 @@ traefik.frontend.rule: "Host:guacamole.{{ ansible_nas_domain }}" traefik.enable: "{{ guacamole_available_externally }}" traefik.port: "8080" + +- name: Restart Guacamole Container + docker_container: + name: guacamole + image: "oznu/guacamole" + restart: true \ No newline at end of file diff --git a/tasks/heimdall.yml b/tasks/heimdall.yml index 4ff0397a..c7e9670b 100644 --- a/tasks/heimdall.yml +++ b/tasks/heimdall.yml @@ -36,12 +36,12 @@ PGID: "1310" TZ: "{{ ansible_nas_timezone }}" ports: - - "10080:80" - - "10443:443" + - "{{ heimdall_port_http }}:80" + - "{{ heimdall_port_https }}:443" restart_policy: unless-stopped memory: 1g labels: traefik.backend: "heimdall" traefik.frontend.rule: "Host:heimdall.{{ ansible_nas_domain }}" traefik.enable: "{{ heimdall_available_externally }}" - traefik.port: "80" + traefik.port: "80" \ No newline at end of file diff --git a/tasks/homebridge.yml b/tasks/homebridge.yml index 20e63ec0..fffd970c 100644 --- a/tasks/homebridge.yml +++ b/tasks/homebridge.yml @@ -19,7 +19,7 @@ PGID: "{{ homebridge_group_id }}" PUID: "{{ homebridge_user_id }}" HOMEBRIDGE_CONFIG_UI: "1" - HOMEBRIDGE_CONFIG_UI_PORT: "8087" + HOMEBRIDGE_CONFIG_UI_PORT: "{{ homebridge_port }}" restart_policy: unless-stopped memory: 1g labels: diff --git a/tasks/jackett.yml b/tasks/jackett.yml index 02c09e9f..7842f544 100644 --- a/tasks/jackett.yml +++ b/tasks/jackett.yml @@ -13,9 +13,9 @@ volumes: - "{{ jackett_data_directory }}:/config:rw" - "/etc/localtime:/etc/localtime:ro" - - "{{ torrents_root }}:/downloads" + - "{{ jackett_torrents_root }}:/downloads" ports: - - "9117:9117" + - "{{ jackett_port }}:9117" env: TZ: "{{ ansible_nas_timezone }}" restart_policy: unless-stopped diff --git a/tasks/jellyfin.yml b/tasks/jellyfin.yml index 8f864b40..673cf6d7 100644 --- a/tasks/jellyfin.yml +++ b/tasks/jellyfin.yml @@ -15,8 +15,8 @@ - "{{ jellyfin_movies_directory }}:/movies:{{ jellyfin_movies_permissions }}" - "{{ jellyfin_tv_directory }}:/tv:{{ jellyfin_tv_permissions }}" ports: - - "8896:8096" # HTTP port - - "8928:8920" # HTTPS port + - "{{ jellyfin_port_http }}:8096" + - "{{ jellyfin_port_https }}:8920" env: TZ: "{{ ansible_nas_timezone }}" PUID: "{{ jellyfin_user_id }}" @@ -27,4 +27,4 @@ traefik.backend: "jellyfin" traefik.frontend.rule: "Host:jellyfin.{{ ansible_nas_domain }}" traefik.enable: "{{ jellyfin_available_externally }}" - traefik.port: "8096" + traefik.port: "8096" \ No newline at end of file diff --git a/tasks/joomla.yml b/tasks/joomla.yml index 41888ff5..c5507932 100644 --- a/tasks/joomla.yml +++ b/tasks/joomla.yml @@ -29,7 +29,7 @@ volumes: - "{{ joomla_data_directory }}:/var/www/html:rw" ports: - - "8181:80" + - "{{ joomla_port }}:80" links: - "joomla_mysql:mysql" env: @@ -42,4 +42,4 @@ traefik.backend: "joomla" traefik.frontend.rule: "Host: joomla.{{ ansible_nas_domain }}" traefik.enable: "{{ joomla_available_externally }}" - traefik.port: "80" + traefik.port: "80" \ No newline at end of file diff --git a/tasks/lidarr.yml b/tasks/lidarr.yml index c17ba1f5..0c48a8b2 100644 --- a/tasks/lidarr.yml +++ b/tasks/lidarr.yml @@ -14,7 +14,7 @@ - "{{ lidarr_downloads_directory }}:/downloads:rw" - "{{ lidarr_data_directory }}:/config:rw" ports: - - "8686:8686" + - "{{ lidarr_port }}:8686" env: TZ: "{{ ansible_nas_timezone }}" PUID: "{{ lidarr_user_id }}" diff --git a/tasks/minidlna.yml b/tasks/minidlna.yml index 58ef7129..173657e8 100644 --- a/tasks/minidlna.yml +++ b/tasks/minidlna.yml @@ -7,7 +7,7 @@ - "{{ minidlna_media_directory1 }}:/media1:rw" - "{{ minidlna_media_directory2 }}:/media2:rw" ports: - - "8201:8201" + - "{{ minidlna_port }}:8201" env: MINIDLNA_MEDIA_DIR1: "/media1" MINIDLNA_MEDIA_DIR2: "/media2" diff --git a/tasks/miniflux.yml b/tasks/miniflux.yml index 5d497a17..056809d0 100644 --- a/tasks/miniflux.yml +++ b/tasks/miniflux.yml @@ -26,7 +26,7 @@ links: - miniflux-postgres:db ports: - - "8070:8080" + - "{{ miniflux_port }}:8080" env: DATABASE_URL: "postgres://miniflux:supersecure@db/miniflux?sslmode=disable" RUN_MIGRATIONS: "1" @@ -39,4 +39,4 @@ traefik.backend: "miniflux" traefik.frontend.rule: "Host:miniflux.{{ ansible_nas_domain }}" traefik.enable: "{{ miniflux_available_externally }}" - traefik.port: "8080" + traefik.port: "8080" \ No newline at end of file diff --git a/tasks/mosquitto.yml b/tasks/mosquitto.yml index 4a2ae235..1d1e2232 100644 --- a/tasks/mosquitto.yml +++ b/tasks/mosquitto.yml @@ -23,7 +23,7 @@ - "{{ mosquitto_data_directory }}/data:/mosquitto/data:rw" - "{{ mosquitto_data_directory }}/log:/mosquitto/log:rw" ports: - - "1883:1883" - - "9001:9001" + - "{{ mosquitto_port_a }}:1883" + - "{{ mosquitto_port_b }}:9001" restart_policy: unless-stopped memory: 1g diff --git a/tasks/netdata.yml b/tasks/netdata.yml index d4c7a5c8..7065a4f0 100644 --- a/tasks/netdata.yml +++ b/tasks/netdata.yml @@ -12,7 +12,7 @@ state: started pull: true ports: - - "19999:19999" + - "{{ netdata_port }}:19999" volumes: - "/proc:/host/proc:ro" - "/sys:/host/sys:ro" diff --git a/tasks/nextcloud.yml b/tasks/nextcloud.yml index 63789d5d..d712ded0 100644 --- a/tasks/nextcloud.yml +++ b/tasks/nextcloud.yml @@ -32,7 +32,7 @@ volumes: - "{{ nextcloud_data_directory }}/nextcloud:/var/www/html:rw" ports: - - "8080:80" + - "{{ nextcloud_port }}:80" env: MYSQL_HOST: "mysql" MYSQL_DATABASE: "nextcloud" @@ -45,4 +45,4 @@ traefik.backend: "nextcloud" traefik.frontend.rule: "Host:nextcloud.{{ ansible_nas_domain }}" traefik.enable: "{{ nextcloud_available_externally }}" - traefik.port: "80" + traefik.port: "80" \ No newline at end of file diff --git a/tasks/nginx.yml b/tasks/nginx.yml index 80b30574..56cd23a7 100644 --- a/tasks/nginx.yml +++ b/tasks/nginx.yml @@ -15,8 +15,8 @@ image: jwilder/nginx-proxy pull: true ports: - - "80:80" - - "443:443" + - "{{ nginx_port_http }}:80" + - "{{ nginx_port_https }}:443" volumes: - "{{ nginx_data_directory }}/certs:/etc/nginx/certs:ro" - "{{ nginx_data_directory }}/vhost.d:/etc/nginx/vhost.d:rw" diff --git a/tasks/nzbget.yml b/tasks/nzbget.yml index 8d94cbf0..88ad126c 100644 --- a/tasks/nzbget.yml +++ b/tasks/nzbget.yml @@ -15,7 +15,7 @@ - "{{ nzbget_download_directory }}:/downloads:rw" - "{{ nzbget_data_directory }}:/config:rw" ports: - - "6789:6789" + - "{{ nzbget_port }}:6789" env: TZ: "{{ ansible_nas_timezone }}" PUID: "{{ nzbget_user_id }}" diff --git a/tasks/openhab.yml b/tasks/openhab.yml index 312f60c8..e7ceefe9 100644 --- a/tasks/openhab.yml +++ b/tasks/openhab.yml @@ -40,12 +40,12 @@ - "/etc/localtime:/etc/localtime:ro" - "/etc/timezone:/etc/timezone:ro" env: - OPENHAB_HTTP_PORT: "7777" - OPENHAB_HTTPS_PORT: "7778" + OPENHAB_HTTP_PORT: "{{ openhab_port_http }}" + OPENHAB_HTTPS_PORT: "{{ openhab_port_https }}" restart_policy: unless-stopped memory: 1g labels: traefik.backend: "openhab" traefik.frontend.rule: "Host:openhab.{{ ansible_nas_domain }}" traefik.enable: "{{ openhab_available_externally }}" - traefik.port: "80" + traefik.port: "7777" diff --git a/tasks/portainer.yml b/tasks/portainer.yml index 3ac0bf39..ceaac16b 100644 --- a/tasks/portainer.yml +++ b/tasks/portainer.yml @@ -16,12 +16,11 @@ - "/var/run/docker.sock:/var/run/docker.sock:ro" - "/etc/timezone:/etc/timezone:ro" ports: - - "9000:9000" + - "{{ portainer_port }}:9000" restart_policy: unless-stopped memory: 1g labels: traefik.backend: "portainer" traefik.frontend.rule: "Host:portainer.{{ ansible_nas_domain }}" traefik.enable: "{{ portainer_available_externally }}" - traefik.port: "9000" - + traefik.port: "9000" \ No newline at end of file diff --git a/tasks/pyload.yml b/tasks/pyload.yml index 379e22a7..e8587d73 100644 --- a/tasks/pyload.yml +++ b/tasks/pyload.yml @@ -17,7 +17,7 @@ - "{{ pyload_config_directory }}:/opt/pyload/pyload-config:rw" - "{{ pyload_download_directory }}:/opt/pyload/Downloads:rw" ports: - - "8000:8000" + - "{{ pyload_port }}:8000" env: TZ: "{{ ansible_nas_timezone }}" UID: "{{ pyload_user_id }}" diff --git a/tasks/radarr.yml b/tasks/radarr.yml index 9e5ba6fb..a053db87 100644 --- a/tasks/radarr.yml +++ b/tasks/radarr.yml @@ -16,7 +16,7 @@ - "{{ radarr_download_directory }}/complete:/downloads:rw" - "{{ radarr_data_directory }}:/config:rw" ports: - - "7878:7878" + - "{{ radarr_port }}:7878" env: TZ: "{{ ansible_nas_timezone }}" PUID: "{{ radarr_user_id }}" diff --git a/tasks/serposcope.yml b/tasks/serposcope.yml new file mode 100644 index 00000000..9e855eed --- /dev/null +++ b/tasks/serposcope.yml @@ -0,0 +1,44 @@ +- name: Create Serposcope Directories + file: + path: "{{ item }}" + state: directory + with_items: + - "{{ serposcope_data_directory }}/mysql" + +- name: Create MySQL container for Serposcope + docker_container: + name: serposcope-mysql + image: mysql:5.7 + pull: true + volumes: + - "{{ serposcope_data_directory }}/mysql:/var/lib/mysql:rw" + env: + MYSQL_DATABASE: "serposcope" + MYSQL_USER: "serposcope" + MYSQL_PASSWORD: "serposcope" + MYSQL_ROOT_PASSWORD: "serposcope" + restart_policy: unless-stopped + memory: 1g + +- name: Wait for MySQL to init + pause: + seconds: 30 + +- name: Create Serposcope container + docker_container: + name: serposcope + image: davestephens/serposcope:2.11.0 + pull: true + links: + - serposcope-mysql:db + ports: + - "{{ serposcope_port }}:7134" + env: + SERPOSCOPE_DB_URL: 'jdbc:mysql://db:3306/serposcope?user=serposcope\&password=serposcope\&allowMultiQueries=true' + restart_policy: unless-stopped + memory: 1g + labels: + traefik.backend: "serposcope" + traefik.frontend.rule: "Host:serposcope.{{ ansible_nas_domain }}" + traefik.enable: "{{ serposcope_available_externally }}" + traefik.port: "7134" \ No newline at end of file diff --git a/tasks/sickchill.yml b/tasks/sickchill.yml index aa862dfe..4883501f 100644 --- a/tasks/sickchill.yml +++ b/tasks/sickchill.yml @@ -23,7 +23,7 @@ - "{{ sickchill_downloads_directory }}:/downloads:rw" - "{{ sickchill_tv_directory }}:/tv:rw" ports: - - "8081:8081" + - "{{ sickchill_port }}:8081" env: TZ: "{{ ansible_nas_timezone }}" PUID: "{{ sickchill_user_id }}" diff --git a/tasks/sonarr.yml b/tasks/sonarr.yml index 40d2858a..e0f6d76d 100644 --- a/tasks/sonarr.yml +++ b/tasks/sonarr.yml @@ -16,7 +16,7 @@ - "{{ sonarr_download_directory }}/complete:/downloads:rw" - "{{ sonarr_data_directory }}:/config:rw" ports: - - "8989:8989" + - "{{ sonarr_port }}:8989" env: TZ: "{{ ansible_nas_timezone }}" PUID: "{{ sonarr_user_id }}" diff --git a/tasks/stats.yml b/tasks/stats.yml index c9870b51..5b885bbe 100644 --- a/tasks/stats.yml +++ b/tasks/stats.yml @@ -28,7 +28,7 @@ volumes: - "{{ influxdb_data_directory }}:/var/lib/influxdb:rw" ports: - - "8086:8086" + - "{{ grafana_influxdb_port }}:8086" restart_policy: unless-stopped env: INFLUXDB_LOGGING_LEVEL: "error" @@ -64,7 +64,7 @@ - "{{ grafana_data_directory }}/data:/var/lib/grafana:rw" - "{{ grafana_data_directory }}/config/provisioning:/etc/grafana/provisioning:ro" ports: - - "3000:3000" + - "{{ grafana_port }}:3000" restart_policy: unless-stopped memory: 1g labels: diff --git a/tasks/tautulli.yml b/tasks/tautulli.yml index 187faf96..9bf4af67 100644 --- a/tasks/tautulli.yml +++ b/tasks/tautulli.yml @@ -15,7 +15,8 @@ volumes: - "{{ tautulli_config_directory }}:/config:rw" - "{{ plex_logs }}:/logs:ro" - network_mode: "host" + ports: + - "{{ tautulli_port }}:8181" env: TZ: "{{ ansible_nas_timezone }}" PUID: "{{ tautulli_user_id }}" diff --git a/tasks/thelounge.yml b/tasks/thelounge.yml index 15311b56..94696948 100644 --- a/tasks/thelounge.yml +++ b/tasks/thelounge.yml @@ -19,8 +19,8 @@ image: thelounge/thelounge:latest pull: true ports: - - "113:9001" - - "9000:9000" + - "{{ thelounge_port_one }}:9001" + - "{{ thelounge_port_two }}:9000" volumes: - "{{ thelounge_data_directory }}:/var/opt/thelounge" - "/var/run/dbus:/var/run/dbus" diff --git a/tasks/transmission.yml b/tasks/transmission.yml index 16c08ee6..e2ce54ee 100644 --- a/tasks/transmission.yml +++ b/tasks/transmission.yml @@ -19,8 +19,8 @@ - "{{ transmission_download_directory }}:/downloads:rw" - "{{ transmission_watch_directory }}:/watch:rw" ports: - - "9092:9091" - - "51414:51413" + - "{{ transmission_webui_port }}:9091" + - "{{ transmission_external_port }}:51413" env: TZ: "{{ ansible_nas_timezone }}" PUID: "{{ transmission_user_id }}" diff --git a/tasks/transmission_with_openvpn.yml b/tasks/transmission_with_openvpn.yml index 3b41fa45..cbfaa865 100644 --- a/tasks/transmission_with_openvpn.yml +++ b/tasks/transmission_with_openvpn.yml @@ -21,8 +21,8 @@ - "{{ transmission_watch_directory }}:/storage/watch:rw" - "/etc/timezone:/etc/timezone:ro" ports: - - "9091:9091" - - "51413:51413" + - "{{ transmission_openvpn_webui_port }}:9091" + - "{{ transmission_openvpn_external_port }}:51413" env: TRANSMISSION_HOME: "/config" TRANSMISSION_DOWNLOAD_DIR: "/storage/downloads/complete" diff --git a/tasks/ubooquity.yml b/tasks/ubooquity.yml index 6d159a22..31e2b3a6 100644 --- a/tasks/ubooquity.yml +++ b/tasks/ubooquity.yml @@ -22,8 +22,8 @@ PGID: "{{ ubooquity_group_id|quote }}" MAXMEM: "1024" ports: - - "2202:2202" - - "2203:2203" + - "{{ ubooquity_port_webui }}:2202" + - "{{ ubooquity_port_admin }}:2203" restart_policy: unless-stopped labels: traefik.backend: "ubooquity" diff --git a/tasks/virtual_desktop.yml b/tasks/virtual_desktop.yml new file mode 100644 index 00000000..90da6605 --- /dev/null +++ b/tasks/virtual_desktop.yml @@ -0,0 +1,30 @@ +--- +- name: Create Virtual Desktop Directories + file: + path: "{{ item }}" + state: directory + with_items: + - "{{ vd_data_directory }}" + - "{{ vd_data_directory }}/home" + +- name: Create users file + template: + src: "templates/virtual_desktop/users.txt.j2" + dest: "{{ vd_data_directory }}/users.txt" + +- name: Virtual Desktop Container + docker_container: + name: virtual_desktop + image: "{{ vd_docker_image }}" + pull: true + volumes: + - "{{ vd_data_directory }}/users.txt:/root/createusers.txt:ro" + - "{{ vd_data_directory }}/home:/home:rw" + - "{{ samba_shares_root }}:/samba:rw" + - "{{ docker_home }}:/docker:rw" + - "/etc/timezone:/etc/timezone:ro" + ports: + - "{{ vd_rdp_port }}:3389" + privileged: true + restart_policy: unless-stopped + memory: 2g diff --git a/tasks/wallabag.yml b/tasks/wallabag.yml index 993e5aec..c1a6065c 100644 --- a/tasks/wallabag.yml +++ b/tasks/wallabag.yml @@ -15,7 +15,7 @@ - "{{ wallabag_data_directory }}/data:/var/www/wallabag/data:rw" - "{{ wallabag_data_directory }}/images:/var/www/wallabag/web/assets/images:rw" ports: - - "7780:80" + - "{{ wallabag_port }}:80" env: SYMFONY__ENV__DOMAIN_NAME: "https://wallabag.{{ ansible_nas_domain }}" restart_policy: unless-stopped diff --git a/tasks/znc.yml b/tasks/znc.yml index 2b5b5c09..63fa3a34 100644 --- a/tasks/znc.yml +++ b/tasks/znc.yml @@ -15,7 +15,7 @@ - "{{ znc_data_directory }}:/znc-data:rw" - "/etc/timezone:/etc/timezone:ro" ports: - - "6677:6677" + - "{{ znc_port }}:6677" env: PUID: "{{ znc_user_id }}" PGID: "{{ znc_group_id }}" diff --git a/templates/traefik/traefik.toml b/templates/traefik/traefik.toml index c1c2a113..e51420f3 100644 --- a/templates/traefik/traefik.toml +++ b/templates/traefik/traefik.toml @@ -30,16 +30,16 @@ defaultEntryPoints = ["http", "https"] [entryPoints] [entryPoints.http] - address = ":80" + address = ":{{ traefik_port_http }}" [entryPoints.http.redirect] entryPoint = "https" [entryPoints.https] - address = ":443" + address = ":{{ traefik_port_https }}" [entryPoints.https.tls] [entryPoints.traefik] - address = ":8083" + address = ":{{ traefik_port_ui }}" ################################################################ # Traefik logs configuration @@ -208,6 +208,7 @@ onDemand = false # create certificate when container is created "portainer.{{ ansible_nas_domain }}", "pyload.{{ ansible_nas_domain }}", "radarr.{{ ansible_nas_domain }}", + "serposcope.{{ ansible_nas_domain }}", "sickchill.{{ ansible_nas_domain }}", "sonarr.{{ ansible_nas_domain }}", "tautulli.{{ ansible_nas_domain }}", diff --git a/templates/virtual_desktop/users.txt.j2 b/templates/virtual_desktop/users.txt.j2 new file mode 100644 index 00000000..759d451d --- /dev/null +++ b/templates/virtual_desktop/users.txt.j2 @@ -0,0 +1 @@ +{% for user in vd_users %}{{ user.username }}:{{ user.password }}:{{ user.sudo }}{% endfor %}