نصب و راه‌اندازی لاراول با داکر کامپوز روی اوبونتو 22.04 — راهنمای جامع
در این راهنما به صورت قدم‌به‌قدم با نحوه نصب و پیکربندی لاراول با استفاده از داکر کامپوز روی اوبونتو 22.04 آشنا شوید و محیط تولیدی امن و بهینه ایجاد کنید.

نصب و راه‌اندازی لاراول با داکر کامپوز روی اوبونتو 22.04 — راهنمای جامع

این مقاله به شما نشان می‌دهد که چگونه می‌توانید با استفاده از Docker Compose، یک اپلیکیشن لاراول را روی اوبونتو 22.04 نصب و راه‌اندازی کنید. با بررسی گام‌به‌گام این فرآیند، می‌توانید به راحتی محیط تولیدی امن و بهینه‌ای ایجاد کنید.
0 اشتراک گذاری
0
0
0
0

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

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

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

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

  • یک سرور Ubuntu 22.04 با دسترسی root یا کاربر دارای sudo
  • Docker (نسخه پایدار) و Docker Compose (یا استفاده از docker compose پلاگین)
  • پورت‌های باز: 80/443 برای وب؛ در صورت نیاز 3306 یا 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 استفاده کنید.

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

docker --version
docker compose version

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

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

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

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;
    }
}

نکته: در معماری‌هایی با پروکسی معکوس یا چند سرویس، می‌توانید 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 یا 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 یا سرویس‌های مدیریت کلید)
  • استفاده از ابزارهای امنیتی مثل fail2ban و در صورت نیاز 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 لوکیشن جهانی دارد.
  • برای گیمرها یا تریدرها، لوکیشنی با پینگ پایین و شبکه 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 و مانیتورینگ.

خدمات مرتبط

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

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

سؤالات متداول

شاید دوست داشته باشید
How-to-Install-Cockpit-on-Ubuntu-24.04

نحوه نصب Cockpit در اوبونتو 24.04

Cockpit یک پنل مدیریتی تحت وب برای سرورها است که امکان نظارت، مدیریت سرویس‌ها، ذخیره‌سازی، لاگ‌ها و کاربران را به شکلی ساده و گرافیکی فراهم می‌کند. استفاده از Cockpit روی VPS به مدیران سیستم این امکان را می‌دهد که بسیاری از کارهای ادمین سرور را بدون نیاز به خط فرمان انجام دهند. در ادامه، نحوه نصب، پیکربندی امنیتی و دسترسی به Cockpit را گام‌به‌گام بررسی می‌کنیم.
راه اندازی انواع تانل های میکروتیک به میکروتیک یا ابونتو — ویژگی، امنیت و سرعت

راه اندازی انواع تانل های میکروتیک به میکروتیک یا ابونتو — ویژگی، امنیت و سرعت

این مقاله راهنمایی کامل برای راه اندازی تانل های میکروتیک به میکروتیک و ابونتو را ارائه می‌دهد. با بررسی انواع تانل‌ها و مقایسه امنیت و عملکرد، نکات کاربردی برای بهینه‌سازی سرعت و امنیت ارائه می‌شود. مناسب برای مدیران شبکه، تریدرها و گیمرها.