main
All checks were successful
Backend Deploy 🚀 / build-and-deploy (push) Successful in 1m50s

This commit is contained in:
2026-01-30 03:25:05 +03:00
parent 081bec0b0d
commit 3511fe6a87
47 changed files with 140 additions and 70 deletions

View File

@@ -1,76 +1,81 @@
🏗️ Backend Altyapı Kurulum Rehberi (Database & Redis)
Bu doküman, Raspberry Pi üzerinde yeni bir Backend projesi için gerekli olan kalıcı veritabanı ve Redis servislerinin nasıl kurulacağını anlatır.
⚠️ Mantık: Bu servisler deploy sürecine dahil EDİLMEZ. Sunucuda bir kere kurulur, verileri kalıcı olarak saklar ve Backend projesi buraya bağlanır.
1. Hazırlık: Docker Ağı Kontrolü
Tüm servislerin (Gitea, App, DB, Redis) birbirini görebilmesi için ortak bir ağda olmaları gerekir.
🚀 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
Her yeni proje için merkezi PostgreSQL konteynerinde yeni bir veritabanıılmalıdır.
code
Bash
# Ağ var mı kontrol et (Listede 'gitea' yazmalı)
docker network ls
# Yoksa oluştur:
docker network create gitea
2. PostgreSQL Veritabanı Kurulumu (Kalıcı)
Her yeni proje için port çakışması yaşamamak adına konteyner ismini ve volume ismini projeye özel değiştir.
Değiştirilecek Yerler: proje-db-ismi, DB_KULLANICI, DB_SIFRE, DB_ADI
# 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ı
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
docker run -d \
--name proje-adi-postgres \
--restart always \
--network gitea \
-e POSTGRES_USER=db_kullanici \
-e POSTGRES_PASSWORD=cok_guclu_sifre \
-e POSTGRES_DB=proje_db_adi \
-v proje_adi_db_data:/var/lib/postgresql/data \
postgres:16-alpine
Not: -p (Port) parametresi eklemedik. Çünkü dış dünyaya kapalı olsun, sadece bizim uygulamamız (aynı ağdaki) erişebilsin istiyoruz. Güvenlik için en iyisi budur.
3. Redis Kurulumu (Kalıcı)
Redis için de projeye özel bir isim veriyoruz.
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
server {
listen 80;
server_name api-proje.bilgich.com;
location / {
proxy_pass http://127.0.0.1:150X; # Uygulamanın dış portu
include proxy_params; # Veya standart proxy headerları
}
}
Aktif Et ve Reload:
code
Bash
docker run -d \
--name proje-adi-redis \
--restart always \
--network gitea \
-v proje_adi_redis_data:/data \
redis:7-alpine
4. Gitea Secrets Ayarları (Bağlantı)
Veritabanlarını kurduktan sonra Gitea'da Ayarlar -> Actions -> Secrets kısmına gidip aşağıdaki bilgileri ekle.
🔑 Secret 1: DATABASE_URL
Uygulamanın veritabanını bulması için gerekli bağlantı cümlesi.
Format: postgresql://KULLANICI:SIFRE@KONTEYNER_ADI:5432/DB_ADI?schema=public
Örnek (Yukarıdaki kuruluma göre): postgresql://db_kullanici:cok_guclu_sifre@proje-adi-postgres:5432/proje_db_adi?schema=public
Dikkat: localhost veya IP yerine direkt kurduğun konteyner ismini (proje-adi-postgres) yazıyoruz. Docker isimden tanır.
🔑 Secret 2: REDIS_HOST
Uygulamanın Redis'i bulması için.
Değer: proje-adi-redis
5. Sorun Giderme (Debug)
Eğer bağlantı hatası alırsan şu komutlarla kontrol et:
Veritabanı ayakta mı?
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
docker ps | grep postgres
Veritabanı loglarını incele:
docker system prune -f
Performans İzleme: RAM ve CPU durumunu kontrol et:
code
Bash
docker logs --tail 50 proje-adi-postgres
Veritabanını sıfırlamak (Silip baştan kurmak) istersen:
htop
docker stats
Log Takibi: Bir sorun olduğunda ilk buraya bak:
code
Bash
# DİKKAT: TÜM VERİ SİLİNİR!
docker rm -f proje-adi-postgres
docker volume rm proje_adi_db_data
docker logs -f KONTEYNER_ADI
Bu sistem, Raspberry Pi'nin kaynaklarını en verimli şekilde kullanacak şekilde tasarlanmıştır. 🚀