main
Some checks failed
Backend Deploy 🚀 / build-and-deploy (push) Failing after 35s

This commit is contained in:
2026-01-27 00:17:11 +03:00
parent 6ef44f398d
commit d52abd9b86
3 changed files with 136 additions and 19 deletions

View 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

View File

@@ -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
View 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