开箱即用的面向生产和开发环境的 Docker 镜像
.
├── config
│ ├── mysql
│ │ └── mysql.cnf mysql.cnf 配置
│ ├── caddy caddy 配置目录
│ ├── nginx
│ │ ├── conf.d vhost 配置目录
│ │ │ ├── localhost.conf 默认站点配置
│ │ │ └── localhost_https.conf 默认站点HTTPS配置
│ │ └── nginx.conf nginx.conf 配置
│ ├── php
│ │ ├── php-fpm.conf php-fpm.conf 配置
│ │ └── php.ini php.ini 配置
│ ├── redis
│ │ └── redis.conf redis.conf 配置
│ ├── lua lua 脚本
│ │ └── waf
│ │ └── config.lua web 防火墙配置
├── data 数据目录
├── logs 日志目录
├── docker-compose.yml docker-compose 编排文件
├── run.sh 执行脚本
└── www 站点目录
└── localhost 默认站点
- 安装 git、 docker 和 docker-compose
docker >=19
docker-compose >= 3
系统自带的 yum、apt 安装版本可能会过低了,
如不清楚如果不熟悉怎么安装 docker,
执行可以拉取项目后执行 ./run.sh installDocker 查看相关安装命令,
或查看 docker.md 参考安装步骤。
- 拉取项目
git clone --depth=1 https://github.com/sohaha/zls-docker.git
- 启动
默认配置使用 nginx 与 caddy 只能启动其中一个。
# 更多命令直接执行 run.sh 查看
./run.sh up
# Windows 请先复制配置再执行启动命令
copy .env.example .env
copy docker-compose.yml.example docker-compose.yml
docker-compose up -d nginx mysql php
- 访问在浏览器中访问 http://localhost/ 。
更多配置请打开 .env 文件查看。
安装扩展
# 编辑.env文件,
# 从扩展列表 PHP extensions 中选择相应的扩展,
# 添加(移除)到 PHP_EXTENSIONS 中,英文逗号隔开
PHP_EXTENSIONS=swoole,redis
# 重新编译 PHP 镜像并启动
./run.sh buildUp php
# Windows 请执行 docker-compose build php && docker-compose up php -d
有些时候需要配置定时任务做一些特定业务处理,但是直接在容器内是不支持的,不过我们可以直接在宿主机上设置。
!> 请确定 crontab 下 docker-compose 能正常使用,如果不能请尝试执行 sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
再试。
# 假设本脚本放在 /root/zls-docker 目录下
# 需要每分钟执行一次 www/test/task.php
# crontab -e
# 下面语句就是每分钟进入 php 容器 执行 `php test/task.php`
* * * * * /root/zls-docker/run.sh cron php php test/task.php
-
在其它容器需要连接数据库 HOST 直接填容器名,如使用 MySQL: mysql 即可(或 172.0.0.20)。
-
如需修改默认密码,编辑.env 文件即可,
MySQL:
MYSQL_ROOT_PASSWORD=73zls666
,mongo:
MONGODB_INITDB_ROOT_PASSWORD=73zls666
必须在容器生成之前,如果容器已经生成过,
请使用 bash 进入容器内修改,具体方法请谷歌。
-
Msqyl 建立新数据库直接执行:
zdc mysql
然后选 3( Create Databases )即可。
建议把脚本命令安装至系统中,方便使用
./run.sh tools
# 输入1,自动安装至系统,然后就可以全局使用 zdocker
zdocker help
如要使用 composer,启动 swoole ,或 npm 安装等等。
./run.sh composer install zls/wechat
./run.sh php test.php
./run.sh npm install zls-ui
./run.sh go build
...
nginx,php-fpm 之类的修改了配置是需要重新加载的,可使用该命令
# 不值得容器默认为nginx,下面命令等同 ./run.sh reload nginx
./run.sh reload
./run.sh reload php
# ./run.sh bash 容器名称,如ph
./run.sh bash php
# ./run.sh stop 容器名称(空表示停止全部)
./run.sh stop nginx
一些常用的操作,如 php-fpm 优化,清理没用使用的容器等等
./run.sh tools
首次使用
# 如果首次执行失败,建议先把签证服务修改为 letsencrypt
~/.acme.sh/acme.sh --set-default-ca --server letsencrypt
# ./run.sh ssl -d 要签名的域名 -w 服务器里项目访问路径
./run.sh ssl -d mydomain.com -w /home/zdocker/www/mydomain.com/public
# 证书生成成功会自动拷贝一份到 /config/nginx/conf.d/certs/mydomain.com/ 目录
# https 的配置可以参考 config/nginx/conf.d/localhost_https.conf
数据库安全
默认情况数据库是禁止外部连接的,如果需要开启请修改 .env 中的 MySQL 配置,
把 MYSQL_HOST_PORT=127.0.0.1:3306
改成 MYSQL_HOST_PORT=3306
# 为了安全性建议把 %.root 的密码修改成其他密码(默认密码:73zls666)
ALTER USER `root`@`%` IDENTIFIED BY 'xxx1990hi',`root`@`%` PASSWORD EXPIRE NEVER;
数据库备份 建议设置定时任务,定时备份数据库,如下:
# 假设本脚本放在 /root/zls-docker 目录下
# crontab -e
# 每天凌晨三点备份 MySQL 数据库
00 03 * * * /root/zls-docker/run.sh mysql backup
# 每天凌晨三点备份 MongoDB 数据库
00 03 * * * /root/zls-docker/run.sh mongodb backup
MongoDB 启动失败
/data/db/WiredTiger.wt: handle-open: open: Operation not permitted
原因: Windows 下不支持映射目录
解决方案: 注释掉 docker-compose.yml
文件内的 mongodb
映射配置,
# - ${MONGODB_DATA_DIR}:/data/db:rw
Swoole 版本
默认情况安装的是最新版的 Swoole, 如果需要指定版本直接修改安装脚本 config/php/extensions/php.sh
启动失败
查看 logs 目录,参考日志信息处理。
安装 sentry
首次启动之后需要初始化数据库,然后访问 http://127.0.0.1:9000 。
# 首次启动一定一定要修改 SENTRY_SECRET_KEY ,下面这条命令可以动态生成一个 SECRET_KEY
# docker run --rm sentry config generate-secret-key
# 初始化数据库,过程需要填写邮箱与密码
zdc bash sentry sentry upgrade
安装 YAPI
# 先启动 mongodb
./run.sh up mongodb
# 进入 mogodb 内 建立 Yapi 账号
./run.sh bash mongodb
# 进入 mongo 数据库
mongo -u root -p 73zls666
# 进入 Yapi 库
use yapi
# 添加一个用户 然后 Ctrl+c退出数据库 exit 退出容器
db.createUser({user: "yapi",pwd: "73zls666",roles: [{role: "dbOwner",db: "yapi"}]})
# 默认账号密码 admin@admin.com ymfe.org
# 启动 yapi (上面步骤只要执行一次)
./run.sh up yapi
安装监控服务
默认包含 grafana、prometheus、mysqlexporter。
注意: 如果你是 Root 用户启动,首次启动之前需要先给数据目录写入权限
chmod 777 ./data/grafana
chmod 777 ./data/prometheus
启动命令: zdc up grafana,
然后访问 http://127.0.0.1:3010/ ( 默认账号 admin/admin666 )。
配置 MySQL dashboard:
首先添加 Data Sources 选 Prometheus ,
URL填: http://prometheus:9090 ,其他的默认保存即可,
然后复制 config/grafana/mysql-dashboard.json
内容,贴贴到 ‘Import via panel json’ 创建完成。
如需监控服务器性能:
需手动启动(需要 docker root 权限) zdc up nodeexporter
,再 Import via grafana.com
编码 8919。