Cloud, Docker & DevOps — Penerapan pantas dan boleh dipercayai
Kami mengkontenakan semua aplikasi dengan Docker, mengorkestrasikannya dengan Docker Compose (atau Kubernetes untuk projek enterprise), mengkonfigurasi Caddy sebagai proksi terbalik dengan SSL automatik dan mengautomasikan keseluruhan kitaran penerapan melalui GitHub Actions — daripada commit ke pengeluaran dalam masa kurang 5 minit.
Kontenerisasi dengan Docker dan Docker Compose
Setiap perkhidmatan mempunyai Dockerfile multi-stage sendiri: peringkat build yang memasang kebergantungan dan mengkompil, serta peringkat akhir minimum (distroless atau alpine) yang hanya mengandungi artifak yang perlu. Imej Next.js biasa bersaiz di bawah 150MB; FastAPI di bawah 80MB. Imej dibina semula pada setiap penggabungan ke main dan ditag secara semantik (`v1.2.3` + `latest`).
Docker Compose mentakrifkan keseluruhan tindanan: frontend, API, DB, Redis, worker. Pemboleh ubah sensitif (kata laluan DB, kunci API, rahsia Stripe) berada dalam `.env` yang dikecualikan daripada git — tidak pernah ditulis keras dalam imej. Health check dalam Compose memastikan kebergantungan sedia sebelum permulaan (DB sedia → API bermula → frontend bermula).
- Cache build dengan `--mount=type=cache` — npm ci menggunakan cache pada CI
- Susunan lapisan yang dioptimumkan: kebergantungan stabil → kod sumber
- Pengurusan rahsia dengan Docker secrets atau HashiCorp Vault untuk projek enterprise
- `restart: unless-stopped` + `docker compose up --no-deps` untuk penerapan atomik
Caddy — proksi terbalik moden dengan SSL automatik
Caddy 2.8 mengurus SSL/TLS secara automatik melalui ACME (Let's Encrypt atau ZeroSSL) — tiada sijil tamat tempoh, tiada konfigurasi manual. HTTP/2 dan HTTP/3 (QUIC) diaktifkan secara lalai. Header keselamatan (HSTS, X-Frame-Options, CSP) ditetapkan secara global melalui snippet boleh guna semula. Konfigurasi Caddyfile deklaratif boleh dibandingkan dan diversikan dalam git.
Pengehadan kadar, pemampatan gzip/brotli dan pengelogan JSON berstruktur diaktifkan melalui arahan Caddy asli — tanpa modul nginx atau konfigurasi Apache yang kompleks. Akses ke laluan sensitif (`/admin`, `.env`, `.git`) memulangkan 444 (tiada respons) yang dikonfigurasi sebagai snippet keselamatan global.
- A+ pada SSL Labs sejak hari pertama — hanya TLS 1.3 dengan cipher suite moden
- TLS atas permintaan untuk SaaS berbilang penyewa dengan subdomain dinamik
- Muat semula — `caddy reload` tidak mengganggu sambungan aktif
- Pengelogan Caddy → Loki → Grafana — analisis trafik dan amaran anomali
CI/CD GitHub Actions dan pemantauan
Saluran paip CI berjalan pada setiap PR: lint, semakan jenis, ujian unit, build imej Docker, imbasan kerentanan (Trivy). Jika semuanya lulus, imej ditolak ke registri dan penerapan staging berlaku secara automatik. Penggabungan ke main = penerapan pengeluaran automatik dengan healthcheck selepas penerapan. Rollback automatik jika healthcheck gagal dalam masa 60 saat.
Pemantauan dengan Grafana + Prometheus untuk metrik aplikasi (kependaman, kadar ralat, saiz baris gilir) dan Loki untuk pengagregatan log. Amaran dikonfigurasi pada Slack/e-mel: kadar ralat >1%, kependaman P95 >500ms, cakera >85%. Pemantauan uptime luaran dengan Better Uptime — papan pemuka SLA awam tersedia atas permintaan.
- Imbasan kerentanan Trivy pada imej — disekat jika ada CVE Kritikal
- Dependabot + gabung automatik untuk kemas kini patch (CI hijau diperlukan)
- Sandaran DB automatik ke storan serasi S3 (setiap malam, penyimpanan 30 hari)
Kelebihan dan kekurangan
Kelebihan
- Penerapan dengan rollback automatik apabila healthcheck gagal.
- SSL/TLS automatik melalui Caddy — tiada sijil tamat tempoh secara manual.
- Persekitaran boleh dihasilkan semula: imej Docker yang sama pada dev, staging, pengeluaran.
- Pemantauan dan amaran (Grafana, Loki) — isu dilihat sebelum pengguna.
Had
- Docker Compose tidak berskala seperti Kubernetes untuk enterprise berbilang nod.
- Persediaan CI/CD awal memerlukan masa dan kepakaran DevOps.
- Imej dan log menggunakan ruang cakera — memerlukan pembersihan berkala.
- Pemantauan penuh (Prometheus + Grafana) menambah perkhidmatan untuk diselenggara.
Rumusan ringkas
Docker + Caddy + GitHub Actions ialah gabungan ideal untuk penerapan yang boleh dipercayai pada VPS atau beberapa nod. Untuk berpuluh-puluh nod dengan penskalaan automatik yang agresif, beralih ke Kubernetes.
Jadual spesifikasi
| Keupayaan | Had / ambang | Kegunaan biasa | |
|---|---|---|---|
| Orkestrasi | Docker Compose, tindanan penuh | Nod tunggal; berbilang nod memerlukan Swarm/K8s | VPS, projek kecil hingga sederhana |
| Proksi terbalik | Caddy 2.8, HTTP/3, SSL automatik | Peraturan sangat kompleks memerlukan konfigurasi lanjutan | Berbilang domain, berbilang penyewa |
| CI/CD | GitHub Actions, penerapan | Minit CI dibilkan melebihi tahap percuma | Commit-ke-pengeluaran automatik |
| Kos biasa | VPS dari ~€5/bulan | Pemantauan + sandaran menambah kos | Daripada satu laman hingga berbilang jenama |
Docker Compose berbanding Kubernetes
| Kriteria | Docker Compose | Kubernetes |
|---|---|---|
| Kerumitan persediaan | Rendah | Tinggi |
| Berbilang nod / penskalaan automatik | Terhad (satu nod) | Cemerlang |
| Terbaik untuk | VPS, projek kecil hingga sederhana | Armada besar, enterprise |
Soalan lazim
Mengapa Caddy dan bukan Nginx?
Caddy mengurus SSL/TLS secara automatik melalui ACME, mengaktifkan HTTP/2 dan HTTP/3 secara lalai dan mempunyai konfigurasi deklaratif yang ringkas. Nginx memerlukan certbot dan lebih banyak konfigurasi manual untuk hasil yang sama.
Adakah saya memerlukan Kubernetes?
Tidak untuk kebanyakan laman. Docker Compose pada VPS mengendalikan satu laman atau beberapa perkhidmatan dengan boleh dipercayai. Kubernetes hanya berguna pada berpuluh-puluh nod dengan penskalaan automatik yang agresif.
Bagaimana penerapan berfungsi?
GitHub Actions membina imej baharu, memulakannya bersama imej lama, menjalankan healthcheck, kemudian menukar trafik. Jika healthcheck gagal dalam masa 60 saat, ia melakukan rollback secara automatik ke versi sebelumnya.
Apakah pemantauan yang anda cadangkan?
Grafana + Prometheus untuk metrik (kependaman, kadar ralat) dan Loki untuk log teragregat, dengan amaran Slack/e-mel. Untuk uptime luaran kami menambah perkhidmatan bebas seperti Better Uptime.