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

146 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
```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ıı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
```
```