最近终于把docker学完了!试着自己compose编排一个php环境,然后一堆问题,果断放弃。最后,选了laradock。

直接线上部署多项目。注:使用的是阿里云学生机


下载

laradock github 如果下载缓慢,可以试着放到迅雷中下载

在自己服务器上找个地方放着吧!

image-20200723214954518

安装

进入laradock

cd laradock

复制.env配置文件

cp env-example .env

修改.env配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
#因为我使用宝塔部署了一套lnmp,所以,端口都被占用,只好换端口
NGINX_HOST_HTTP_PORT=802 Nginx
NGINX_HOST_HTTPS_PORT=445 HTTPS
MYSQL_PORT=3308 MySQL
REDIS_PORT=6381 redis

#下面还有laravels的部署,所以需要开启swoole
WORKSPACE_INSTALL_SWOOLE=true
PHP_FPM_INSTALL_SWOOLE=true

#更换版本
MYSQL_VERSION=5.7
PHP_VERSION=7.3

启动 linux注意更改文件夹权限

docker-compose up -d nginx mysql redis mongo beanstalkd elasticsearch kibana

之后,就可以在上图public目录下新建一个index.php,访问http://你的ip:802打印hello word试试。

配置多项目

进入laradock/nginx/sites目录

里面有很多ngixn配置模板,可以自行cp使用

  • laravel项目:laravel.conf.example

  • thinkphp项目:default.conf

image-20200723223909023

重启docker中的nginx

docker-compose restart nginx

按正常流程,这时候就需要配置/etc/hosts文件了。但是,因为我用的是802端口,所以,这时候需要的是配置主机的nginx

宝塔nginx配置文件路径:/www/server/panel/vhost/nginx

其他可以参考 https://luckilyh.com/2020/06/21/linux-configuration-file-path/ 获取nginx配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#新建 dockerlaravel.luckilyh.com.conf
#编辑
server
{
listen 80;
#绑定域名
server_name dockerlaravel.luckilyh.com;
#转发地址(项目容器宿主ip及端口)
location / {
proxy_pass http://dockerlaravel.luckilyh.com:802;
}

#重定向错误页面到 /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /www/server/nginx/html;
}
}

重启主机nginx

service nginx restart

是不是看到了熟悉的laravel界面

laravel项目下配置变化

.env的配置信息

  • mysql:
1
2
3
4
5
6
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=root
  • redis:
1
2
3
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PASSWORD=6381
  • beanstalkd:
1
2
QUEUE_HOST=beanstalkd 
QUEUE_CONNECTION=beanstalkd

添加新镜像或者修改.env文件

1
2
# 更新workspace
docker-compose up -d --build --force-recreate workspace

swoole

修改 .env

1
2
WORKSPACE_INSTALL_SWOOLE=true
PHP_FPM_INSTALL_SWOOLE=true

mongo

修改 .env

1
2
3
4
WORKSPACE_INSTALL_MONGO=true
PHP_FPM_INSTALL_MONGO=true
# 修改代码后自动 Reload (Inotify扩展)
WORKSPACE_INSTALL_INOTIFY=true

laravels

laradock/workspace/Dockerfile 最后添加一行:

1
EXPOSE 5200 #socket端口,laravel-s默认为5200

nginx 中修改:

1
2
3
4
5
6
7
8
   # 通过 IP:Port 连接
# server 127.0.0.1:5200 weight=5 max_fails=3 fail_timeout=30s; 这个是文档上的,需要把127.0.0.1换成laradock的workspace
server workspace:5200 weight=5 max_fails=3 fail_timeout=30s;
# 通过 UnixSocket Stream 连接,小诀窍:将socket文件放在/dev/shm目录下,可获得更好的性能
#server unix:/yourpath/laravel-s-test/storage/laravels.sock weight=5 max_fails=3 fail_timeout=30s;
#server 192.168.1.1:5200 weight=3 max_fails=3 fail_timeout=30s;
#server 192.168.1.2:5200 backup;
keepalive 16;

laravel.env 中添加

1
2
LARAVELS_LISTEN_IP=workspace #服务器IP地址
LARAVELS_DAEMONIZE=true #后台运行

操作命令

1
php bin/laravels {start|stop|restart|reload|info|help}

websocket访问

1
ws://laravel.test/ws

进入laravel项目

常见问题

Service ‘workspace’ failed to build

image-20201013180504198

fatal: unable to access ‘https://github.com/creationix/nvm.git/': Failed to connect to github.com port 443: Connection refused

有道翻译:致命:无法访问“https://github.com/creationix/nvm.git/”:连接到github.com 443端口失败:连接被拒绝

查看访问 github.com 确实打不开了

方法见: https://luckilyh.com/2020/10/13/github-can-not-access/

laravel 相应缓慢

网上查说windows的io影响,可能这个也会有影响。具体怎么调我也不知道。

我原本相应也是正常的,稳定50ms左右。然后docker更新WSL 2就出问题了,相应飙升到2-3s。凉凉。心哇凉哇凉的。

最后,不使用WSL 2就OK了

image-20201112100942200

附录:

docker文档

laradock中文文档