docker-compose 学习:部署 ThinkPHP 5 网站

接前一个 https://blog.csdn.net/u010953609/article/details/89337660php

LNMP搭建以后,就须要实际部署本身的网站,这里选择 ThinkPHP 5 完整版做为样本进行测试

既然 LNMP 架构搭建好了,接下来就是填充“水泥”

    1. WEB 对应的WEB目录
    1. php 脚本对应的目录,通常都在WEB目录一块儿
    1. mysql 数据

mysql 数据目录在开始项目时,通常都是一个空目录,因此,为了能将 这个“水泥”装填进去,另外创建一个能够操做 mysql 数据的容器:phpmyadmin

docker 和 linux 脚本熟练的话,可直接将 mysql 初始化数据、密码写入 start.sh 脚本,初级阶段直接开一个 phpmyadmin 比较直观!

环境:

visualbox ubuntu 1804 本地删除了 mysql

一、准备项目目录

直接 cp 上一次 搭建 LNMP 的整个目录,而后下载 TP 5 的完整版并解压到本次项目的 nginx/www 目录下html

如下是个人项目结构,项目名称就叫 thinkphpmysql

** mysql/data 内容太多,我 tree 的时候先删除了 ** ThinkPHP 库 层次不少,这里只列举到 4 层linux

~/compose$ tree thinkphp/ -L 4nginx

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
	    └── Dockerfile
	14 directories, 17 files

二、构建模版文件

  1. 先使用 ss 查看 WEB 端口、php 、mysql 端口 、phpmyadmin 端口 如下是我将要使用的端口 ss -tlnp |grep 83 ss -tlnp |grep 9003 ss -tlnp |grep 3309 ss -tlnp |grep 9997web

  2. 使用 docker ps -a 查看已经使用的容器名字,以避免冲突sql

  3. 个人 docker-compose.yml 以下 ~/compose/thinkphp$ cat docker-compose.ymldocker

    version: "3"
     services:
       web_server:
         build: ./nginx  
         container_name: nginx-2
         networks:
             - tp5-net
         depends_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-2
         networks:
             - tp5-net
             - phpmyadmin-net
         environment:
             MYSQL_ROOT_PASSWORD: 123456
         ports:
             - "3309:3306"
         volumes:
             - ./mysql/data:/var/lib/mysql
    
       phpfpm:
         build: ./phpfpm  
         container_name: phpfpm72
         networks:
             - tp5-net
         depends_on:
             - db_server 
         ports:
             - "9003:9000"
         volumes:
             - ./nginx/www/tp5:/var/www/html
             - ./nginx/conf.d:/etc/nginx/conf.d
    
       phpmyadmin:
         image: phpmyadmin/phpmyadmin
         container_name: phpmyadmin
         links:
             - db_server:db
         # external_links:
         #    - db_server:db
    
         networks:
             - tp5-net
             - phpmyadmin-net
         depends_on:
             - db_server
         ports:
             - 9997:80
    
     networks:
       tp5-net:
       phpmyadmin-net:

*** 其中 links 和 external_links 两个都不推荐使用,我也不知道还有什么能够代替 *** 以上 links 和 external_links 通过实测,都是能够的thinkphp

三、 测试

** 记得先 docker-compose up -djson

本地测试: curl 127.0.0.1:83 curl 127.0.0.1:9997

浏览器测试: http://192.168.1.193:83 在这里插入图片描述

http://192.168.1.193:9997 在这里插入图片描述

四、 错误处理

  1. phpmyadmin 输入了 root 密码 123456,确认是正确的,可是,老是提示错误

docker-compose.yml 中 phpmyadmin 容器加上links (我是先测试了 external_links )以后, OK!

在这里插入图片描述

  1. 其余错误 基本上都是 名称冲突,由于都是 cp 过来的,总有一些修改漏掉了 还有就是端口冲突

    ** 每次修改完以后,必定要 restart 修改过的容器

    最简单的方式就是 docker-compose down docker-compose up -d

五、 后记

以上都是学习中的一些点滴记录,过程都比较粗糙 建议多参考 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_root
        include        fastcgi_params;
    }
}
相关文章
相关标签/搜索