Docker快速部署一个属于你自己的博客
时间:2022-07-25
本文章向大家介绍Docker快速部署一个属于你自己的博客,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. 准备工作
对于 solo
这个博客系统,至少需要部署 3 个 docker 容器。 mysql
用来存储、 solo
就是博客系统、nginx 用来做反向代理以及 http 到 https 的跳转。
- MySQL
- solo
- nginx
因为我只有一台阿里的 ECS
,所以三个容器都部署在同一台机子上,首先我创建了一个网桥,提供给这三个容器用来通信:
docker network create -d bridge solo
后续每一个容器在建立的时候,都应该加入这个网络 solo
,然后容器和容器之间就可以通过容器名进行访问了。
2. MySQL
部署 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
是需要你自己设置的密码
3. solo
注意:如果有历史的博客数据,在启动 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
4. nginx
首先创建 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
5. 测试
访问 https://www.bitbo-liuyang.com ,这样就简单的快速部署完一个 solo 博客了。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- R语言中GLM(广义线性模型),非线性和异方差可视化分析
- 解决java的http请求库dongliu.requests请求结果中文乱码的问题
- 保姆级教程,手把手教你实现一个SpringBoot的starter
- 微服务[学成在线] day05:消息中间件 RabbitMQ
- 微服务[学成在线] day06:页面发布以及课程管理
- 微服务[学成在线] day07:课程管理开发
- 微服务[学成在线] day08:FastDFS 实现课程图片管理
- 【MySQL入门】之细说脏读、幻读及不可重复读
- 微服务[学成在线] day09:Eureka、Feign、课程预览实现
- 【MySQL入门】之MySQL数据库的锁机制(一)
- 【MySQL入门】之MySQL数据库的锁机制(二)
- 【MySQL】删库别着急跑路(一)--Xtrabackup的原理及使用
- 微服务[学成在线] day11:基于 ElasticSearch 构建搜索服务
- 【MySQL】删库别着急跑路(二)--mysqldump的使用
- 【MySQL】删库别着急跑路(三)--binlog2sql闪回工具的使用