Deploiement Hetzner : script de redeploiement et generation sure du .env
- deploy/deploy.sh : rsync + build distant + attente du healthcheck. Le build tourne sur le serveur, la machine de dev n'a pas besoin d'un JDK 21 et la difference d'architecture arm64/x86_64 disparait. - .env.example : la procedure recommandait un `sed -i s/CHANGEME/.../` global. Le motif apparaissant aussi dans le commentaire au-dessus, le mot de passe genere s'y recopiait en clair. Remplace par un append cible sur la seule ligne DB_PASSWORD. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
63ead8a966
commit
94e893af97
3 changed files with 59 additions and 4 deletions
10
.env.example
10
.env.example
|
|
@ -1,5 +1,11 @@
|
|||
# Copier en .env et renseigner avant le premier demarrage :
|
||||
# cp .env.example .env && sed -i "s/CHANGEME/$(openssl rand -hex 24)/" .env
|
||||
# Generer le .env avant le premier demarrage :
|
||||
#
|
||||
# grep -v '^DB_PASSWORD=' .env.example > .env
|
||||
# printf 'DB_PASSWORD=%s\n' "$(openssl rand -hex 24)" >> .env
|
||||
# chmod 600 .env
|
||||
#
|
||||
# Ne pas faire un sed global sur CHANGEME : le motif apparait aussi dans ce
|
||||
# commentaire, et le mot de passe genere s'y retrouverait en clair.
|
||||
|
||||
# Mot de passe PostgreSQL. Obligatoire : le compose refuse de demarrer sans.
|
||||
DB_PASSWORD=CHANGEME
|
||||
|
|
|
|||
|
|
@ -219,8 +219,8 @@ marche sur la première requête.
|
|||
### Tout en conteneurs
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
sed -i '' "s/CHANGEME/$(openssl rand -hex 24)/" .env # macOS ; sinon sed -i
|
||||
grep -v '^DB_PASSWORD=' .env.example > .env
|
||||
printf 'DB_PASSWORD=%s\n' "$(openssl rand -hex 24)" >> .env && chmod 600 .env
|
||||
|
||||
docker compose up -d --build
|
||||
docker compose logs -f app
|
||||
|
|
|
|||
49
deploy/deploy.sh
Executable file
49
deploy/deploy.sh
Executable file
|
|
@ -0,0 +1,49 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# Redeploiement sur le serveur Hetzner.
|
||||
#
|
||||
# ./deploy/deploy.sh
|
||||
#
|
||||
# Le build tourne sur le serveur, dans le conteneur Maven : la machine de dev
|
||||
# n'a pas besoin d'un JDK 21, et l'architecture (arm64 ici, x86_64 la-bas) ne
|
||||
# pose pas de probleme.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
HOST="${DEPLOY_HOST:-hetzner}"
|
||||
REMOTE_DIR="${DEPLOY_DIR:-/opt/iot-alarm-system}"
|
||||
LOCAL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
|
||||
echo "==> Synchronisation vers ${HOST}:${REMOTE_DIR}"
|
||||
# --delete sans toucher au .env : il contient le mot de passe de la base et
|
||||
# n'existe que sur le serveur.
|
||||
rsync -az --delete \
|
||||
--exclude 'target/' \
|
||||
--exclude '.git/' \
|
||||
--exclude '.env' \
|
||||
--exclude '.DS_Store' \
|
||||
"${LOCAL_DIR}/" "${HOST}:${REMOTE_DIR}/"
|
||||
|
||||
echo "==> Build de l'image (tests unitaires + ArchUnit inclus)"
|
||||
ssh "${HOST}" "cd ${REMOTE_DIR} && docker compose build app"
|
||||
|
||||
echo "==> Redemarrage"
|
||||
ssh "${HOST}" "cd ${REMOTE_DIR} && docker compose up -d"
|
||||
|
||||
echo "==> Attente du healthcheck"
|
||||
for i in $(seq 1 30); do
|
||||
status=$(ssh "${HOST}" "docker inspect -f '{{.State.Health.Status}}' iot-alarm-app 2>/dev/null || echo absent")
|
||||
if [ "${status}" = "healthy" ]; then
|
||||
echo "==> Application saine"
|
||||
ssh "${HOST}" "docker exec iot-alarm-app wget -qO- http://localhost:8080/api/v1/alarm/status"
|
||||
echo
|
||||
exit 0
|
||||
fi
|
||||
printf '.'
|
||||
sleep 5
|
||||
done
|
||||
|
||||
echo
|
||||
echo "!! L'application n'est pas devenue saine. Logs :" >&2
|
||||
ssh "${HOST}" "cd ${REMOTE_DIR} && docker compose logs --tail 60 app" >&2
|
||||
exit 1
|
||||
Loading…
Add table
Add a link
Reference in a new issue