对于 solo
这个博客系统,至少需要部署 3 个 docker 容器。 mysql
用来存储、 solo
就是博客系统、nginx 用来做反向代理以及 http 到 https 的跳转。
因为我只有一台阿里的 ECS
,所以三个容器都部署在同一台机子上,首先我创建了一个网桥,提供给这三个容器用来通信:
docker network create -d bridge solo
后续每一个容器在建立的时候,都应该加入这个网络 solo
,然后容器和容器之间就可以通过容器名进行访问了。
部署 MySQL 5.X 版本的指令如下所示
docker run --name solo_mysql -p 3306:3306 \
--network solo --privileged=true --restart=always \
-v /usr/local/mysql5.7/data:/var/lib/mysql \
-v /usr/local/mysql5.7/conf:/etc/mysql/conf.d \
-v /usr/local/mysql5.7/bak:/etc/mysql/bak \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=yang20190130 -d mysql:5.7.26 \
--character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci \
--lower_case_table_names=1 --default-time_zone='+8:00'
上述命令还是有几个细节的,如下所示:
--network solo
是加入之前我们新建的桥接网络 solo
--privileged=true
是保证 MySQL 具有操作外部映射出的文件的权限--restart=always
是自动启动,类似 Win
的自动重启-v /usr/local/mysql5.7/data:/var/lib/mysql
将 MySQL 的数据映射到磁盘上,避免新建容器后数据丢失-v /usr/local/mysql5.7/conf:/etc/mysql/conf.d
将 MySQL 的配置放置在外部磁盘,方便修改-v /usr/local/mysql5.7/bak:/etc/mysql/bak
是备份 SQL 的文件,方便迁移容器的时候,不用再从容器里拷贝出来-e TZ=Asia/Shanghai
指定 MySQL 的时区-e MYSQL_ROOT_PASSWORD=yang20190130
是需要你自己设置的密码注意:如果有历史的博客数据,在启动 solo 之前可以先把备份好的数据导入到 MySQL 中。
solo 的安装,先看命令:
docker run -d -p 8080:8080 --restart=always --name solo_v3 \
--network solo\
--env RUNTIME_DB="MYSQL" \
--env JDBC_USERNAME="root" \
--env JDBC_PASSWORD="yang20190130" \
--env JDBC_DRIVER="com.mysql.jdbc.Driver" \
--env JDBC_URL="jdbc:mysql://solo_mysql:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false" \
b3log/solo --listen_port=8080 --server_scheme=https --server_host=www.bitbo-liuyang.com
其中:
--network=solo
加入 solo
这个网络--env JDBC_DRIVER="com.mysql.jdbc.Driver"
因为我使用的是 MySQL 5.7
所以是这样的--env JDBC_PASSWORD="yang20190130"
是安装 myql 时候时候指定的密码--env JDBC_URL="jdbc:mysql://solo_mysql:3306/
这个地方我写的不是 localhost
也不是 127.0.0.1
,而是使用的 mysql
容器的名称 solo_mysql
--server_scheme=https
是指明 https,不然用 nginx 代理 https 的时候会有报错--server_host=www.bitbo-liuyang.com
需要你自己修改 host首先创建 nginx 的配置文件 nginx.conf
cd /usr/local/nginx/conf.d/
vi solo.conf
然后输入如下内容,很简单的 nginx
配置,不懂的可以百度
upstream lb {
server solo_v3:8080; # Solo 监听端口
}
server {
listen 80;
server_name www.bitbo-liuyang.com;
return 307 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name www.bitbo-liuyang.com bitbo-liuyang.com; # 博客域名
charset utf-8;
access_log /var/log/nginx/logs/access.log main;
error_log /var/log/nginx/logs/error.log error;
# 改成你自己的证书
ssl_certificate /usr/local/nginx/ssl/2298944_xxx.pem;
ssl_certificate_key /usr/local/nginx/ssl/2298944_xxx.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDJ";
ssl_ecdh_curve secp384r1;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s ipv6=off;
resolver_timeout 5s;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
location ^~ /user_images {
root /opt/pic/;
proxy_temp_path /opt/pic/;#图片访问路径
}
location / {
proxy_pass http://lb$request_uri;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header http_x_forwarded_for $remote_addr;
client_max_body_size 20m;
}
}
然后执行如下命令启动 nginx 的容器
docker run -p 80:80 -p 443:443 -m 200m --restart always \
--name solo_nginx --network solo \
-v /usr/local/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/nginx/logs/access.log:/var/log/nginx/logs/access.log \
-v /usr/local/nginx/logs/error.log:/var/log/nginx/logs/error.log \
-v /usr/local/nginx/ssl:/usr/local/nginx/ssl \
-v /usr/local/nginx/conf.d:/usr/local/nginx/conf.d \
-d nginx
访问 https://www.bitbo-liuyang.com ,这样就简单的快速部署完一个 solo 博客了。