KURULUM — lab-app elle deploy (referans)#
Önce kendin yap. Bu dosya, takıldığında bakman içindir. Komutları körü körüne kopyalarsan lab'ın amacı — soyutlamaların çözdüğü acıyı hissetmek — kaybolur. Yollar örnektir; dağıtımına göre uyarla.
1. Uygulama + servis kullanıcısı#
sudo useradd --system --no-create-home --shell /usr/sbin/nologin labsvc
sudo mkdir -p /opt/lab-app /var/log/lab-app /etc/lab-app
sudo cp app.py /opt/lab-app/app.py
sudo chown -R labsvc:labsvc /opt/lab-app /var/log/lab-app
2. PostgreSQL#
sudo apt-get update && sudo apt-get install -y postgresql
sudo -u postgres psql <<'SQL'
CREATE DATABASE labdb;
CREATE USER labuser WITH PASSWORD 'REPLACE_WITH_YOUR_OWN';
GRANT CONNECT ON DATABASE labdb TO labuser;
SQL
Parolayı burada gördüğün
REPLACE_WITH_YOUR_OWNyerine kendin koy ve yalnızEnvironmentFile'a yaz — koda ya da git'e değil.
3. Ortam dosyası (parola burada, mod 600)#
sudo cp app.env.example /etc/lab-app/app.env
sudo nano /etc/lab-app/app.env # PGPASSWORD'ü gerçek değerle değiştir
sudo chown labsvc:labsvc /etc/lab-app/app.env
sudo chmod 600 /etc/lab-app/app.env
4. systemd unit#
sudo cp lab-app.service /etc/systemd/system/lab-app.service
sudo systemctl daemon-reload
sudo systemctl enable --now lab-app
systemctl status lab-app --no-pager
curl -s http://127.0.0.1:8000/health # ok
5. nginx ters vekil#
sudo apt-get install -y nginx
sudo cp nginx-lab-app.conf /etc/nginx/sites-available/lab-app
sudo ln -sf ../sites-available/lab-app /etc/nginx/sites-enabled/lab-app
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl reload nginx
curl -s http://127.0.0.1/health # ok (port 80, nginx üzerinden)
6. Firewall#
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw enable
# 8000 dışarı kapalı: uygulama zaten 127.0.0.1 dinliyor, ufw'de de açmadık.
ss -tlnp | grep -E ':80|:8000' # nginx 0.0.0.0:80, app 127.0.0.1:8000
7. Reboot testi#
sudo reboot
# geri geldiğinde:
systemctl is-enabled lab-app # enabled
systemctl is-active lab-app # active
curl -s http://127.0.0.1/health
8. En çok zamanı ne aldı?#
Genelde: paket kurulumu değil, sıralama ve izinler — systemd After=, dosya sahipliği, nginx symlink, firewall. C1'de göreceğin container tam olarak bunu bir Dockerfile + compose.yaml'a dondurur: her deploy'da aynı adımları elle tekrarlamak yerine tek komutla ayağa kalkar. L06'nın acısı, C1'in değerini ölçer.