Merci @Mrt1 pour ta réponse.
Sur le point de me plonger dans la doc de Traefik qui semble répondre à mon problème, je me suis dit que j’allais tout de même tenter quelque chose avec Docker et le fichier compose.yml. J’ai toujours pensé que la solution pouvait être là et j’ai tout remis à plat et mis mes neurones en marche. Résultat, j’ai trouvé une solution « simple », qui ne demande que très peu de manipulations et qui s’utilise, comme moi, avec un serveur de type Hetzner et une image avec Docker directement installé (cf le cours sur Docker de @mbritto). En fait, j’adore développer et écrire du code, mais je n’aime pas passer des heures à configurer un serveur, ce n’est pas mon rayon.
Il suffit donc simplement de définir les fichiers compose.yml et Caddyfile comme je le montre ci-dessous. Dans cet exemple il y a 2 serveurs en parallèle, mais on peut très bien imaginer augmenter le nombre en fonction des ressources disponibles et nécessaires pour chacun d’eux.
Le fichier compose.yml :
version: "3"
services:
caddy:
image: caddy:2.7
restart: always
cap_add:
- NET_ADMIN
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- ./caddy/Caddyfile:/etc/caddy/Caddyfile
- ./caddy/data:/data
- ./caddy/config:/config
database1:
restart: always
image: postgis/postgis:13-master
volumes:
- ./data/database1:/var/lib/postgresql/data
environment:
POSTGRES_USER: "directus"
POSTGRES_PASSWORD_FILE: "/run/secrets/database_password1"
POSTGRES_DB: "directus"
PGPORT: 61432
secrets:
- database_password1
database2:
restart: always
image: postgis/postgis:13-master
volumes:
- ./data/database2:/var/lib/postgresql/data
environment:
POSTGRES_USER: "directus"
POSTGRES_PASSWORD_FILE: "/run/secrets/database_password2"
POSTGRES_DB: "directus"
PGPORT: 62432
secrets:
- database_password2
directus1:
restart: always
image: directus/directus:10.10.4
ports:
- 8155:8155
volumes:
- ./directus1/uploads:/directus/uploads
depends_on:
- database1
environment:
KEY: "08ff164b-723a-428f-b89f-7a010264a72f"
SECRET_FILE: "/run/secrets/directus_secret_key1"
LOG_LEVEL: "info"
PORT: 8155
DB_CLIENT: "pg"
DB_HOST: "database1"
DB_PORT: "61432"
DB_DATABASE: "directus"
DB_USER: "directus"
DB_PASSWORD_FILE: "/run/secrets/database_password1"
ADMIN_EMAIL: "[email protected]"
ADMIN_PASSWORD_FILE: "/run/secrets/directus_admin_password1"
PUBLIC_URL: "https://api1.myserver.com"
secrets:
- database_password1
- directus_secret_key1
- directus_admin_password1
directus2:
restart: always
image: directus/directus:10.10.4
ports:
- 8255:8255
volumes:
- ./directus2/uploads:/directus/uploads
depends_on:
- database2
environment:
KEY: "0c787822-d115-47e4-8984-c5f14298d24b"
SECRET_FILE: "/run/secrets/directus_secret_key2"
LOG_LEVEL: "info"
PORT: 8255
DB_CLIENT: "pg"
DB_HOST: "database2"
DB_PORT: "62432"
DB_DATABASE: "directus"
DB_USER: "directus"
DB_PASSWORD_FILE: "/run/secrets/database_password2"
ADMIN_EMAIL: "[email protected]"
ADMIN_PASSWORD_FILE: "/run/secrets/directus_admin_password2"
PUBLIC_URL: "https://api2.myserver.com"
secrets:
- database_password2
- directus_secret_key2
- directus_admin_password2
secrets:
# server 1
database_password1:
file: ./secrets1/database_password.txt
directus_secret_key1:
file: ./secrets1/directus_secret_key.txt
directus_admin_password1:
file: ./secrets1/directus_admin_password.txt
# server 2
database_password2:
file: ./secrets2/database_password.txt
directus_secret_key2:
file: ./secrets2/directus_secret_key.txt
directus_admin_password2:
file: ./secrets2/directus_admin_password.txt
Le fichier Caddyfile (que je mets dans le sous-répertoire ./caddy) :
api1.myserver.com {
reverse_proxy http://directus1:8155
}
api2.myserver.com {
reverse_proxy http://directus2:8255
}
Je crée également 2 dossiers « secrets1 » et « secrets2 » à la racine, soit un dossier par serveur, contenant chacun les fichiers .txt avec les mots de passe respectifs :
- database_password.txt
- directus_secret_key.txt
- directus_admin_password.txt
Ne pas oublier de donner les droits d’écriture aux sous-dossiers « uploads » dans les dossiers « ./directus1 » et « ./directus2 » qui sont créés lors du déploiement du fichier compose.yml.
Inutile aussi de rappeler de faire pointer les DNS api1.myserver.com et api2.myserver.com vers l’adresse IP du serveur.
Voilà j’espère donc que cela servira à quelques-uns, notamment pour tester différents projets en cours de développement. C’est bien entendu encore perfectible, mais je suis déjà très content de ce résultat, qui va bien me faciliter la vie
Je vais essayer de rédiger un petit tuto, en détaillant la création étape par étape. Reste à savoir encore où l’héberger.
++