Ubuntu 22.04 Üzerinde Docker Compose ile Laravel Kurulumu ve Yapılandırması — Kapsamlı Bir Kılavuz
در این راهنما به صورت قدم‌به‌قدم با نحوه نصب و پیکربندی لاراول با استفاده از داکر کامپوز روی اوبونتو 22.04 آشنا شوید و محیط تولیدی امن و بهینه ایجاد کنید.

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

چطور Laravel را با Docker Compose روی Ubuntu 22.04 نصب و راه‌اندازی کنیم؟

در این راهنمای عملی و فنی، گام‌به‌گام نصب و پیکربندی یک اپلیکیشن Laravel Kullanarak Docker Compose روی سرور Ubuntu 22.04 شرح داده شده است. هدف این مطلب فراهم کردن دستورالعمل‌های قابل تکرار برای توسعه‌دهندگان، تیم‌های DevOps و مدیران فنی است تا یک محیط تولیدی امن، قابل‌اسکیل و قابل نگهداری به‌وجود آورند.

چک‌لیست اولیه

قبل از شروع، موارد زیر را آماده کنید:

  • Bir sunucu Ubuntu 22.04 با دسترسی root یا کاربر دارای sudo
  • Liman işçisi (نسخه پایدار) و Docker Compose (یا استفاده از docker compose پلاگین)
  • پورت‌های باز: 80/443 برای وب؛ در صورت نیاز 3306 Veya 5432 برای دیتابیس (ترجیحاً محدود به IPها)
  • فضای دیسک مناسب (SSD پیشنهاد می‌شود) و دسترسی به یکی از بیش از 85 لوکیشن جهانی در صورت استفاده از خدمات ابری
  • نام دامنه و رکورد DNS که به IP سرور اشاره کند

نصب Docker و Docker Compose روی Ubuntu 22.04

دستورات زیر را روی سرور اجرا کنید تا Docker و پلاگین docker compose نصب شوند:

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

سپس از سیستم خارج و دوباره وارد شوید یا از newgrp docker Kullanmak.

برای بررسی نصب:

docker --version
docker compose version

ساختار پیشنهادی پروژه

پیشنهاد می‌شود پوشه پروژه به شکل زیر سازمان‌دهی شود تا نگهداری و توسعه ساده‌تر باشد:

  • project-root/
    • docker/
      • nginx/default.conf
      • php/Dockerfile
    • src/ — کد Laravel (یا mount)
    • docker-compose.yml
    • .çevre

Dockerfile پیشنهادی برای PHP-FPM (PHP 8.1)

فایلی با مسیر docker/php/Dockerfile مانند مثال زیر بسازید:

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

نسخه پیشنهادی docker-compose.yml برای اجرای اپلیکیشن، وب‌سرور، دیتابیس و Redis:

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 (docker/nginx/default.conf)

نمونه کانفیگ Nginx برای هدایت درخواست‌ها به PHP-FPM (app):

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: در معماری‌هایی با پروکسی معکوس یا چند سرویس، می‌توانید Nginx را در لایه لود بالانسر یا CDN قرار دهید.

آماده‌سازی کد و نصب وابستگی‌ها

اگر پروژه Laravel ندارید، می‌توانید با Composer یک پروژه جدید بسازید:

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

سپس برای ساخت و اجرای کانتینرها:

docker compose build
docker compose up -d

برای اجرای دستورات Composer و Artisan داخل کانتینر PHP:

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

تنظیم فایل .env برای Docker

نمونه تنظیمات .env منطبق با docker-compose:

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 و Let’s Encrypt — دو راه ساده

برای فعال‌سازی HTTPS دو راه ساده وجود دارد:

  • استفاده از Certbot روی host: Nginx را موقتا متوقف کنید، گواهی صادر شده را در پوشه ./certs قرار دهید و آن را به کانتینر mount کنید.
  • استفاده از راهکار خودکار: ابزارهایی مانند docker-letsencrypt-nginx-proxy-companion Veya Traefik برای مدیریت خودکار گواهی مناسب‌اند.

مثال سریع با Certbot:

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

راه‌اندازی در بوت و حفظ سرویس

برای اطمینان از اجرای سرویس‌ها پس از ریبوت:

sudo systemctl enable docker

علاوه بر این، در docker-compose از restart: unless-stopped استفاده شده است. در صورت نیاز می‌توان یک unit systemd برای docker-compose ساخت.

نکات امنیتی عملی

  • استفاده از کاربر غیرِ root در کانتینر PHP (appuser در Dockerfile بالا)
  • محدود کردن دسترسی به پورت دیتابیس با فایروال (UFW):
sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw enable

سایر توصیه‌ها:

  • بکاپ‌گیری منظم از حجم دیتابیس (db_data) و نگهداری آن خارج از سرور
  • فعال‌سازی HTTPS و HSTS
  • استفاده از secrets یا سرویس مدیریت کلید برای نگهداری رمزها (Docker secrets یا سرویس‌های مدیریت کلید)
  • استفاده از ابزارهای امنیتی مثل başarısız2ban و در صورت نیاز WAF مانند ModSecurity
  • استفاده از CDN یا سرویس Anti-DDoS برای محافظت از ترافیک

بهینه‌سازی عملکرد برای محیط تولید

  • فعال‌سازی OPcache در php.ini:
    opcache.memory_consumption=256
    opcache.validate_timestamps=0
  • تنظیم php-fpm (pm = dynamic یا ondemand) و افزایش max_children مطابق با حافظه سرور
  • استفاده از Redis برای cache و session
  • استفاده از CDN برای فایل‌های استاتیک
  • Horizontal scaling: اجرای چند instance از سرویس app با load balancer (NGINX یا HAProxy)
  • برای real-time و queue از workerهای جداگانه و supervisor یا سرویس‌های مجزا استفاده کنید

Queue workers و Horizon

برای اجرای queue workers یک سرویس جداگانه در docker-compose اضافه کنید. نمونه:

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

برای Laravel Horizon بهتر است از یک کانتینر اختصاصی با PHP و نصب Horizon استفاده کرده و آن را پشت Nginx/احراز هویت قرار دهید.

نکات مرتبط با لوکیشن و انتخاب دیتاسنتر

نکات عملی برای انتخاب لوکیشن:

  • برای کمترین latency سرور را در لوکیشن نزدیک به کاربران نهایی یا مقصد انتخاب کنید. شرکت ارائه‌دهنده خدمات بیش از 85 küresel lokasyon دارد.
  • برای گیمرها یا تریدرها، لوکیشنی با پینگ پایین و شبکه BGP بهینه انتخاب کنید.
  • برای پردازش‌های AI و رندرینگ از سرورهای دارای GPU استفاده کنید.
  • برای مقاومت در برابر DDoS از سرورها و CDN دارای محافظت Anti-DDoS بهره ببرید.

پشتیبان‌گیری، مانیتورینگ و لاگ‌ها

  • لاگ‌های کانتینرها با docker logs قابل دسترسی هستند؛ برای جمع‌آوری مرکزی از ELK یا Prometheus+Grafana استفاده کنید.
  • بکاپ دیتابیس روزانه و انجام تست Restore دوره‌ای
  • مانیتورینگ منابع CPU/RAM، اپلیکیشن و پیگیری خطاها در CI/CD

اشکال‌زدایی رایج

  • خطای 502 Bad Gateway: بررسی کنید php-fpm در کانتینر app اجرا شود و fastcgi_pass به آدرس درست (app:9000) اشاره کند.
  • مشکل اتصال به دیتابیس: متغیرهای .env، شبکه docker و لاگ‌های MySQL را بررسی کنید.
  • مجوزهای فایل: در صورت خطاهای permission، مالکیت پوشه‌های storage و bootstrap/cache را تنظیم کنید:
sudo chown -R 1000:1000 src/storage src/bootstrap/cache

نتیجه‌گیری و توصیه نهایی

استفاده از Docker Compose برای اجرای Laravel روی Ubuntu 22.04 توسعه و استقرار را ساده، قابل تکرار و قابل مقیاس می‌کند. با پیروی از این راهنما می‌توانید یک محیط تولیدی امن، سریع و قابل نگهداری راه‌اندازی کنید: PHP-FPM همراه با Nginx، MySQL/MariaDB یا PostgreSQL، Redis برای cache و queue، و تنظیمات SSL و مانیتورینگ.

خدمات مرتبط

برای پیاده‌سازی حرفه‌ای این معماری می‌توانید از خدمات زیر بهره ببرید:

  • Bundan fazla 85 küresel lokasyon برای کاهش latency و نزدیک کردن سرور به کاربر یا مقصد
  • سرور گرافیکی (GPU) برای محاسبات AI و رندرینگ
  • VPS مخصوص ترید با پینگ پایین و شبکه BGP بهینه
  • VPS مخصوص گیم با پینگ پایین و Anti-DDoS
  • خدمات هاست و ثبت دامنه، CDN و راهکارهای شبکه و BGP
  • سرور ابری با عملکرد بالا و بکاپ مدیریت‌شده

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.
MikroTik veya Ubuntu'ya çeşitli MikroTik tünel türlerinin kurulumu — özellikler, güvenlik ve hız

MikroTik veya Ubuntu'ya çeşitli MikroTik tünel türlerinin kurulumu — özellikler, güvenlik ve hız

Bu makale, MikroTik'ten MikroTik'e ve Ubuntu'ya tünel kurulumu için eksiksiz bir kılavuz sunmaktadır. Tünel türlerini inceler ve güvenlik ile performansı karşılaştırarak hızı ve güvenliği optimize etmek için pratik ipuçları verir. Ağ yöneticileri, yatırımcılar ve oyuncular için uygundur.