```markdown # 🚀 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ı açı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 | Açı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 | Açı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: ```bash 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: ```nginx 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: ```bash 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! ```bash 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: ```bash docker system prune -f ``` ### Log Takibi Bir sorun olduğunda ilk buraya bak: ```bash docker logs -f KONTEYNER_ADI ``` ```