缘起
之前的博客被格式化了,也很久没有自己服务器了,最近腾讯云搞活动,74元搞了一个服务器,闲来无事想重整一下博客。
期望
- 不希望是静态管理的 (hexo排除)
- 希望用Java语言编写的(wordpress排除)
- 机缘巧合了解到Halo
设想
自己的服务器希望所有都是可以控制的,还有就是服务器干净,自己能够了解到每个项目占用服务器空间位置,所以目前搭建项目都期望使用docker,配文件在宿主外指定管理,搭建博客期望架构图

Halo 搭建
Halo 在 Docker Hub 上发布的镜像为 halohub/halo
- 创建工作目录
mkdir ~/halo && cd ~/halo
- 下载示例配置文件到工作目录
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml
- 编辑配置文件,配置数据库或者端口等,如需配置请参考参考配置
vim application.yaml
- 拉取最新的 Halo 镜像
docker pull halohub/halo:1.4.11
- 创建容器
docker run -it -d --name halo -p 8090:8090 -v ~/halo:/root/.halo --restart=unless-stopped halohub/halo:1.4.11
-it: 开启输入功能并连接伪终端
-d: 后台运行容器
–name: 为容器指定一个名称
-p: 端口映射,格式为 主机(宿主)端口:容器端口 ,可在 application.yaml 配置
-v: 工作目录映射。形式为:-v 宿主机路径:/root/.halo,后者不能修改
–restart: 建议设置为 unless-stopped,在 Docker 启动的时候自动启动 Halo 容器
nginx 搭建
- 创建工作目录
mkdir ~/nginx && cd ~/nginx
mkdir html
mkdir log
- 拉取最新的 Halnginxo 镜像
docker pull nginx:latest
- 临时启动nginx
临时启动的目的是复制一份初始化配置到宿主机器
docker run --name temp_nginx -p 81:81 -d nginx
- 复制配置文件到~/nginx 目录
docker cp temp_nginx:/etc/nginx/. /root/nginx/
- 停止和删除临时nginx 容器
- 停止容器
docker stop temp_nginx
- 删除容器
docker rm temp_nginx
- 改动配置文件 nginx 配置
- 打开配置文件
vim /root/nginx/conf.d/default.conf
- 修改配置
upstream halo {
server 10.0.8.7:8090;
}
server {
listen 443 ssl;
access_log /var/log/nginx/host.access.log main;
server_name www.ycdr.fun;
#证书文件名称
ssl_certificate /etc/nginx/conf.d/https/ycdr.fun.cer;
#私钥文件名称
ssl_certificate_key /etc/nginx/conf.d/https/ycdr.fun.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
client_max_body_size 1024m;
location / {
proxy_pass http://halo;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
#填写绑定证书的域名
server_name ycdr.fun www.ycdr.fun;
#把http的域名请求转成https
return 301 https://$host$request_uri;
}
- 启动容器
docker run -d -p 80:80 -p 443:443 \
--name yc_nginx \
-v /root/nginx/log:/var/log/nginx \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /root/nginx/conf.d:/etc/nginx/conf.d \
nginx
搭建完成
搭建过程中使用到https 到时专门写一篇文章介绍免费ssl证书如何自动绑定域名