216 backups encrypted on 216: pgBackRest (AES-256) + age-encrypted payment CSVs, pushed write-only to 247 with rrsync; health watches pg_stat_archiver and OFFSITE_SYNC_STATUS_FILE; 216 scripts/configs in ops/server216; plaintext pg216 pipeline removed

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-17 19:43:00 +03:30
parent dd98f16d12
commit 4cd859b5fa
37 changed files with 417 additions and 96 deletions

View File

@@ -4,10 +4,8 @@
# --checkpoint=spread و --max-rate بار روی ۲۴۹ را کم نگه می‌دارند (آن‌جا سرورِ اصلی است).
# نسخه تا pg_verifybackup قبولش نکند جای قبلی‌ها را نمی‌گیرد و چیزی پاک نمی‌شود.
set -euo pipefail
# ROOT/BIN/PORT از یونیت می‌آیند؛ پیش‌فرض‌ها همان بکاپِ ۲۴۹ است (یونیت‌های zareian-pg216-* برای سرورِ جدید).
ROOT="${PGB_ROOT:-/home/administrator/zareian-pgbackup}"
BIN="${PGB_BIN:-/usr/lib/postgresql/14/bin}"
PORT="${PGB_PORT:-15440}"
ROOT=/home/administrator/zareian-pgbackup
BIN=/usr/lib/postgresql/14/bin
KEEP=7
cd "$ROOT"
@@ -16,7 +14,7 @@ ts=$(date +%Y%m%d-%H%M%S)
rm -rf base/.inprogress-*
tmp="base/.inprogress-$ts"
"$BIN/pg_basebackup" -h 127.0.0.1 -p "$PORT" -U zareian_replicator --no-password \
"$BIN/pg_basebackup" -h 127.0.0.1 -p 15440 -U zareian_replicator --no-password \
-D "$tmp" -Fp -X stream --checkpoint=spread --max-rate=20M
"$BIN/pg_verifybackup" "$tmp"
mv "$tmp" "base/$ts"

View File

@@ -6,9 +6,8 @@
# خروجی: payment-log/payment-events-<UTC>.csv، orders-…csv، transactions-…csv؛ ۱۴ فایلِ آخرِ هر نوع می‌ماند.
# توجه: نسخه‌ی کامل تا چند دقیقه‌ی WAL عقب‌تر از ۲۴۹ می‌شود، ولی WALِ رسیده همه اعمال می‌شود.
set -euo pipefail
# ROOT/BIN از یونیت می‌آیند؛ پیش‌فرض‌ها همان بکاپِ ۲۴۹ است (یونیت‌های zareian-pg216-* برای سرورِ جدید).
ROOT="${PGB_ROOT:-/home/administrator/zareian-pgbackup}"
BIN="${PGB_BIN:-/usr/lib/postgresql/14/bin}"
ROOT=/home/administrator/zareian-pgbackup
BIN=/usr/lib/postgresql/14/bin
OUT="$ROOT/payment-log"
mkdir -p "$OUT"

View File

@@ -6,9 +6,8 @@
# restore-check.sh '2026-10-10 16:30:00+03:30'
# با KEEP=1 پوشه و Postgresِ موقت می‌مانند (برای بازیابیِ واقعی: از آن pg_dump بگیرید، بعد pg_ctl stop و rm).
set -euo pipefail
# ROOT/BIN از یونیت می‌آیند؛ پیش‌فرض‌ها همان بکاپِ ۲۴۹ است (یونیت‌های zareian-pg216-* برای سرورِ جدید).
ROOT="${PGB_ROOT:-/home/administrator/zareian-pgbackup}"
BIN="${PGB_BIN:-/usr/lib/postgresql/14/bin}"
ROOT=/home/administrator/zareian-pgbackup
BIN=/usr/lib/postgresql/14/bin
TARGET="${1:-}"
latest=$(ls -1d "$ROOT"/base/2* | tail -1)

View File

@@ -1,11 +0,0 @@
# روی سرورِ بکاپ (۲۴۷). نسخه‌ی کاملِ روزانه از ۲۱۶؛ همان basebackup.sh با مسیر و پورتِ ۲۱۶.
[Unit]
Description=Zareian MathApp: daily base backup from 216
Requires=zareian-pg216-tunnel.service
After=zareian-pg216-tunnel.service
[Service]
Type=oneshot
User=administrator
Environment=PGB_ROOT=/home/administrator/zareian-pgbackup-216 PGB_BIN=/home/administrator/zareian-pgbackup-216/pg16/root/usr/lib/postgresql/16/bin PGB_PORT=15441 LD_LIBRARY_PATH=/home/administrator/zareian-pgbackup-216/pg16/root/usr/lib/x86_64-linux-gnu
ExecStart=/home/administrator/zareian-pgbackup-216/bin/basebackup.sh

View File

@@ -1,9 +0,0 @@
[Unit]
Description=Zareian MathApp: daily base backup from 216
[Timer]
OnCalendar=*-*-* 04:50:00
Persistent=true
[Install]
WantedBy=timers.target

View File

@@ -1,8 +0,0 @@
[Unit]
Description=Zareian MathApp: export payment events from the 216 backup copy to CSV
[Service]
Type=oneshot
User=administrator
Environment=PGB_ROOT=/home/administrator/zareian-pgbackup-216 PGB_BIN=/home/administrator/zareian-pgbackup-216/pg16/root/usr/lib/postgresql/16/bin LD_LIBRARY_PATH=/home/administrator/zareian-pgbackup-216/pg16/root/usr/lib/x86_64-linux-gnu
ExecStart=/home/administrator/zareian-pgbackup-216/bin/export-payment-events.sh

View File

@@ -1,9 +0,0 @@
[Unit]
Description=Zareian MathApp: payment events CSV from 216 every 6 hours
[Timer]
OnCalendar=*-*-* 01,07,13,19:35:00
Persistent=true
[Install]
WantedBy=timers.target

View File

@@ -1,20 +0,0 @@
# روی سرورِ بکاپ (۲۴۷). تونلِ SSH از 127.0.0.1:15441ِ این‌جا به Postgresِ سرورِ اختصاصی (۲۱۶، 127.0.0.1:5440).
# طرفِ ۲۱۶ کاربرِ سیستمیِ pgbackup است: فقط همین کلید، فقط از 192.168.200.167، بی‌شِل، و در authorized_keys
# permitopen="127.0.0.1:5440" (هیچ پورتِ دیگری). رمزِ zareian_replicator فقط در ~/.pgpassِ ۲۴۷ است؛ ۲۱۶ فقط هشِ SCRAM آن را دارد.
# (forwardingِ سوکت ممکن نیست: AllowTcpForwarding no در sshd آن را هم می‌بندد.)
[Unit]
Description=Zareian MathApp: SSH tunnel to the app Postgres on 216
After=network-online.target
Wants=network-online.target
[Service]
User=administrator
ExecStart=/usr/bin/ssh -N -i /home/administrator/.ssh/zareian_pgbackup_216 \
-o BatchMode=yes -o ExitOnForwardFailure=yes \
-o ServerAliveInterval=15 -o ServerAliveCountMax=3 \
-L 127.0.0.1:15441:127.0.0.1:5440 pgbackup@192.168.200.163
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target

View File

@@ -1,19 +0,0 @@
# روی سرورِ بکاپ (۲۴۷). هر تغییرِ دیتابیسِ ۲۱۶ را لحظه‌ای در ~/zareian-pgbackup-216/wal می‌نویسد.
# ابزارهای Postgres 16 از مخزنِ رسمی در ~/zareian-pgbackup-216/pg16 باز شده‌اند (نصبِ سیستمی نیست؛ ۲۴۷ فقط 14 دارد).
# اسلاتِ zareian_247 روی ۲۱۶، سقف max_slot_wal_keep_size=5GB. اپ منتظرِ این‌جا نمی‌ماند.
[Unit]
Description=Zareian MathApp: live WAL stream from 216
After=zareian-pg216-tunnel.service
BindsTo=zareian-pg216-tunnel.service
[Service]
User=administrator
Environment=LD_LIBRARY_PATH=/home/administrator/zareian-pgbackup-216/pg16/root/usr/lib/x86_64-linux-gnu
ExecStart=/home/administrator/zareian-pgbackup-216/pg16/root/usr/lib/postgresql/16/bin/pg_receivewal -h 127.0.0.1 -p 15441 -U zareian_replicator \
--no-password --slot=zareian_247 --synchronous --no-loop \
-D /home/administrator/zareian-pgbackup-216/wal
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target