Mobil uygulamaların backend servisleri için güvenilir, hızlı ve ölçeklenebilir bir altyapı kritik önem taşır. Chipode olarak Ubuntu Server tercih etmemizin nedenleri ve nasıl optimize ettiğimizi bu yazıda detaylıca inceleyeceğiz.
Neden Ubuntu Server?
Ubuntu Server’ı tercih etmemizin başlıca nedenleri:
1. Geniş topluluk desteği
2. Düzenli güvenlik güncellemeleri
3. Kapsamlı paket yönetimi
4. Docker ve container desteği
5. Maliyet etkinliği
Server Hazırlığı ve Temel Güvenlik
1- SSH Güvenliği
bash
# SSH Port değiştirme
sudo nano /etc/ssh/sshd_config
# Önerilen ayarlar
Port 2222
PermitRootLogin no
PasswordAuthentication no
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
# SSH servisi yeniden başlatma
sudo systemctl restart sshd
2- Firewall Konfigürasyonu
bash
# UFW kurulumu ve temel kurallar
sudo apt install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow 50051/tcp # gRPC
# Firewall'u aktif et
sudo ufw enable
# Durum kontrolü
sudo ufw status verbose
3- Fail2Ban Implementasyonu
bash
# Kurulum
sudo apt install fail2ban
# Konfigürasyon
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
# Servisi başlat
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Nginx ve SSL Konfigürasyonu
1- Nginx Kurulumu ve Optimizasyonu
bash
# Nginx kurulumu
sudo apt install nginx
# Sistem limitleri ayarlama
sudo nano /etc/security/limits.conf
# Ekle:
nginx soft nofile 65535
nginx hard nofile 65535
### SSL Sertifikası (Let's Encrypt)
bash
# Certbot kurulumu
sudo apt install certbot python3-certbot-nginx
# Sertifika alma
sudo certbot --nginx -d api.chipode.com
2- Nginx Konfigürasyonu
nginx
server {
listen 443 ssl http2;
server_name api.chipode.com;
ssl_certificate /etc/letsencrypt/live/api.chipode.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.chipode.com/privkey.pem;
# SSL optimizasyonları
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
# Modern SSL konfigürasyonu
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
# HSTS
add_header Strict-Transport-Security "max-age=63072000" always;
# Diğer güvenlik başlıkları
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
# gRPC proxy
location / {
grpc_pass grpc://localhost:50051;
grpc_set_header Host $host;
grpc_set_header X-Real-IP $remote_addr;
}
}
Docker ve Container Orchestration
1- Docker Kurulumu
bash
# Repository ekleme
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# Docker kurulumu
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
2- Docker Compose Konfigürasyonu
yaml
version: '3.8'
services:
game-service:
build:
context: .
dockerfile: Dockerfile
restart: always
environment:
- DB_HOST=postgres
- REDIS_URL=redis://redis:6379
- LOG_LEVEL=info
depends_on:
- postgres
- redis
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
restart_policy:
condition: on-failure
postgres:
image: postgres:14-alpine
volumes:
- pgdata:/var/lib/postgresql/data
environment:
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASSWORD}
deploy:
placement:
constraints:
- node.role == manager
redis:
image: redis:6-alpine
command: redis-server --appendonly yes
volumes:
- redisdata:/data
volumes:
pgdata:
redisdata:
Monitoring ve Logging
1- Prometheus Kurulumu
yaml
# prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'game-service'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node-exporter'
static_configs:
- targets: ['localhost:9100']
2- Grafana Dashboard
bash
# Grafana repo ekleme
sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
sudo wget -q -O /usr/share/keyrings/grafana.key https://packages.grafana.com/gpg.key
# Grafana kurulumu
sudo apt-get update
sudo apt-get install grafana
3- ELK Stack ile Log Yönetimi
yaml
# docker-compose-elk.yml
version: '3.8'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.9.3
environment:
- discovery.type=single-node
volumes:
- elasticsearch_data:/usr/share/elasticsearch/data
logstash:
image: docker.elastic.co/logstash/logstash:7.9.3
volumes:
- ./logstash/pipeline:/usr/share/logstash/pipeline
depends_on:
- elasticsearch
kibana:
image: docker.elastic.co/kibana/kibana:7.9.3
ports:
- "5601:5601"
depends_on:
- elasticsearch
volumes:
elasticsearch_data:
Performance Optimizasyonu
1- Sistem Ayarları
bash
# /etc/sysctl.conf düzenlemeleri
# Network optimizasyonları
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 15
# Disk I/O optimizasyonu
# /etc/fstab
UUID=xxx / ext4 defaults,noatime,nodiratime 0 1
2- Resource Limitleri
bash
# /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
* soft nproc 32768
* hard nproc 32768
3- Redis Optimizasyonu
conf
# redis.conf
maxmemory 2gb
maxmemory-policy allkeys-lru
activerehashing yes
no-appendfsync-on-rewrite yes
Backup Stratejisi
1- Otomatik Backup Script
bash
#!/bin/bash
# Değişkenler
BACKUP_DIR="/backup"
POSTGRES_CONTAINER="postgres"
DATE=$(date +%Y%m%d_%H%M%S)
# PostgreSQL backup
docker exec $POSTGRES_CONTAINER pg_dump -U gameuser gamedb > $BACKUP_DIR/db_$DATE.sql
# Redis backup
docker exec redis redis-cli SAVE
# Backup dosyalarını sıkıştır
tar -czf $BACKUP_DIR/backup_$DATE.tar.gz \
$BACKUP_DIR/db_$DATE.sql \
/var/lib/redis/dump.rdb
# Eski backupları temizle
find $BACKUP_DIR -type f -mtime +7 -delete
# S3'e yükle
aws s3 cp $BACKUP_DIR/backup_$DATE.tar.gz s3://chipode-backups/
Sonuç
Ubuntu Server üzerinde kurduğumuz bu altyapı ile:
1. Yüksek güvenlik
2. Ölçeklenebilirlik
3. Kolay yönetilebilirlik
4. Performans optimizasyonu
5. Güvenilir backup stratejisi
sağlamış olduk. Bu yapı, Chipode’un mobil uygulamalarının sorunsuz çalışması için güçlü bir temel oluşturuyor.





