对于普通网站开发来说,使用PHP具有开发更快速便捷,部署占用更小的内存等优势。而基于Docker环境的部署,和传统的部署相比,更是简化了环境配置以及维护迁移,占用更少的时间。
如果是一个新的服务器,整个步骤也就三大步即完成:
第一步,准备用于搭建web的docker环境:
yum install -y dockersystemctl start docker分别是安装,启动docker (linux centos 7+环境)
第二步:安装基于docker的PHP环境:
不加版本号默认会拉取最新版本,可以时候docker search 来查找要拉取的镜像资源。比如我这里使用的版本是7.4-fpm:
docker pull php:7.4-fpm
接着启动PHP容器:
docker run --name mytest -d -p 8888 -v /home/php/:/home/php/ php:7.4-fpm
这里php运行时将会从宿主机的/home/php/下获取文件。因为是要使用nginx做代理,所以不需要对外开放端口。
当然也可以不使用nginx,直接对外使用80端口,比如 -p 80:9999 即外网使用80端口映射到对应docker的9999端口上。
因为是测试,为了排除其他干扰项,仅仅验证环境是否正常,在宿主机/home/php/ 文件夹下,新生成一个简单php内容文件:
vim index.php
打入内容:
保存并退出。
第三步,拉取安装Nginx,并配置:
不加版本号默认会拉取最新版本,比如我这里使用Nginx 1.20版本:docker pull nginx:1.20.0
接着启动nginx容器:
docker run -d -p 80:80 --name nginx20 -v /home/nginx/nginx.conf:/etc/nginx/nginx.conf nginx:1.20.0
-v是容器文件挂载路径。nginx启动时的配置文件会从你宿主机的/home/nginx/nginx.conf获取,所以应在启动前保证有这个文件存在,这个配置文件可以下载个nginx安装包,从中获取。
到这里只剩最后一步,配置nginx的nginx.conf文件。
vim编辑宿主机的nginx.conf文件,增加location配置:
location ~\.php$ {root /home/php/; #对应主机挂在到php容器中的代码目录fastcgi_pass 172.17.0.x:8888; #此地址为php容器的内网ipfastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
上面配置中 root是docker内的路径,对应宿主机的也是/home/php/下;
fastcgi_pass 对应用了PHP容器的ip,可以通过docker inspect 容器Id|grep IP 查到。端口是PHP启动时的端口。
然后docker restart nginxId 重启nginx。
浏览器进行访问测试: xxxxx/index.php
docker运行php项目,页面提示 502 bad gateway
页面报错了:Nginx提示: 502 bad gateway思来想去,觉得配置没有问题。
折腾了半天,问题解决了,自己的经验主义,随机给了PHP端口,以为启动的哪个就能映射到。
解决方法: nginx配置改为9000时,页面能顺利访问到。
location ~\.php$ {root /home/php/; #对应主机挂在到php容器中的代码目录fastcgi_pass 172.17.0.x:9000; #此地址为php容器的内网ipfastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
当然了,也可以不用9000,得自己修改PHP的配置文件后才能生效。
相关阅读:
使用docker快速部署wordpress以及常见问题: https://shannote.com/archives/docker-install-wordpress.html
刷新