Halo博客的搭建

Halo博客的搭建

左岸 302 2021-09-08

缘起

之前的博客被格式化了,也很久没有自己服务器了,最近腾讯云搞活动,74元搞了一个服务器,闲来无事想重整一下博客。

期望

  1. 不希望是静态管理的 (hexo排除)
  2. 希望用Java语言编写的(wordpress排除)
  3. 机缘巧合了解到Halo

设想

自己的服务器希望所有都是可以控制的,还有就是服务器干净,自己能够了解到每个项目占用服务器空间位置,所以目前搭建项目都期望使用docker,配文件在宿主外指定管理,搭建博客期望架构图

halo博客搭建架构.png

Halo 搭建

官网搭建文档 https://docs.halo.run/install/docker

Halo 在 Docker Hub 上发布的镜像为 halohub/halo

  1. 创建工作目录
mkdir ~/halo && cd ~/halo
  1. 下载示例配置文件到工作目录
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml
  1. 编辑配置文件,配置数据库或者端口等,如需配置请参考参考配置
vim application.yaml
  1. 拉取最新的 Halo 镜像
docker pull halohub/halo:1.4.11
  1. 创建容器
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 搭建

  1. 创建工作目录
mkdir ~/nginx && cd ~/nginx
mkdir html
mkdir log
  1. 拉取最新的 Halnginxo 镜像
docker pull nginx:latest
  1. 临时启动nginx

临时启动的目的是复制一份初始化配置到宿主机器

docker run --name temp_nginx -p 81:81 -d nginx
  1. 复制配置文件到~/nginx 目录
docker cp temp_nginx:/etc/nginx/. /root/nginx/
  1. 停止和删除临时nginx 容器
  • 停止容器
docker stop temp_nginx 
  • 删除容器
docker rm temp_nginx 
  1. 改动配置文件 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;
}

  1. 启动容器
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证书如何自动绑定域名