Files
boilerplate-be/mds/deploy.md
fahricansecer 29f785ffdf
All checks were successful
Backend Deploy 🚀 / build-and-deploy (push) Successful in 1m57s
mds/deploy.md Güncelle
2026-02-05 15:09:56 +03:00

4.7 KiB
Raw Blame History

# 🚀 Raspberry Pi Proje Dağıtım Rehberi (SSL Güncellemeli)

Bu rehber, mevcut merkezi altyapıyı (Gitea, Runner, Central Database, Nginx) kullanarak yeni NestJS (Backend) ve Next.js (Frontend) projelerini nasıl ayağa kaldıracağını ve **SSL (HTTPS) sorunları yaşamadan** nasıl yayına alacağını adım adım açıklar.

---

## 🏗 1. Altyapı Hazırlığı (Infrastructure)

### A. Veritabanı Oluşturma
Her yeni proje için merkezi PostgreSQL konteynerinde yeni bir veritabanıılmalıdır.

```bash
# PROJE_ADI kısmını küçük harf ve boşluksuz yaz (örn: e_ticaret_db)
docker exec -it backend_db createdb -U 'Rub1c0N-UseR.!' PROJE_ADI_db

B. DNS Ayarları

Domain panelinden (Cloudflare vb.) yeni subdomain'leri Raspberry Pi'nin dış IP'sine yönlendir:

  • api-proje.bilgich.com -> Raspberry Pi IP
  • ui-proje.bilgich.com -> Raspberry Pi IP

🔐 2. Gitea Secret Ayarları

⚠️ Önemli: Proje canlıya çıkarken SSL kullanacağımız için URL'leri şimdiden https olarak tanımlıyoruz.

Gitea reponuzda Settings > Actions > Secrets yolunu izleyerek aşağıdaki anahtarları tanımlayın.

Backend İçin:

Key Value Örneği ıklama
DATABASE_URL postgresql://Rub1c0N-UseR.%21:SIFRE%3D@backend_db:5432/PROJE_ADI_db?schema=public Özel karakterler encode edilmeli (!=%21, =%3D)
JWT_SECRET rastgele_uzun_string Güvenlik anahtarı

Frontend İçin:

Key Value Örneği ıklama
NEXT_PUBLIC_API_URL https://api-proje.bilgich.com/api https olmasına dikkat et
NEXTAUTH_URL https://ui-proje.bilgich.com https olmasına dikkat et
NEXTAUTH_SECRET openssl_rand_base64_32_cikti Auth güvenliği için

🛠 3. Backend (NestJS) Proje Ayarları

  1. main.ts: Global prefix ve Swagger yollarını kontrol et.
  2. Dockerfile: Mevcut çalışan NestJS Dockerfile'ı kullan.
  3. deploy.yml Değişiklikleri:
    • --name backend-PROJE-container (Her proje için unique isim)
    • -p 150X:3000 (Sıradaki boş port: 1502, 1503...)
    • --network gitea-server_gitea (Database'e erişim için şart)

🎨 4. Frontend (Next.js) Proje Ayarları

  1. next.config.js: output: 'standalone' satırını ekle.
  2. Dockerfile: ARG ve ENV satırlarına NEXT_PUBLIC_ değişkenlerini ekle.
  3. deploy-ui.yml Değişiklikleri:
    • --build-arg ile tüm Gitea secret'larını build aşamasına geç.
    • --name ui-PROJE-container (Unique isim)
    • -p 180X:3000 (Sıradaki boş port: 1801, 1802...)
    • -e NEXTAUTH_URL ve NEXTAUTH_SECRET runtime değişkenlerini ekle.

🚦 5. Nginx ve SSL Yönlendirmesi (KRİTİK ADIM)

Diğer projelerle çakışma olmaması için her yeni domain'e mutlaka SSL kurulmalıdır.

A. Konfigürasyon Dosyası Oluştur

Backend veya Frontend için dosya oluşturun:

sudo nano /etc/nginx/sites-available/proje-api
# Veya
sudo nano /etc/nginx/sites-available/proje-ui

B. İçeriği Yapıştır (Sadece HTTP)

İlk aşamada sadece 80 portunu dinleyen şu bloğu yapıştırın:

server {
    listen 80;
    server_name api-proje.bilgich.com; # Domain adını buraya yaz

    location / {
        proxy_pass http://127.0.0.1:150X; # Uygulamanın dış portu (1502, 1802 vb.)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        
        # Gerçek IP Logları
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

C. Nginx'i Aktif Et

Dosyayı sites-enabled klasörüne linkleyin ve Nginx'i reload edin:

sudo ln -s /etc/nginx/sites-available/proje-api /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

D. SSL Sertifikası Kur (Certbot)

Bu komut Nginx ayarlarını otomatik güncelleyip 443 portunu açacaktır. Bu adımı yapmazsanız HTTPS girişleri başka projelere yönlenir!

sudo certbot --nginx -d api-proje.bilgich.com

Soru sorarsa "2" (Redirect) seçeneğini seçin.


💡 "Senior" İpuçları & Bakım

Port Yönetimi (Defteri Kebir)

Kullandığın portları çakışmaması için mutlaka not et:

  • 1501: Digicraft BE
  • 1502: YeniProje BE
  • 1800: Digicraft UI
  • 1801: YeniProje UI

Disk Temizliği

Raspberry Pi diski dolmaması için haftalık/aylık temizlik yap:

docker system prune -f

Log Takibi

Bir sorun olduğunda ilk buraya bak:

docker logs -f KONTEYNER_ADI