PostgreSQL kolimine Pilviole
Selles juhendis kolime olemasoleva PostgreSQL andmebaasi Pilvio VM-ile, seadistame automaatse varundamise ja tulemüüri.
Mida ehitame
- PostgreSQL 16 server Pilvio VM-il
- Andmete migreerimine olemasolevalt serverilt
- Automaatne varundamine Pilvio StorageVault'i (S3)
- Tulemüürireeglid andmebaasi kaitsmiseks
Eeldused
- Pilvio konto ja API token (vaata ülevaadet)
- Ligipääs olemasolevale PostgreSQL serverile (kui kolid andmeid)
pg_dumpjapsqltööriistad
1. samm: VM loomine andmebaasile
Andmebaasi jaoks soovitame eraldi VM-i koos piisava kettaruumiga:
curl "https://api.pilvio.com/v1/user-resource/vm" \
-H "apikey: SINU_PILVIO_TOKEN" \
-X POST \
-d "name=postgresql-server" \
-d "os_name=ubuntu" \
-d "os_version=24.04" \
-d "vcpu=2" \
-d "ram=4096" \
-d "disks=50" \
-d "username=deploy" \
-d "password=TurvalineParool123!" \
-d "public_key=ssh-ed25519 AAAA... sinu@arvuti"
Lisakettad andmete jaoks (valikuline, soovituslik)
Eralda andmebaasi andmed süsteemikettalt:
# Loo eraldi ketas andmete jaoks
curl "https://api.pilvio.com/v1/user-resource/vm/storage" \
-H "apikey: SINU_PILVIO_TOKEN" \
-X POST \
-d "uuid=SINU_VM_UUID" \
-d "size_gb=100"
Serveris kettamount:
ssh deploy@SINU_FLOATING_IP
# Leia uue ketta seadme nimi (tüüpiliselt /dev/vdb)
lsblk
# Formaadi ja monteeri
sudo mkfs.ext4 /dev/vdb
sudo mkdir -p /mnt/pgdata
sudo mount /dev/vdb /mnt/pgdata
# Lisa fstab-i püsivaks monteerimiseks
echo '/dev/vdb /mnt/pgdata ext4 defaults 0 2' | sudo tee -a /etc/fstab
2. samm: Tulemüüri seadistamine
Luba PostgreSQL port ainult teatud IP-delt (sinu rakendusserveritelt):
curl "https://api.pilvio.com/v1/network/firewall" \
-H "apikey: SINU_PILVIO_TOKEN" \
-H "Content-Type: application/json" \
-X POST \
--data '{
"name": "postgresql-fw",
"rules": [
{
"protocol": "tcp",
"direction": "inbound",
"port_start": 22,
"port_end": 22,
"endpoint_spec_type": "any"
},
{
"protocol": "tcp",
"direction": "inbound",
"port_start": 5432,
"port_end": 5432,
"endpoint_spec_type": "ip_prefixes",
"endpoint_spec": ["SINU_APP_SERVERI_IP/32", "10.0.0.0/8"]
}
]
}'
Turvalisus: Ära ava PostgreSQL porti kogu internetile. Kasuta Pilvio privaatvõrku VM-ide vaheliseks suhtluseks.
3. samm: PostgreSQL paigaldamine ja seadistamine
ssh deploy@SINU_FLOATING_IP
# PostgreSQL 16 paigaldamine
sudo apt-get update
sudo apt-get install -y postgresql-16 postgresql-client-16
# Peata teenus seadistamiseks
sudo systemctl stop postgresql
Andmete kataloog eraldi kettale (kui lõid 1. sammus lisaketta)
sudo chown postgres:postgres /mnt/pgdata
sudo -u postgres /usr/lib/postgresql/16/bin/initdb -D /mnt/pgdata/16/main
# Uuenda seadistust
sudo sed -i "s|data_directory = '.*'|data_directory = '/mnt/pgdata/16/main'|" \
/etc/postgresql/16/main/postgresql.conf
PostgreSQL seadistamine
# Luba väliseid ühendusi
sudo sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/" \
/etc/postgresql/16/main/postgresql.conf
# Jõudluse optimeerimine (4 GB RAM VM jaoks)
sudo tee -a /etc/postgresql/16/main/postgresql.conf <<'EOF'
# Pilvio jõudluse seadistused
shared_buffers = 1GB
effective_cache_size = 3GB
maintenance_work_mem = 256MB
work_mem = 16MB
wal_buffers = 16MB
max_connections = 100
random_page_cost = 1.1
effective_io_concurrency = 200
EOF
# Autentimine — luba ühendused sinu võrgust
echo "host all app_user 10.0.0.0/8 scram-sha-256" | sudo tee -a /etc/postgresql/16/main/pg_hba.conf
echo "host all app_user SINU_APP_SERVERI_IP/32 scram-sha-256" | sudo tee -a /etc/postgresql/16/main/pg_hba.conf
# Käivita
sudo systemctl start postgresql
Kasutaja ja andmebaasi loomine
sudo -u postgres psql <<'SQL'
CREATE USER app_user WITH PASSWORD 'tugev-parool-siia';
CREATE DATABASE myapp OWNER app_user;
GRANT ALL PRIVILEGES ON DATABASE myapp TO app_user;
SQL
4. samm: Andmete migreerimine
Väike andmebaas (< 1 GB): pg_dump/pg_restore
# Vanalt serverilt: ekspordi
pg_dump -h vana-server.ee -U vana_kasutaja -d vana_andmebaas \
-Fc -f /tmp/dump.backup
# Kopeeri Pilvio serverisse
scp /tmp/dump.backup deploy@SINU_FLOATING_IP:/tmp/
# Pilvio serveris: impordi
ssh deploy@SINU_FLOATING_IP
sudo -u postgres pg_restore -d myapp /tmp/dump.backup
Suur andmebaas (> 1 GB): striimimine
# Otse vanalt serverilt Pilvio serverisse
pg_dump -h vana-server.ee -U vana_kasutaja -d vana_andmebaas -Fc | \
ssh deploy@SINU_FLOATING_IP "sudo -u postgres pg_restore -d myapp"
Ainult skeem (ilma andmeteta)
pg_dump -h vana-server.ee -U vana_kasutaja -d vana_andmebaas \
--schema-only -f schema.sql
scp schema.sql deploy@SINU_FLOATING_IP:/tmp/
ssh deploy@SINU_FLOATING_IP "sudo -u postgres psql myapp < /tmp/schema.sql"
5. samm: Automaatne varundamine StorageVault'i (S3)
Loo fail /home/deploy/backup-pg.sh:
#!/bin/bash
set -euo pipefail
BACKUP_DIR="/tmp/pg-backups"
BUCKET="minu-pg-backups"
S3_ENDPOINT="https://s3.pilvio.com:8080"
DATE=$(date +%Y%m%d-%H%M%S)
BACKUP_FILE="${BACKUP_DIR}/myapp-${DATE}.sql.gz"
mkdir -p "$BACKUP_DIR"
# Dump ja tihendamine
sudo -u postgres pg_dump myapp | gzip > "$BACKUP_FILE"
# Üleslaadimine StorageVault'i
aws s3 cp "$BACKUP_FILE" "s3://${BUCKET}/postgresql/${DATE}.sql.gz" \
--endpoint-url "$S3_ENDPOINT"
# Kohalike failide puhastamine (hoia viimased 3)
ls -t ${BACKUP_DIR}/myapp-*.sql.gz | tail -n +4 | xargs rm -f
# Kustuta S3-st vanemad kui 30 päeva
aws s3 ls "s3://${BUCKET}/postgresql/" --endpoint-url "$S3_ENDPOINT" | \
awk '{print $4}' | while read -r file; do
file_date=$(echo "$file" | grep -oP '\d{8}')
if [[ $(date -d "$file_date" +%s) -lt $(date -d '30 days ago' +%s) ]]; then
aws s3 rm "s3://${BUCKET}/postgresql/$file" --endpoint-url "$S3_ENDPOINT"
fi
done
echo "Varundamine lõpetatud: $BACKUP_FILE"
chmod +x /home/deploy/backup-pg.sh
# Cron: iga päev kell 3:00
(crontab -l 2>/dev/null; echo "0 3 * * * /home/deploy/backup-pg.sh >> /var/log/pg-backup.log 2>&1") | crontab -
Pilvio automaatne VM backup (lisaks)
# Lülita sisse Pilvio VM-i automaatne varundamine
curl "https://api.pilvio.com/v1/user-resource/vm/backup" \
-H "apikey: SINU_PILVIO_TOKEN" \
-X POST \
-d "uuid=SINU_VM_UUID"
6. samm: Taastamine varukoopiast
# Lae varukoopia alla StorageVault'ist
aws s3 cp s3://minu-pg-backups/postgresql/20250211-030000.sql.gz /tmp/ \
--endpoint-url https://s3.pilvio.com:8080
# Taasta
gunzip -c /tmp/20250211-030000.sql.gz | sudo -u postgres psql myapp
Ühendamine rakendusega
# Ühendustring (kasuta privaatset IP-d kui sama võrgus)
postgresql://app_user:tugev-parool@10.x.x.x:5432/myapp
# Või Floating IP kaudu (aeglasem, tulemüür peab lubama)
postgresql://app_user:tugev-parool@SINU_FLOATING_IP:5432/myapp
Järgmised sammud: Ühenda PostgreSQL oma Node.js või FastAPI backendiga.