This commit is contained in:
35
.gitea/workflows/deploy.yml
Normal file
35
.gitea/workflows/deploy.yml
Normal file
@@ -0,0 +1,35 @@
|
||||
name: Backend Deploy 🚀
|
||||
run-name: ${{ gitea.actor }} backend güncelliyor...
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Kodu Çek
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Docker Build
|
||||
# Dockerfile'ı kullanarak imajı oluşturuyoruz
|
||||
run: docker build -t backend-proje:latest .
|
||||
|
||||
- name: Eski Konteyneri Sil
|
||||
# İlk seferde hata vermemesi için '|| true' ekledik
|
||||
run: docker rm -f backend-container || true
|
||||
|
||||
- name: Yeni Versiyonu Başlat
|
||||
# Secrets kısmından şifreleri alıp konteynere veriyoruz
|
||||
run: |
|
||||
docker run -d \
|
||||
--name backend-container \
|
||||
--restart always \
|
||||
--network gitea \
|
||||
-p 1501:3000 \
|
||||
-e DATABASE_URL='${{ secrets.DATABASE_URL }}' \
|
||||
-e REDIS_HOST='${{ secrets.REDIS_HOST }}' \
|
||||
-e REDIS_PORT='6379' \
|
||||
backend-proje:latest
|
||||
45
Dockerfile
45
Dockerfile
@@ -1,49 +1,56 @@
|
||||
# Build stage
|
||||
# --- Build Stage ---
|
||||
FROM node:20-alpine AS builder
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Copy package files
|
||||
COPY package*.json ./
|
||||
# Raspberry Pi ve Prisma uyumluluğu için gerekli kütüphaneler
|
||||
RUN apk add --no-cache openssl libc6-compat
|
||||
|
||||
# Install dependencies
|
||||
# Paket dosyalarını kopyala
|
||||
COPY package*.json ./
|
||||
RUN npm ci
|
||||
|
||||
# Copy source code
|
||||
# Kaynak kodları kopyala
|
||||
COPY . .
|
||||
|
||||
# Generate Prisma client
|
||||
# Prisma client üret (Database şeman için şart)
|
||||
RUN npx prisma generate
|
||||
|
||||
# Build the application
|
||||
# Build al (NestJS/Backend için)
|
||||
RUN npm run build
|
||||
|
||||
# Production stage
|
||||
# --- Production Stage (Canlı Sistem) ---
|
||||
FROM node:20-alpine AS production
|
||||
|
||||
# Prisma için gerekli kütüphaneleri buraya da ekliyoruz
|
||||
RUN apk add --no-cache openssl libc6-compat
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Copy package files
|
||||
COPY package*.json ./
|
||||
|
||||
# Install production dependencies only
|
||||
# Sadece production (canlıda lazım olan) paketleri kur
|
||||
RUN npm ci --only=production
|
||||
|
||||
# Copy Prisma schema and generate client
|
||||
# Prisma şemasını taşı ve client üret
|
||||
COPY prisma ./prisma
|
||||
RUN npx prisma generate
|
||||
|
||||
# Copy built application
|
||||
COPY --from=builder /app/dist ./dist
|
||||
# Build edilen dosyaları taşı (Senin Dockerfile'ındaki yapıya sadık kaldım)
|
||||
# Güvenlik için dosyaları 'node' kullanıcısına zimmetliyoruz
|
||||
COPY --chown=node:node --from=builder /app/dist ./dist
|
||||
|
||||
# Copy i18n files
|
||||
COPY --from=builder /app/src/i18n ./dist/i18n
|
||||
# Eğer i18n varsa onu da taşı
|
||||
COPY --chown=node:node --from=builder /app/src/i18n ./dist/i18n
|
||||
|
||||
# Set environment
|
||||
# Ortam değişkeni
|
||||
ENV NODE_ENV=production
|
||||
|
||||
# Expose port
|
||||
# Portu aç
|
||||
EXPOSE 3000
|
||||
|
||||
# Start the application
|
||||
CMD ["node", "dist/main.js"]
|
||||
# Güvenlik: Root yerine 'node' kullanıcısına geç
|
||||
USER node
|
||||
|
||||
# Uygulamayı başlat
|
||||
CMD ["node", "dist/main.js"]
|
||||
75
mds/deploy.md
Normal file
75
mds/deploy.md
Normal file
@@ -0,0 +1,75 @@
|
||||
🏗️ 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.
|
||||
|
||||
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
|
||||
|
||||
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.
|
||||
|
||||
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ı?
|
||||
|
||||
Bash
|
||||
docker ps | grep postgres
|
||||
Veritabanı loglarını incele:
|
||||
|
||||
Bash
|
||||
docker logs --tail 50 proje-adi-postgres
|
||||
Veritabanını sıfırlamak (Silip baştan kurmak) istersen:
|
||||
|
||||
Bash
|
||||
# DİKKAT: TÜM VERİ SİLİNİR!
|
||||
docker rm -f proje-adi-postgres
|
||||
docker volume rm proje_adi_db_data
|
||||
Reference in New Issue
Block a user