diff --git a/docker/docker-compose.multisite.yml b/docker/docker-compose.multisite.yml index 1fa4c61..3cd87ba 100755 --- a/docker/docker-compose.multisite.yml +++ b/docker/docker-compose.multisite.yml @@ -16,7 +16,7 @@ services: - "443:443" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - - ${TRAEFIK_LETSENCRYPT_PATH:-/srv/netgescon/traefik/letsencrypt}:/letsencrypt + - netgescon_letsencrypt:/letsencrypt networks: - netgescon_edge @@ -49,11 +49,11 @@ services: NETGESCON_PREUPDATE_BACKUP_VISIBLE: ${PROD_PREUPDATE_BACKUP_VISIBLE:-true} NETGESCON_PREUPDATE_DRIVE_ENABLED: ${PROD_PREUPDATE_DRIVE_ENABLED:-false} NETGESCON_PREUPDATE_REQUIRE_DRIVE: ${PROD_PREUPDATE_REQUIRE_DRIVE:-false} - DB_CONNECTION: mysql - DB_HOST: prod_db - DB_PORT: 3306 - DB_DATABASE: ${PROD_DB_DATABASE} - DB_USERNAME: ${PROD_DB_USERNAME} + DB_CONNECTION: ${PROD_DB_CONNECTION:-pgsql} + DB_HOST: ${PROD_DB_HOST:-prod_pgsql} + DB_PORT: ${PROD_DB_PORT:-5432} + DB_DATABASE: ${PROD_DB_DATABASE:-netgescon_prod} + DB_USERNAME: ${PROD_DB_USERNAME:-netgescon_prod} DB_PASSWORD: ${PROD_DB_PASSWORD} RUN_MIGRATIONS: ${PROD_RUN_MIGRATIONS:-true} MIGRATIONS_STRICT: "false" @@ -62,13 +62,22 @@ services: WAIT_FOR_DB: "true" DISABLE_SCHEMA_LOAD: "true" MYSQL_SSL_VERIFY_SERVER_CERT: "FALSE" + MAIL_MAILER: smtp + MAIL_HOST: smtp.gmail.com + MAIL_PORT: 587 + MAIL_ENCRYPTION: tls + MAIL_USERNAME: netgescon@gmail.com + MAIL_PASSWORD: ${MAIL_PASSWORD:-pecd izll jlno vros} + MAIL_FROM_ADDRESS: michele@netgescon.it + MAIL_FROM_NAME: NetGescon + QUEUE_CONNECTION: sync volumes: - - ${PROD_STORAGE_PATH:-/srv/netgescon/prod/storage}:/var/www/storage - - ${PROD_CACHE_PATH:-/srv/netgescon/prod/bootstrap-cache}:/var/www/bootstrap/cache - - ${PROD_PUBLIC_PATH:-/srv/netgescon/prod/public}:/var/www/public + - prod_storage:/var/www/storage + - prod_cache:/var/www/bootstrap/cache + - prod_public:/var/www/public - ${LEGACY_ARCHIVES_PATH:-/mnt/gescon-archives/gescon}:/mnt/gescon-archives/gescon:ro depends_on: - - prod_db + - prod_pgsql - prod_redis networks: - netgescon_edge @@ -78,7 +87,7 @@ services: container_name: netgescon_prod_nginx restart: unless-stopped volumes: - - ${PROD_PUBLIC_PATH:-/srv/netgescon/prod/public}:/var/www/public:ro + - prod_public:/var/www/public:ro - ./nginx/prod.conf:/etc/nginx/conf.d/default.conf:ro depends_on: - prod_app @@ -96,6 +105,19 @@ services: networks: - netgescon_edge + prod_pgsql: + image: postgres:16-alpine + container_name: netgescon_prod_pgsql + restart: unless-stopped + environment: + POSTGRES_DB: ${PROD_DB_DATABASE:-netgescon_prod} + POSTGRES_USER: ${PROD_DB_USERNAME:-netgescon_prod} + POSTGRES_PASSWORD: ${PROD_DB_PASSWORD} + volumes: + - prod_pgsql:/var/lib/postgresql/data + networks: + - netgescon_edge + prod_db: image: mysql:8.0 container_name: netgescon_prod_db @@ -107,7 +129,7 @@ services: MYSQL_PASSWORD: ${PROD_DB_PASSWORD} MYSQL_ROOT_PASSWORD: ${PROD_DB_ROOT_PASSWORD} volumes: - - ${PROD_DB_DATA_PATH:-/srv/netgescon/prod/mysql}:/var/lib/mysql + - prod_db:/var/lib/mysql - ./mysql/init.sql:/docker-entrypoint-initdb.d/01-init.sql:ro networks: - netgescon_edge @@ -117,7 +139,7 @@ services: container_name: netgescon_prod_redis restart: unless-stopped volumes: - - ${PROD_REDIS_DATA_PATH:-/srv/netgescon/prod/redis}:/data + - prod_redis:/data networks: - netgescon_edge @@ -162,10 +184,19 @@ services: SEEDERS_STRICT: "false" DISABLE_SCHEMA_LOAD: "true" MYSQL_SSL_VERIFY_SERVER_CERT: "FALSE" + MAIL_MAILER: smtp + MAIL_HOST: smtp.gmail.com + MAIL_PORT: 587 + MAIL_ENCRYPTION: tls + MAIL_USERNAME: netgescon@gmail.com + MAIL_PASSWORD: ${MAIL_PASSWORD:-pecd izll jlno vros} + MAIL_FROM_ADDRESS: michele@netgescon.it + MAIL_FROM_NAME: NetGescon + QUEUE_CONNECTION: sync volumes: - - ${DEMO_STORAGE_PATH:-/srv/netgescon/demo/storage}:/var/www/storage - - ${DEMO_CACHE_PATH:-/srv/netgescon/demo/bootstrap-cache}:/var/www/bootstrap/cache - - ${DEMO_PUBLIC_PATH:-/srv/netgescon/demo/public}:/var/www/public + - demo_storage:/var/www/storage + - demo_cache:/var/www/bootstrap/cache + - demo_public:/var/www/public - ${LEGACY_ARCHIVES_PATH:-/mnt/gescon-archives/gescon}:/mnt/gescon-archives/gescon:ro depends_on: - demo_db @@ -206,7 +237,7 @@ services: MYSQL_PASSWORD: ${DEMO_DB_PASSWORD} MYSQL_ROOT_PASSWORD: ${DEMO_DB_ROOT_PASSWORD} volumes: - - ${DEMO_DB_DATA_PATH:-/srv/netgescon/demo/mysql}:/var/lib/mysql + - demo_db:/var/lib/mysql - ./mysql/init.sql:/docker-entrypoint-initdb.d/01-init.sql:ro networks: - netgescon_edge @@ -216,7 +247,7 @@ services: container_name: netgescon_demo_redis restart: unless-stopped volumes: - - ${DEMO_REDIS_DATA_PATH:-/srv/netgescon/demo/redis}:/data + - demo_redis:/data networks: - netgescon_edge @@ -239,6 +270,20 @@ services: networks: - netgescon_edge +volumes: + netgescon_letsencrypt: + prod_pgsql: + prod_db: + prod_storage: + prod_cache: + prod_public: + prod_redis: + demo_db: + demo_storage: + demo_cache: + demo_public: + demo_redis: + networks: netgescon_edge: driver: bridge diff --git a/scripts/update-multisite.sh b/scripts/update-multisite.sh index 9c6fa40..aac57f0 100755 --- a/scripts/update-multisite.sh +++ b/scripts/update-multisite.sh @@ -4,7 +4,7 @@ set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" ENV_FILE="${ENV_FILE:-$ROOT_DIR/docker/.env.multisite}" COMPOSE_FILE="$ROOT_DIR/docker/docker-compose.multisite.yml" -GIT_REF="${GIT_REF:-main}" +GIT_REF="${GIT_REF:-stabilization/205-zero}" upsert_env_var() { local key="$1" @@ -48,8 +48,14 @@ fi "$ROOT_DIR/scripts/ops/netgescon-prepare-multisite-host-paths.sh" --env-file "$ENV_FILE" mkdir -p "$ROOT_DIR/storage/backups" MYSQLDUMP_FLAGS="--single-transaction --skip-lock-tables" -docker exec netgescon_prod_db sh -lc "mysqldump $MYSQLDUMP_FLAGS -u root -p\"$PROD_DB_ROOT_PASSWORD\" \"$PROD_DB_DATABASE\"" > "$ROOT_DIR/storage/backups/prod_$(date +%F_%H%M%S).sql" -docker exec netgescon_demo_db sh -lc "mysqldump $MYSQLDUMP_FLAGS -u root -p\"$DEMO_DB_ROOT_PASSWORD\" \"$DEMO_DB_DATABASE\"" > "$ROOT_DIR/storage/backups/demo_$(date +%F_%H%M%S).sql" +if docker ps --format '{{.Names}}' | grep -q "^netgescon_prod_pgsql$"; then + docker exec netgescon_prod_pgsql sh -lc "pg_dump -U \"${PROD_DB_USERNAME:-netgescon_prod}\" \"${PROD_DB_DATABASE:-netgescon_prod}\"" > "$ROOT_DIR/storage/backups/prod_pgsql_$(date +%F_%H%M%S).sql" 2>/dev/null || true +elif docker ps --format '{{.Names}}' | grep -q "^netgescon_prod_db$"; then + docker exec netgescon_prod_db sh -lc "mysqldump $MYSQLDUMP_FLAGS -u root -p\"$PROD_DB_ROOT_PASSWORD\" \"$PROD_DB_DATABASE\"" > "$ROOT_DIR/storage/backups/prod_$(date +%F_%H%M%S).sql" 2>/dev/null || true +fi +if docker ps --format '{{.Names}}' | grep -q "^netgescon_demo_db$"; then + docker exec netgescon_demo_db sh -lc "mysqldump $MYSQLDUMP_FLAGS -u root -p\"$DEMO_DB_ROOT_PASSWORD\" \"$DEMO_DB_DATABASE\"" > "$ROOT_DIR/storage/backups/demo_$(date +%F_%H%M%S).sql" 2>/dev/null || true +fi echo "[2/6] Update codice..." cd "$ROOT_DIR" @@ -60,8 +66,8 @@ git pull --ff-only origin "$GIT_REF" echo "[3/6] Build nuove immagini app..." docker compose --env-file "$ENV_FILE" -f "$COMPOSE_FILE" build prod_app demo_app -echo "[4/6] Rolling update app/nignx..." -docker compose --env-file "$ENV_FILE" -f "$COMPOSE_FILE" up -d prod_app prod_nginx demo_app demo_nginx +echo "[4/6] Rolling update app/nginx..." +docker compose --env-file "$ENV_FILE" -f "$COMPOSE_FILE" up -d prod_pgsql prod_app prod_nginx demo_app demo_nginx echo "[5/6] Pulizia cache applicativa..." docker exec netgescon_prod_app php artisan optimize:clear || true