Compare commits
	
		
			1 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ba44547066 | 
							
								
								
									
										39
									
								
								.github/workflows/vagrant.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										39
									
								
								.github/workflows/vagrant.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,39 +0,0 @@ | |||||||
| name: homelab-ci |  | ||||||
|  |  | ||||||
| on: |  | ||||||
|   push: |  | ||||||
|     branches: |  | ||||||
|       - main |  | ||||||
|       - testing |  | ||||||
|  |  | ||||||
| jobs: |  | ||||||
|   homelab-ci: |  | ||||||
|     runs-on: macos-latest |  | ||||||
|  |  | ||||||
|     steps: |  | ||||||
|       - uses: actions/checkout@v3 |  | ||||||
|  |  | ||||||
|       - name: Cache Vagrant boxes |  | ||||||
|         uses: actions/cache@v3 |  | ||||||
|         with: |  | ||||||
|           path: ~/.vagrant.d/boxes |  | ||||||
|           key: ${{ runner.os }}-vagrant-${{ hashFiles('Vagrantfile') }} |  | ||||||
|           restore-keys: | |  | ||||||
|             ${{ runner.os }}-vagrant- |  | ||||||
|  |  | ||||||
|       - name: Install Ansible |  | ||||||
|         run: brew install ansible@7 |  | ||||||
|  |  | ||||||
|       - name: Software Versions |  | ||||||
|         run: | |  | ||||||
|           printf "VirtualBox " |  | ||||||
|           vboxmanage --version |  | ||||||
|           vagrant --version |  | ||||||
|           export PATH="/usr/local/opt/ansible@7/bin:$PATH" |  | ||||||
|           ansible --version |  | ||||||
|  |  | ||||||
|       - name: Vagrant Up with Dockerbox Playbook |  | ||||||
|         run: | |  | ||||||
|           export PATH="/usr/local/opt/ansible@7/bin:$PATH" |  | ||||||
|           PLAYBOOK=dockerbox vagrant up |  | ||||||
|           vagrant ssh -c "docker ps" |  | ||||||
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,4 +1,3 @@ | |||||||
|  | .vagrant | ||||||
| .playbook | .playbook | ||||||
| .vagrant* |  | ||||||
| .vscode |  | ||||||
| /environments/ | /environments/ | ||||||
							
								
								
									
										51
									
								
								Vagrantfile
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										51
									
								
								Vagrantfile
									
									
									
									
										vendored
									
									
								
							| @@ -1,45 +1,43 @@ | |||||||
| # -*- mode: ruby -*- | # -*- mode: ruby -*- | ||||||
| # vi: set ft=ruby : | # vi: set ft=ruby : | ||||||
|  |  | ||||||
| require 'yaml' | SSH_FORWARD=ENV["SSH_FORWARD"] | ||||||
| settings_path = '.vagrant.yml' | if !(SSH_FORWARD == "true") | ||||||
| settings = {} |   SSH_FORWARD = false | ||||||
|  |  | ||||||
| if File.exist?(settings_path) |  | ||||||
|   settings = YAML.load_file(settings_path) |  | ||||||
| end | end | ||||||
|  |  | ||||||
| VAGRANT_BOX  = settings['VAGRANT_BOX']  || 'debian/bookworm64' |  | ||||||
| VAGRANT_CPUS = settings['VAGRANT_CPUS'] || 2 |  | ||||||
| VAGRANT_MEM  = settings['VAGRANT_MEM']  || 2048 |  | ||||||
| SSH_FORWARD  = settings['SSH_FORWARD']  || false |  | ||||||
|  |  | ||||||
| # Default to shell environment variable: PLAYBOOK (priority #1) |  | ||||||
| PLAYBOOK=ENV["PLAYBOOK"] | PLAYBOOK=ENV["PLAYBOOK"] | ||||||
| if !PLAYBOOK | if !PLAYBOOK | ||||||
|   # PLAYBOOK setting in .vagrant.yml (priority #2) |   if File.exist?('.playbook') | ||||||
|   PLAYBOOK = settings['PLAYBOOK'] || false |     PLAYBOOK = IO.read('.playbook').split("\n")[0] | ||||||
|   if !PLAYBOOK || PLAYBOOK.empty? |  | ||||||
|     puts "[VAGRANTFILE ERROR]: Set PLAYBOOK setting in .vagrant.yml" |  | ||||||
|     abort |  | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  |   if !PLAYBOOK || PLAYBOOK.empty? | ||||||
|  |     PLAYBOOK = "\nERROR: Set env PLAYBOOK" | ||||||
|  |   end | ||||||
|  | else | ||||||
|  |   File.write(".playbook", PLAYBOOK) | ||||||
| end | end | ||||||
|  |  | ||||||
| Vagrant.configure("2") do |config| | Vagrant.configure("2") do |config| | ||||||
|   config.vm.box = VAGRANT_BOX |   config.vm.box = "debian/bullseye64" | ||||||
|   config.vm.network "private_network", type: "dhcp" |   config.vm.network "private_network", type: "dhcp" | ||||||
|  |   config.vm.synced_folder ".", "/vagrant", disabled: true | ||||||
|  |   config.vm.synced_folder "./scratch", "/vagrant/scratch" | ||||||
|   config.ssh.forward_agent = SSH_FORWARD |   config.ssh.forward_agent = SSH_FORWARD | ||||||
|  |  | ||||||
|   # Libvrit provider |   # Machine Name | ||||||
|   config.vm.provider :libvirt do |libvirt| |   config.vm.define :moxie do |moxie| # | ||||||
|     libvirt.cpus   = VAGRANT_CPUS |  | ||||||
|     libvirt.memory = VAGRANT_MEM |  | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   # Virtualbox provider |   config.vm.provider :libvirt do |libvirt| | ||||||
|   config.vm.provider :virtualbox do |vbox| |     libvirt.cpus = 2 | ||||||
|     vbox.cpus   = VAGRANT_CPUS |     libvirt.memory = 4096 | ||||||
|     vbox.memory = VAGRANT_MEM |     libvirt.default_prefix = "" | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   config.vm.provider "virtualbox" do |vbox| | ||||||
|  |     vbox.memory = 4096 | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   # Provision with Ansible |   # Provision with Ansible | ||||||
| @@ -48,4 +46,5 @@ Vagrant.configure("2") do |config| | |||||||
|     ansible.compatibility_mode = "2.0" |     ansible.compatibility_mode = "2.0" | ||||||
|     ansible.playbook = "dev/" + PLAYBOOK + ".yml" |     ansible.playbook = "dev/" + PLAYBOOK + ".yml" | ||||||
|   end |   end | ||||||
|  |  | ||||||
| end | end | ||||||
|   | |||||||
| @@ -4,24 +4,6 @@ base_domain: vm.krislamo.org | |||||||
| allow_reboot: false | allow_reboot: false | ||||||
| manage_network: false | manage_network: false | ||||||
|  |  | ||||||
| users: |  | ||||||
|   - name: jellyfin |  | ||||||
|  |  | ||||||
| samba: |  | ||||||
|   users: |  | ||||||
|     - name: jellyfin |  | ||||||
|       password: jellyfin |  | ||||||
|   shares: |  | ||||||
|     - name: jellyfin |  | ||||||
|       path: /srv/jellyfin |  | ||||||
|       owner: jellyfin |  | ||||||
|       group: jellyfin |  | ||||||
|       valid_users: jellyfin |  | ||||||
|   firewall: |  | ||||||
|     - 10.0.0.0/8 |  | ||||||
|     - 172.16.0.0/12 |  | ||||||
|     - 192.168.0.0/16 |  | ||||||
|  |  | ||||||
| # proxy | # proxy | ||||||
| proxy: | proxy: | ||||||
|   #production: true |   #production: true | ||||||
| @@ -53,4 +35,3 @@ traefik_http_only: true # if behind reverse-proxy | |||||||
| # jellyfin | # jellyfin | ||||||
| jellyfin_domain: "jellyfin.{{ base_domain }}" | jellyfin_domain: "jellyfin.{{ base_domain }}" | ||||||
| jellyfin_version: latest | jellyfin_version: latest | ||||||
| jellyfin_media: /srv/jellyfin |  | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ traefik_auth: admin:$apr1$T1l.BCFz$Jyg8msXYEAUi3LLH39I9d1 # admin:admin | |||||||
| #traefik_acme_email: realemail@example.com # Let's Encrypt settings | #traefik_acme_email: realemail@example.com # Let's Encrypt settings | ||||||
| #traefik_production: true | #traefik_production: true | ||||||
| 
 | 
 | ||||||
| # staticweb | # nginx | ||||||
| nginx_domain: nginx.vm.krislamo.org | nginx_domain: nginx.vm.krislamo.org | ||||||
| nginx_name: staticsite | nginx_name: staticsite | ||||||
| nginx_repo_url: https://git.krislamo.org/kris/example-website/ | nginx_repo_url: https://git.krislamo.org/kris/example-website/ | ||||||
| @@ -1,10 +1,10 @@ | |||||||
| - name: Install a static web container | - name: Install nginx server (docker) | ||||||
|   hosts: all |   hosts: all | ||||||
|   become: true |   become: true | ||||||
|   vars_files: |   vars_files: | ||||||
|     - host_vars/staticweb.yml |     - host_vars/nginx.yml | ||||||
|   roles: |   roles: | ||||||
|     - base |     - base | ||||||
|     - docker |     - docker | ||||||
|     - traefik |     - traefik | ||||||
|     - staticweb |     - nginx | ||||||
							
								
								
									
										18
									
								
								docker.yml
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								docker.yml
									
									
									
									
									
								
							| @@ -1,7 +1,21 @@ | |||||||
|  | # Copyright (C) 2020  Kris Lamoureux | ||||||
|  | # | ||||||
|  | # This program is free software: you can redistribute it and/or modify | ||||||
|  | # it under the terms of the GNU General Public License as published by | ||||||
|  | # the Free Software Foundation, version 3 of the License. | ||||||
|  | # | ||||||
|  | # This program is distributed in the hope that it will be useful, | ||||||
|  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | # GNU General Public License for more details. | ||||||
|  | # | ||||||
|  | # You should have received a copy of the GNU General Public License | ||||||
|  | # along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||||
|  |  | ||||||
| - name: Install Docker Server | - name: Install Docker Server | ||||||
|   hosts: "{{ PLAYBOOK_HOST | default('none') }}" |   hosts: dockerhosts | ||||||
|   become: true |   become: true | ||||||
|   roles: |   roles: | ||||||
|     - base |     - base | ||||||
|     - jenkins |  | ||||||
|     - docker |     - docker | ||||||
|  |     - jenkins | ||||||
|   | |||||||
| @@ -1,9 +1,8 @@ | |||||||
| - name: Install Media Server | - name: Install Media Server | ||||||
|   hosts: "{{ PLAYBOOK_HOST | default('none') }}" |   hosts: mediaservers | ||||||
|   become: true |   become: true | ||||||
|   roles: |   roles: | ||||||
|     - base |     - base | ||||||
|     - jenkins |  | ||||||
|     - proxy |     - proxy | ||||||
|     - docker |     - docker | ||||||
|     - traefik |     - traefik | ||||||
|   | |||||||
| @@ -1,7 +1,6 @@ | |||||||
| allow_reboot: true |  | ||||||
| manage_firewall: true |  | ||||||
| manage_network: false | manage_network: false | ||||||
| network_type: static | network_type: static | ||||||
|  | allow_reboot: true | ||||||
|  |  | ||||||
| packages: | packages: | ||||||
|   - apache2-utils |   - apache2-utils | ||||||
|   | |||||||
| @@ -22,9 +22,3 @@ | |||||||
|     name: ddclient |     name: ddclient | ||||||
|     state: restarted |     state: restarted | ||||||
|   listen: restart_ddclient |   listen: restart_ddclient | ||||||
|  |  | ||||||
| - name: Restart Samba |  | ||||||
|   ansible.builtin.service: |  | ||||||
|     name: smbd |  | ||||||
|     state: restarted |  | ||||||
|   listen: restart_samba |  | ||||||
| @@ -1,3 +1,21 @@ | |||||||
|  | - name: 'Install Ansible dependency: python3-apt' | ||||||
|  |   ansible.builtin.shell: 'apt-get update && apt-get install python3-apt -y' | ||||||
|  |   args: | ||||||
|  |     creates: /usr/lib/python3/dist-packages/apt | ||||||
|  |     warn: false | ||||||
|  |  | ||||||
|  | - name: Install additional Ansible dependencies | ||||||
|  |   ansible.builtin.apt: | ||||||
|  |     name: "{{ item }}" | ||||||
|  |     state: present | ||||||
|  |     force_apt_get: true | ||||||
|  |     update_cache: true | ||||||
|  |   loop: | ||||||
|  |     - aptitude | ||||||
|  |     - python3-docker | ||||||
|  |     - python3-pymysql | ||||||
|  |     - python3-psycopg2 | ||||||
|  |  | ||||||
| - name: Create Ansible's temporary remote directory | - name: Create Ansible's temporary remote directory | ||||||
|   ansible.builtin.file: |   ansible.builtin.file: | ||||||
|     path: "~/.ansible/tmp" |     path: "~/.ansible/tmp" | ||||||
|   | |||||||
| @@ -9,7 +9,6 @@ | |||||||
| - name: Import Firewall tasks | - name: Import Firewall tasks | ||||||
|   ansible.builtin.import_tasks: firewall.yml |   ansible.builtin.import_tasks: firewall.yml | ||||||
|   tags: firewall |   tags: firewall | ||||||
|   when: manage_firewall |  | ||||||
|  |  | ||||||
| - name: Import Network tasks | - name: Import Network tasks | ||||||
|   ansible.builtin.import_tasks: network.yml |   ansible.builtin.import_tasks: network.yml | ||||||
| @@ -30,8 +29,3 @@ | |||||||
|   ansible.builtin.import_tasks: wireguard.yml |   ansible.builtin.import_tasks: wireguard.yml | ||||||
|   tags: wireguard |   tags: wireguard | ||||||
|   when: wireguard is defined |   when: wireguard is defined | ||||||
|  |  | ||||||
| - name: Import Samba tasks |  | ||||||
|   ansible.builtin.import_tasks: samba.yml |  | ||||||
|   tags: samba |  | ||||||
|   when: samba is defined |  | ||||||
|   | |||||||
| @@ -3,18 +3,8 @@ | |||||||
|     name: samba |     name: samba | ||||||
|     state: present |     state: present | ||||||
|  |  | ||||||
| - name: Create nologin shell accounts for Samba |  | ||||||
|   ansible.builtin.user: |  | ||||||
|     name: "{{ item.name }}" |  | ||||||
|     state: present |  | ||||||
|     shell: /usr/sbin/nologin |  | ||||||
|     createhome: false |  | ||||||
|     system: yes |  | ||||||
|   loop: "{{ samba.users }}" |  | ||||||
|   when: item.manage_user is defined and item.manage_user is true |  | ||||||
|  |  | ||||||
| - name: Create Samba users | - name: Create Samba users | ||||||
|   ansible.builtin.shell: "smbpasswd -a {{ item.name }}" |   ansible.builtin.command: "smbpasswd -a -s {{ item.name }}" | ||||||
|   args: |   args: | ||||||
|     stdin: "{{ item.password }}\n{{ item.password }}" |     stdin: "{{ item.password }}\n{{ item.password }}" | ||||||
|   loop: "{{ samba.users }}" |   loop: "{{ samba.users }}" | ||||||
| @@ -24,8 +14,6 @@ | |||||||
| - name: Ensure share directories exist | - name: Ensure share directories exist | ||||||
|   ansible.builtin.file: |   ansible.builtin.file: | ||||||
|     path: "{{ item.path }}" |     path: "{{ item.path }}" | ||||||
|     owner: "{{ item.owner }}" |  | ||||||
|     group: "{{ item.group }}" |  | ||||||
|     state: directory |     state: directory | ||||||
|     mode: 0755 |     mode: 0755 | ||||||
|   loop: "{{ samba.shares }}" |   loop: "{{ samba.shares }}" | ||||||
| @@ -34,20 +22,4 @@ | |||||||
|   ansible.builtin.template: |   ansible.builtin.template: | ||||||
|     src: smb.conf.j2 |     src: smb.conf.j2 | ||||||
|     dest: /etc/samba/smb.conf |     dest: /etc/samba/smb.conf | ||||||
|   notify: restart_samba |   notify: samba_restart | ||||||
|  |  | ||||||
| - name: Start smbd and enable on boot |  | ||||||
|   ansible.builtin.service: |  | ||||||
|     name: smbd |  | ||||||
|     state: started |  | ||||||
|     enabled: true |  | ||||||
|  |  | ||||||
| - name: Allow SMB connections |  | ||||||
|   community.general.ufw: |  | ||||||
|     rule: allow |  | ||||||
|     port: 445 |  | ||||||
|     proto: tcp |  | ||||||
|     from: "{{ item }}" |  | ||||||
|     state: enabled |  | ||||||
|   loop: "{{ samba.firewall }}" |  | ||||||
|   when: manage_firewall |  | ||||||
|   | |||||||
| @@ -11,23 +11,6 @@ | |||||||
|     mode: 0400 |     mode: 0400 | ||||||
|   when: authorized_keys is defined |   when: authorized_keys is defined | ||||||
|  |  | ||||||
| - name: Create system users |  | ||||||
|   ansible.builtin.user: |  | ||||||
|     name: "{{ item.name }}" |  | ||||||
|     state: present |  | ||||||
|     shell: "{{ item.shell | default('/bin/bash') }}" |  | ||||||
|     create_home: "{{ item.home | default(false) }}" |  | ||||||
|   loop: "{{ users }}" |  | ||||||
|   when: users is defined |  | ||||||
|  |  | ||||||
| - name: Set authorized_keys for system users |  | ||||||
|   ansible.posix.authorized_key: |  | ||||||
|     user: "{{ item.key }}" |  | ||||||
|     key: "{{ item.value.key }}" |  | ||||||
|     state: present |  | ||||||
|   loop: "{{ users }}" |  | ||||||
|   when: users is defined and item.value.key is defined |  | ||||||
|  |  | ||||||
| - name: Manage filesystem mounts | - name: Manage filesystem mounts | ||||||
|   ansible.posix.mount: |   ansible.posix.mount: | ||||||
|     path: "{{ item.path }}" |     path: "{{ item.path }}" | ||||||
|   | |||||||
| @@ -11,7 +11,6 @@ | |||||||
|   args: |   args: | ||||||
|     chdir: /etc/wireguard/ |     chdir: /etc/wireguard/ | ||||||
|     creates: /etc/wireguard/privatekey |     creates: /etc/wireguard/privatekey | ||||||
|     executable: /usr/bin/bash |  | ||||||
|  |  | ||||||
| - name: Grab WireGuard private key for configuration | - name: Grab WireGuard private key for configuration | ||||||
|   ansible.builtin.slurp: |   ansible.builtin.slurp: | ||||||
| @@ -35,5 +34,5 @@ | |||||||
|   community.general.ufw: |   community.general.ufw: | ||||||
|     rule: allow |     rule: allow | ||||||
|     port: "{{ wireguard.listenport }}" |     port: "{{ wireguard.listenport }}" | ||||||
|     proto: udp |     proto: tcp | ||||||
|   when: wireguard.listenport is defined |   when: wireguard.listenport is defined | ||||||
|   | |||||||
| @@ -13,16 +13,7 @@ | |||||||
| [{{ share.name }}] | [{{ share.name }}] | ||||||
|    path = {{ share.path }} |    path = {{ share.path }} | ||||||
|    browsable = yes |    browsable = yes | ||||||
| {% if share.guest_allow is defined and share.guest_allow %} |  | ||||||
|    guest ok = yes |  | ||||||
| {% else %} |  | ||||||
|    guest ok = no |    guest ok = no | ||||||
| {% endif %} |  | ||||||
|    read only = {{ 'yes' if share.read_only | default(false) else 'no' }} |    read only = {{ 'yes' if share.read_only | default(false) else 'no' }} | ||||||
| {% if share.valid_users is defined %} |  | ||||||
|    valid users = {{ share.valid_users }} |    valid users = {{ share.valid_users }} | ||||||
| {% endif %} |  | ||||||
| {% if share.force_user is defined %} |  | ||||||
|    force user = {{ share.force_user }} |  | ||||||
| {% endif %} |  | ||||||
| {% endfor %} | {% endfor %} | ||||||
|   | |||||||
| @@ -1,6 +1,3 @@ | |||||||
| docker_compose_root: /var/lib/compose | docker_compose_root: /var/lib/compose | ||||||
| docker_compose_service: compose |  | ||||||
| docker_compose: /usr/bin/docker-compose | docker_compose: /usr/bin/docker-compose | ||||||
| docker_repos_keys: "{{ docker_repos_path }}/.keys" | docker_compose_service: compose | ||||||
| docker_repos_keytype: rsa |  | ||||||
| docker_repos_path: /srv/compose_repos |  | ||||||
|   | |||||||
| @@ -17,58 +17,6 @@ | |||||||
|     mode: 0400 |     mode: 0400 | ||||||
|   notify: compose_systemd |   notify: compose_systemd | ||||||
|  |  | ||||||
| - name: Create directories to clone docker-compose repositories |  | ||||||
|   ansible.builtin.file: |  | ||||||
|     path: "{{ item }}" |  | ||||||
|     state: directory |  | ||||||
|     mode: 0400 |  | ||||||
|   loop: |  | ||||||
|     - "{{ docker_repos_path }}" |  | ||||||
|     - "{{ docker_repos_keys }}" |  | ||||||
|   when: docker_compose_deploy is defined |  | ||||||
|  |  | ||||||
| - name: Generate OpenSSH deploy keys for docker-compose clones |  | ||||||
|   community.crypto.openssh_keypair: |  | ||||||
|     path: "{{ docker_repos_keys }}/id_{{ docker_repos_keytype }}" |  | ||||||
|     type: "{{ docker_repos_keytype }}" |  | ||||||
|     mode: 0400 |  | ||||||
|     state: present |  | ||||||
|   when: docker_compose_deploy is defined |  | ||||||
|  |  | ||||||
| - name: Clone external docker-compose projects |  | ||||||
|   ansible.builtin.git: |  | ||||||
|     repo: "{{ item.url }}" |  | ||||||
|     dest: "{{ docker_repos_path }}/{{ item.name }}" |  | ||||||
|     version: "{{ item.version | default('main') }}" |  | ||||||
|     force: true |  | ||||||
|     key_file: "{{ docker_repos_keys }}/id_{{ docker_repos_keytype }}" |  | ||||||
|   when: docker_compose_deploy is defined |  | ||||||
|   loop: "{{ docker_compose_deploy }}" |  | ||||||
|  |  | ||||||
| - name: Create directories for docker-compose projects using the systemd service |  | ||||||
|   ansible.builtin.file: |  | ||||||
|     path: "{{ docker_compose_root }}/{{ item.name }}" |  | ||||||
|     state: directory |  | ||||||
|     mode: 0400 |  | ||||||
|   loop: "{{ docker_compose_deploy }}" |  | ||||||
|   when: docker_compose_deploy is defined |  | ||||||
|  |  | ||||||
| - name: Copy docker-compose.yml files to their service directories |  | ||||||
|   ansible.builtin.copy: |  | ||||||
|     src: "{{ docker_repos_path }}/{{ item.name }}/{{ item.path | default('docker-compose.yml') }}" |  | ||||||
|     dest: "{{ docker_compose_root }}/{{ item.name }}/docker-compose.yml" |  | ||||||
|     remote_src: yes |  | ||||||
|   loop: "{{ docker_compose_deploy }}" |  | ||||||
|   when: docker_compose_deploy is defined |  | ||||||
|  |  | ||||||
| - name: Set environment variables for docker-compose projects |  | ||||||
|   ansible.builtin.template: |  | ||||||
|     src: docker-compose-env.j2 |  | ||||||
|     dest: "{{ docker_compose_root }}/{{ item.name }}/.env" |  | ||||||
|     mode: 0400 |  | ||||||
|   loop: "{{ docker_compose_deploy }}" |  | ||||||
|   when: docker_compose_deploy is defined and item.env is defined |  | ||||||
|  |  | ||||||
| - name: Add users to docker group | - name: Add users to docker group | ||||||
|   ansible.builtin.user: |   ansible.builtin.user: | ||||||
|     name: "{{ item }}" |     name: "{{ item }}" | ||||||
| @@ -82,11 +30,3 @@ | |||||||
|     name: docker |     name: docker | ||||||
|     state: started |     state: started | ||||||
|     enabled: true |     enabled: true | ||||||
|  |  | ||||||
| - name: Start docker-compose services and enable on boot |  | ||||||
|   ansible.builtin.service: |  | ||||||
|     name: "{{ docker_compose_service }}@{{ item.name }}" |  | ||||||
|     state: started |  | ||||||
|     enabled: true |  | ||||||
|   loop: "{{ docker_compose_deploy }}" |  | ||||||
|   when: item.enabled is defined and item.enabled is true |  | ||||||
|   | |||||||
| @@ -1,7 +0,0 @@ | |||||||
| # {{ ansible_managed }} |  | ||||||
|  |  | ||||||
| {% if item.env is defined %} |  | ||||||
| {% for kvpair in item.env.items() %} |  | ||||||
| {{ kvpair.0 }}={{ kvpair.1 }} |  | ||||||
| {% endfor %} |  | ||||||
| {% endif %} |  | ||||||
| @@ -1,4 +1,5 @@ | |||||||
| jellyfin_name: jellyfin | jellyfin_name: jellyfin | ||||||
|  | jellyfin_volume: "{{ jellyfin_name }}" | ||||||
| jellyfin_router: "{{ jellyfin_name }}" | jellyfin_router: "{{ jellyfin_name }}" | ||||||
| jellyfin_rooturl: "https://{{ jellyfin_domain }}" | jellyfin_rooturl: "https://{{ jellyfin_domain }}" | ||||||
| jellyfin_root: "{{ docker_compose_root }}/{{ jellyfin_name }}" | jellyfin_root: "{{ docker_compose_root }}/{{ jellyfin_name }}" | ||||||
|   | |||||||
| @@ -4,6 +4,11 @@ | |||||||
|     state: directory |     state: directory | ||||||
|     mode: 0500 |     mode: 0500 | ||||||
|  |  | ||||||
|  | - name: Create jellyfin user | ||||||
|  |   ansible.builtin.user: | ||||||
|  |     name: jellyfin | ||||||
|  |     state: present | ||||||
|  |  | ||||||
| - name: Get user jellyfin uid | - name: Get user jellyfin uid | ||||||
|   ansible.builtin.getent: |   ansible.builtin.getent: | ||||||
|     database: passwd |     database: passwd | ||||||
|   | |||||||
| @@ -1,8 +1,7 @@ | |||||||
| version: '3.7' | version: '3.7' | ||||||
|  |  | ||||||
| volumes: | volumes: | ||||||
|   config: |   {{ jellyfin_volume }}: | ||||||
|   cache: |  | ||||||
|  |  | ||||||
| networks: | networks: | ||||||
|   traefik: |   traefik: | ||||||
| @@ -25,6 +24,6 @@ services: | |||||||
|       - "traefik.docker.network=traefik" |       - "traefik.docker.network=traefik" | ||||||
|       - "traefik.enable=true" |       - "traefik.enable=true" | ||||||
|     volumes: |     volumes: | ||||||
|       - config:/config |       - ./config:/config | ||||||
|       - cache:/cache |       - ./cache:/cache | ||||||
|       - {{ jellyfin_media }}:/media |       - {{ jellyfin_volume }}:/media | ||||||
|   | |||||||
| @@ -29,8 +29,6 @@ | |||||||
|     networks: |     networks: | ||||||
|       - name: "{{ nextcloud_container }}" |       - name: "{{ nextcloud_container }}" | ||||||
|       - name: traefik |       - name: traefik | ||||||
|     env: |  | ||||||
|       PHP_MEMORY_LIMIT: 1024M |  | ||||||
|     labels: |     labels: | ||||||
|       traefik.http.routers.nextcloud.rule: "Host(`{{ nextcloud_domain }}`)" |       traefik.http.routers.nextcloud.rule: "Host(`{{ nextcloud_domain }}`)" | ||||||
|       traefik.http.routers.nextcloud.entrypoints: websecure |       traefik.http.routers.nextcloud.entrypoints: websecure | ||||||
| @@ -105,13 +103,6 @@ | |||||||
|     - "php occ maintenance:mode --off" |     - "php occ maintenance:mode --off" | ||||||
|   when: nextcloud_install.changed |   when: nextcloud_install.changed | ||||||
|  |  | ||||||
| - name: Install Nextcloud background jobs cron |  | ||||||
|   ansible.builtin.cron: |  | ||||||
|     name: Nextcloud background job |  | ||||||
|     minute: "*/5" |  | ||||||
|     job: "/usr/bin/docker exec -u www-data nextcloud /usr/local/bin/php -f /var/www/html/cron.php" |  | ||||||
|     user: root |  | ||||||
|  |  | ||||||
| - name: Remove Nextcloud's CAN_INSTALL file | - name: Remove Nextcloud's CAN_INSTALL file | ||||||
|   ansible.builtin.file: |   ansible.builtin.file: | ||||||
|     path: "{{ nextcloud_root }}/config/CAN_INSTALL" |     path: "{{ nextcloud_root }}/config/CAN_INSTALL" | ||||||
|   | |||||||
| @@ -19,14 +19,14 @@ | |||||||
|   ansible.builtin.template: |   ansible.builtin.template: | ||||||
|     src: nginx.conf.j2 |     src: nginx.conf.j2 | ||||||
|     dest: /etc/nginx/nginx.conf |     dest: /etc/nginx/nginx.conf | ||||||
|     mode: 0644 |     mode: '0644' | ||||||
|   notify: reload_nginx |   notify: reload_nginx | ||||||
|  |  | ||||||
| - name: Install nginx sites configuration | - name: Install nginx sites configuration | ||||||
|   ansible.builtin.template: |   ansible.builtin.template: | ||||||
|     src: server-nginx.conf.j2 |     src: server-nginx.conf.j2 | ||||||
|     dest: "/etc/nginx/sites-available/{{ item.domain }}.conf" |     dest: "/etc/nginx/sites-available/{{ item.domain }}.conf" | ||||||
|     mode: 0400 |     mode: '0644' | ||||||
|   loop: "{{ proxy.servers }}" |   loop: "{{ proxy.servers }}" | ||||||
|   notify: reload_nginx |   notify: reload_nginx | ||||||
|   register: nginx_sites |   register: nginx_sites | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user