使用docker部署fastadmin基于ThinkPHP5.0后端框架

❤️ ,这几天用Fa开发项目上线测试,用的docker部署,遇到一堆问题,下面把遇到的问题记录下来帮助其它小伙伴免入坑。

说说基本思路:

Ubuntu服务器 + Nginx + Docker

Docker内部运行一个PHP-FPM容器,由外部的Nginx转发到内部。

1.前排提醒:一定要把Fa的debug:False,不然加载异常缓慢,还有就是,如果你更改了css文件,记得打包压缩,因为关闭调试就是正式了。(如果你使用了主机映射,可以直接修改css文件后,安装nodejs和phpcli,使用压缩命令)

2.首先我们看一下项目目录:dev测试使用

image.png

然后使用scp或者FTP把项目上传到服务器,过程我就省略啦,如果你压缩了,可以使用apt-get install unzip来解压。

这里为了隐私:我们假设项目目录在 /fadev/phpdev/www/fa项目文件

这里之所以把项目放到主机上,为了将容器内部与主机外部映射,这样就可以直接修改外部文件实时更新了。

创建容器先下载一个php镜像:

1
docker pull php7.2-fpm

然后创建容器:-d 后台运行容器,–name 起个名字 -p 主机端口映射容器内部端口 -v 主机目录映射容器目录 –link 关联另一个容器,可以直接访问Mysql,最后是使用的镜像。

1
docker run -d --name fa-php-dev -p 9527:80 -v /fadev/phpdev/etc/:/usr/local/etc/php -v /fadev/phpdev/www/:/var/www/html --link mysql php:7.2-fpm

如果没有报错,说明成功运行了。下面配置Nginx,最后会说SQL导入。

下面有几个重点:nginx不支持url重写,会发生模块不可访问,使用/xxx/public/index.php?s=模块/这种可以访问,我们解决一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
server {
listen 80;
server_name dev.test.cn;
location / {
//这里注意是指向主机目录,用容器的也行
root /fadev/phpdev/www/public;
index index.html index.htm index.php;
if (!-e $request_filename) {
rewrite ^/index.php(.*)$ /index.php?s=$1 last;
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
//这是容器目录,哪个目录都可以
root /var/www/html/public;
}

location ~ \.php(.*)$ {
//重点来了,这里是PHP容器的内网地址:docker inspect 容器名去看看,将PHP转发到容器
fastcgi_pass 172.17.0.6:9000;
fastcgi_index index.php;
//重写url
fastcgi_param SCRIPT_FILENAME /var/www/html/public$fastcgi_script_name;
fastcgi_param PATH_INFO $1;
include fastcgi_params;
}



location /assets {
//如果你遇到资源文件404,用这个,感谢前公司大佬帮忙,我之前用的正则匹配后缀去了,效果不好。
alias /fadev/phpdev/www/public/assets;
}
}

然后

1
2
3
Nginx -t //检查配置语法

Nginx -s reload //重启配置

下面处理MySQL:你需要进入Mysql容器里先创建一个fa的数据库

1
2
3
4
5
6
7
8
9
10
11
docker cp ./xx.SQL  mysql:/xx  //复制到容器里面 

docker exec -it mysql bash

mysql -u root -p

use xx database;

source xx.SQL;

exit;

导入数据库后,最后一个就是连接数据库:你需要到fa的数据库配置文件修改配置:

连接默认应该是:localhost或者127.0.0.1吧,换成mysql的内网地址:172.0.x 使用 docker insect mysql查看内网地址就好了。

然后输入 dev.test.cn 就行了。

docker ps

image.png