İçindekiler
- Giriş
- Uygulama Deploymentları
- CI/CD Pipeline Kurulumu
- Monitoring ve Logging
- Otomatik Backup
- Güvenlik Önlemleri
Giriş
Part 1'de temel altyapımızı kurduk ve Caddy web sunucumuzu yapılandırdık. Bu bölümde uygulamalarımızı deploy edecek, CI/CD pipeline kuracak ve monitoring sistemini oluşturacağız.
Uygulama Deploymentları
API Uygulaması
API uygulamamız için docker-compose.yml:
services:
api:
build:
context: ..
dockerfile: docker/Dockerfile
container_name: api
networks:
- frontrowai_network
expose:
- "3000"
restart: always
env_file:
- .env
volumes:
- api_data:/app/data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
networks:
frontrowai_network:
external: true
volumes:
api_data:
n8n Uygulaması
n8n için docker-compose.yml:
version: '3'
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
networks:
- frontrowai_network
expose:
- "5678"
restart: always
environment:
- N8N_HOST=n8n.frontrowai.com
- N8N_PROTOCOL=https
- N8N_PORT=443
- NODE_ENV=production
- N8N_ENCRYPTION_KEY=your-secret-key-here
- WEBHOOK_URL=https://n8n.frontrowai.com/
volumes:
- n8n_data:/home/node/.n8n
networks:
frontrowai_network:
external: true
volumes:
n8n_data:
CI/CD Pipeline Kurulumu
GitHub Actions Workflow
.github/workflows/deploy.yml
:
name: Deploy to Production
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Deploy to Droplet
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.DROPLET_IP }}
username: root
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /opt/docker/api
git pull
docker compose down
docker compose up -d --build
GitHub Secrets Ayarları
Repository > Settings > Secrets:
DROPLET_IP
: Droplet'ın IP adresiSSH_PRIVATE_KEY
: SSH private key
SSH Key Oluşturma
# Local makinede
ssh-keygen -t ed25519 -C "deployment-key"
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
# Public key'i GitHub'a ekle
cat ~/.ssh/id_ed25519.pub
Monitoring ve Logging
Prometheus ve Grafana Kurulumu
/opt/docker/monitoring/docker-compose.yml
:
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
networks:
- frontrowai_network
grafana:
image: grafana/grafana:latest
container_name: grafana
volumes:
- grafana_data:/var/lib/grafana
networks:
- frontrowai_network
environment:
- GF_SECURITY_ADMIN_PASSWORD=your-secure-password
networks:
frontrowai_network:
external: true
volumes:
prometheus_data:
grafana_data:
Prometheus Yapılandırması
prometheus.yml
:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'api'
static_configs:
- targets: ['api:3000']
- job_name: 'caddy'
static_configs:
- targets: ['caddy:2019']
Log Yönetimi
Log rotasyonu için logrotate
yapılandırması:
# /etc/logrotate.d/docker-logs
/var/log/caddy/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0640 root root
}
Otomatik Backup
Backup Script
#!/bin/bash
# /opt/docker/backup/backup.sh
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup"
# Volume verileri
tar -czf $BACKUP_DIR/volumes_$DATE.tar.gz \
/var/lib/docker/volumes/
# Environment dosyaları
tar -czf $BACKUP_DIR/env_$DATE.tar.gz \
/opt/docker/*/.env
# Konfigürasyon dosyaları
tar -czf $BACKUP_DIR/config_$DATE.tar.gz \
/opt/docker/*/docker-compose.yml \
/opt/docker/caddy/Caddyfile
# 14 günden eski backupları sil
find $BACKUP_DIR -type f -mtime +14 -delete
Cron Job Oluşturma
# Backup script'i çalıştırılabilir yap
chmod +x /opt/docker/backup/backup.sh
# Cron job ekle
echo "0 3 * * * /opt/docker/backup/backup.sh" | crontab -
Güvenlik Önlemleri
Fail2ban Kurulumu
# Fail2ban kur
apt install fail2ban
# Konfigürasyon
cat > /etc/fail2ban/jail.local << EOF
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
EOF
# Servisi başlat
systemctl restart fail2ban
Rate Limiting
Caddy konfigürasyonuna rate limiting ekleyelim:
(rate_limit) {
rate_limit {
zone dynamic_zone {
key {remote_host}
events 100
window 10s
}
}
}
api.frontrowai.com {
import common
import rate_limit
reverse_proxy api:3000
}
Monitoring Kontrolü
Temel Kontroller
# Container durumları
docker ps
# Resource kullanımı
docker stats
# Disk kullanımı
df -h
# Log kontrolü
tail -f /var/log/caddy/access.log
Sağlık Kontrolleri
# API sağlık kontrolü
curl https://api.frontrowai.com/health
# SSL sertifika kontrolü
curl -vI https://api.frontrowai.com
Sonuç
Bu makalede:
- Uygulama deploymentlarını gerçekleştirdik
- CI/CD pipeline kurduk
- Monitoring ve logging sistemini yapılandırdık
- Otomatik backup sistemi oluşturduk
- Güvenlik önlemlerini aldık
Artık production ortamınız:
- Otomatik deployment yapabilir
- SSL sertifikalarını otomatik yönetir
- Düzenli backup alır
- Monitoring ve alerting sunar
- Temel güvenlik önlemlerine sahiptir
Member discussion: