5.4 KiB
Déploiement sur SLDOKP03
Avant de commencer
- Un projet Harbor nommé
limieravec un compte robot en écriture. - Une application Authentik configurée (voir
03-authentik.md). - Le réseau Docker externe
traefik_front_networkexiste déjà.
1. Dépôts Gitea
Un seul dépôt suffit : Tips-Of-Mine/limier. Secrets et variables à déclarer
dans ses réglages Actions :
| Nom | Type | Valeur |
|---|---|---|
HARBOR_REGISTRY |
variable | registry.tips-of-mine.com |
HARBOR_USERNAME |
secret | compte robot Harbor |
HARBOR_PASSWORD |
secret | jeton du compte robot |
2. Première publication
git tag v1.0.0
git push origin v1.0.0
Le workflow release.yml vérifie d'abord que l'étiquette, pyproject.toml et
package.json annoncent la même version — une divergence produirait des images
dont /api/sante ment sur ce qui tourne — puis publie trois images vers Harbor.
3. Installation
mkdir -p /opt/limier && cd /opt/limier
# déposer deploy/docker-compose.yml et deploy/.env.example
cp .env.example .env
Générer les trois secrets :
cd /opt/limier
sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 24)|" .env
sed -i "s|^LIMIER_SESSION_SECRET=.*|LIMIER_SESSION_SECRET=$(openssl rand -hex 32)|" .env
sed -i "s|^LIMIER_IDENTIFIER_HASH_PEPPER=.*|LIMIER_IDENTIFIER_HASH_PEPPER=$(openssl rand -hex 32)|" .env
Les trois secrets sont écrits directement dans .env sans passer par le
terminal : rien ne reste dans l'historique du shell.
Hexadécimal et non base64 pour
POSTGRES_PASSWORD. Ce mot de passe est injecté tel quel dans l'URL de connexion. Les caractères/et+que produit base64 rendent cette URL invalide, et l'API refuse alors de démarrer sur une erreur de validation peu explicite.
Le poivre ne se change pas à la légère. Toutes les empreintes d'identifiants en dépendent. Le modifier rend inopérants les blocages d'effacement déjà enregistrés : les empreintes ne correspondront plus. Sa place est dans ton Vault / OpenBao, pas dans un fichier.
Aucun fichier dynamique Traefik à déposer : le middleware de sécurité est
déclaré dans les étiquettes du service limier-web, comme sur Gitea. La pile
est autonome.
C'est un choix payé d'expérience. Un routeur qui référence un middleware
@fileabsent est désactivé en silence par Traefik : la requête retombe en 404 sans qu'aucun journal ne mentionne le middleware manquant. Une dépendance externe invisible est exactement ce qu'il ne faut pas.
cloudflarewarp@file et my-crowdsec-bouncer-traefik-plugin@file restent
attachés à ton entryPoint https et s'appliquent automatiquement.
Les priorités de routeurs sont explicites : l'API à 60, l'interface à 50.
Sans cela, la règle Host() seule de limier-web capterait aussi /api.
4. Droits du volume de la base de sites
Les conteneurs tournent en utilisateur non privilégié (UID 1000). Docker crée
les répertoires de montage en root, et ce montage masque les droits posés
dans l'image : le worker ne peut alors pas y écrire la base de sites mise à
jour, et reste sur les 3 302 sites livrés dans le paquet au lieu des 5 400+
disponibles en amont.
mkdir -p /opt/limier/data/sites
chown -R 1000:1000 /opt/limier/data/sites
Le symptôme, si on l'oublie : copie_base_sites_impossible avec
Permission denied dans le journal du worker, et base_sites_prete annonçant
3 302 sites au lieu de 5 442.
5. Migrations puis démarrage
docker compose run --rm limier-api alembic upgrade head
docker compose up -d
docker compose ps
curl -s https://limier.tips-of-mine.com/api/pret | jq
/api/pret vérifie réellement PostgreSQL, Redis, la base de sites et la
complétude de la configuration. C'est la sonde à regarder quand « ça ne marche
pas ». /api/sante est la sonde du healthcheck Docker, volontairement triviale.
6. Modules optionnels
# holehe — lire services/holehe/app.py avant d'activer
docker compose --profile holehe up -d
# puis dans .env : LIMIER_HOLEHE_SERVICE_URL=http://limier-holehe:8080
# contournement Cloudflare
docker compose --profile flaresolverr up -d
# puis dans .env : LIMIER_FLARESOLVERR_URL=http://limier-flaresolverr:8191
Sans --profile, ces services ne démarrent pas : l'installation par défaut
reste minimale.
7. Mise à jour
cd /opt/limier
TAG=1.1.0 docker compose pull && TAG=1.1.0 docker compose up -d
docker compose run --rm limier-api alembic upgrade head
Watchtower est activé sur les conteneurs, mais le TAG est épinglé dans le
compose : il ne suivra donc pas latest tout seul. C'est voulu — une montée de
version doit passer par une étiquette et une migration explicites.
Volumes
| Chemin | Contenu |
|---|---|
./data/postgres |
base de données |
./data/sites |
base de sites corrigée par l'auto-contrôle nocturne |
Redis n'a pas de volume : il ne porte que la file et la progression. Les données durables sont dans PostgreSQL. Le perdre coûte au pire les recherches en cours.
Sauvegarde
docker compose exec -T limier-postgres pg_dump -U limier limier | gzip > limier-$(date +%F).sql.gz