# Docker安装ModStart
# 系统简介
本仓库提供了 ModStart 下 Docker 一键启动脚本。
在使用前必须先了解Docker的基础知识,具体可参考:
# 使用 docker-compose 部署
# 下载 docker-compose 环境到本地
git clone https://gitee.com/modstart/ModStart_Docker.git
1
# 下载代码源文件到本地
下载相关程序到环境目录,命名为 modstart
# ModStartCMS 代码
cd ModStart_Docker
git clone https://gitee.com/modstart/ModStartCMS.git modstart
1
2
2
# ModStartBlog 代码
cd ModStart_Docker
git clone https://gitee.com/modstart/ModStartBlog.git modstart
1
2
2
# 其他系统代码
cd ModStart_Docker
# 下载并解压代码
wget -O "xxx.zip" "https://xxx.xxx/xxx.zip"
unzip xxx.zip
mv xxx modstart
1
2
3
4
5
2
3
4
5
准备好的文件目录结构如下所示为:
├── README.md # 帮助文档
├── docker-compose.yml #
├── docker_config # 程序配置
│ ├── mysql_init.sql # 数据库初始化脚本
│ └── tengine.conf # tengine配置
└── modstart # ModStart相关程序
├── app
├── bootstrap
├── ...
├── index.php
└── public
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 使用Docker脚本一键启动
docker-compose up
1
# 进入系统安装引导程序
访问地址:http://localhost:20080/ (opens new window),数据库地址请按如下信息填写:
- 主机:
ms_mysql
- 数据库名:
modstart
- 用户名:
root
- 密码:
123456
# 使用脚本自定义部署
# 环境变量
# 服务器内网IP
DOCKER_MASTER=x.x.x.x
# 需要安装的网站域名
WEB_DOMAIN=example.com
1
2
3
4
2
3
4
# 安装 docker
# CentOS 7.X
# 安装必要的命令
yum install -y sudo
sudo yum update -y
sudo yum install vim curl telnet git htop -y
sudo yum install docker -y
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 其他系统
请参照docker官网自行安装
# 初始化文件
# ① 创建必要的目录
sudo mkdir -p /data/nginx/conf.d/ /data/cron.d /data/sock /data/supervisord.d /data/website
# ② 复制源代码
执行复制系统代码文件到 /data/website/example.com
# ③ 修正代码权限为php的执行用户
sudo chown -R 33.33 /data/website
1
2
3
4
5
6
2
3
4
5
6
# 创建配置文件
# Nginx配置文件
路径 /data/nginx/conf.d/example.com.conf
server {
listen 80;
server_name example.com;
charset utf-8;
index index.php index.html;
root /data/website/example.com/public;
autoindex off;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers *;
location ^~ /.git {
deny all;
}
location / {
if ($request_method = 'OPTIONS') {
return 200;
}
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/data/sock/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param PHP_VALUE "open_basedir=/data/website/example.com/:/tmp/:/var/tmp/";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ \.(gif|jpg|jpeg|png|bmp|ico|css|js)$ {
expires max;
}
location ~* \.(eot|ttf|woff|woff2)$ {
add_header Access-Control-Allow-Origin '*';
}
}
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
37
38
39
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
37
38
39
# 部署mysql
# 生成随机密码
MYSQL_PASSWORD=$(</dev/urandom tr -dc 'A-Za-z0-9' | head -c 12 ; echo)
# 输出随机密码
echo $MYSQL_PASSWORD
# 初始化MySQL
sudo docker run --name mysql \
-e MYSQL_ROOT_PASSWORD="$MYSQL_PASSWORD"\
-p 3306:3306 \
-v /data/mysql/data:/var/lib/mysql:rw \
-d mysql:5.6.29
# 等待MySQL启动完成
# 出现 Version: '5.6.29' socket: '/var/run/mysqld/mysqld.sock' port: 3306
sudo docker logs -f --tail 1000 mysql
# 初始化完成后清理MySQL
sudo docker stop mysql ; sudo docker rm mysql
# 重新创建正常运行的服务
sudo docker run --name mysql \
--restart=always -p 3306:3306 \
-v /data/mysql/data:/var/lib/mysql:rw \
--add-host docker-master:$DOCKER_MASTER \
-d mysql:5.6.29
# 进入mysql容器
sudo docker exec -it mysql bash
# 登录mysql,输入密码 (上面随机生成的密码)
mysql -u root -p
# 创建数据库xxx
create database xxx;
# 退出mysql
exit
# 退出容器
exit
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
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
# 部署php
sudo docker run --privileged \
--name php56 --restart=always \
--add-host docker-master:$DOCKER_MASTER \
-v /data/website:/data/website:rw \
-v /data/sock:/sock:rw \
-d modstart/php56_sock:latest
1
2
3
4
5
6
2
3
4
5
6
# 部署nginx
sudo docker run --name tengine -p 80:80 -p 443:443 --restart=always \
--add-host docker-master:$DOCKER_MASTER \
-v /data/website:/data/website:rw \
-v /data/sock:/data/sock:rw \
-v /data/nginx/conf.d:/etc/nginx/conf.d:ro \
-d modstart/tengine:latest
1
2
3
4
5
6
2
3
4
5
6
# 进入引导程序
访问 http://example.com/install.php 进入引导程序
# 安全说明
使用自定义命令部署的系统,php-fpm 会暴露 9000 端口,需要开启防火墙避免远程可以直接访问到 9000 端口造成安全影响。
# supervisor 和 cron 部署
系统提供了自带 php 环境的 supervisor 和 cron 镜像,可以使用如下命令启动 supervisor 服务。
sudo docker run --privileged \
--name supervisor_php56 --restart=always \
--add-host docker-master:$DOCKER_MASTER \
-v /data/supervisord.d:/etc/supervisord.d:rw \
-v /data/cron.d:/etc/cron.d:rw \
-v /data/website:/data/website:rw \
-d modstart/supervisor_php56:latest
1
2
3
4
5
6
7
2
3
4
5
6
7
- 可以将 supervisor 配置脚本放在
/data/supervisord.d
目录,具体可参照 开发必看 中 队列调度 部分。 - 可以将 cron 配置脚本放在
/data/cron.d
目录,具体可参照 开发必看 中 任务调度 部分。
文件 /data/superivsord.d/example.com.conf
[program:XxxQueue]
process_name=%(program_name)s_%(process_num)02d
command=php /data/website/example.com/artisan queue:listen database --queue=default --sleep=5 --memory=4096 --tries=1 --timeout=86400
autostart=true
autorestart=true
user=www-data
numprocs=1
1
2
3
4
5
6
7
2
3
4
5
6
7
文件 /data/conf.d/xxx-com
* * * * * www-data /usr/local/bin/php /data/website/example.com/artisan schedule:run > /tmp/example.com.log 2>&1
1