پرش به مطلب اصلی

داکرایز کردن اپلیکیشن‌های PHP/Laravel

این راهنما دستورالعمل‌های دقیقی برای کانتینرسازی اپلیکیشن‌های PHP با استفاده از Docker، همراه با پیکربندی‌های خاص برای پروژه‌های Laravel و PHP خام ارائه می‌دهد.

ساختار پروژه

.
├── Dockerfile
├── docker
│ ├── nginx
│ │ ├── default.conf
│ │ └── Dockerfile
│ └── php
│ └── www.conf
├── docker-compose.yml
└── src/
└── your-application-files

فایل‌های پیکربندی Docker

داکرفایل php
# ایمیج پایه
FROM php:8.2-fpm

# آرگومان‌های تعریف شده در docker-compose.yml
ARG user=www-data
ARG uid=1000

# نصب وابستگی‌های سیستم
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip \
libzip-dev

# پاک کردن کش
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# نصب افزونه‌های PHP
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip

# دریافت آخرین نسخه Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# ایجاد کاربر سیستم
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
chown -R $user:$user /home/$user

# کپی فایل کانفیگ
COPY ./docker/php/www.conf:/usr/local/etc/php-fpm.d/www.conf

# تنظیم دایرکتوری کاری
WORKDIR /var/www

# کپی دایرکتوری اپلیکیشن موجود
COPY ./src .

# تنظیم مجوزها
RUN chown -R $user:$user /var/www
USER $user

# در معرض قرار دادن پورت 9000
EXPOSE 9000

CMD ["php-fpm"]
داکرفایل nginx
# docker/nginx/Dockerfile
FROM nginx:alpine

COPY ./src /var/www
COPY docker/nginx/default.conf /etc/nginx/conf.d/default.conf

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]
تنظیمات nginx
# docker/nginx/default.conf
server {
listen 80;
server_name localhost;
root /var/www/public; # برای Laravel
# root /var/www; # برای پروژه‌های PHP خام
index index.php index.html;

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

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

location ~ /\.(?!well-known).* {
deny all;
}
}
تنظیمات php
# docker/php/www.conf
[www]
user = www-data
group = www-data
listen = 0.0.0.0:9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 500
docker-compose
version: '3.8'

services:
# اپلیکیشن PHP
app:
build:
context: .
dockerfile: Dockerfile
args:
user: www-data
uid: 1000
container_name: app
restart: unless-stopped
volumes:
- ./src:/var/www
- ./docker/php/www.conf:/usr/local/etc/php-fpm.d/www.conf
networks:
- app-network

# سرویس Nginx
nginx:
build:
context: .
dockerfile: docker/nginx/Dockerfile
container_name: nginx
restart: unless-stopped
ports:
- "80:80"
volumes:
- ./src:/var/www
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
networks:
- app-network

networks:
app-network:
driver: bridge

دستورالعمل‌های استقرار

ساخت و راه‌اندازی کانتینرها

اگر می‌خواهید از kli برای استقرار پروژه‌تان با فایل docker-compose استفاده کنید، از این دستور را بزنید:

kli compose up -d

راه‌اندازی مخصوص Laravel

# نصب وابستگی‌ها
kli exec app "composer install"

# تولید کلید اپلیکیشن
kli exec app "php artisan key:generate"

# تنظیم مجوزهای مناسب
kli exec app "chown -R www-data:www-data storage bootstrap/cache"

پیکربندی محیط

یک فایل .env در مسیر اصلی پروژه خود ایجاد کنید:

APP_NAME=YourApp
APP_ENV=production
APP_KEY=your-app-key
APP_DEBUG=false
APP_URL=http://localhost

DB_CONNECTION=mysql
DB_HOST=your-mysql-host
DB_PORT=3306
DB_DATABASE=your_database
DB_USERNAME=your_username
DB_PASSWORD=your_password

بهترین شیوه‌های امنیتی

ملاحظات امنیتی
  • همیشه از کاربران غیر-root در کانتینرها استفاده کنید
  • مجوزهای فایل مناسب را پیاده‌سازی کنید
  • از متغیرهای محیطی برای داده‌های حساس استفاده کنید
  • به‌روزرسانی‌های امنیتی منظم برای ایمیج‌های پایه
  • پیاده‌سازی SSL/TLS مناسب در محیط تولید

بهینه‌سازی عملکرد

نکات عملکردی
  • فعال‌سازی OPcache برای PHP
  • پیکربندی تنظیمات مناسب PHP-FPM
  • پیاده‌سازی کش‌کردن Nginx
  • استفاده دقیق از volume mount‌ها در محیط تولید