今天朋友给我讲给客户部署 PHP 网站一直遇到问题让我帮助,我看了下系统环境,宝塔面板,好几个 Nginx 程序,还有 Apache 服务器,乱七八糟的什么都有,各个服务器占用 80 443 端口,PHP 环境也有问题,然后我觉得也别折腾主机环境了,把程序该卸载卸载了,进程该结束结束了,使用 Docker 部署吧,把环境隔离开,然后就是整的这些东西。
1# 所有文件都在 /data/docker 目录下2
3nginx/4----ssl/5--------域名证书6----nginx.conf7php/8----web/9--------网站项目文件构建 PHP 镜像
PHP 的官方镜像少了很多拓展,所以自己构建一个包含程序所有依赖的镜像。
dockerfile 文件
1# 使用PHP官方镜像作为基础依赖2FROM php:7.4-fpm3# 更改软件源为清华源,为了后续的安装加速,PHP官方镜像使用Debian作为基础镜像4# 这里安装了gd mysqli pdo pdo_mysql这几个拓展5# 并且安装这些拓展的环境依赖6RUN apt install apt-transport-https ca-certificates && \7 echo > /etc/apt/sources.list && \8 echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \9 echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \10 echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \11 apt-get update && apt-get install -y \12 libpng-dev \13 libjpeg-dev \14 libfreetype6-dev \15 && docker-php-ext-configure gd --with-freetype --with-jpeg \1 collapsed line
16 && docker-php-ext-install gd mysqli pdo pdo_mysql使用 docker build 构建镜像
1docker build image:tag .nginx 配置文件和域名证书
nginx.conf 文件
1user nginx;2worker_processes auto;3
4error_log /var/log/nginx/error.log;5pid /run/nginx.pid;6
7events {8 worker_connections 1024;9}10
11http {12 include /etc/nginx/mime.types;13 default_type application/octet-stream;14
15 server {17 collapsed lines
16 listen 443 ssl;17
18 root /var/www/html;19 index index.php index.html;20 ssl_certificate /etc/nginx/ssl/domain.com.pem;21 ssl_certificate_key /etc/nginx/ssl/domain.com.key;22 location / {23 try_files $uri $uri/ =404;24 }25
26 location ~ \.php$ {27 include fastcgi_params;28 fastcgi_pass app-php:9000;29 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;30 }31 }32}使用 docker-compose 管理应用程序容器编排
docker-compose.yml 文件
1version: "3.8"2services:3 app-nginx:4 image: nginx:latest5 container_name: app-nginx6 ports:7 - "38888:443"8 - "38887:80"9 - "443:443"10 - "80:80"11 volumes:12 - /data/docker/nginx/ssl:/etc/nginx/ssl13 - /data/docker/nginx/nginx.conf:/etc/nginx/nginx.conf14 - /data/docker/php/web:/var/www/html15 depends_on:32 collapsed lines
16 - app-php17 networks:18 - app-network19
20 app-php:21 image: php-mysql:0.0.222 container_name: app-php23 volumes:24 - /data/docker/php/web:/var/www/html25 networks:26 - app-network27
28 app-mysql:29 image: mysql:latest30 container_name: app-mysql31 environment:32 MYSQL_ROOT_PASSWORD: root@pass202533 MYSQL_DATABASE: my_database34 MYSQL_USER: user35 MYSQL_PASSWORD: user@pass202536 ports:37 - "3306:3306"38 volumes:39 - /data/docker/mysql-data:/var/lib/mysql40 networks:41 - app-network42
43volumes:44 mysql-data:45
46networks:47 app-network:完事之后使用 docker-compose up -d 运行所有容器