写在前面
迁移这小站还是花了一些时间和精力,目前只是做了最基础的配置,后续我还会进行一些DIY魔改。当然,也会和之前一样,一些改动的地方和代码也会进行记录,所以这篇文章也会是Halo博客的魔改笔记。
基础环境搭建
搭建的前提是:有一台自己的服务器
这里我采用的是官方推荐的docker-compose配置方案:halo+mysql的配置方案,在此基础上,我还配置了waline评论。不是说自带的评论解决方案不够好,而是waline可玩度更高。这样所有的数据都部署在我的服务器里了。
创建 Halo & MySQL & Waline 的实例
docker-compose.yaml文件如下:
version: "3"
services:
halo:
image: halohub/halo:2.10
container_name: Halo
restart: on-failure:3
depends_on:
halodb:
condition: service_healthy
networks:
halo_network:
volumes:
- ./halo2:/root/.halo2
ports:
- "8090:8090"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
interval: 30s
timeout: 5s
retries: 5
start_period: 30s
command:
- --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
- --spring.r2dbc.username=root
# MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
- --spring.r2dbc.password=password #记得换密码
- --spring.sql.init.platform=mysql
# 外部访问地址,请根据实际需要修改
- --halo.external-url=http://localhost:8090/
halodb:
image: mysql:8.1.0
container_name: halodb
restart: on-failure:3
networks:
halo_network:
command:
- --default-authentication-plugin=caching_sha2_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --explicit_defaults_for_timestamp=true
volumes:
- ./mysql:/var/lib/mysql
- ./mysqlBackup:/data/mysqlBackup
ports:
- "3306:3306"
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
interval: 3s
retries: 5
start_period: 30s
environment:
# 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
- MYSQL_ROOT_PASSWORD=password #记得换密码
- MYSQL_DATABASE=halo
waline:
container_name: waline
image: lizheming/waline:latest
restart: always
depends_on:
halodb:
condition: service_healthy
networks:
halo_network:
ports:
- "8360:8360"
volumes:
- ./waline:/app/data
environment:
TZ: 'Asia/Shanghai'
SITE_NAME: 'Asteri5m'
SITE_URL: 'https://asteri5m.icu'
SECURE_DOMAINS: 'asteri5m.icu'
AUTHOR_EMAIL: 'asteri5m@qq.com'
MYSQL_HOST: 'halodb'
MYSQL_DB: #数据库名
MYSQL_USER: #用户名
MYSQL_PASSWORD: #数据库密码
# 以下为邮箱提醒的参数,可以不要
SMTP_SERVICE: 'QQ'
SMTP_USER: 'asteri5m@qq.com'
SMTP_PASS: #smtp密码,邮箱网页版申请
SENDER_NAME: 'Asteri5m的小破站--评论提醒'
networks:
halo_network:
这样做的好处:
一建搭建,操作快捷方便。
数据库由内网访问,不用暴露公网端口,安全
配置Mysql
当然,不是配置了就完事大吉了,还需要修改数据库。参考文章:使用Docker部署waline | 理想的彼岸 (zdynb.cn)
进入mysql容器:
docker exec -it halodb bash
修改时区:
date -R # 查看当前时区
cp /usr/share/zoneinfo/PRC /etc/localtime # 修改为当地时区
在容器内部连接到数据库:
mysql -u root -p # 接着输入密码,即可登录Docker容器内的mysql
创建一个新用户和数据库单独给waline使用,这样数据不会混乱,也更安全。
CREATE USER '数据库用户名'@'%' IDENTIFIED BY '密码'; # 创建新的用户
CREATE DATABASE waline #最后的zdy是库名,修改为自己的,下面同理
GRANT ALL PRIVILEGES ON waline.* TO 'waline'@'%'; # 授予数据库管理权限
FLUSH PRIVILEGES; #最后刷新权限, 使设置生效
alter user 数据库用户名 identified with mysql_native_password by '密码'; #因为mysql8的加密方式和Navicat不一样, 如果Navicat链接出错,请执行这句修改加密方式
然后选择创建的库,
use waline;
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
SET NAMES utf8mb4;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
# Dump of table wl_Comment
# ------------------------------------------------------------
CREATE TABLE `wl_Comment` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`comment` text,
`insertedAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`ip` varchar(100) DEFAULT '',
`link` varchar(255) DEFAULT NULL,
`mail` varchar(255) DEFAULT NULL,
`nick` varchar(255) DEFAULT NULL,
`pid` int(11) DEFAULT NULL,
`rid` int(11) DEFAULT NULL,
`sticky` boolean DEFAULT NULL,
`status` varchar(50) NOT NULL DEFAULT '',
`like` int(11) DEFAULT NULL,
`ua` text,
`url` varchar(255) DEFAULT NULL,
`createdAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updatedAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
# Dump of table wl_Counter
# ------------------------------------------------------------
CREATE TABLE `wl_Counter` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`time` int(11) DEFAULT NULL,
`reaction0` int(11) DEFAULT NULL,
`reaction1` int(11) DEFAULT NULL,
`reaction2` int(11) DEFAULT NULL,
`reaction3` int(11) DEFAULT NULL,
`reaction4` int(11) DEFAULT NULL,
`reaction5` int(11) DEFAULT NULL,
`reaction6` int(11) DEFAULT NULL,
`reaction7` int(11) DEFAULT NULL,
`reaction8` int(11) DEFAULT NULL,
`url` varchar(255) NOT NULL DEFAULT '',
`createdAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updatedAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
# Dump of table wl_Users
# ------------------------------------------------------------
CREATE TABLE `wl_Users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`display_name` varchar(255) NOT NULL DEFAULT '',
`email` varchar(255) NOT NULL DEFAULT '',
`password` varchar(255) NOT NULL DEFAULT '',
`type` varchar(50) NOT NULL DEFAULT '',
`label` varchar(255) DEFAULT NULL,
`url` varchar(255) DEFAULT NULL,
`avatar` varchar(255) DEFAULT NULL,
`github` varchar(255) DEFAULT NULL,
`twitter` varchar(255) DEFAULT NULL,
`facebook` varchar(255) DEFAULT NULL,
`google` varchar(255) DEFAULT NULL,
`weibo` varchar(255) DEFAULT NULL,
`qq` varchar(255) DEFAULT NULL,
`2fa` varchar(32) DEFAULT NULL,
`createdAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updatedAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
然后使用exit命令退出myql和docker容器,重启环境。
docker-compose restart
享用你的博客
通过ip+端口方式即可访问你的博客,除此访问需要创建账号密码,它会自己跳转到后台哒,更多好玩的,自己探索吧。
Waline后台管理
访问:域名+ip+ '/ui/register'
优化&主题美化
图标
当前使用Dreams主题,图标参考地址:Remix Icon - Open source icon library