Widget HTML #1


Membangun Snapshot dengan 2 Server (Dev + Production)

Bagaimana jika hanya tersedia dua server utama:
Development dan Production, tanpa server Staging/Test di tengahnya.

Tapi tenang — pipeline seperti di diagram tadi masih bisa dijalankan secara aman hanya dengan dua server, asal kita menyesuaikan strategi snapshot dan pengujian.


1. Konsep Dasar

Karena tidak ada staging server, maka tanggung jawab pengujian dan validasi dipindahkan ke Dev Server, dengan menambahkan:

  • Isolasi environment uji (test container) di dalam Dev.
  • Snapshot ganda: satu sebelum testing, satu sebelum push ke Production.
  • Deployment ke Production hanya dilakukan dari snapshot yang sudah “verified”.

2. Arsitektur Minimal

[Developer Workspace]
        ↓ (git push)
  ┌─────────────────────┐
  │     DEV SERVER          │
  │  - Source code          │
  │  - Container testing    │
  │  - Snapshot tool        │
  └─────────────────────┘
        ↓ (merge mode deploy)
  ┌─────────────────────┐
  │  PRODUCTION SERVER      │
  │  - Live service         │
  │  - Snapshot restore     │
  │  - Audit & monitoring   │
  └─────────────────────┘

3. Tools Open Source yang Direkomendasikan

Kebutuhan Tool
Version control Gitea / GitLab CE
CI/CD ringan Drone CI / Woodpecker CI
Snapshot Restic / BorgBackup
Container test Docker / Podman
Logging & audit Grafana Loki / ELK Stack
Monitoring production Prometheus + Grafana

4. Langkah Implementasi

Langkah 1 — Setup Dev Server

  1. Developer push kode ke Gitea.
  2. Drone CI (atau Jenkins) otomatis men-trigger pipeline test.

Contoh .drone.yml sederhana:

kind: pipeline
type: docker
name: dev_test_snapshot

steps:
  - name: run-tests
    image: python:3.12
    commands:
      - pip install -r requirements.txt
      - pytest tests/

  - name: create-snapshot
    image: alpine
    commands:
      - apk add restic
      - restic -r /snapshots/proyek-a backup /srv/app/
  1. Jika pengujian berhasil, snapshot disimpan sebagai release candidate.

Langkah 2 — Deploy ke Production

  1. Dari Dev, kirim snapshot ke Production menggunakan SSH (rsync/Restic).

    restic -r prodserver:/backup/proyek-a backup /srv/app/
    
  2. Production menerima snapshot dan merge deployment:

    rsync -avz /backup/proyek-a/latest/ /srv/app/
    docker compose up -d
    
  3. Jalankan script audit log di Production:

    echo "$(date): Deployment by $USER" >> /var/log/deploy_audit.log
    

Langkah 3 — Snapshot & Rollback

Sebelum update Production:

restic -r /backup/proyek-a-prod backup /srv/app/

Jika update gagal:

restic -r /backup/proyek-a-prod restore latest --target /srv/restore/

5. Strategi Pengujian Tanpa Staging

Risiko Mitigasi
Tidak ada environment terpisah untuk test Gunakan container lokal di Dev Server (misal Docker Compose untuk test mode).
Deployment langsung ke Production berisiko error Lakukan snapshot Production sebelum setiap merge.
Tidak ada QA server Gunakan pre-deploy branch (misalnya dev-release) untuk validasi terakhir sebelum merge ke main.

Contoh alur cabang:

dev  →  dev-release  →  main (production)

6. Contoh Pipeline Lengkap (Drone CI)

kind: pipeline
type: docker
name: deploy_2_server

steps:
  - name: test
    image: node:20
    commands:
      - npm install
      - npm test

  - name: snapshot
    image: alpine
    commands:
      - apk add restic
      - restic -r /snapshots/app backup /srv/app/

  - name: deploy_to_prod
    image: alpine
    commands:
      - apk add rsync
      - rsync -avz /srv/app/ prodserver:/srv/app/
      - ssh prodserver "docker compose up -d && echo '$(date): Deployment successful' >> /var/log/deploy.log"

7. Alur Operasional Praktis (2 Server)

Langkah Server Aktivitas Tool
1. Developer commit/push Dev Build & test otomatis Gitea + Drone
2. Snapshot Dev Dev Backup otomatis jika test lolos Restic
3. Deploy ke Production Prod Merge & audit log Rsync + Docker
4. Rollback jika error Prod Restore snapshot Restic

8. Best Practice untuk 2-Server Setup

  1. Selalu backup production sebelum setiap deployment.
  2. Gunakan branch release khusus agar tidak langsung dari dev ke prod.
  3. Simpan log deployment dan hasil test untuk audit.
  4. Gunakan container isolasi di Dev agar environment menyerupai production.
  5. Buat snapshot otomatis harian di Production (via cron).

9. Contoh Cron Job Harian di Production

0 1 * * * restic -r /backup/proyek-a-prod backup /srv/app/
0 2 * * * find /backup/proyek-a-prod -mtime +7 -delete

Backup setiap jam 1 pagi, hapus backup lebih tua dari 7 hari.

10. Kesimpulan

Aspek Dengan 3 Server Dengan 2 Server
Infrastruktur Dev, Staging, Prod Dev, Prod
Pengujian Dilakukan di Staging Dilakukan di container di Dev
Risiko Lebih aman (uji terpisah) Sedikit lebih tinggi, mitigasi lewat snapshot
Kecepatan Lebih lambat (multi-hop) Lebih cepat
Cocok untuk Tim besar / enterprise Tim kecil / lab / kampus