2019独角兽企业重金招聘Python工程师标准>>>
接前一个 https://blog.csdn.net/u010953609/article/details/89337660
LNMP搭建之后,就需要实际部署自己的网站,这里选择 ThinkPHP 5 完整版作为样本进行测试
既然 LNMP 架构搭建好了,接下来就是填充“水泥”
-
- WEB 对应的WEB目录
-
- php 脚本对应的目录,一般都在WEB目录一起
-
- mysql 数据
mysql 数据目录在开始项目时,一般都是一个空目录,所以,为了能将 这个“水泥”装填进去,另外建立一个可以操作 mysql 数据的容器:phpmyadmin
docker 和 linux 脚本熟练的话,可直接将 mysql 初始化数据、密码写入 start.sh 脚本,初级阶段直接开一个 phpmyadmin 比较直观!
环境:
visualbox ubuntu 1804 本地删除了 mysql
1、准备项目目录
直接 cp 上一次 搭建 LNMP 的整个目录,然后下载 TP 5 的完整版并解压到本次项目的 nginx/www 目录下
以下是我的项目结构,项目名称就叫 thinkphp
** mysql/data 内容太多,我 tree 的时候先删除了 ** ThinkPHP 库 层次很多,这里只列举到 4 层
~/compose$ tree thinkphp/ -L 4
thinkphp/├── docker-compose.yml├── mysql│ ├── data│ └── Dockerfile├── nginx│ ├── conf.d│ │ └── default.conf│ ├── Dockerfile│ └── www│ ├── html│ │ ├── index.php│ │ ├── mysqli.php│ │ ├── pdo2.php│ │ └── pdo.php│ └── tp5│ ├── application│ ├── build.php│ ├── CHANGELOG.md│ ├── composer.json│ ├── composer.lock│ ├── extend│ ├── index.php│ ├── LICENSE.txt│ ├── public│ ├── README.md│ ├── runtime│ ├── think│ ├── thinkphp│ └── vendor└── phpfpm└── Dockerfile14 directories, 17 files
2、构建模版文件
-
先使用 ss 查看 WEB 端口、php 、mysql 端口 、phpmyadmin 端口 以下是我将要使用的端口 ss -tlnp |grep 83 ss -tlnp |grep 9003 ss -tlnp |grep 3309 ss -tlnp |grep 9997
-
使用 docker ps -a 查看已经使用的容器名字,以免冲突
-
我的 docker-compose.yml 如下 ~/compose/thinkphp$ cat docker-compose.yml
version: "3"services:web_server:build: ./nginx container_name: nginx-2networks:- tp5-netdepends_on:- phpfpm ports:- "83:80"- "4431:443"volumes:- ./nginx/www/tp5/public:/var/www/html- ./nginx/conf.d:/etc/nginx/conf.d db_server:build: ./mysql container_name: mysql57-2networks:- tp5-net- phpmyadmin-netenvironment:MYSQL_ROOT_PASSWORD: 123456ports:- "3309:3306"volumes:- ./mysql/data:/var/lib/mysqlphpfpm:build: ./phpfpm container_name: phpfpm72networks:- tp5-netdepends_on:- db_server ports:- "9003:9000"volumes:- ./nginx/www/tp5:/var/www/html- ./nginx/conf.d:/etc/nginx/conf.dphpmyadmin:image: phpmyadmin/phpmyadmincontainer_name: phpmyadminlinks:- db_server:db# external_links:# - db_server:dbnetworks:- tp5-net- phpmyadmin-netdepends_on:- db_serverports:- 9997:80networks:tp5-net:phpmyadmin-net:
*** 其中 links 和 external_links 两个都不推荐使用,我也不知道还有什么可以代替 *** 以上 links 和 external_links 经过实测,都是可以的
3、 测试
** 记得先 docker-compose up -d
本地测试: curl 127.0.0.1:83 curl 127.0.0.1:9997
浏览器测试: http://192.168.1.193:83
http://192.168.1.193:9997
4、 错误处理
- phpmyadmin 输入了 root 密码 123456,确认是正确的,但是,总是提示错误
docker-compose.yml 中 phpmyadmin 容器加上links (我是先测试了 external_links )之后, OK!
-
其他错误 基本上都是 名称冲突,因为都是 cp 过来的,总有一些修改漏掉了 还有就是端口冲突
** 每次修改完之后,一定要 restart 修改过的容器
最简单的方式就是 docker-compose down docker-compose up -d
5、 后记
以上都是学习中的一些点滴记录,过程都比较粗糙 建议多参考 phpmyadmin https://hub.docker.com/r/phpmyadmin/phpmyadmin/dockerfile
个人觉得: 1. nginx 和 php fpm 分成 2 个容器有些多余 2. 这个 phpmyadmin 就是直接在 php fpm alpine 容器下 安装了 nginx 3. 以上 docker-compose.yml 中 nginx 和 php fpm 容器的 volume 实际都对应的是同一个目录 4. nginx 对应到 thinkphp 的 public , php 对应到项目根目录,这应该是因为 TP 项目结构导致的,但是,nginx 配置里面 2 个 root 又正好反过来了!这里感觉很别扭!主要是 nginx 理解不透! 5. 如果 nginx 和 php 在同一个容器,上面这个别扭的问题就应该不存在了
以下是我的 nginx 网站配置文件
~/compose/thinkphp/nginx/conf.d$ cat default.conf
server {listen 80;server_name localhost;location / {root /var/www/html;index index.html index.htm index.php;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root /var/www/html;}location ~ \.php$ {# root /var/www/html;root /var/www/html/public;# fastcgi_pass 127.0.0.1:9000; # 必须修改为compose模版文件中php容器名字fastcgi_pass phpfpm72:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 修改为$document_rootinclude fastcgi_params;}
}