From 2db12adffce906f90dbda85d0bf0e6b79ab5ec8e Mon Sep 17 00:00:00 2001 From: Antigravity Date: Wed, 20 May 2026 19:21:49 +0000 Subject: [PATCH] chore(prod): support .env.docker in crons, fix WAL mapping and add canvas copy in Dockerfile --- docker-compose.yml | 1 + memento-note/Dockerfile | 1 + scripts/backup/backup.sh | 7 +++++++ scripts/backup/offsite-sync.sh | 7 +++++++ scripts/backup/restore.sh | 7 +++++++ scripts/backup/setup-wal.sh | 19 ++++++++++++++++++- scripts/backup/verify-backups.sh | 7 +++++++ 7 files changed, 48 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 361b254..31d08df 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,6 +12,7 @@ services: POSTGRES_DB: ${POSTGRES_DB:-memento} volumes: - postgres-data:/var/lib/postgresql/data + - ./backups:/var/lib/postgresql/backups ports: - "127.0.0.1:${POSTGRES_PORT:-5433}:5432" healthcheck: diff --git a/memento-note/Dockerfile b/memento-note/Dockerfile index ee65bb6..91b2e08 100644 --- a/memento-note/Dockerfile +++ b/memento-note/Dockerfile @@ -69,6 +69,7 @@ COPY --from=builder --chown=nextjs:nodejs /app/prisma ./prisma COPY --from=builder --chown=nextjs:nodejs /app/node_modules/.prisma ./node_modules/.prisma COPY --from=builder --chown=nextjs:nodejs /app/node_modules/@prisma ./node_modules/@prisma COPY --from=builder --chown=nextjs:nodejs /app/node_modules/prisma ./node_modules/prisma +COPY --from=builder --chown=nextjs:nodejs /app/node_modules/@napi-rs ./node_modules/@napi-rs # Entrypoint COPY --from=builder --chown=nextjs:nodejs /app/docker-entrypoint.sh ./docker-entrypoint.sh diff --git a/scripts/backup/backup.sh b/scripts/backup/backup.sh index da3f2e0..4e42c83 100755 --- a/scripts/backup/backup.sh +++ b/scripts/backup/backup.sh @@ -1,6 +1,13 @@ #!/bin/bash set -euo pipefail +# Load environment variables from .env.docker if it exists +if [ -f "/opt/memento/.env.docker" ]; then + set -a + source "/opt/memento/.env.docker" + set +a +fi + BACKUP_DIR="/opt/memento/backups" WAL_DIR="$BACKUP_DIR/wal" SNAPSHOT_DIR="$BACKUP_DIR/snapshots" diff --git a/scripts/backup/offsite-sync.sh b/scripts/backup/offsite-sync.sh index 303eb52..fb5166d 100755 --- a/scripts/backup/offsite-sync.sh +++ b/scripts/backup/offsite-sync.sh @@ -1,6 +1,13 @@ #!/bin/bash set -euo pipefail +# Load environment variables from .env.docker if it exists +if [ -f "/opt/memento/.env.docker" ]; then + set -a + source "/opt/memento/.env.docker" + set +a +fi + SNAPSHOT_DIR="/opt/memento/backups/snapshots" SSH_KEY="/root/.ssh/memento-nas" NAS1="sepehr@192.168.1.132" diff --git a/scripts/backup/restore.sh b/scripts/backup/restore.sh index 65ca726..c17629f 100755 --- a/scripts/backup/restore.sh +++ b/scripts/backup/restore.sh @@ -1,6 +1,13 @@ #!/bin/bash set -euo pipefail +# Load environment variables from .env.docker if it exists +if [ -f "/opt/memento/.env.docker" ]; then + set -a + source "/opt/memento/.env.docker" + set +a +fi + BACKUP_DIR="/opt/memento/backups" SNAPSHOT_DIR="$BACKUP_DIR/snapshots" PG_CONTAINER="memento-postgres" diff --git a/scripts/backup/setup-wal.sh b/scripts/backup/setup-wal.sh index a9ca0e5..d2f1275 100755 --- a/scripts/backup/setup-wal.sh +++ b/scripts/backup/setup-wal.sh @@ -1,6 +1,13 @@ #!/bin/bash set -euo pipefail +# Load environment variables from .env.docker if it exists +if [ -f "/opt/memento/.env.docker" ]; then + set -a + source "/opt/memento/.env.docker" + set +a +fi + BACKUP_DIR="/opt/memento/backups" WAL_DIR="$BACKUP_DIR/wal" PG_CONTAINER="memento-postgres" @@ -19,13 +26,23 @@ log "=== Setting up WAL archiving ===" docker exec "$PG_CONTAINER" bash -c "mkdir -p /var/lib/postgresql/backups/wal" +log "Configuring PostgreSQL WAL parameters..." docker exec "$PG_CONTAINER" psql -U "$PG_USER" -d "$PG_DB" -c "ALTER SYSTEM SET wal_level = replica;" docker exec "$PG_CONTAINER" psql -U "$PG_USER" -d "$PG_DB" -c "ALTER SYSTEM SET archive_mode = on;" docker exec "$PG_CONTAINER" psql -U "$PG_USER" -d "$PG_DB" -c "ALTER SYSTEM SET archive_command = 'cp %p /var/lib/postgresql/backups/wal/%f';" docker exec "$PG_CONTAINER" psql -U "$PG_USER" -d "$PG_DB" -c "ALTER SYSTEM SET max_wal_senders = 3;" docker exec "$PG_CONTAINER" psql -U "$PG_USER" -d "$PG_DB" -c "ALTER SYSTEM SET wal_keep_size = '1GB';" -log "Reloading PostgreSQL configuration..." +log "Restarting PostgreSQL container to apply WAL parameters (required for wal_level)..." +docker restart "$PG_CONTAINER" + +# Wait for PostgreSQL to be ready +log "Waiting for PostgreSQL to be ready..." +until docker exec "$PG_CONTAINER" pg_isready -U "$PG_USER" -d "$PG_DB" >/dev/null 2>&1; do + sleep 1 +done + +log "PostgreSQL is ready. Reloading config..." docker exec "$PG_CONTAINER" psql -U "$PG_USER" -d "$PG_DB" -c "SELECT pg_reload_conf();" log "WAL archiving enabled. Archives stored in /var/lib/postgresql/backups/wal/" diff --git a/scripts/backup/verify-backups.sh b/scripts/backup/verify-backups.sh index 982021f..44177fe 100755 --- a/scripts/backup/verify-backups.sh +++ b/scripts/backup/verify-backups.sh @@ -1,6 +1,13 @@ #!/bin/bash set -euo pipefail +# Load environment variables from .env.docker if it exists +if [ -f "/opt/memento/.env.docker" ]; then + set -a + source "/opt/memento/.env.docker" + set +a +fi + BACKUP_DIR="/opt/memento/backups" SNAPSHOT_DIR="$BACKUP_DIR/snapshots" PG_CONTAINER="memento-postgres"