KylinVnne / php-nginx

docker-compose 编排的 php-fpm 和 nginx 容器,默认安装了一些常用扩展,支持多应用,开箱即用

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

php-nginx

使用 docker-compose 编排 php-fpm 和 nginx 容器,支持多应用

目录说明

  • www/, 源码,如果有多个应用,使用子目录区分
  • nginx/logs/, 虚拟主机日志,多应用同上
  • nginx/conf.d/, 虚拟主机配置,多应用同上
  • php-fpm/, Dockerfile 及 php 相关配置
  • sh/,shell 脚本

镜像说明

  • nginx,官方 nginx:1.17.3
  • php-fpm,基于 php:7.1-fpm 的自定义镜像,除内置基础扩展外,该镜像已安装 gd、pdo_mysql、mcrpyt、zip、opcache、mongodb 扩展,如果需要安装其他扩展,可修改 Dockerfile

docker-compose.yml

  • 生产环境将 restart 备注开启
  • 如果需要时间同步,将 localtime 备注开启(不兼容 Darwin)
  • 如果默认网络冲突,需要配置网络,将 networks 相关备注开启

nginx、php-fpm 配置优化

nginx、php-fpm 部分配置优化如下,请根据机器配置自行调整,相关文件及目录已挂载

  • nginx.conf
    • client_max_body_size 1024m,大文件上
    • proxy_read_timeout 240s,慢脚本支持 for proxy(java etc.)
    • fastcgi_read_timeout 240s,慢脚本支持 for fastcgi(php-fpm etc.)
    • worker_processes 4,需要依据机器调优,CPU 核心数grep 'model name' /proc/cpuinfo | wc -l
    • worker_connections 1024,需要依据机器调优,最大文件句柄数ulimit -n
    • gzip 相关已开启
    • log 日志重定向
  • www.conf
    • pm 相关优化,从上到下,dynamic 100 75 50 100,需要依据机器调优,内存使用率
  • php.ini
    • post_max_size = 1024M,大文件上传
    • upload_max_filesize = 1024M,大文件上传
    • date.timezone = Asia/Shanghai
  • opcache.ini
    • enable 128M 60s

docker_nginx_log_cutting.sh

  • 自动切割打包 ./nginx/logs/ 下的所有项目
  • 保存近 14 天的日志压缩包

php-fpm

为了让容器内脚本可写目录和文件,如日志(runtime/、web/),容器目录需要设置 www-data 用户和组

docker exec -it $containerIdorName chown -R www-data:www-data /var/www
// 脚本化
ssh $ip "docker exec $containerIdorName chown -R www-data:www-data /var/www"

使用

  1. 安装 docker-ce
yum update -y
yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce
  1. 安装 docker-compose
curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
  1. 配置容器日志
cat > /etc/docker/daemon.json << EOF
{
    "log-driver": "json-file",
     "log-opts": {
        "max-size": "50m",
        "max-file": "1"
     }
}
EOF
  1. 配置 nginx 日志切割
# chmod +x sh/docker_nginx_log_cutting.sh
# crontab
0 0 * * * /data/php-nginx/sh/docker_nginx_log_cutting.sh php-nginx_nginx_1 /data/php-nginx/nginx/logs/ &> /dev/null
  1. 启动 docker
# centos7+
systemctl enable docker    # 开机自启
systemctl start docker     # 启动

docker -v
  1. 启动 php-nginx
# cd 到 www 目录,拉取代码
# 新增 nginx/conf.d/${appName}.conf,配置虚拟主机
# 新增 ningx/logs/${appName},创建应用 nginx 日志目录
docker-compose up -d --build

About

docker-compose 编排的 php-fpm 和 nginx 容器,默认安装了一些常用扩展,支持多应用,开箱即用


Languages

Language:Shell 78.6%Language:Dockerfile 20.5%Language:PHP 0.9%