داکرایز کردن اپلیکیشنهای 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ها در محیط تولید