mds/deploy.md Güncelle
All checks were successful
Backend Deploy 🚀 / build-and-deploy (push) Successful in 1m57s
All checks were successful
Backend Deploy 🚀 / build-and-deploy (push) Successful in 1m57s
This commit is contained in:
201
mds/deploy.md
201
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.
|
```markdown
|
||||||
🏗 1. Altyapı Hazırlığı (Infrastructure)
|
# 🚀 Raspberry Pi Proje Dağıtım Rehberi (SSL Güncellemeli)
|
||||||
A. Veritabanı Oluşturma
|
|
||||||
|
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.
|
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)
|
# 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
|
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:
|
Domain panelinden (Cloudflare vb.) yeni subdomain'leri Raspberry Pi'nin dış IP'sine yönlendir:
|
||||||
api-proje.bilgich.com -> Raspberry Pi IP
|
* `api-proje.bilgich.com` -> **Raspberry Pi IP**
|
||||||
ui-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
|
## 🔐 2. Gitea Secret Ayarları
|
||||||
DATABASE_URL postgresql://Rub1c0N-UseR.%21:SIFRE%3D@backend_db:5432/PROJE_ADI_db?schema=public
|
|
||||||
JWT_SECRET en_az_32_karakterli_rastgele_string
|
**⚠️ Önemli:** Proje canlıya çıkarken SSL kullanacağımız için URL'leri şimdiden **https** olarak tanımlıyoruz.
|
||||||
Frontend İçin:
|
|
||||||
Key Value Örneği
|
Gitea reponuzda **Settings > Actions > Secrets** yolunu izleyerek aşağıdaki anahtarları tanımlayın.
|
||||||
NEXT_PUBLIC_API_URL http://api-proje.bilgich.com/api
|
|
||||||
NEXTAUTH_URL http://ui-proje.bilgich.com
|
### Backend İçin:
|
||||||
NEXTAUTH_SECRET openssl_rand_base64_32_cikti
|
|
||||||
Not: DATABASE_URL içinde özel karakter varsa: ! -> %21, = -> %3D kullanmayı unutma.
|
| Key | Value Örneği | Açıklama |
|
||||||
🛠 3. Backend (NestJS) Proje Ayarları
|
| :--- | :--- | :--- |
|
||||||
main.ts: Global prefix ve Swagger yollarını kontrol et.
|
| `DATABASE_URL` | `postgresql://Rub1c0N-UseR.%21:SIFRE%3D@backend_db:5432/PROJE_ADI_db?schema=public` | Özel karakterler encode edilmeli (!=%21, =%3D) |
|
||||||
Dockerfile: Mevcut çalışan NestJS Dockerfile'ı kullan.
|
| `JWT_SECRET` | `rastgele_uzun_string` | Güvenlik anahtarı |
|
||||||
deploy.yml Değişiklikleri:
|
|
||||||
--name backend-PROJE-container (Unique isim)
|
### Frontend İçin:
|
||||||
-p 150X:3000 (Sıradaki boş port: 1502, 1503...)
|
|
||||||
--network gitea-server_gitea (Doğru network adı)
|
| Key | Value Örneği | Açıklama |
|
||||||
🎨 4. Frontend (Next.js) Proje Ayarları
|
| :--- | :--- | :--- |
|
||||||
next.config.js: output: 'standalone' satırını ekle.
|
| `NEXT_PUBLIC_API_URL` | `https://api-proje.bilgich.com/api` | **https** olmasına dikkat et |
|
||||||
Dockerfile: ARG ve ENV satırlarına NEXT_PUBLIC_ değişkenlerini ekle.
|
| `NEXTAUTH_URL` | `https://ui-proje.bilgich.com` | **https** olmasına dikkat et |
|
||||||
deploy-ui.yml Değişiklikleri:
|
| `NEXTAUTH_SECRET` | `openssl_rand_base64_32_cikti` | Auth güvenliği için |
|
||||||
--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.
|
## 🛠 3. Backend (NestJS) Proje Ayarları
|
||||||
🚦 5. Nginx Yönlendirmesi
|
|
||||||
Her servis için yeni bir Nginx konfigürasyonu oluşturulmalıdır.
|
1. **main.ts:** Global prefix ve Swagger yollarını kontrol et.
|
||||||
Dosya Oluştur:
|
2. **Dockerfile:** Mevcut çalışan NestJS Dockerfile'ı kullan.
|
||||||
code
|
3. **deploy.yml Değişiklikleri:**
|
||||||
Bash
|
* `--name backend-PROJE-container` (Her proje için unique isim)
|
||||||
sudo nano /etc/nginx/sites-available/proje-api # Backend için
|
* `-p 150X:3000` (Sıradaki boş port: 1502, 1503...)
|
||||||
sudo nano /etc/nginx/sites-available/proje-ui # Frontend için
|
* `--network gitea-server_gitea` (Database'e erişim için şart)
|
||||||
Config İçeriği (Örnek):
|
|
||||||
code
|
---
|
||||||
Nginx
|
|
||||||
|
## 🎨 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 {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
server_name api-proje.bilgich.com;
|
server_name api-proje.bilgich.com; # Domain adını buraya yaz
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
proxy_pass http://127.0.0.1:150X; # Uygulamanın dış portu
|
proxy_pass http://127.0.0.1:150X; # Uygulamanın dış portu (1502, 1802 vb.)
|
||||||
include proxy_params; # Veya standart proxy headerları
|
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 ln -s /etc/nginx/sites-available/proje-api /etc/nginx/sites-enabled/
|
||||||
sudo nginx -t && sudo systemctl reload nginx
|
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...
|
### D. SSL Sertifikası Kur (Certbot)
|
||||||
1800: Test UI, 1801: Proje2 UI...
|
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!
|
||||||
Disk Temizliği: Raspberry Pi diski dolmaması için haftalık temizlik yap:
|
|
||||||
code
|
```bash
|
||||||
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
|
docker system prune -f
|
||||||
Performans İzleme: RAM ve CPU durumunu kontrol et:
|
```
|
||||||
code
|
|
||||||
Bash
|
### Log Takibi
|
||||||
htop
|
Bir sorun olduğunda ilk buraya bak:
|
||||||
docker stats
|
```bash
|
||||||
Log Takibi: Bir sorun olduğunda ilk buraya bak:
|
|
||||||
code
|
|
||||||
Bash
|
|
||||||
docker logs -f KONTEYNER_ADI
|
docker logs -f KONTEYNER_ADI
|
||||||
Bu sistem, Raspberry Pi'nin kaynaklarını en verimli şekilde kullanacak şekilde tasarlanmıştır. 🚀
|
```
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user