From 9c9e8f09dad3539337d73c22d6ba80f7eb03b455 Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 4 Aug 2025 18:24:30 +1000 Subject: [PATCH] 04.08.25 --- backup_docker_volumes.yml | 17 +++ docker-compose.yml | 103 ++++++++++++++++++ first/docker-compose.yml | 79 ++++++++++++++ first_deploy_compose.yml | 40 +++++++ global/docker-compose.yml | 79 ++++++++++++++ global/synapse/_data/homeserver.db | Bin 0 -> 2088960 bytes global/synapse/_data/homeserver.db-shm | Bin 0 -> 32768 bytes global/synapse/_data/homeserver.db-wal | 0 global/synapse/_data/homeserver.yaml | 35 ++++++ global/synapse/_data/matrix.local.log.config | 39 +++++++ global/synapse/_data/matrix.local.signing.key | 2 + install-docker-compose-and-ufw-playbook.yaml | 21 ++++ inventory.ini | 2 + roles/docker/tasks/main.yml | 26 +++++ roles/fail2ban/defaults/main.yml | 9 ++ roles/fail2ban/handlers/main.yml | 5 + roles/fail2ban/tasks/main.yml | 26 +++++ roles/fail2ban/templates/jail.local.j2 | 14 +++ roles/fail2ban/templates/nginx.conf.j2 | 4 + roles/firewall/tasks/main.yml | 23 ++++ roles/rsync/defaults/main.yml | 3 + roles/rsync/tasks/main.yml | 6 + 22 files changed, 533 insertions(+) create mode 100644 backup_docker_volumes.yml create mode 100644 docker-compose.yml create mode 100644 first/docker-compose.yml create mode 100644 first_deploy_compose.yml create mode 100644 global/docker-compose.yml create mode 100644 global/synapse/_data/homeserver.db create mode 100644 global/synapse/_data/homeserver.db-shm create mode 100644 global/synapse/_data/homeserver.db-wal create mode 100644 global/synapse/_data/homeserver.yaml create mode 100644 global/synapse/_data/matrix.local.log.config create mode 100644 global/synapse/_data/matrix.local.signing.key create mode 100644 install-docker-compose-and-ufw-playbook.yaml create mode 100644 inventory.ini create mode 100644 roles/docker/tasks/main.yml create mode 100644 roles/fail2ban/defaults/main.yml create mode 100644 roles/fail2ban/handlers/main.yml create mode 100644 roles/fail2ban/tasks/main.yml create mode 100644 roles/fail2ban/templates/jail.local.j2 create mode 100644 roles/fail2ban/templates/nginx.conf.j2 create mode 100644 roles/firewall/tasks/main.yml create mode 100644 roles/rsync/defaults/main.yml create mode 100644 roles/rsync/tasks/main.yml diff --git a/backup_docker_volumes.yml b/backup_docker_volumes.yml new file mode 100644 index 0000000..8ef644e --- /dev/null +++ b/backup_docker_volumes.yml @@ -0,0 +1,17 @@ +--- +- name: Backup Docker volumes from remote server + hosts: all +# become: yes + tasks: + - name: Ensure local backup directory exists + local_action: file + path=./backups + state=directory + mode=0755 + + - name: Synchronize /var/lib/docker/volumes to local ./backups + synchronize: + src: /var/lib/docker/volumes + dest: ./backups/ + mode: pull + delete: no diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..2f96a25 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,103 @@ +# docker‑compose.yml (версия 3.8 – поддерживает named volumes и сетевые настройки) +version: "3.8" + +services: + synapse: + image: matrixdotorg/synapse:latest + container_name: matrix_synapse + environment: + - SYNAPSE_SERVER_NAME=matrix.emsdata.ru + - SYNAPSE_REPORT_STATS=no + - TZ=Asia/Vladivostok + ports: + - "8008:8008" # HTTP (без TLS), используемый 뒤 federation/client API + - "8448:8448" # блок federation HTTPS (если понадобилось позже) + volumes: + - synapse_data:/data + restart: unless-stopped + + drawio: + image: jgraph/drawio:latest + container_name: drawio + ports: + - "8080:8080" # Draw.io в браузере: http://host:8080 + restart: unless-stopped + + static-nginx: + image: nginx:alpine + container_name: nginx_static + ports: + - "8081:8081" # простой статический nginx без монтирования – откроется дефолтный index + restart: unless-stopped + + npm-app: + image: 'jc21/nginx-proxy-manager:latest' + restart: unless-stopped + ports: + # These ports are in format : + - '80:80' # Public HTTP Port + - '443:443' # Public HTTPS Port + - '81:81' # Admin Web Port + # Add any other Stream port you want to expose + # - '21:21' # FTP + environment: + # Mysql/Maria connection parameters: + DB_MYSQL_HOST: "db" + DB_MYSQL_PORT: 3306 + DB_MYSQL_USER: "npm" + DB_MYSQL_PASSWORD: "npm" + DB_MYSQL_NAME: "npm" + # Uncomment this if IPv6 is not enabled on your host + # DISABLE_IPV6: 'true' + volumes: + - ./npm_data:/data + - ./npm_letsencrypt:/etc/letsencrypt + depends_on: + - db + + db: + image: 'jc21/mariadb-aria:latest' + restart: unless-stopped + environment: + MYSQL_ROOT_PASSWORD: 'npm' + MYSQL_DATABASE: 'npm' + MYSQL_USER: 'npm' + MYSQL_PASSWORD: 'npm' + MARIADB_AUTO_UPGRADE: '1' + volumes: + - ./mysql:/var/lib/mysql + + gitea: + image: gitea/gitea:latest + container_name: gitea + environment: + - USER_UID=1000 + - USER_GID=1000 + volumes: + - ./gitea/data:/data + ports: + - "3000:3000" + - "2222:22" + restart: unless-stopped + + wireguard: + image: lscr.io/linuxserver/wireguard:latest + container_name: wireguard_vpn + cap_add: + - NET_ADMIN + - SYS_MODULE + sysctls: + - net.ipv4.conf.all.src_valid_mark=1 + ports: + - "51820:51820/udp" + volumes: + - wireguard_data:/config + restart: unless-stopped + +volumes: + synapse_data: + npm_data: + npm_letsencrypt: + wireguard_data: + nginx-site: + mysql: diff --git a/first/docker-compose.yml b/first/docker-compose.yml new file mode 100644 index 0000000..a73e7f7 --- /dev/null +++ b/first/docker-compose.yml @@ -0,0 +1,79 @@ +# docker‑compose.yml (версия 3.8 – поддерживает named volumes и сетевые настройки) +version: "3.8" + +services: + synapse: + image: matrixdotorg/synapse:latest + container_name: matrix_synapse + environment: + - SYNAPSE_SERVER_NAME=matrix.emsdata.ru + - SYNAPSE_REPORT_STATS=no + - TZ=Asia/Vladivostok + ports: + - "8008:8008" # HTTP (без TLS), используемый 뒤 federation/client API + - "8448:8448" # блок federation HTTPS (если понадобилось позже) + volumes: + - synapse_data:/data + restart: unless-stopped + + drawio: + image: jgraph/drawio:latest + container_name: drawio + ports: + - "8080:8080" # Draw.io в браузере: http://host:8080 + restart: unless-stopped + + static-nginx: + image: nginx:alpine + container_name: nginx_static + ports: + - "8081:8081" # простой статический nginx без монтирования – откроется дефолтный index + volumes: + - ./nginx-site:/usr/share/nginx/html:ro + restart: unless-stopped + + npm-app: + image: jc21/nginx-proxy-manager:latest + container_name: nginx_proxy_manager + ports: + - "81:81" # админка (login: admin@example.com / password: changeme) + - "80:80" # http proxy + - "443:443" # https proxy + volumes: + - npm_data:/data + - npm_letsencrypt:/etc/letsencrypt + restart: unless-stopped + + gitea: + image: gitea/gitea:latest + container_name: gitea + environment: + - USER_UID=1000 + - USER_GID=1000 + volumes: + - ./gitea/data:/data + ports: + - "3000:3000" + - "2222:22" + restart: unless-stopped + + wireguard: + image: lscr.io/linuxserver/wireguard:latest + container_name: wireguard_vpn + cap_add: + - NET_ADMIN + - SYS_MODULE + sysctls: + - net.ipv4.conf.all.src_valid_mark=1 + ports: + - "51820:51820/udp" + volumes: + - wireguard_data:/config + restart: unless-stopped + +volumes: + synapse_data: + npm_data: + npm_letsencrypt: + wireguard_data: + nginx-site: diff --git a/first_deploy_compose.yml b/first_deploy_compose.yml new file mode 100644 index 0000000..c746877 --- /dev/null +++ b/first_deploy_compose.yml @@ -0,0 +1,40 @@ +- name: Deploy docker-compose stack + hosts: all + become: true + + vars: + compose_dir: /opt/docker + + tasks: + - name: Ensure compose directory exists + file: + path: "{{ compose_dir }}" + state: directory + + - name: Copy docker-compose.yml + copy: + src: first/docker-compose.yml + dest: "{{ compose_dir }}/docker-compose.yml" + +# - name: Copy config.json for Element +# copy: +# src: files/config.json +# dest: "{{ compose_dir }}/element/config.json" +# owner: "{{ ansible_user }}" +# group: "{{ ansible_user }}" +# mode: '0644' +# when: ansible_facts['os_family'] == "Debian" + - name: Pull package + command: docker compose pull + args: + chdir: "{{ compose_dir }}" + + - name: Generate synapse + command: docker compose run --rm synapse generate + args: + chdir: "{{ compose_dir }}" + + - name: Launch docker-compose + command: docker compose up -d + args: + chdir: "{{ compose_dir }}" diff --git a/global/docker-compose.yml b/global/docker-compose.yml new file mode 100644 index 0000000..a73e7f7 --- /dev/null +++ b/global/docker-compose.yml @@ -0,0 +1,79 @@ +# docker‑compose.yml (версия 3.8 – поддерживает named volumes и сетевые настройки) +version: "3.8" + +services: + synapse: + image: matrixdotorg/synapse:latest + container_name: matrix_synapse + environment: + - SYNAPSE_SERVER_NAME=matrix.emsdata.ru + - SYNAPSE_REPORT_STATS=no + - TZ=Asia/Vladivostok + ports: + - "8008:8008" # HTTP (без TLS), используемый 뒤 federation/client API + - "8448:8448" # блок federation HTTPS (если понадобилось позже) + volumes: + - synapse_data:/data + restart: unless-stopped + + drawio: + image: jgraph/drawio:latest + container_name: drawio + ports: + - "8080:8080" # Draw.io в браузере: http://host:8080 + restart: unless-stopped + + static-nginx: + image: nginx:alpine + container_name: nginx_static + ports: + - "8081:8081" # простой статический nginx без монтирования – откроется дефолтный index + volumes: + - ./nginx-site:/usr/share/nginx/html:ro + restart: unless-stopped + + npm-app: + image: jc21/nginx-proxy-manager:latest + container_name: nginx_proxy_manager + ports: + - "81:81" # админка (login: admin@example.com / password: changeme) + - "80:80" # http proxy + - "443:443" # https proxy + volumes: + - npm_data:/data + - npm_letsencrypt:/etc/letsencrypt + restart: unless-stopped + + gitea: + image: gitea/gitea:latest + container_name: gitea + environment: + - USER_UID=1000 + - USER_GID=1000 + volumes: + - ./gitea/data:/data + ports: + - "3000:3000" + - "2222:22" + restart: unless-stopped + + wireguard: + image: lscr.io/linuxserver/wireguard:latest + container_name: wireguard_vpn + cap_add: + - NET_ADMIN + - SYS_MODULE + sysctls: + - net.ipv4.conf.all.src_valid_mark=1 + ports: + - "51820:51820/udp" + volumes: + - wireguard_data:/config + restart: unless-stopped + +volumes: + synapse_data: + npm_data: + npm_letsencrypt: + wireguard_data: + nginx-site: diff --git a/global/synapse/_data/homeserver.db b/global/synapse/_data/homeserver.db new file mode 100644 index 0000000000000000000000000000000000000000..6346e76399fa4701dddb6e893c5461d7eda7a885 GIT binary patch literal 2088960 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 YKmY**5I_I{1Q0*~0R#|0V5q?V0|2`x3;+NC literal 0 HcmV?d00001 diff --git a/global/synapse/_data/homeserver.db-shm b/global/synapse/_data/homeserver.db-shm new file mode 100644 index 0000000000000000000000000000000000000000..fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10 GIT binary patch literal 32768 zcmeIuAr62r3 +ignoreregex = + diff --git a/roles/firewall/tasks/main.yml b/roles/firewall/tasks/main.yml new file mode 100644 index 0000000..36619c9 --- /dev/null +++ b/roles/firewall/tasks/main.yml @@ -0,0 +1,23 @@ +- name: Install ufw + apt: + name: ufw + state: present + +- name: Allow SSH + ufw: + rule: allow + port: 22 + +- name: Allow HTTP/HTTPS + ufw: + rule: allow + port: "{{ item }}" + loop: + - 80 + - 443 + +- name: Deny all others + ufw: + state: enabled + policy: deny + diff --git a/roles/rsync/defaults/main.yml b/roles/rsync/defaults/main.yml new file mode 100644 index 0000000..aa604ea --- /dev/null +++ b/roles/rsync/defaults/main.yml @@ -0,0 +1,3 @@ +rsync_packages: + - rsync + diff --git a/roles/rsync/tasks/main.yml b/roles/rsync/tasks/main.yml new file mode 100644 index 0000000..3cd1f9e --- /dev/null +++ b/roles/rsync/tasks/main.yml @@ -0,0 +1,6 @@ +- name: Install rsync + apt: + name: "{{ rsync_packages }}" + state: present + update_cache: true +