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
|
FROM node:20-alpine AS builder
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# Copy package files
|
# Raspberry Pi ve Prisma uyumluluğu için gerekli kütüphaneler
|
||||||
COPY package*.json ./
|
RUN apk add --no-cache openssl libc6-compat
|
||||||
|
|
||||||
# Install dependencies
|
# Paket dosyalarını kopyala
|
||||||
|
COPY package*.json ./
|
||||||
RUN npm ci
|
RUN npm ci
|
||||||
|
|
||||||
# Copy source code
|
# Kaynak kodları kopyala
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
# Generate Prisma client
|
# Prisma client üret (Database şeman için şart)
|
||||||
RUN npx prisma generate
|
RUN npx prisma generate
|
||||||
|
|
||||||
# Build the application
|
# Build al (NestJS/Backend için)
|
||||||
RUN npm run build
|
RUN npm run build
|
||||||
|
|
||||||
# Production stage
|
# --- Production Stage (Canlı Sistem) ---
|
||||||
FROM node:20-alpine AS production
|
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
|
WORKDIR /app
|
||||||
|
|
||||||
# Copy package files
|
|
||||||
COPY package*.json ./
|
COPY package*.json ./
|
||||||
|
|
||||||
# Install production dependencies only
|
# Sadece production (canlıda lazım olan) paketleri kur
|
||||||
RUN npm ci --only=production
|
RUN npm ci --only=production
|
||||||
|
|
||||||
# Copy Prisma schema and generate client
|
# Prisma şemasını taşı ve client üret
|
||||||
COPY prisma ./prisma
|
COPY prisma ./prisma
|
||||||
RUN npx prisma generate
|
RUN npx prisma generate
|
||||||
|
|
||||||
# Copy built application
|
# Build edilen dosyaları taşı (Senin Dockerfile'ındaki yapıya sadık kaldım)
|
||||||
COPY --from=builder /app/dist ./dist
|
# Güvenlik için dosyaları 'node' kullanıcısına zimmetliyoruz
|
||||||
|
COPY --chown=node:node --from=builder /app/dist ./dist
|
||||||
|
|
||||||
# Copy i18n files
|
# Eğer i18n varsa onu da taşı
|
||||||
COPY --from=builder /app/src/i18n ./dist/i18n
|
COPY --chown=node:node --from=builder /app/src/i18n ./dist/i18n
|
||||||
|
|
||||||
# Set environment
|
# Ortam değişkeni
|
||||||
ENV NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
|
|
||||||
# Expose port
|
# Portu aç
|
||||||
EXPOSE 3000
|
EXPOSE 3000
|
||||||
|
|
||||||
# Start the application
|
# Güvenlik: Root yerine 'node' kullanıcısına geç
|
||||||
CMD ["node", "dist/main.js"]
|
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