Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a6ca909a73 | ||
| 2c1ddb2126 | |||
|
|
c64b125047 | ||
| 85c7c97dc3 | |||
|
|
1705a3688b | ||
|
|
34b36f5d14 |
@@ -4,7 +4,7 @@
|
||||
.env.test
|
||||
infra/dev/
|
||||
infra/prod/docker-compose.yml
|
||||
infra/prod/deploy.sh
|
||||
infra/prod/deploy.sh.example
|
||||
infra/prod/.env.example
|
||||
frontend/node_modules
|
||||
frontend/.nuxt
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
parameters:
|
||||
app.version: '1.9.13'
|
||||
app.version: '1.9.16'
|
||||
|
||||
@@ -42,7 +42,7 @@ FROM php:8.4-fpm AS production
|
||||
|
||||
RUN apt-get update && apt-get install -y \
|
||||
libicu-dev libpq-dev libpng-dev libzip-dev libxml2-dev \
|
||||
nginx supervisor \
|
||||
nginx supervisor qpdf \
|
||||
&& docker-php-ext-install -j$(nproc) intl pdo_pgsql zip gd opcache \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
@@ -64,6 +64,7 @@ RUN rm -f /etc/nginx/sites-enabled/default
|
||||
COPY infra/prod/supervisord.conf /etc/supervisor/conf.d/app.conf
|
||||
COPY infra/prod/nginx.conf /etc/nginx/sites-enabled/inventory.conf
|
||||
COPY infra/prod/maintenance.html /var/www/html/public/maintenance.html
|
||||
COPY infra/prod/deploy.sh /var/www/html/infra/prod/deploy.sh
|
||||
|
||||
# Backend from stage 1
|
||||
COPY --from=backend-build /app /var/www/html
|
||||
|
||||
@@ -6,6 +6,28 @@ cd "$(dirname "$0")"
|
||||
TAG="${1:-latest}"
|
||||
export INVENTORY_IMAGE_TAG="$TAG"
|
||||
|
||||
# --- Self-update from Docker image ---
|
||||
# After pulling the new image, extracts this script from it.
|
||||
# If the version inside the image differs, replaces itself and re-executes.
|
||||
if [ "${_DEPLOY_UPDATED:-0}" != "1" ]; then
|
||||
echo "==> Pulling image..."
|
||||
sudo docker compose pull
|
||||
|
||||
SELF="$(realpath "$0")"
|
||||
TEMP_SCRIPT="$(mktemp)"
|
||||
sudo docker compose run --rm --no-deps -T --entrypoint cat app /var/www/html/infra/prod/deploy.sh > "$TEMP_SCRIPT" 2>/dev/null || true
|
||||
|
||||
if [ -s "$TEMP_SCRIPT" ] && ! diff -q "$SELF" "$TEMP_SCRIPT" > /dev/null 2>&1; then
|
||||
echo "==> deploy.sh updated from image, re-executing..."
|
||||
cp "$TEMP_SCRIPT" "$SELF"
|
||||
chmod +x "$SELF"
|
||||
rm -f "$TEMP_SCRIPT"
|
||||
export _DEPLOY_UPDATED=1
|
||||
exec "$SELF" "$@"
|
||||
fi
|
||||
rm -f "$TEMP_SCRIPT"
|
||||
fi
|
||||
|
||||
echo "==> Deploying inventory:${TAG}..."
|
||||
|
||||
# Fix storage directory structure (one-time migration fix)
|
||||
@@ -24,8 +46,11 @@ sudo chown -R www-data:www-data storage
|
||||
echo "==> Enabling maintenance mode..."
|
||||
touch maintenance.on
|
||||
|
||||
echo "==> Pulling image..."
|
||||
sudo docker compose pull
|
||||
# Pull image (skip if already pulled during self-update)
|
||||
if [ "${_DEPLOY_UPDATED:-0}" != "1" ]; then
|
||||
echo "==> Pulling image..."
|
||||
sudo docker compose pull
|
||||
fi
|
||||
|
||||
echo "==> Starting container..."
|
||||
sudo docker compose up -d
|
||||
|
||||
4
makefile
4
makefile
@@ -157,6 +157,10 @@ fixtures-load:
|
||||
$(DOCKER_COMPOSE) exec -T db psql -U $(POSTGRES_USER) -d $(POSTGRES_DB) -c "SET session_replication_role = DEFAULT;"
|
||||
@echo "Fixtures loaded!"
|
||||
|
||||
pull-prod-db:
|
||||
@echo "Pulling production database..."
|
||||
./scripts/pull-prod-db.sh
|
||||
|
||||
fixtures-reset:
|
||||
@echo "Resetting database and loading fixtures..."
|
||||
$(DOCKER_COMPOSE) exec -T db psql -U $(POSTGRES_USER) -d $(POSTGRES_DB) -c "DO \$$\$$ DECLARE r RECORD; BEGIN FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = 'public' AND tablename != 'doctrine_migration_versions') LOOP EXECUTE 'TRUNCATE TABLE ' || quote_ident(r.tablename) || ' CASCADE'; END LOOP; END \$$\$$;"
|
||||
|
||||
51
scripts/pull-prod-db.sh
Executable file
51
scripts/pull-prod-db.sh
Executable file
@@ -0,0 +1,51 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# ============================================================
|
||||
# pull-prod-db.sh — Importe la BDD inventory_prod de prod en local
|
||||
# ============================================================
|
||||
#
|
||||
# Usage : ./scripts/pull-prod-db.sh [SSH_HOST]
|
||||
#
|
||||
# SSH_HOST : alias ou adresse du serveur prod (default: prod)
|
||||
#
|
||||
# Prérequis :
|
||||
# - Accès SSH au serveur de prod
|
||||
# - Docker en cours sur la prod (conteneur "postgres", user "admin")
|
||||
# - Docker compose Inventory en cours en local (make start)
|
||||
|
||||
SSH_HOST="${1:-matt@prod.malio-dev.fr}"
|
||||
PROD_CONTAINER="postgres"
|
||||
PROD_DB="inventory_prod"
|
||||
PROD_USER="admin"
|
||||
|
||||
LOCAL_COMPOSE="docker compose --env-file infra/dev/.env.docker"
|
||||
LOCAL_DB_SERVICE="db"
|
||||
LOCAL_DB="inventory"
|
||||
LOCAL_USER="root"
|
||||
|
||||
DUMP_FILE="/tmp/inventory_prod_dump.sql"
|
||||
|
||||
echo "==> Dump de ${PROD_DB} depuis ${SSH_HOST}..."
|
||||
ssh "${SSH_HOST}" "docker exec ${PROD_CONTAINER} pg_dump -U ${PROD_USER} -d ${PROD_DB} \
|
||||
--no-owner --no-privileges --clean --if-exists" > "${DUMP_FILE}"
|
||||
|
||||
DUMP_SIZE=$(du -h "${DUMP_FILE}" | cut -f1)
|
||||
echo "==> Dump recu : ${DUMP_FILE} (${DUMP_SIZE})"
|
||||
|
||||
echo "==> Reset de la BDD locale (${LOCAL_DB})..."
|
||||
${LOCAL_COMPOSE} exec -T ${LOCAL_DB_SERVICE} psql -U ${LOCAL_USER} -d postgres -c \
|
||||
"SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='${LOCAL_DB}' AND pid <> pg_backend_pid();" > /dev/null 2>&1 || true
|
||||
${LOCAL_COMPOSE} exec -T ${LOCAL_DB_SERVICE} psql -U ${LOCAL_USER} -d postgres -c \
|
||||
"DROP DATABASE IF EXISTS ${LOCAL_DB};"
|
||||
${LOCAL_COMPOSE} exec -T ${LOCAL_DB_SERVICE} psql -U ${LOCAL_USER} -d postgres -c \
|
||||
"CREATE DATABASE ${LOCAL_DB};"
|
||||
|
||||
echo "==> Import du dump dans la BDD locale..."
|
||||
${LOCAL_COMPOSE} exec -T ${LOCAL_DB_SERVICE} psql -U ${LOCAL_USER} -d ${LOCAL_DB} < "${DUMP_FILE}"
|
||||
|
||||
echo "==> Nettoyage..."
|
||||
rm -f "${DUMP_FILE}"
|
||||
|
||||
echo ""
|
||||
echo "Done! BDD locale '${LOCAL_DB}' synchronisee avec '${PROD_DB}' de prod."
|
||||
Reference in New Issue
Block a user