diff --git a/mds/deploy.md b/mds/deploy.md index 72ac9f5..bc9c152 100644 --- a/mds/deploy.md +++ b/mds/deploy.md @@ -1,81 +1,146 @@ -🚀 Raspberry Pi Proje Dağıtım Rehberi (Checklist) -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ı adım adım açıklar. -🏗 1. Altyapı Hazırlığı (Infrastructure) -A. Veritabanı Oluşturma + +```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. -code -Bash + +```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ı +``` + +### 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ı -Gitea reponuzda Settings > Actions > Secrets yolunu izleyerek aşağıdaki anahtarları tanımlayın. -Backend İçin: -Key Value Örneği -DATABASE_URL postgresql://Rub1c0N-UseR.%21:SIFRE%3D@backend_db:5432/PROJE_ADI_db?schema=public -JWT_SECRET en_az_32_karakterli_rastgele_string -Frontend İçin: -Key Value Örneği -NEXT_PUBLIC_API_URL http://api-proje.bilgich.com/api -NEXTAUTH_URL http://ui-proje.bilgich.com -NEXTAUTH_SECRET openssl_rand_base64_32_cikti -Not: DATABASE_URL içinde özel karakter varsa: ! -> %21, = -> %3D kullanmayı unutma. -🛠 3. Backend (NestJS) Proje Ayarları -main.ts: Global prefix ve Swagger yollarını kontrol et. -Dockerfile: Mevcut çalışan NestJS Dockerfile'ı kullan. -deploy.yml Değişiklikleri: ---name backend-PROJE-container (Unique isim) --p 150X:3000 (Sıradaki boş port: 1502, 1503...) ---network gitea-server_gitea (Doğru network adı) -🎨 4. Frontend (Next.js) Proje Ayarları -next.config.js: output: 'standalone' satırını ekle. -Dockerfile: ARG ve ENV satırlarına NEXT_PUBLIC_ değişkenlerini ekle. -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 Yönlendirmesi -Her servis için yeni bir Nginx konfigürasyonu oluşturulmalıdır. -Dosya Oluştur: -code -Bash -sudo nano /etc/nginx/sites-available/proje-api # Backend için -sudo nano /etc/nginx/sites-available/proje-ui # Frontend için -Config İçeriği (Örnek): -code -Nginx +* `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; + server_name api-proje.bilgich.com; # Domain adını buraya yaz + location / { - proxy_pass http://127.0.0.1:150X; # Uygulamanın dış portu - include proxy_params; # Veya standart proxy headerları + 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; } } -Aktif Et ve Reload: -code -Bash +``` + +### 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 -💡 "Senior" İpuçları & Bakım -Port Yönetimi: Kullandığın portları bir yere not et: -1501: Test BE, 1502: Proje2 BE... -1800: Test UI, 1801: Proje2 UI... -Disk Temizliği: Raspberry Pi diski dolmaması için haftalık temizlik yap: -code -Bash +``` + +### 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 -Performans İzleme: RAM ve CPU durumunu kontrol et: -code -Bash -htop -docker stats -Log Takibi: Bir sorun olduğunda ilk buraya bak: -code -Bash +``` + +### Log Takibi +Bir sorun olduğunda ilk buraya bak: +```bash docker logs -f KONTEYNER_ADI -Bu sistem, Raspberry Pi'nin kaynaklarını en verimli şekilde kullanacak şekilde tasarlanmıştır. 🚀 \ No newline at end of file +``` +``` \ No newline at end of file