Ubuntu 22.04 Üzerinde Docker Compose ile Laravel Kurulumu ve Yapılandırması — Kapsamlı Bir Kılavuz
Bu adım adım kılavuzda, Ubuntu 22.04 üzerinde Docker Compose kullanarak Laravel'i nasıl kurup yapılandıracağınızı ve güvenli ve optimize edilmiş bir üretim ortamı nasıl oluşturacağınızı öğreneceksiniz.

Ubuntu 22.04 Üzerinde Docker Compose ile Laravel Kurulumu ve Yapılandırması — Kapsamlı Bir Kılavuz

Bu makale, Docker Compose kullanarak Ubuntu 22.04 üzerinde bir Laravel uygulamasının nasıl kurulacağını ve dağıtılacağını gösterecektir. Adım adım ilerleyen süreç sayesinde, güvenli ve optimize edilmiş bir üretim ortamı kolayca oluşturabilirsiniz.
0 Hisse senetleri
0
0
0
0

Ubuntu 22.04 üzerinde Laravel'i Docker Compose ile nasıl kurup yapılandırabilirim?

Bu pratik ve teknik kılavuzda, bir uygulamanın kurulumu ve yapılandırılması sürecini adım adım ele alacağız. Laravel Kullanarak Docker Compose Sunucuda Ubuntu 22.04 Bu makalenin amacı, geliştiriciler, DevOps ekipleri ve teknik yöneticiler için güvenli, ölçeklenebilir ve bakımı kolay bir üretim ortamı oluşturmak üzere tekrarlanabilir yönergeler sunmaktır.

İlk kontrol listesi

Başlamadan önce lütfen aşağıdakileri hazırlayın:

  • Bir sunucu Ubuntu 22.04 Kök kullanıcı erişimi veya sudo yetkisine sahip bir kullanıcı ile
  • Liman işçisi (kararlı sürüm) ve Docker Compose (veya Docker Compose eklentisini kullanın)
  • Açık bağlantı noktaları: 80/443 Web için; gerekirse 3306 Veya 5432 Veritabanı için (tercihen IP adresleriyle sınırlı)
  • Yeterli disk alanı (SSD önerilir) ve birden fazla depolama alanından birine erişim. 85 lokasyon Bulut hizmetleri kullanılıyorsa küresel ölçekte.
  • Sunucu IP adresine işaret eden alan adı ve DNS kaydı

Ubuntu 22.04'e Docker ve Docker Compose Kurulumu

Docker'ı ve docker compose eklentisini yüklemek için sunucuda aşağıdaki komutları çalıştırın:

sudo apt update && sudo apt upgrade -y
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo usermod -aG docker $USER

Ardından oturumu kapatıp tekrar giriş yapın veya yeni grup docker Kullanmak.

Kurulumu kontrol etmek için:

docker --version
docker compose version

Önerilen proje yapısı

Bakım ve geliştirme işlemlerini kolaylaştırmak için proje klasörünün aşağıdaki gibi düzenlenmesi önerilir:

  • proje-kökü/
    • liman işçisi/
      • nginx/default.conf
      • php/Dockerfile
    • kaynak/ — Laravel kodu (veya mount)
    • docker-compose.yml
    • .çevre

PHP-FPM için Önerilen Dockerfile (PHP 8.1)

Yol içeren bir dosya docker/php/Dockerfile Aşağıdaki örneğe benzer bir şey oluşturun:

FROM php:8.1-fpm

# Install required tools and extensions
RUN apt-get update && apt-get install -y \
    git zip unzip libpng-dev libjpeg-dev libfreetype6-dev libonig-dev libxml2-dev \
    libzip-dev libpq-dev cron curl supervisor \
  && docker-php-ext-configure gd --with-freetype --with-jpeg \
  && docker-php-ext-install -j$(nproc) gd pdo pdo_mysql pdo_pgsql mbstring xml bcmath zip opcache \
  && pecl install redis && docker-php-ext-enable redis \
  && pecl install xdebug || true \
  && apt-get clean && rm -rf /var/lib/apt/lists/*

# Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

# Create non-root user
RUN useradd -G www-data,root -u 1000 -d /home/appuser appuser
WORKDIR /var/www/html
USER appuser

docker-compose.yml örneği

Önerilen sürüm docker-compose.yml Uygulamayı, web sunucusunu, veritabanını ve Redis'i çalıştırmak için:

version: "3.8"

services:
  app:
    build:
      context: .
      dockerfile: docker/php/Dockerfile
    image: laravel_app:latest
    container_name: laravel_app
    restart: unless-stopped
    volumes:
      - ./src:/var/www/html
      - ./docker/php/supervisord.conf:/etc/supervisor/conf.d/supervisord.conf
    environment:
      - APP_ENV=production
      - APP_DEBUG=false
    networks:
      - laravel-net

  web:
    image: nginx:alpine
    container_name: laravel_web
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./src:/var/www/html:ro
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
      - ./certs:/etc/letsencrypt
    depends_on:
      - app
    networks:
      - laravel-net

  db:
    image: mysql:8.0
    container_name: laravel_db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: laravel
      MYSQL_USER: laravel
      MYSQL_PASSWORD: secret
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - laravel-net

  redis:
    image: redis:6-alpine
    container_name: laravel_redis
    restart: unless-stopped
    volumes:
      - redis_data:/data
    networks:
      - laravel-net

volumes:
  db_data:
  redis_data:

networks:
  laravel-net:
    driver: bridge

Nginx yapılandırma dosyası (docker/nginx/default.conf)

PHP-FPM (uygulama) sayfasına istekleri yönlendirmek için örnek Nginx yapılandırması:

server {
    listen 80;
    server_name example.com;

    root /var/www/html/public;
    index index.php index.html;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    location ~ /\.ht {
        deny all;
    }
}

Not: Ters proxy veya birden fazla hizmet içeren mimarilerde, Nginx'i yük dengeleyici veya CDN katmanına yerleştirebilirsiniz.

Kodun hazırlanması ve bağımlılıkların yüklenmesi

Eğer bir Laravel projeniz yoksa, Composer kullanarak yeni bir proje oluşturabilirsiniz:

composer create-project --prefer-dist laravel/laravel src

Ardından konteynerleri oluşturmak ve çalıştırmak için:

docker compose build
docker compose up -d

Composer ve Artisan komutlarını bir PHP konteyneri içinde çalıştırmak için:

docker exec -it laravel_app bash
composer install --no-dev --optimize-autoloader
php artisan key:generate
php artisan migrate --force
php artisan config:cache
php artisan route:cache
exit

Docker için .env dosyasının ayarlanması

Docker-compose ile uyumlu örnek .env yapılandırması:

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=secret

CACHE_DRIVER=redis
REDIS_HOST=redis

APP_URL=https://example.com

SSL ve Let's Encrypt — İki Kolay Yol

HTTPS'yi etkinleştirmenin iki basit yolu vardır:

  • Sunucuda Certbot kullanımı: Nginx'i geçici olarak durdurun ve verilen sertifikayı klasöre yerleştirin. ./sertifikalar ve onu konteynere monte edin.
  • Otomatik çözümü kullanarak: Araçlar gibi docker-letsencrypt-nginx-proxy-companion Veya Trafik Otomatik sertifika yönetimi için uygundurlar.

Certbot ile hızlı bir örnek:

sudo apt install -y certbot
sudo docker compose down
sudo certbot certonly --standalone -d example.com --non-interactive --agree-tos -m [email protected]
# Copy certificates from /etc/letsencrypt/live/... to ./certs and then:
sudo docker compose up -d

Başlatma sırasında çalıştır ve hizmeti sürdür

Hizmetlerin yeniden başlatmanın ardından çalışmaya devam etmesini sağlamak için:

sudo systemctl enable docker

Ek olarak, docker-compose'da yeniden başlat: durdurulmadığı sürece Kullanıldı. Gerekirse, docker-compose için bir systemd birimi oluşturulabilir.

Pratik güvenlik ipuçları

  • PHP konteynerinde root olmayan bir kullanıcı kullanmak (uygulama kullanıcısı (yukarıdaki Dockerfile'da)
  • Veritabanı portuna erişimi güvenlik duvarı (UFW) ile kısıtlama:
sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw enable

Diğer öneriler:

  • Veritabanı biriminin düzenli yedeğinin alınması (db_veri) ve sunucunun dışında depolamak
  • HTTPS ve HSTS'yi Etkinleştirme
  • Parolaları saklamak için gizli anahtarlar veya anahtar yönetim hizmetleri kullanmak (Docker gizli anahtarları veya anahtar yönetim hizmetleri)
  • Aşağıdakiler gibi güvenlik araçlarını kullanın: başarısız2ban Ve gerekirse WAF gibi ModSecurity
  • Trafiği korumak için bir CDN veya DDoS saldırılarına karşı koruma hizmeti kullanın.

Üretim ortamları için performans optimizasyonu

  • OPcache'i etkinleştirme php.ini:
    opcache.memory_consumption=256
    opcache.validate_timestamps=0
  • php-fpm'yi (pm = dinamik veya isteğe bağlı) kurmak ve artırmak maksimum_çocuk Sunucu belleğine göre
  • Redis'i önbellek ve oturumlar için kullanma
  • Statik dosyalar için CDN kullanmak
  • Yatay ölçeklendirme: Yük dengeleyici (NGINX veya HAProxy) kullanarak uygulama hizmetinin birden fazla örneğini çalıştırmak.
  • Gerçek zamanlı işlemler ve kuyruklar için ayrı çalışanlar ve denetçiler veya hizmetler kullanın.

Sıradaki çalışanlar ve Horizon

Kuyruk çalışanlarını çalıştırmak için docker-compose'a ayrı bir servis ekleyin. Örnek:

worker:
  build: ...
  command: php /var/www/html/artisan queue:work --sleep=3 --tries=3
  depends_on: [app, redis]
  restart: unless-stopped

Laravel Horizon için, PHP ve Horizon'ın kurulu olduğu özel bir konteyner kullanmak ve bunu Nginx/kimlik doğrulama sisteminin arkasına yerleştirmek en iyisidir.

Konum ve veri merkezi seçimiyle ilgili ipuçları

Yer seçimi için pratik ipuçları:

  • En düşük gecikme süresi için, son kullanıcılarınıza veya hedef noktanıza yakın bir konumdaki sunucuyu seçin. Servis sağlayıcısı daha fazlasını sunar. 85 küresel lokasyon Öyle oldu.
  • Oyun oynayanlar veya alım satım yapanlar için düşük ping süresine ve optimize edilmiş bir BGP ağına sahip bir konum seçin.
  • Yapay zeka işleme ve görüntü oluşturma için GPU donanımlı sunucular kullanın.
  • DDoS saldırılarına karşı koymak için DDoS korumasına sahip sunucular ve CDN kullanın.

Yedeklemeler, izleme ve kayıtlar

  • Konteyner günlükleri ile docker günlükleri Erişilebilir durumdadırlar; merkezi toplama için ELK veya Prometheus+Grafana kullanın.
  • Günlük veritabanı yedeklemesi ve periyodik geri yükleme testi
  • CI/CD'de CPU/RAM kaynaklarının, uygulama ve hata takibinin izlenmesi.

Genel hata ayıklama

  • 502 Geçersiz Ağ Geçidi Hatası: Uygulama kapsayıcısında php-fpm'nin çalıştığından ve fastcgi_pass'ın doğru adrese ayarlandığından emin olun (uygulama:9000) belirtmek için.
  • Veritabanı bağlantı sorunu: .env değişkenlerini, Docker ağını ve MySQL günlüklerini kontrol edin.
  • Dosya izinleri: İzin hataları durumunda, depolama ve bootstrap/cache klasörlerinin sahipliğini ayarlayın:
sudo chown -R 1000:1000 src/storage src/bootstrap/cache

Sonuç ve nihai öneri

Docker Compose kullanarak Laravel'i Ubuntu 22.04 üzerinde çalıştırmak, geliştirme ve dağıtımı basit, tekrarlanabilir ve ölçeklenebilir hale getirir. Bu kılavuzu takip ederek güvenli, hızlı ve bakımı kolay bir üretim ortamı kurabilirsiniz: Nginx ile PHP-FPMMySQL/MariaDB veya PostgreSQL, önbellek ve kuyruk için Redis ve SSL ayarları ve izleme.

İlgili hizmetler

Bu mimariyi profesyonelce uygulamak için aşağıdaki hizmetlerden yararlanabilirsiniz:

  • Bundan fazla 85 küresel lokasyon Gecikmeyi azaltmak ve sunucuyu kullanıcıya veya hedefe daha yakın hale getirmek için
  • Yapay zeka hesaplama ve işleme için grafik sunucusu (GPU)
  • Düşük ping ve optimize edilmiş BGP ağına sahip, alım satım için VPS.
  • Düşük ping ve DDoS korumasına sahip oyun VPS'si
  • Hosting ve alan adı kayıt hizmetleri, CDN, ağ ve BGP çözümleri
  • Yüksek performanslı bulut sunucusu ve yönetilen yedekleme

Sıkça Sorulan Sorular

Ayrıca Şunları da Beğenebilirsiniz
Ubuntu'ya Kokpit Nasıl Kurulur-24.04

Cockpit Ubuntu 24.04'e nasıl kurulur?

Cockpit, sunucular için basit ve grafiksel bir şekilde izleme ve servisleri, depolamayı, günlükleri ve kullanıcıları yönetme olanağı sağlayan web tabanlı bir yönetim panelidir. Bir VPS'de Cockpit kullanmak, sistem yöneticilerinin birçok sunucu yönetim görevini komut satırına ihtiyaç duymadan gerçekleştirmelerini sağlar. Aşağıda, Cockpit'i adım adım nasıl kuracağınızı, güvenliği nasıl yapılandıracağınızı ve erişeceğinizi adım adım açıklayacağız.