From 6d376af13dfd03958e80dff7248a753fdfbf9dec Mon Sep 17 00:00:00 2001 From: root Date: Thu, 8 Feb 2024 09:27:09 +0100 Subject: [PATCH] gitea docker --- gitea-traefik/README.md | 72 +++++++++++++++++++++ gitea-traefik/files/docker-compose.yml | 80 +++++++++++++++++++++++ gitea-traefik/files/docker-compose2.yml | 43 +++++++++++++ gitea-traefik/files/dynamic.yml | 18 ++++++ gitea-traefik/files/gitea-debug.sh | 4 ++ gitea-traefik/files/gitea-prune.sh | 6 ++ gitea-traefik/files/gitea-start.sh | 2 + gitea-traefik/files/gitea-stop.sh | 2 + gitea-traefik/files/save/README.md | 19 ++++++ gitea-traefik/files/save/savegitea.sh | 22 +++++++ gitea-traefik/files/static.yml | 31 +++++++++ gitea-traefik/tasks/main.yml | 84 +++++++++++++++++++++++++ 12 files changed, 383 insertions(+) create mode 100644 gitea-traefik/README.md create mode 100644 gitea-traefik/files/docker-compose.yml create mode 100644 gitea-traefik/files/docker-compose2.yml create mode 100644 gitea-traefik/files/dynamic.yml create mode 100755 gitea-traefik/files/gitea-debug.sh create mode 100755 gitea-traefik/files/gitea-prune.sh create mode 100755 gitea-traefik/files/gitea-start.sh create mode 100755 gitea-traefik/files/gitea-stop.sh create mode 100644 gitea-traefik/files/save/README.md create mode 100644 gitea-traefik/files/save/savegitea.sh create mode 100644 gitea-traefik/files/static.yml create mode 100644 gitea-traefik/tasks/main.yml diff --git a/gitea-traefik/README.md b/gitea-traefik/README.md new file mode 100644 index 0000000..0e12bec --- /dev/null +++ b/gitea-traefik/README.md @@ -0,0 +1,72 @@ +# Installation de Nextcloud et du proxy inverse Traefik + +## Explication de l'installation de Nextcloud +Afin de pouvoir faire fonctionner Nextcloud et Traefik, il faut mettre en place docker. Dans un premier plan, il vas donc falloir lancer le script **getall** sur **s-adm**. Ensuite dans un second temps, il faudra etre dans le fichier **/nxc** sur **s-nxc** et lancer **docker-compose.yaml**. Pour finir, il faudra ajouter l'authentification LDAP au nextcloud grace a l'AD de **s-win**. + +#

Procédure d'installation

+ +*** +## 1. Installation docker + +Voir: https://gitea.lyc-lecastel.fr/gsb/gsb2024/src/branch/main/roles/docker + +## 2. Fonctionnement du playbook s-nxc + +Le playbook crée le dossier **nxc** à la racine de root. + +Les fichiers "nextcloud.yml" et "traefik.yml" y seront copiés depuis le répertoire "files" du playbook. + +Enfin, dans le répertoire nxc, sont créés les répertoires **certs** et **config**. + +### 2.1 Copie des fichiers + +Le playbook copie les fichiers placés dans "files" et les places dans les bons répertoires. + +### 2.2 Génération du certificat + +Le playbook crée un certificat **x509** grâce à **mkcert**, il s'agit d'une solution permettant de créer des certificats auto-signés. Pour cela, il télécharge **mkcert** sur **s-adm** (utiliser le script **getall**). + +**mkcert** est placé dans : /usr/local/bin/ + +Pour créer le certificat, le playbook exécute les commandes (lancé depuis nxc/) : +``` +/usr/local/bin/mkcert -install # Installe mkcert +/usr/local/bin/mkcert -key-file key.pem -cert-file cert.pem "hôte.domaine.local" "*.domaine.local" #Crée le certificat le DNS spécifié +``` +## 3. Lancement + +Le playbook lance les fichiers "docker-compose" à savoir : nextcloud.yml et traefik.yml qui démarrent les deux piles **docker**. + +Nextcloud est alors fonctionnel avec le proxy inverse **traefik** assurant la redirection vers HTTPS. + + +ATTENTION : Après avoir relancé la VM, executez le script "nxc-start.sh" afin d'installer les piles applicatives. + +Une fois le script terminé, le site est disponible ici : https://s-nxc.gsb.lan + + +## 4. Ajout authentification LDAP + +Pour ajouter l'authentification LDAP au Nextcloud, depuis **n-user** il faut : +* Une fois l'installation de Nextcloud terminé, cliquez sur le profil et "Application" +* Dans vos applications, descendre et activer "LDAP user and group backend" +* Puis cliquer sur le profil, puis "Paramètres d'administration" et dans "Administration" cliquer sur "Intégration LDAP/AD" +* Une fois sur la page d'intégration LDAP/AD : + * Dans Hôte mettre : + > **ldap://s-win.gsb.lan** + * Cliquer sur "Détecter le port" (normalement le port 389 apparait) + * Dans DN Utilisateur mettre : + > **CN=nextcloud,CN=Users,DC=gsb,DC=lan** + * Mot de passe : + > **Azerty1+** + * Et dans "Un DN de base par ligne" : + > **DC=gsb,DC=lan** + * Cliquer sur "Détecter le DN de base" (normalement il apparaitra automatiquement) +* Après la configuration réaliser, cliquer sur "Continuer", puis cliquer 3 fois sur continuer +* Une fois arrivé sur "Groupes", vous pouvez vous déconnecter du compte Admin et vous connecter avec un compte qui est dans l'AD. + +## Contributeurs + +- LG +- CH + diff --git a/gitea-traefik/files/docker-compose.yml b/gitea-traefik/files/docker-compose.yml new file mode 100644 index 0000000..31abe86 --- /dev/null +++ b/gitea-traefik/files/docker-compose.yml @@ -0,0 +1,80 @@ +version: '3' +volumes: + nextcloud: + db: + +networks: + proxy: + external: true + nxc: + external: false + +services: + reverse-proxy: + # The official v2 Traefik docker image + image: traefik:latest + container_name: traefik + # Enables the web UI and tells Traefik to listen to docker + command: --api.insecure=true --providers.docker + ports: + # The HTTP port + - "80:80" + - "443:443" + # The Web UI (enabled by --api.insecure=true) + - "8080:8080" + volumes: + # So that Traefik can listen to the Docker events + - /var/run/docker.sock:/var/run/docker.sock:ro + # Map the static configuration into the container + - ./config/static.yml:/etc/traefik/traefik.yml:ro + # Map the dynamic configuration into the container + - ./config/dynamic.yml:/etc/traefik/dynamic.yml:ro + # Map the certificats into the container + - ./certs:/etc/certs:ro + networks: + - proxy + + db: + image: mariadb:10.5 + container_name: db + restart: always + command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW + volumes: + - db:/var/lib/mysql + networks: + - nxc + environment: + - MYSQL_ROOT_PASSWORD=Azerty1+ + - MYSQL_PASSWORD=Azerty1+ + - MYSQL_DATABASE=nextcloud + - MYSQL_USER=nextcloud + + app: + image: nextcloud + container_name: app + restart: always + #ports: + #- 8081:80 + #links: + depends_on: + - db + volumes: + - ./nextcloud:/var/www/html + networks: + - proxy + - nxc + labels: +# - "traefik.enable=true" + - "traefik.http.routers.app.rule=Host(`s-nxc.gsb.lan`)" + - "traefik.http.routers.app.tls=true" + - "traefik.enable=true" + - "traefik.docker.network=proxy" + # - "traefik.http.routers.app.entrypoints=websecure" + # - "traefik.http.routers.app.rule=Host(`mon.nxc`)" + - "traefik.http.routers.app.service=app-service" + - "traefik.http.services.app-service.loadbalancer.server.port=80" + environment: + - MYSQL_PASSWORD=Azerty1+ + - MYSQL_DATABASE=nextcloud + - MYSQL_USER=nextcloud + - MYSQL_HOST=db diff --git a/gitea-traefik/files/docker-compose2.yml b/gitea-traefik/files/docker-compose2.yml new file mode 100644 index 0000000..99f06d6 --- /dev/null +++ b/gitea-traefik/files/docker-compose2.yml @@ -0,0 +1,43 @@ +version: "3" + +networks: + gitea: + external: false + +services: + server: + image: gitea/gitea:1.21.4 + container_name: gitea + environment: + - USER_UID=1000 + - USER_GID=1000 ++ - GITEA__database__DB_TYPE=mysql ++ - GITEA__database__HOST=db:3306 ++ - GITEA__database__NAME=gitea ++ - GITEA__database__USER=gitea ++ - GITEA__database__PASSWD=gitea + restart: always + networks: + - gitea + volumes: + - ./gitea:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: + - "3000:3000" + - "222:22" ++ depends_on: ++ - db ++ ++ db: ++ image: mysql:8 ++ restart: always ++ environment: ++ - MYSQL_ROOT_PASSWORD=gitea ++ - MYSQL_USER=gitea ++ - MYSQL_PASSWORD=gitea ++ - MYSQL_DATABASE=gitea ++ networks: ++ - gitea ++ volumes: ++ - ./mysql:/var/lib/mysql diff --git a/gitea-traefik/files/dynamic.yml b/gitea-traefik/files/dynamic.yml new file mode 100644 index 0000000..bbf61ad --- /dev/null +++ b/gitea-traefik/files/dynamic.yml @@ -0,0 +1,18 @@ +http: + routers: + traefik: + rule: "Host(`traefik.docker.localhost`)" + service: "api@internal" + tls: + domains: + - main: "docker.localhost" + sans: + - "*.docker.localhost" + - main: "gitea3.gsb.lan" + sans: + - "*.sio.lan" + +tls: + certificates: + - certFile: "/etc/certs/local-cert.pem" + keyFile: "/etc/certs/local-key.pem" diff --git a/gitea-traefik/files/gitea-debug.sh b/gitea-traefik/files/gitea-debug.sh new file mode 100755 index 0000000..190bac2 --- /dev/null +++ b/gitea-traefik/files/gitea-debug.sh @@ -0,0 +1,4 @@ +#!/bin/bash +docker compose down -v +sleep 1 +docker compose up -d diff --git a/gitea-traefik/files/gitea-prune.sh b/gitea-traefik/files/gitea-prune.sh new file mode 100755 index 0000000..a6adaa6 --- /dev/null +++ b/gitea-traefik/files/gitea-prune.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +docker compose down -v +#docker volume prune -f +#docker container prune -f +#docker image prune -f diff --git a/gitea-traefik/files/gitea-start.sh b/gitea-traefik/files/gitea-start.sh new file mode 100755 index 0000000..c5af7d8 --- /dev/null +++ b/gitea-traefik/files/gitea-start.sh @@ -0,0 +1,2 @@ +#!/bin/bash +docker compose up -d diff --git a/gitea-traefik/files/gitea-stop.sh b/gitea-traefik/files/gitea-stop.sh new file mode 100755 index 0000000..3c4d8b2 --- /dev/null +++ b/gitea-traefik/files/gitea-stop.sh @@ -0,0 +1,2 @@ +#!/bin/bash +docker compose down diff --git a/gitea-traefik/files/save/README.md b/gitea-traefik/files/save/README.md new file mode 100644 index 0000000..d5862cf --- /dev/null +++ b/gitea-traefik/files/save/README.md @@ -0,0 +1,19 @@ +Ce script Bash a pour objectif d'automatiser le processus de sauvegarde du serveur NextCloud, qui est exécuté dans un environnement Docker. + +## 1. Activation du mode maintenance : + - La première commande Docker est utilisée pour mettre le serveur NextCloud en mode maintenance. Cette mesure préventive garantit qu'aucune modification n'est apportée pendant la sauvegarde, assurant ainsi la cohérence des données. + +## 2. Copie des fichiers de sauvegarde : + - La commande `cd /root/nxc` change le répertoire de travail vers `/root/nxc`. + - Ensuite, la commande `rsync -Aavx nextcloud/ nextcloud-dirbkp/` effectue une copie récursive des fichiers du dossier `nextcloud/` vers `nextcloud-dirbkp/`. Ceci crée une copie locale des fichiers de NextCloud à des fins de sauvegarde. + +## 3. Sauvegarde de la base de données MySQL/MariaDB : + - La ligne suivante utilise `docker compose exec` pour exécuter la commande `mysqldump` dans le conteneur de la base de données. Cela génère une sauvegarde de la base de données NextCloud qui est enregistrée dans le fichier `nextcloud-sqlbkp.bak`. + +## 4. Désactivation du mode maintenance : + - Après la sauvegarde, une autre commande Docker est utilisée pour désactiver le mode maintenance de NextCloud, permettant ainsi la reprise normale des opérations. + +## 5. Création d'une archive compressée : + - Enfin, la dernière ligne crée une archive compressée `nxc.tgz` qui regroupe la sauvegarde de la base de données (`nextcloud-sqlbkp.bak`) et la copie locale des fichiers NextCloud (`nextcloud-dirbkp/`). + +Ce script simplifie et automatise le processus de sauvegarde de NextCloud en mettant en place la mise en mode maintenance, la copie des fichiers locaux, la sauvegarde de la base de données, la désactivation du mode maintenance, et la création d'une archive compressée consolidant l'ensemble des éléments de sauvegarde. diff --git a/gitea-traefik/files/save/savegitea.sh b/gitea-traefik/files/save/savegitea.sh new file mode 100644 index 0000000..18fa81e --- /dev/null +++ b/gitea-traefik/files/save/savegitea.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# Mettre le serveur NextCloud en mode maintenance +docker compose exec -u www-data app php occ maintenance:mode --on + +# Extraire les dossiers de sauvegarde +cd /root/nxc + +# Copie locale de la sauvegarde +rsync -Aavx nextcloud/ nextcloud-dirbkp/ + +# Base de données MySQL/MariaDB +docker compose exec db mysqldump -u nextcloud -pAzerty1+ nextcloud > nextcloud-sqlbkp.bak + +# Sortir du mode maintenance +docker compose exec -u www-data app php occ maintenance:mode --off + +# création d'une archive +tar cvfz nxc.tgz nextcloud-sqlbkp.bak nextcloud-dirbkp + + + diff --git a/gitea-traefik/files/static.yml b/gitea-traefik/files/static.yml new file mode 100644 index 0000000..cc336a2 --- /dev/null +++ b/gitea-traefik/files/static.yml @@ -0,0 +1,31 @@ +global: + sendAnonymousUsage: false + +api: + dashboard: true + insecure: true + +providers: + docker: + endpoint: "unix:///var/run/docker.sock" + watch: true + exposedByDefault: false + + file: + filename: /etc/traefik/dynamic.yml + watch: true + +log: + level: INFO + format: common + +entryPoints: + http: + address: ":80" + http: + redirections: + entryPoint: + to: https + scheme: https + https: + address: ":443" diff --git a/gitea-traefik/tasks/main.yml b/gitea-traefik/tasks/main.yml new file mode 100644 index 0000000..c4031e5 --- /dev/null +++ b/gitea-traefik/tasks/main.yml @@ -0,0 +1,84 @@ +--- +- name: Creation du repertoire de nextcloud et traefik + file: + path: /root/gitea + state: directory + +- name: Creation du repertoire gitea/config + file: + path: /root/gitea/config + state: directory + +- name: Creation du repertoire gitea/certs + file: + path: /root/gitea/certs + state: directory + +- name: Copie de static.yml + copy: + src: static.yml + dest: /root/gitea/config + +- name: Copie de dynamic.yml + copy: + src: dynamic.yml + dest: /root/gitea/config + +- name: Copie de docker-compose.yml + copy: + src: docker-compose.yml + dest: /root/gitea + +- name: Copie de gitea-stop.sh + copy: + src: gitea-stop.sh + dest: /root/gitea + mode: '0755' + +- name: Copie de gitea-debug.sh + copy: + src: gitea-debug.sh + dest: /root/gitea + mode: '0755' + +- name: Copie de gitea-start.sh + copy: + src: gitea-start.sh + dest: /root/gitea + mode: '0755' + +- name: Copie de gitea-prune.sh + copy: + src: gitea-prune.sh/ + dest: /root/gitea + mode: '0755' + +- name: Telechargement mkcert + get_url: + url: http://depl/gsbstore/mkcert + dest: /usr/local/bin + mode: '0755' + +- name: Initialisation mkcert + command: /usr/local/bin/mkcert -install + args: + chdir: /root/gitea + +- name: Creation certificats + command: /usr/local/bin/mkcert -cert-file certs/local-cert.pem -key-file certs/local-key.pem "gitea3.sio.lan" "*.sio.lan" + args: + chdir: /root/gitea + +- name: vérification si le réseau proxy existe + command: docker network ls --filter name=proxy + register: net_proxy + +- name: création du réseau proxy + command: docker network create proxy +# when: net_proxy.stdout.find('proxy') == -1 + when: "'proxy' not in net_proxy.stdout" + + #- name: Démarrage du docker-compose... + #command: /bin/bash docker-compose up -d + #args: + #chdir: /root/nxc