侧边栏壁纸
博主头像
six

阶段性踌躇满志,持续性混吃等死

  • 累计撰写 8 篇文章
  • 累计创建 9 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

Halo(v1.6.1)搭建个人网站

six
six
2023-02-25 / 0 评论 / 0 点赞 / 352 阅读 / 2,379 字

说明

使用Halo快速搭建自己的博客网站

尝试了一下2.2.1版本,感觉不是很满意,2.x版本进行了暴力升级,和1.x不兼容

对我来说最主要的一点是2.x版本存储格式的变化,2.x版本文章会使用html格式存储
我希望的还是能保留markdown格式

环境

地址

搭建环境

  • centos7.9
  • docker: 20.10.10
  • Docker Compose version v2.15.1
  • mysql: 5.7
  • nginx version: openresty/1.19.9.1

搭建

官方

官方docker-compose将mysql和halo放在一起

由于我已经有mysql数据库了,就不采用这种方式了

version: "3"

services:
  halo_server:
    image: halohub/halo:1.6.0
    container_name: halo_server
    restart: on-failure:3
    depends_on:
      - halo_mysql
    networks:
      halo_network:
    volumes:
      - ./:/root/.halo
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "8090:8090"
    environment:
      - SERVER_PORT=8090
      - SPRING_DATASOURCE_DRIVER_CLASS_NAME=com.mysql.cj.jdbc.Driver
      - SPRING_DATASOURCE_URL=jdbc:mysql://halo_mysql:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
      - SPRING_DATASOURCE_USERNAME=root
      - SPRING_DATASOURCE_PASSWORD=o#DwN&JSa56
      - HALO_ADMIN_PATH=admin
      - HALO_CACHE=memory

  halo_mysql:
    image: mysql:8.0.27
    container_name: halo_mysql
    restart: on-failure:3
    networks:
      halo_network:
    command: --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./mysql:/var/lib/mysql
      - ./mysqlBackup:/data/mysqlBackup
    ports:
      - "3306:3306"
    environment:
      # 请修改此密码,并对应修改上方 Halo 服务的 SPRING_DATASOURCE_PASSWORD 变量值
      - MYSQL_ROOT_PASSWORD=o#DwN&JSa56
      - MYSQL_DATABASE=halodb

networks:
  halo_network:

mysql5.7

已存在的mysql5.7搭建方式: mysql - Official Image | Docker Hub

创建Halo需要的数据库

create database halodb character set utf8mb4 collate utf8mb4_bin;

Halo1.6.1

mkdir -p /opt/halo/data && cd /opt/halo
vim docker-compose.yml
version: "3"

services:
  halo_server:
    image: halohub/halo:1.6.1
    container_name: halo
    networks:
      - halo_network
      - mysql_network
    volumes:
      - ./data/:/root/.halo
    ports:
      - "8160:8090"
    environment:
      - TZ=Asia/Shanghai
      - SERVER_PORT=8090
      - SPRING_DATASOURCE_DRIVER_CLASS_NAME=com.mysql.cj.jdbc.Driver
      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql57:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
      - SPRING_DATASOURCE_USERNAME=root
      - SPRING_DATASOURCE_PASSWORD=11xxOOxx
      - HALO_ADMIN_PATH=admin
      - HALO_CACHE=memory

networks:
  halo_network:
  57_mysql_network: # 默认网络名字
    external: true

注意

  • 修改数据库密码为你自己设置的密码
  • 将halo加入MySQL的网络,就可以使用容器名称链接了
  • MySQL的网络名称是 文件夹名字_网络名,具体可以用 docker network ls 查看具体名称
  • external: true 代表是外部网络

启动

docker-compose up -d

查看log

docker logs -f halo

连接数据库发现已经有表结构了

nginx配置

官方给出的代理

upstream halo {
  server 127.0.0.1:8090;
}
server {
  listen 80;
  listen [::]:80;
  server_name www.yourdomain.com;
  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;
  }
}

我开启了https,这里稍作修改,并且我配置了 www.sixmillions.cn 也跳转到 sixmillions.cn

server {
  listen 443 ssl;
  server_name sixmillions.cn;

  ssl_certificate /root/.acme.sh/sixmillions.cn/fullchain.cer;
  ssl_certificate_key /root/.acme.sh/sixmillions.cn/sixmillions.cn.key;
  ssl_session_timeout 5m;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  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://127.0.0.1:8160;
    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;
  }

  location = /robots.txt {
    default_type text/plain;
    content_by_lua_block {
      -- ngx.say('User-agent: *\nDisallow: /');
      ngx.say('User-agent: *\nAllow: /');
    }
  }

  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
    root /usr/share/nginx/html;
  }

  location /uri {
    stub_status;
  }

}
server {
  listen 80;
  server_name sixmillions.cn www.sixmillions.cn;
  rewrite ^/(.*)$ https://sixmillions.cn/$1 permanent;
}

server {
  listen 443 ssl;
  server_name www.sixmillions.cn;

  ssl_certificate /root/.acme.sh/sixmillions.cn/fullchain.cer;
  ssl_certificate_key /root/.acme.sh/sixmillions.cn/sixmillions.cn.key;
  ssl_session_timeout 5m;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
  ssl_prefer_server_ciphers on;

  return 301 https://sixmillions.cn$request_uri;
}

修改后重启 nginx

初始化

访问halo地址

ip:端口号
域名:sixmillions.cn

填写信息后直接安装,安装后登录

进入就是博客的后端了

点击右上角跳转到首页,就能看到博客首页了

设置

附件设置

图片等附件默认上传到halo的本地,这里我们采用第三方存储
例如:阿里云OSS,腾讯云OSS,青云OSS等等

我这里使用的是自建的OSS:MinIO

修改目录

我想将附件按照年月日传入不同的文件夹,所以每天需要修改 minio_source 这个配置

设置一个定时任务,每天凌晨执行

直接调用api

1 0 * * * /opt/halo/change-oss-dir.sh >> halo_cron.log

change-oss-dir.sh

#! /bin/bash -xv 

echo "开始:$(date +%Y%m%d_%H%M%S)"

# 账号密码
username='admin'
password='admin123'

# 获取token
response1=$(curl -s -X POST "https://sixmillions.cn/api/admin/login" -H "Content-Type: application/json" -d "{\"username\":\"${username}\",\"password\":\"${password}\"}")
token=$(echo ${response1} | jq -r '.data.access_token')

# 修改oss的目录
today=$(date +%Y/%m/%d)
res=$(curl -s -X POST "https://sixmillions.cn/api/admin/options/map_view/saving" -H "Admin-Authorization: ${token}" -H "Content-Type: application/json" -d "{\"minio_source\": \"${today}\"}")
echo $res

echo "结束:$(date +%Y%m%d_%H%M%S)"

下面这个方法不好用

1 0 * * * /opt/halo/sql/exec.sh >> halo_cron.log

具体内容

mkdir /opt/halo/sql

vim exec.sh
#! /bin/bash -xv

SCRIPT_FILE=/opt/halo/sql/update_oss_config.sql

#执行sql
echo "开始:$(date +%Y%m%d_%H%M%S)"
cat ${SCRIPT_FILE} | grep -Ev '^$|#|--' > /tmp/tmp_$$.sql
echo '复制sql'
docker cp /tmp/tmp_$$.sql mysql57:/tmp/tmp.sql
echo '执行sql'
# 脚本中一定要加-u root,否则执行失败
docker exec -u root mysql57 sh -c "mysql -uroot -p11xxOOxx -Dhalodb < /tmp/tmp.sql"
echo '重启博客'
# 重启博客去掉缓存,其实不建议这么做,但是自己的博客无所谓了
docker-compose -f /opt/halo/docker-compose.yml restart
echo '删除临时文件'
rm -rf /tmp/tmp_$$.*
echo '结束:$(date +%Y%m%d_%H%M%S)'

具体执行sql: update_oss_config.sql

--每天更新一下图存储位置
UPDATE `options` SET option_value = DATE_FORMAT(CURDATE(), '%Y/%m/%d'), update_time = NOW() WHERE option_key = 'minio_source';

主题

xue

预览地址:https://github.com/xzhuz/halo-theme-xue/issues/67
介绍:https://halo.run/archives/theme-xue
仓库:https://github.com/xzhuz/halo-theme-xue
我的下载地址:https://s.sixmillions.cn/pkg/zip/halo-theme-xue-1.4.4.zip

版本说明

这里安装的是1.4.4版本

https://github.com/xzhuz/halo-theme-xue/archive/refs/tags/1.4.4.zip

joe2.0

预览地址:https://bbchin.com/
仓库:https://github.com/qinhua/halo-theme-joe2.0
我的下载地址:https://s.sixmillions.cn/pkg/zip/halo-theme-joe2.0-1.0.10.zip

作者写的使用文档

🌈 Halo-theme-joe2.0 食用文档 (bbchin.com)
🍭 Joe2.0 样式指南 (bbchin.com)

这里安装的是

https://github.com/qinhua/halo-theme-joe2.0/archive/refs/tags/1.0.10.zip

安装后需要设置密钥

  1. 安装主题后请务必到 后台管理 - 博客设置 - 高级选项 中开启 API服务 并配置 Access key 为 joe2.0(切记要和主题设置中的 AccessKey 一致),不然部分用到 Content API 的页面会请求失败并报错。(请参考以下报错)
“API has been disabled by blogger currently” —— 后台管理中未开启API服务
“API access key is mismatch” —— 主题中的 AccessKey 和后台管理中的不一致
  1. 如果你后台管理中之前已经配置了其它的 Access Key(内容不是 joe2.0),那么需要你到本主题设置中的 基本设置-AccessKey<必填> 同步一下这个 Access key,保证和后台中的一致即可(切记一致才行,且不要填写中文或特殊字符)。

  2. 有时,主题升级后配置项变化较大,直接访问博客可能会报错,导致页面渲染不出来。此时,只需要进入当前主题的设置界面执行一下保存操作来更新旧的配置,然后再访问页面即可;

  3. 有时,明明已经提示主题更新成功了,但访问博客时页面还是加载的旧版本的文件,可能是由于 主题激活状态不正常 或 主题缓存的问题 导致的。此时,只需要先启用其他主题再启用本主题即可,建议每次更新主题之后都做一下这个操作(目前后台管理系统还不太完善)。

  4. 强烈建议每次更新主题后,务必先清空一下浏览器缓存,保证加载的资源都是最新版本的,不然可能有各种报错(你可以通过 Ctrl + F5 强制刷新或者 Ctrl + Shift + DEL 情况浏览器所有缓存)。

修改图标

例如:

iconfont Demo (bbchin.com)

电子邮件服务

配置SMTP服务后,通过电子邮件及时收到消息,例如评论回复

头像

注册一个Gravatar头像,这样在支持Gravatar的博客就会显示你自己的头像

https://cn.gravatar.com/

效果:

如果加载 https://cn.gravatar.com/ 过慢,可以换 https://cravatar.cn 试一下

图标

可以从ali图标网下载一些图标当作博客标签或者文章的封面

下载后,通过后台的附件传上去

0

评论区