This commit is contained in:
Kris Lamoureux 2024-04-16 22:59:10 -04:00
parent 6fbd3c53bb
commit cc21d88eb6
5 changed files with 89 additions and 109 deletions

View File

@ -5,9 +5,11 @@
- host_vars/dockerbox.yml - host_vars/dockerbox.yml
roles: roles:
- base - base
- proxy
- docker - docker
- mariadb
- traefik - traefik
- nextcloud - nextcloud
- jenkins # - jenkins
- prometheus # - prometheus
- nginx # - nginx

View File

@ -2,29 +2,59 @@
allow_reboot: false allow_reboot: false
manage_network: false manage_network: false
# Import my GPG key for git signature verification
root_gpgkeys:
- name: kris@lamoureux.io
id: FBF673CEEC030F8AECA814E73EDA9C3441EDA925
# proxy
proxy:
servers:
- domain: cloud.local.krislamo.org
proxy_pass: http://127.0.0.1:8000
# docker # docker
docker_official: true # docker's apt repos
docker_users: docker_users:
- vagrant - vagrant
docker_compose_env_nolog: false # dev only setting
docker_compose_deploy:
# Traefik
- name: traefik
url: https://github.com/krislamo/traefik
version: e03268af4cf942c47cba66c2112628dbcad1b756
path: docker-compose.web.yml
enabled: true
accept_newhostkey: true
trusted_keys:
- FBF673CEEC030F8AECA814E73EDA9C3441EDA925
env:
ENABLE: true
# Nextcloud
- name: nextcloud
url: https://git.krislamo.org/kris/nextcloud
version: f1e143f1d5be2ffb6fa77792a80810f8a6c4ffb1
env:
DATA: ./data
# traefik # traefik
traefik_version: latest traefik:
traefik_dashboard: true ENABLE: true
traefik_domain: traefik.local.krislamo.org
traefik_auth: admin:$apr1$T1l.BCFz$Jyg8msXYEAUi3LLH39I9d1 # admin:admin
traefik_web_entry: 0.0.0.0:80
traefik_websecure_entry: 0.0.0.0:443
#traefik_acme_email: realemail@example.com # Let's Encrypt settings
#traefik_production: true
#traefik_http_only: true # if behind reverse-proxy
# nextcloud # nextcloud
nextcloud_version: stable nextcloud:
nextcloud_admin: admin DB_PASSWD: password
nextcloud_pass: password ADMIN_PASSWD: password
nextcloud_domain: cloud.local.krislamo.org
nextcloud_dbversion: latest # nextcloud
nextcloud_dbpass: password #nextcloud_version: stable
#nextcloud_admin: admin
#nextcloud_pass: password
#nextcloud_domain: cloud.local.krislamo.org
#nextcloud_dbversion: latest
#nextcloud_dbpass: password
# jenkins # jenkins
jenkins_version: lts jenkins_version: lts

View File

@ -1,11 +1 @@
# container names nextcloud_name: nextcloud
nextcloud_container: nextcloud
nextcloud_dbcontainer: "{{ nextcloud_container }}-db"
# database settings
nextcloud_dbname: "{{ nextcloud_container }}"
nextcloud_dbuser: "{{ nextcloud_dbname }}"
# host mounts
nextcloud_root: "/opt/{{ nextcloud_container }}/public_html"
nextcloud_dbroot: "/opt/{{ nextcloud_container }}/database"

View File

@ -1,88 +1,59 @@
- name: Create Nextcloud network - name: Install MySQL module for Ansible
community.general.docker_network: ansible.builtin.apt:
name: "{{ nextcloud_container }}" name: python3-pymysql
state: present
- name: Start Nextcloud's database container - name: Create Nextcloud database
community.general.docker_container: community.mysql.mysql_db:
name: "{{ nextcloud_dbcontainer }}" name: "{{ nextcloud.DB_NAME | default('nextcloud') }}"
image: mariadb:{{ nextcloud_dbversion }} state: present
login_unix_socket: /var/run/mysqld/mysqld.sock
- name: Create Nextcloud database user
community.mysql.mysql_user:
name: "{{ nextcloud.DB_USER | default('nextcloud') }}"
password: "{{ nextcloud.DB_PASSWD }}"
host: '%'
state: present
priv: "{{ nextcloud.DB_NAME | default('nextcloud') }}.*:ALL"
login_unix_socket: /var/run/mysqld/mysqld.sock
- name: Start Nextcloud service and enable on boot
ansible.builtin.service:
name: "{{ docker_compose_service }}@{{ nextcloud_name }}"
state: started state: started
restart_policy: always enabled: true
volumes: "{{ nextcloud_dbroot }}:/var/lib/mysql" when: nextcloud.ENABLE | default('false')
networks_cli_compatible: true
networks:
- name: "{{ nextcloud_container }}"
env:
MYSQL_RANDOM_ROOT_PASSWORD: "true"
MYSQL_DATABASE: "{{ nextcloud_dbname }}"
MYSQL_USER: "{{ nextcloud_dbuser }}"
MYSQL_PASSWORD: "{{ nextcloud_dbpass }}"
- name: Start Nextcloud container
community.general.docker_container:
name: "{{ nextcloud_container }}"
image: nextcloud:{{ nextcloud_version }}
state: started
restart_policy: always
volumes: "{{ nextcloud_root }}:/var/www/html"
networks_cli_compatible: true
networks:
- name: "{{ nextcloud_container }}"
- name: traefik
env:
PHP_MEMORY_LIMIT: 1024M
labels:
traefik.http.routers.nextcloud.rule: "Host(`{{ nextcloud_domain }}`)"
traefik.http.routers.nextcloud.entrypoints: websecure
traefik.http.routers.nextcloud.tls.certresolver: letsencrypt
traefik.http.routers.nextcloud.middlewares: "securehttps@file,nextcloud-webdav"
traefik.http.middlewares.nextcloud-webdav.redirectregex.regex: "https://(.*)/.well-known/(card|cal)dav"
traefik.http.middlewares.nextcloud-webdav.redirectregex.replacement: "https://${1}/remote.php/dav/"
traefik.http.middlewares.nextcloud-webdav.redirectregex.permanent: "true"
traefik.docker.network: traefik
traefik.enable: "true"
- name: Grab Nextcloud database container information
community.general.docker_container_info:
name: "{{ nextcloud_dbcontainer }}"
register: nextcloud_dbinfo
- name: Grab Nextcloud container information - name: Grab Nextcloud container information
community.general.docker_container_info: community.general.docker_container_info:
name: "{{ nextcloud_container }}" name: "{{ nextcloud_name }}"
register: nextcloud_info register: nextcloud_info
- name: Wait for Nextcloud to become available - name: Wait for Nextcloud to become available
ansible.builtin.wait_for: ansible.builtin.wait_for:
host: "{{ nextcloud_info.container.NetworkSettings.Networks.traefik.IPAddress }}" host: "{{ nextcloud_info.container.NetworkSettings.Networks.traefik.IPAddress }}"
delay: 10
port: 80 port: 80
- name: Check Nextcloud status - name: Check Nextcloud status
ansible.builtin.command: "docker exec --user www-data {{ nextcloud_container }} ansible.builtin.command: "docker exec --user www-data {{ nextcloud_name }}
php occ status" php occ status"
register: nextcloud_status register: nextcloud_status
args: changed_when: false
removes: "{{ nextcloud_root }}/config/CAN_INSTALL"
- name: Wait for Nextcloud database to become available
ansible.builtin.wait_for:
host: "{{ nextcloud_dbinfo.container.NetworkSettings.Networks.nextcloud.IPAddress }}"
port: 3306
- name: Install Nextcloud - name: Install Nextcloud
ansible.builtin.command: 'docker exec --user www-data {{ nextcloud_container }} ansible.builtin.command: 'docker exec --user www-data {{ nextcloud_name }}
php occ maintenance:install php occ maintenance:install
--database "mysql" --database "mysql"
--database-host "{{ nextcloud_dbcontainer }}" --database-host "{{ nextcloud.DB_HOST | default(''host.docker.internal'') }}"
--database-name "{{ nextcloud_dbname }}" --database-name "{{ nextcloud.DB_NAME | default(''nextcloud'') }}"
--database-user "{{ nextcloud_dbuser }}" --database-user "{{ nextcloud.DB_USER | default(''nextcloud'') }}"
--database-pass "{{ nextcloud_dbpass }}" --database-pass "{{ nextcloud.DB_PASSWD }}"
--admin-user "{{ nextcloud_admin }}" --admin-user "{{ nextcloud.ADMIN_USER | default(''admin'') }}"
--admin-pass "{{ nextcloud_pass }}"' --admin-pass "{{ nextcloud.ADMIN_PASSWD }}"'
register: nextcloud_install register: nextcloud_install
when: when: nextcloud_status.stderr[:26] == "Nextcloud is not installed"
- nextcloud_status.stdout[:26] == "Nextcloud is not installed"
- nextcloud_domain is defined
- name: Set Nextcloud's Trusted Proxy - name: Set Nextcloud's Trusted Proxy
ansible.builtin.command: 'docker exec --user www-data {{ nextcloud_container }} ansible.builtin.command: 'docker exec --user www-data {{ nextcloud_container }}

View File

@ -21,20 +21,6 @@
loop: "{{ traefik_external }}" loop: "{{ traefik_external }}"
when: traefik_external is defined when: traefik_external is defined
- name: Install Traefik's docker-compose file
ansible.builtin.template:
src: docker-compose.yml.j2
dest: "{{ traefik_root }}/docker-compose.yml"
mode: 0400
notify: restart_traefik
- name: Install Traefik's docker-compose variables
ansible.builtin.template:
src: compose-env.j2
dest: "{{ traefik_root }}/.env"
mode: 0400
notify: restart_traefik
- name: Install static Traefik configuration - name: Install static Traefik configuration
ansible.builtin.template: ansible.builtin.template:
src: traefik.yml.j2 src: traefik.yml.j2
@ -42,8 +28,9 @@
mode: 0400 mode: 0400
notify: restart_traefik notify: restart_traefik
- name: Start and enable Traefik service - name: Start Traefik service and enable on boot
ansible.builtin.service: ansible.builtin.service:
name: "{{ docker_compose_service }}@{{ traefik_name }}" name: "{{ docker_compose_service }}@{{ traefik_name }}"
state: started state: started
enabled: true enabled: true
when: traefik.ENABLED | default('false')