ubuntu-server-uzerinde-yuksek-performansli-uygulama-deploymenti

Ubuntu Server Üzerinde Yüksek Performanslı Uygulama Deploymentı

İçindekiler

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.

Kaynaklar

Twitter
LinkedIn
Diğer Yazılar
İletişim

Chipode Uygulamaları

loading...
Google Play Store
loading...
Apple Store