diff --git a/README.md b/README.md index 29d0c041..181508cf 100644 --- a/README.md +++ b/README.md @@ -23,8 +23,8 @@ If you have a spare domain name you can configure applications to be accessible * [Cloud Commander](https://cloudcmd.io/) - A dual panel file manager with integrated web console and text editor * [Cloudflare DDNS](https://hub.docker.com/r/joshuaavalon/cloudflare-ddns/) - automatically update Cloudflare with your IP address * [CouchPotato](https://couchpota.to/) - for downloading and managing movies -* [Deluge](https://dev.deluge-torrent.org/) - A lightweight, Free Software, cross-platform BitTorrent client. * [Dashy](https://dashy.to/) - A self-hosted startpage for your server. Easy to use visual editor, status checking, widgets, themes and tons more! +* [Deluge](https://dev.deluge-torrent.org/) - A lightweight, Free Software, cross-platform BitTorrent client. * [DokuWiki](https://www.dokuwiki.org/) - A simple to use and highly versatile Open Source wiki software that doesn't require a database. * [Duplicacy](https://duplicacy.com/) - A web UI for the Duplicacy cloud backup program, which provides lock-free deduplication backups to multiple providers * [Duplicati](https://www.duplicati.com/) - for backing up your stuff @@ -37,12 +37,11 @@ If you have a spare domain name you can configure applications to be accessible * [GitLab](https://about.gitlab.com/features/) - Self-hosted GitHub clone of the highest order * [Glances](https://nicolargo.github.io/glances/) - for seeing the state of your system via a web browser * [Gotify](https://gotify.net/) Self-hosted server for sending push notifications -* [Grafana](https://github.com/grafana/grafana) - Dashboarding tool * [Guacamole](https://guacamole.apache.org/) - Web based remote desktop gateway, supports VNC, RDP and SSH * [healthchecks.io](https://healthchecks.io/) - Ensure your NAS is online and get notified otherwise * [Heimdall](https://heimdall.site/) - Home server dashboard * [Home Assistant](https://www.home-assistant.io) - Open source home automation -* [InfluxDB](https://github.com/influxdata/influxdb) - Time series database used for stats collection +* [Homebridge](https://github.com/nfarina/homebridge) - Emulate the iOS HomeKit API * [Jackett](https://github.com/Jackett/Jackett) - API Support for your favorite torrent trackers * [Jellyfin](https://jellyfin.github.io) - The Free Software Media System * [Joomla](https://www.joomla.org/) - Open source content management system @@ -64,8 +63,8 @@ If you have a spare domain name you can configure applications to be accessible * [NZBget](https://nzbget.net/) - The most efficient usenet downloader * [Octoprint](https://octoprint.org/) - Control and monitor your 3D printer * [Ombi](https://ombi.io/) - web application that automatically gives your users the ability to request content -* [Organizr](https://organizr.app/) - ORGANIZR aims to be your one stop shop for your Servers Frontend. * [openHAB](https://www.openhab.org/) - A vendor and technology agnostic open source automation software for your home +* [Organizr](https://organizr.app/) - ORGANIZR aims to be your one stop shop for your Servers Frontend. * [overseerr](https://docs.overseerr.dev) - open source software application for managing requests for your media library * [Paperless_ng](https://github.com/jonaswinkler/paperless-ng) - Scan, index and archive all your physical documents * [Piwigo](https://piwigo.org/) - Photo Gallery Software @@ -83,7 +82,6 @@ If you have a spare domain name you can configure applications to be accessible * [Speedtest-Tracker](https://github.com/henrywhitaker3/Speedtest-Tracker) - Continuously track your internet speed * [Syncthing](https://syncthing.net/) - sync directories with another device * [Tautulli](http://tautulli.com/) - Monitor Your Plex Media Server -* [Telegraf](https://github.com/influxdata/telegraf) - Metrics collection agent * [The Lounge](https://thelounge.chat) - Web based always-on IRC client * [TiddlyWiki](https://tiddlywiki.com) - A unique non-linear notebook/wiki for capturing, organizing, and sharing complex information * [TimeMachine](https://github.com/awlx/samba-timemachine) - Samba-based mac backup server diff --git a/group_vars/all.yml b/group_vars/all.yml index fd517834..93a9118a 100644 --- a/group_vars/all.yml +++ b/group_vars/all.yml @@ -12,38 +12,6 @@ ### Add your customisations to inventories//group_vars/nas.yml ### -### -### Ansible-NAS Applications -### - -# System Management -stats_enabled: false -guacamole_enabled: false -virtual_desktop_enabled: false -krusader_enabled: false - -# Backup & Restore -timemachine_enabled: false - -# IRC -thelounge_enabled: false - -# Wallabag -wallabag_enabled: false - -# Home Automation -mosquitto_enabled: false -openhab_enabled: false - -# Books -calibre_enabled: false - -# Ubooquity -ubooquity_enabled: false - -# Joomla -joomla_enabled: false - ### ### General ### @@ -106,7 +74,7 @@ samba_server_string: Ansible NAS # Shares you want published over Samba. samba_shares: - name: downloads - comment: 'Stuff downloaded' + comment: "Stuff downloaded" guest_ok: yes public: yes writable: yes @@ -114,7 +82,7 @@ samba_shares: path: "{{ downloads_root }}" - name: movies - comment: 'Movies' + comment: "Movies" guest_ok: yes public: yes writable: yes @@ -122,7 +90,7 @@ samba_shares: path: "{{ movies_root }}" - name: tv - comment: 'TV Episodes' + comment: "TV Episodes" guest_ok: yes public: yes writable: yes @@ -130,7 +98,7 @@ samba_shares: path: "{{ tv_root }}" - name: music - comment: 'Music' + comment: "Music" guest_ok: yes public: yes writable: yes @@ -138,7 +106,7 @@ samba_shares: path: "{{ music_root }}" - name: podcasts - comment: 'Podcasts' + comment: "Podcasts" guest_ok: yes public: yes writable: yes @@ -146,7 +114,7 @@ samba_shares: path: "{{ podcasts_root }}" - name: dump - comment: 'File dump' + comment: "File dump" guest_ok: yes public: yes writable: yes @@ -154,7 +122,7 @@ samba_shares: path: "{{ samba_shares_root }}/dump" - name: games - comment: 'Games' + comment: "Games" guest_ok: yes public: yes writable: yes @@ -162,7 +130,7 @@ samba_shares: path: "{{ samba_shares_root }}/games" - name: photos - comment: 'Pictures' + comment: "Pictures" guest_ok: yes public: yes writable: yes @@ -170,7 +138,7 @@ samba_shares: path: "{{ photos_root }}" - name: books - comment: 'Books' + comment: "Books" guest_ok: yes public: yes writable: yes @@ -178,7 +146,7 @@ samba_shares: path: "{{ books_root }}" - name: audiobooks - comment: 'Audiobooks' + comment: "Audiobooks" guest_ok: yes public: yes writable: yes @@ -186,7 +154,7 @@ samba_shares: path: "{{ audiobooks_root }}" - name: comics - comment: 'Comics' + comment: "Comics" guest_ok: yes public: yes writable: yes @@ -194,7 +162,7 @@ samba_shares: path: "{{ comics_root }}" - name: documents - comment: 'Documents' + comment: "Documents" guest_ok: yes public: yes writable: yes @@ -231,103 +199,3 @@ samba_map_to_guest: Bad Password # The NetBIOS hostname used by Samba on your network samba_netbios_name: "{{ ansible_nas_hostname }}" - -### -### Joomla -### -joomla_data_directory: "{{ docker_home }}/joomla" -joomla_available_externally: false -joomla_database_password: top_secret -joomla_port: "8181" - -### -### OpenVPN -### -openvpn_config_directory: "{{ docker_home }}/openvpn" - -### -### Guacamole -### -guacamole_available_externally: false -guacamole_data_directory: "{{ docker_home }}/guacamole" -guacamole_port: "8090" - -### -### Krusader -### -krusader_available_externally: false -krusader_config_directory: "{{ docker_home }}/krusader/config" -krusader_browse_directory: "/" -krusader_user_id: "0" -krusader_group_id: "0" -krusader_secure_connection: "0" -krusader_vnc_password: "topsecret" -krusader_port_http: "5800" -krusader_port_vnc: "5900" - -### -### Time Machine -### -timemachine_data_directory: "{{ docker_home }}/timemachine" -timemachine_volume_size_limit: "0" -timemachine_password: timemachine -timemachine_share_name: Data -timemachine_log_level: error -timemachine_port: "10445" - -### -### The Lounge -### -thelounge_available_externally: false -thelounge_data_directory: "{{ docker_home }}/thelounge" -thelounge_port_one: "113" -thelounge_port_two: "9002" - -### -### Wallabag -### -wallabag_available_externally: false -wallabag_data_directory: "{{ docker_home }}/wallabag" -wallabag_port: "7780" - -### -### Calibre-web -### -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" - -### -### openHAB -### -openhab_available_externally: false -openhab_docker_image: openhab/openhab:latest -openhab_data_directory: "{{ docker_home }}/openhab" -openhab_port_http: "7777" -openhab_port_https: "7778" - -### -### Ubooquity -### -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" - -### -### Virtual Desktop -### -vd_data_directory: "{{ docker_home }}/virtual_desktop" -vd_docker_image: "rattydave/docker-ubuntu-xrdp-mate-custom:20.04-tools" -vd_users: - - username: "{{ ansible_nas_user }}" - password: "topsecret" - sudo: "Y" -vd_rdp_port: 3389 diff --git a/nas.yml b/nas.yml index cd72f821..ee0f7e6d 100644 --- a/nas.yml +++ b/nas.yml @@ -60,6 +60,11 @@ - booksonic when: (booksonic_enabled | default(False)) + - role: calibre + tags: + - calibre + when: (calibre_enabled | default(False)) + - role: cloudcmd tags: - cloudcmd @@ -145,6 +150,11 @@ - gotify when: (gotify_enabled | default(False)) + - role: guacamole + tags: + - guacamole + when: (guacamole_enabled | default(False)) + - role: healthchecks.io tags: - healthchecks.io @@ -160,16 +170,36 @@ - homeassistant when: (homeassistant_enabled | default(False)) + - role: homebridge + tags: + - homebridge + when: (homebridge_enabled | default(False)) + + - role: jackett + tags: + - jackett + when: (jackett_enabled | default(False)) + - role: jellyfin tags: - jellyfin when: (jellyfin_enabled | default(False)) + - role: joomla + tags: + - joomla + when: (joomla_enabled | default(False)) + - role: komga tags: - komga when: (komga_enabled | default(False)) + - role: krusader + tags: + - krusader + when: (krusader_enabled | default(False)) + - role: lidarr tags: - lidarr @@ -245,6 +275,16 @@ - octoprint when: (octoprint_enabled | default(False)) + - role: ombi + tags: + - ombi + when: (ombi_enabled | default(False)) + + - role: openhab + tags: + - openhab + when: (openhab_enabled | default(False)) + - role: organizr tags: - organizr @@ -265,6 +305,11 @@ - piwigo when: (piwigo_enabled | default(False)) + - role: plex + tags: + - plex + when: (plex_enabled | default(False)) + - role: portainer tags: - portainer @@ -280,16 +325,6 @@ - pyload when: (pyload_enabled | default(False)) - - role: ombi - tags: - - ombi - when: (ombi_enabled | default(False)) - - - role: plex - tags: - - plex - when: (plex_enabled | default(False)) - - role: pytivo tags: - pytivo @@ -300,11 +335,6 @@ - radarr when: (radarr_enabled | default(False)) - - role: sabnzbd - tags: - - sabnzbd - when: (sabnzbd_enabled | default(False)) - - role: route53_ddns tags: - route53_ddns @@ -315,6 +345,11 @@ - rssbridge when: (rssbridge_enabled | default(False)) + - role: sabnzbd + tags: + - sabnzbd + when: (sabnzbd_enabled | default(False)) + - role: sickchill tags: - sickchill @@ -340,11 +375,26 @@ - tautulli when: (tautulli_enabled | default(False)) + - role: thelounge + tags: + - thelounge + when: (thelounge_enabled | default(False)) + - role: tiddlywiki tags: - tiddlywiki when: (tiddlywiki_enabled | default(False)) + - role: timemachine + tags: + - timemachine + when: (timemachine_enabled | default(False)) + + - role: traefik + tags: + - traefik + when: (traefik_enabled | default(False)) + - role: transmission tags: - transmission @@ -355,20 +405,25 @@ - transmission_with_openvpn when: (transmission_with_openvpn_enabled | default(False)) + - role: ubooquity + tags: + - ubooquity + when: (ubooquity_enabled | default(False)) + - role: utorrent tags: - utorrent when: (utorrent_enabled | default(False)) - - role: traefik + - role: virtual_desktop tags: - - traefik - when: (traefik_enabled | default(False)) + - virtual_desktop + when: (virtual_desktop_enabled | default(False)) - - role: youtubedlmaterial + - role: wallabag tags: - - youtubedlmaterial - when: (youtubedlmaterial_enabled | default(False)) + - wallabag + when: (wallabag_enabled | default(False)) - role: watchtower tags: @@ -380,48 +435,12 @@ - wireshark when: (wireshark_enabled | default(False)) + - role: youtubedlmaterial + tags: + - youtubedlmaterial + when: (youtubedlmaterial_enabled | default(False)) + - role: znc tags: - znc when: (znc_enabled | default(False)) - - tasks: - - import_tasks: tasks/thelounge.yml - when: (thelounge_enabled | default(False)) - tags: thelounge - - - import_tasks: tasks/timemachine.yml - when: (timemachine_enabled | default(False)) - tags: timemachine - - - import_tasks: tasks/guacamole.yml - when: (guacamole_enabled | default(False)) - tags: guacamole - - - import_tasks: tasks/joomla.yml - when: (joomla_enabled | default(False)) - tags: joomla - - - import_tasks: tasks/wallabag.yml - when: (wallabag_enabled | default(False)) - tags: wallabag - - - import_tasks: tasks/calibre.yml - when: (calibre_enabled | default(False)) - tags: calibre - - - import_tasks: tasks/openhab.yml - when: (openhab_enabled | default(False)) - tags: openhab - - - import_tasks: tasks/krusader.yml - when: (krusader_enabled | default(False)) - tags: krusader - - - import_tasks: tasks/ubooquity.yml - when: (ubooquity_enabled | default(False)) - tags: ubooquity - - - import_tasks: tasks/virtual_desktop.yml - when: (virtual_desktop_enabled | default(False)) - tags: virtual_desktop diff --git a/roles/calibre/defaults/main.yml b/roles/calibre/defaults/main.yml new file mode 100644 index 00000000..a4c5df23 --- /dev/null +++ b/roles/calibre/defaults/main.yml @@ -0,0 +1,21 @@ +--- +calibre_enabled: false +calibre_available_externally: false + +# uid / gid +calibre_user_id: "0" +calibre_group_id: "0" + +# directories +calibre_data_directory: "{{ docker_home }}/calibre" +calibre_books_root: "{{ books_root }}" + +# other +calibre_ebook_conversion: "linuxserver/calibre-web:calibre" + +# network +calibre_port: "8084" +calibre_hostname: "calibre" + +# specs +calibre_memory: 1g diff --git a/tasks/calibre.yml b/roles/calibre/tasks/main.yml similarity index 96% rename from tasks/calibre.yml rename to roles/calibre/tasks/main.yml index 66eb5fdd..31e69075 100644 --- a/tasks/calibre.yml +++ b/roles/calibre/tasks/main.yml @@ -22,7 +22,7 @@ ports: - "{{ calibre_port }}:8083" restart_policy: unless-stopped - memory: 1g + memory: "{{ calibre_memory }}" labels: traefik.enable: "{{ calibre_available_externally | string }}" traefik.http.routers.calibre.rule: "Host(`calibre.{{ ansible_nas_domain }}`)" diff --git a/roles/guacamole/defaults/main.yml b/roles/guacamole/defaults/main.yml new file mode 100644 index 00000000..04147f56 --- /dev/null +++ b/roles/guacamole/defaults/main.yml @@ -0,0 +1,13 @@ +--- +guacamole_enabled: false +guacamole_available_externally: false + +# directories +guacamole_data_directory: "{{ docker_home }}/guacamole" + +# network +guacamole_port: "8090" +guacamole_hostname: "guacamole" + +# specs +guacamole_memory: 1g diff --git a/tasks/guacamole.yml b/roles/guacamole/tasks/main.yml similarity index 88% rename from tasks/guacamole.yml rename to roles/guacamole/tasks/main.yml index d4c8b3ed..913067c1 100644 --- a/tasks/guacamole.yml +++ b/roles/guacamole/tasks/main.yml @@ -25,8 +25,6 @@ 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 @@ -37,10 +35,10 @@ ports: - "{{ guacamole_port }}:8080" restart_policy: unless-stopped - memory: 1g + memory: "{{ guacamole_memory }}" labels: traefik.enable: "{{ guacamole_available_externally | string }}" - traefik.http.routers.guacamole.rule: "Host(`guacamole.{{ ansible_nas_domain }}`)" + traefik.http.routers.guacamole.rule: "Host(`{{ guacamole_hostname }}.{{ ansible_nas_domain }}`)" traefik.http.routers.guacamole.tls.certresolver: "letsencrypt" traefik.http.routers.guacamole.tls.domains[0].main: "{{ ansible_nas_domain }}" traefik.http.routers.guacamole.tls.domains[0].sans: "*.{{ ansible_nas_domain }}" diff --git a/roles/joomla/defaults/main.yml b/roles/joomla/defaults/main.yml new file mode 100644 index 00000000..cff8308a --- /dev/null +++ b/roles/joomla/defaults/main.yml @@ -0,0 +1,15 @@ +--- +joomla_enabled: false +joomla_available_externally: false + +joomla_database_password: top_secret + +# directories +joomla_data_directory: "{{ docker_home }}/joomla" + +# network +joomla_port: "8181" +joomla_hostname: "joomla" + +# specs +joomla_memory: 1g diff --git a/tasks/joomla.yml b/roles/joomla/tasks/main.yml similarity index 91% rename from tasks/joomla.yml rename to roles/joomla/tasks/main.yml index 7d1f33ce..61a82bc0 100644 --- a/tasks/joomla.yml +++ b/roles/joomla/tasks/main.yml @@ -37,10 +37,10 @@ JOOMLA_DB_USER: "root" JOOMLA_DB_PASSWORD: "{{ joomla_database_password }}" restart_policy: unless-stopped - memory: 1g + memory: "{{ joomla_memory }}" labels: traefik.enable: "{{ joomla_available_externally | string }}" - traefik.http.routers.joomla.rule: "Host(`joomla.{{ ansible_nas_domain }}`)" + traefik.http.routers.joomla.rule: "Host(`{{ joomla_hostname }}.{{ ansible_nas_domain }}`)" traefik.http.routers.joomla.tls.certresolver: "letsencrypt" traefik.http.routers.joomla.tls.domains[0].main: "{{ ansible_nas_domain }}" traefik.http.routers.joomla.tls.domains[0].sans: "*.{{ ansible_nas_domain }}" diff --git a/roles/krusader/defaults/main.yml b/roles/krusader/defaults/main.yml new file mode 100644 index 00000000..4f8a59c6 --- /dev/null +++ b/roles/krusader/defaults/main.yml @@ -0,0 +1,22 @@ +--- +krusader_enabled: false +krusader_available_externally: false + +krusader_secure_connection: "0" +krusader_vnc_password: "topsecret" + +# uid / gid +krusader_user_id: "0" +krusader_group_id: "0" + +# directories +krusader_config_directory: "{{ docker_home }}/krusader/config" +krusader_browse_directory: "/" + +# network +krusader_port_http: "5800" +krusader_port_vnc: "5900" +krusader_hostname: "krusader" + +# specs +krusader_memory: 1g diff --git a/tasks/krusader.yml b/roles/krusader/tasks/main.yml similarity index 84% rename from tasks/krusader.yml rename to roles/krusader/tasks/main.yml index 5bcc4389..d193dadd 100644 --- a/tasks/krusader.yml +++ b/roles/krusader/tasks/main.yml @@ -24,10 +24,10 @@ TZ: "{{ ansible_nas_timezone }}" VNC_PASSWORD: "{{ krusader_vnc_password }}" restart_policy: unless-stopped - memory: 1g + memory: "{{ krusader_memory }}" labels: - traefik.enable: "{{ krusader_available_externally | string }}" - traefik.http.routers.krusader.rule: "Host(`krusader.{{ ansible_nas_domain }}`)" + traefik.enable: "{{ krusader_available_externally }}" + traefik.http.routers.krusader.rule: "Host(`{{ krusader_hostname }}.{{ ansible_nas_domain }}`)" traefik.http.routers.krusader.tls.certresolver: "letsencrypt" traefik.http.routers.krusader.tls.domains[0].main: "{{ ansible_nas_domain }}" traefik.http.routers.krusader.tls.domains[0].sans: "*.{{ ansible_nas_domain }}" diff --git a/roles/openhab/defaults/main.yml b/roles/openhab/defaults/main.yml new file mode 100644 index 00000000..0e62c638 --- /dev/null +++ b/roles/openhab/defaults/main.yml @@ -0,0 +1,14 @@ +--- +openhab_enabled: false +openhab_available_externally: false + +# directories +openhab_data_directory: "{{ docker_home }}/openhab" + +# network +openhab_port_http: "7777" +openhab_port_https: "7778" +openhab_hostname: "openhab" + +# specs +openhab_memory: 1g diff --git a/tasks/openhab.yml b/roles/openhab/tasks/main.yml similarity index 90% rename from tasks/openhab.yml rename to roles/openhab/tasks/main.yml index 656f889d..2b463247 100644 --- a/tasks/openhab.yml +++ b/roles/openhab/tasks/main.yml @@ -30,7 +30,7 @@ - name: Create openHAB container docker_container: name: openHAB - image: "{{ openhab_docker_image }}" + image: openhab/openhab pull: true network_mode: "host" volumes: @@ -43,10 +43,10 @@ OPENHAB_HTTP_PORT: "{{ openhab_port_http }}" OPENHAB_HTTPS_PORT: "{{ openhab_port_https }}" restart_policy: unless-stopped - memory: 1g + memory: "{{ openhab_memory }}" labels: traefik.enable: "{{ openhab_available_externally | string }}" - traefik.http.routers.openhab.rule: "Host(`openhab.{{ ansible_nas_domain }}`)" + traefik.http.routers.openhab.rule: "Host(`{{ openhab_hostname }}.{{ ansible_nas_domain }}`)" traefik.http.routers.openhab.tls.certresolver: "letsencrypt" traefik.http.routers.openhab.tls.domains[0].main: "{{ ansible_nas_domain }}" traefik.http.routers.openhab.tls.domains[0].sans: "*.{{ ansible_nas_domain }}" diff --git a/roles/thelounge/defaults/main.yml b/roles/thelounge/defaults/main.yml new file mode 100644 index 00000000..96b91dbf --- /dev/null +++ b/roles/thelounge/defaults/main.yml @@ -0,0 +1,14 @@ +--- +thelounge_enabled: false +thelounge_available_externally: false + +# Directories +thelounge_data_directory: "{{ docker_home }}/thelounge" + +# Networking +thelounge_port_one: "113" +thelounge_port_two: "9002" +thelounge_hostname: thelounge + +# Container +thelounge_memory: 1g diff --git a/tasks/thelounge.yml b/roles/thelounge/tasks/main.yml similarity index 88% rename from tasks/thelounge.yml rename to roles/thelounge/tasks/main.yml index 153749a1..1abe6521 100644 --- a/tasks/thelounge.yml +++ b/roles/thelounge/tasks/main.yml @@ -25,10 +25,10 @@ - "{{ thelounge_data_directory }}:/var/opt/thelounge" - "/var/run/dbus:/var/run/dbus" restart_policy: unless-stopped - memory: 1g + memory: "{{ thelounge_memory }}" labels: traefik.enable: "{{ thelounge_available_externally | string }}" - traefik.http.routers.thelounge.rule: "Host(`thelounge.{{ ansible_nas_domain }}`)" + traefik.http.routers.thelounge.rule: "Host(`{{ thelounge_hostname }}.{{ ansible_nas_domain }}`)" traefik.http.routers.thelounge.tls.certresolver: "letsencrypt" traefik.http.routers.thelounge.tls.domains[0].main: "{{ ansible_nas_domain }}" traefik.http.routers.thelounge.tls.domains[0].sans: "*.{{ ansible_nas_domain }}" diff --git a/roles/timemachine/defaults/main.yml b/roles/timemachine/defaults/main.yml new file mode 100644 index 00000000..9c26bf4c --- /dev/null +++ b/roles/timemachine/defaults/main.yml @@ -0,0 +1,16 @@ +--- +timemachine_enabled: false + +timemachine_volume_size_limit: "0" +timemachine_password: timemachine +timemachine_share_name: Data +timemachine_log_level: error + +# Directories +timemachine_data_directory: "{{ docker_home }}/timemachine" + +# Networking +timemachine_port: "10445" + +# Container +timemachine_memory: 1g diff --git a/tasks/timemachine.yml b/roles/timemachine/tasks/main.yml similarity index 96% rename from tasks/timemachine.yml rename to roles/timemachine/tasks/main.yml index 1cdc550a..ca08971a 100644 --- a/tasks/timemachine.yml +++ b/roles/timemachine/tasks/main.yml @@ -21,7 +21,7 @@ - "nofile:1048576:1048576" network_mode: bridge restart_policy: unless-stopped - memory: 1g + memory: "{{ timemachine_memory }}" - name: Install avahi apt: diff --git a/roles/ubooquity/defaults/main.yml b/roles/ubooquity/defaults/main.yml new file mode 100644 index 00000000..de447145 --- /dev/null +++ b/roles/ubooquity/defaults/main.yml @@ -0,0 +1,18 @@ +--- +ubooquity_enabled: false +ubooquity_available_externally: false + +# uid / gid +ubooquity_user_id: "0" +ubooquity_group_id: "0" + +# Directories +ubooquity_data_directory: "{{ docker_home }}/ubooquity" + +# Networking +ubooquity_port_webui: "2202" +ubooquity_port_admin: "2203" +ubooquity_hostname: ubooquity + +# Container +ubooquity_memory: 1g diff --git a/tasks/ubooquity.yml b/roles/ubooquity/tasks/main.yml similarity index 89% rename from tasks/ubooquity.yml rename to roles/ubooquity/tasks/main.yml index 63bf2e20..c8f5f1ef 100644 --- a/tasks/ubooquity.yml +++ b/roles/ubooquity/tasks/main.yml @@ -25,9 +25,10 @@ - "{{ ubooquity_port_webui }}:2202" - "{{ ubooquity_port_admin }}:2203" restart_policy: unless-stopped + memory: "{{ ubooquity_memory }}" labels: traefik.enable: "{{ ubooquity_available_externally | string }}" - traefik.http.routers.ubooquity.rule: "Host(`ubooquity.{{ ansible_nas_domain }}`)" + traefik.http.routers.ubooquity.rule: "Host(`{{ ubooquity }}.{{ ansible_nas_domain }}`)" traefik.http.routers.ubooquity.tls.certresolver: "letsencrypt" traefik.http.routers.ubooquity.tls.domains[0].main: "{{ ansible_nas_domain }}" traefik.http.routers.ubooquity.tls.domains[0].sans: "*.{{ ansible_nas_domain }}" diff --git a/roles/virtual_desktop/defaults/main.yml b/roles/virtual_desktop/defaults/main.yml new file mode 100644 index 00000000..0cd61c79 --- /dev/null +++ b/roles/virtual_desktop/defaults/main.yml @@ -0,0 +1,22 @@ +--- +virtual_desktop_enabled: false + +virtual_desktop_docker_image: "rattydave/docker-ubuntu-xrdp-mate-custom:20.04-tools" + +virtual_desktop_users: + - username: "{{ ansible_nas_user }}" + password: "topsecret" + sudo: "Y" + +# uid / gid +virtual_desktop_user_id: "0" +virtual_desktop_group_id: "0" + +# Directories +virtual_desktop_data_directory: "{{ docker_home }}/virtual_desktop" + +# Networking +virtual_desktop_rdp_port: 3389 + +# Container +virtual_desktop_memory: 2g diff --git a/tasks/virtual_desktop.yml b/roles/virtual_desktop/tasks/main.yml similarity index 53% rename from tasks/virtual_desktop.yml rename to roles/virtual_desktop/tasks/main.yml index 90da6605..852a1eeb 100644 --- a/tasks/virtual_desktop.yml +++ b/roles/virtual_desktop/tasks/main.yml @@ -4,27 +4,27 @@ path: "{{ item }}" state: directory with_items: - - "{{ vd_data_directory }}" - - "{{ vd_data_directory }}/home" + - "{{ virtual_desktop_data_directory }}" + - "{{ virtual_desktop_data_directory }}/home" - name: Create users file template: src: "templates/virtual_desktop/users.txt.j2" - dest: "{{ vd_data_directory }}/users.txt" + dest: "{{ virtual_desktop_data_directory }}/users.txt" - name: Virtual Desktop Container docker_container: name: virtual_desktop - image: "{{ vd_docker_image }}" + image: "{{ virtual_desktop_docker_image }}" pull: true volumes: - - "{{ vd_data_directory }}/users.txt:/root/createusers.txt:ro" - - "{{ vd_data_directory }}/home:/home:rw" + - "{{ virtual_desktop_data_directory }}/users.txt:/root/createusers.txt:ro" + - "{{ virtual_desktop_data_directory }}/home:/home:rw" - "{{ samba_shares_root }}:/samba:rw" - "{{ docker_home }}:/docker:rw" - "/etc/timezone:/etc/timezone:ro" ports: - - "{{ vd_rdp_port }}:3389" + - "{{ virtual_desktop_rdp_port }}:3389" privileged: true restart_policy: unless-stopped - memory: 2g + memory: "{{ virtual_desktop_memory }}" diff --git a/roles/wallabag/defaults/main.yml b/roles/wallabag/defaults/main.yml new file mode 100644 index 00000000..b96f280b --- /dev/null +++ b/roles/wallabag/defaults/main.yml @@ -0,0 +1,13 @@ +--- +wallabag_enabled: false +wallabag_available_externally: false + +# Directories +wallabag_data_directory: "{{ docker_home }}/wallabag" + +# Networking +wallabag_port: "7780" +wallabag_hostname: wallabag + +# Container +wallabag_memory: 1g diff --git a/tasks/wallabag.yml b/roles/wallabag/tasks/main.yml similarity index 88% rename from tasks/wallabag.yml rename to roles/wallabag/tasks/main.yml index e40c1aaa..eb1e67e7 100644 --- a/tasks/wallabag.yml +++ b/roles/wallabag/tasks/main.yml @@ -20,10 +20,10 @@ env: SYMFONY__ENV__DOMAIN_NAME: "https://wallabag.{{ ansible_nas_domain }}" restart_policy: unless-stopped - memory: 1g + memory: "{{ wallabag_memory }}" labels: traefik.enable: "{{ wallabag_available_externally | string }}" - traefik.http.routers.wallabag.rule: "Host(`wallabag.{{ ansible_nas_domain }}`)" + traefik.http.routers.wallabag.rule: "Host(`{{ wallabag_hostname }}.{{ ansible_nas_domain }}`)" traefik.http.routers.wallabag.tls.certresolver: "letsencrypt" traefik.http.routers.wallabag.tls.domains[0].main: "{{ ansible_nas_domain }}" traefik.http.routers.wallabag.tls.domains[0].sans: "*.{{ ansible_nas_domain }}" diff --git a/templates/virtual_desktop/users.txt.j2 b/templates/virtual_desktop/users.txt.j2 index 759d451d..7e1d54a3 100644 --- a/templates/virtual_desktop/users.txt.j2 +++ b/templates/virtual_desktop/users.txt.j2 @@ -1 +1 @@ -{% for user in vd_users %}{{ user.username }}:{{ user.password }}:{{ user.sudo }}{% endfor %} +{% for user in virtual_desktop_users %}{{ user.username }}:{{ user.password }}:{{ user.sudo }}{% endfor %}