L06 — Bir uygulamayı elle ayağa kaldır (container YOK)#
Bu lab kasıtlı olarak zahmetlidir. Sıfır bir VM'den başlayıp bir uygulamayı, veritabanını, systemd unit'ini, nginx ters vekilini ve firewall'ı elle kurarsın. Container yok. Amaç: sonraki her soyutlamanın (Docker, K8s) neyi çözdüğünü kendi elinle acısını çekerek bilmek. Kolaylaştırma; her adımı KURULUM.md'ye yaz.
Gerekenler#
- Temiz bir Linux VM (Ubuntu/Debian önerilir). Kök/sudo erişimi. Proxmox, Multipass, Vagrant, bir bulut VM veya yerel VM — hepsi olur.
python3(uygulama stdlib ile çalışır),postgresql,nginx,systemd, bir firewall (ufw).
Görev#
- Uygulamayı yerleştir.
starter/app.py'yi VM'e kopyala (örn./opt/lab-app/app.py). Uygulama stdlib HTTP servisidir:/health→200 ok,/db→pg_isreadysonucu. Yalnız127.0.0.1:8000dinlemeli (dışarıya nginx bakacak). - Veritabanı. PostgreSQL kur, bir veritabanı ve bir sınırlı yetkili kullanıcı yarat. Parolayı asla koda gömme — systemd
EnvironmentFile'dan ver. - systemd unit.
/etc/systemd/system/lab-app.serviceyaz: uygulamayı servis kullanıcısıyla çalıştır,EnvironmentFileile ortam ver,Restart=on-failure,enableet.systemctl statusile ayakta olduğunu gör. - nginx ters vekil. nginx'i
80portunda dinlet,127.0.0.1:8000'e proxy'le.curl http://127.0.0.1/health→200. - Firewall. Yalnız
22(SSH) ve80(HTTP) açık olsun; uygulamanın8000'i dışarıya kapalı kalsın. - Reboot testi. VM'i yeniden başlat. Uygulama elle müdahale olmadan geri gelmeli.
- Belgele. Her komutu ve dosyayı
KURULUM.md'ye yaz — birinin sıfırdan tekrar edebileceği kadar net. (starter/KURULUM.template.mdiskelettir.)
Kabul kriterleri#
-
bash verify.shsıfır hatayla geçiyor (VM'in üstünde çalıştır). -
systemctl is-enabled lab-app→enabled,is-active→active. -
curl -s http://127.0.0.1/health→ok(nginx üzerinden, port 80). -
ss -tlnp: nginx0.0.0.0:80, uygulama yalnız127.0.0.1:8000. -
KURULUM.mdsıfırdan tekrar edilebilir adımları içeriyor. - Reboot sonrası servis kendiliğinden ayakta.
İpucu (çözüm değil)#
- systemd sıralaması:
After=network.target postgresql.service. - Parola:
EnvironmentFile=/etc/lab-app/app.env(mod600, servis kullanıcısına ait). - nginx:
proxy_pass http://127.0.0.1:8000;+proxy_set_header Host $host;. - "Reboot'tan sağ çıktı mı" testi
enableetmeyi unutup unutmadığını gösterir —is-activeyetmez,is-enabledşart.
Bu lab bozulacak; bozulunca K00 seni bekliyor. Takılırsan solution/'a bak — ama önce kendin uğraş.