前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Halo 博客腾讯云部署教程

Halo 博客腾讯云部署教程

原创
作者头像
秦怀杂货店
发布2024-12-07 18:23:25
发布2024-12-07 18:23:25
870
举报
文章被收录于专栏:技术杂货店

最近重新搭建了博客,续费真的好贵,以前的数据一不小心还弄丢了,一把辛酸泪。

环境:

  • 腾讯云服务器(我选择的是 Ubuntu 系统)
  • 已备案的域名

1 Halo 安装

我选择使用 Docker-Compose 安装,并且安装的是 1.6 版本,因为 Joe 2.0 主题还不适配 2.0 的 Halo ,所以选择了低版本的 Halo.

1.1 Docker安装

Ubuntu 的安装命令是 apt ,所以先更新 apt 的软件包列表,让它知道 Docker 软件包的存在:

代码语言:shell
复制
sudo apt update

然后可以使用使用 apt install 命令将 Docker 的组件添加到你的系统中。你将会安装最新版本的 Docker 社区版(CE)。有三个软件包需要安装:

  • docker-ce: Docker引擎守护程序。
  • docker-ce-cli: 将与之互动的Docker CLI。
  • containerd.io : 用于启动和运行你的容器。

使用命令:

代码语言:shell
复制
sudo apt install docker-ce docker-ce-cli containerd.io

1.2 docker-compose

接下来可以安装 docker-compose ,它是一个流行的 Docker 配套工具,它让使用多个容器的应用程序更容易工作。虽然 docker CLI 每条命令只针对一个容器,但 docker compose 可以通过每个动作启动和停止几个容器。执行以下命令:

代码语言:shell
复制
sudo apt install docker-compose-plugin

安装好了之后可以看看版本:

代码语言:shell
复制
docker compose version

1.3 Halo 容器

安装好 Docker 环境后,可以创建一个文件夹,比如 ~/halo-app :

代码语言:shell
复制
mkdir ~/halo-app && cd ~/halo-app

在文件夹里面创建 docker-compose. yaml 文件,我选择创建 Halo + MySQL + Redis 的实例:

代码语言:shell
复制
sudo vi docker-compose.yaml

在文件里面写以下内容,注意==密码一定要改==,要不数据库立马就被搞了:

端口号我就不改了,后面用 Nginx 代理一下,8090:8090 中,前面的 8090 表示主机的端口,后面的 8090 表示 Docker 容器的端口,如果改成 80:8090,我们可以直接通过 http://ip 就可以访问,因为 80 是默认端口。但是我们建议 80 端口留给 nginx ,用 8090 就可以。

代码语言:shell
复制
version: "3"  
  
services:  
halo_server:  
image: halohub/halo:1.6.0  
container_name: halo_server  
restart: on-failure:3  
depends_on:  
- halo_mysql  
- halo_redis  
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=redis  
- SPRING_REDIS_PORT=6379  
- SPRING_REDIS_DATABASE=0  
- SPRING_REDIS_HOST=halo_redis  
- SPRING_REDIS_PASSWORD=dm5fD%rvPtq  
  
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#Dw232432fda6  
- MYSQL_DATABASE=halodb  
  
halo_redis:  
image: redis  
container_name: halo_redis  
restart: on-failure:3  
networks:  
halo_network:  
volumes:  
- ./redis/data:/data  
- ./redis/logs:/logs  
# 请修改此密码,并对应修改上方 Halo 服务的 SPRING_REDIS_PASSWORD 变量值  
command: redis-server --requirepass dm5fD%rvPtq  
ports:  
- "6379:6379"  
networks:  
halo_network:

保存后,以下命令就可以启动 Halo 服务了,打开打开 http://ip:端口号 即可看到安装引导界面。

官方提示:如果需要配置域名访问,建议先配置好反向代理以及域名解析再进行初始化。如果通过 http://ip:端口号 的形式无法访问,请到服务器厂商后台将运行的端口号添加到安全组,如果服务器使用了 Linux 面板,请检查此 Linux 面板是否有还有安全组配置,需要同样将端口号添加到安全组。sudo docker-compose up -d

我们先停掉:

代码语言:shell
复制
sudo docker-compose down

2 域名访问

在域名解析里面添加以下两条解析记录就可以了:比如你域名是 abc.cn,分别对应:

代码语言:shell
复制
http://abc.cn
http://www.abc.cn
image.png
image.png

3 Https 配置

到这里为止,只要你启动 Docker 容器,就可以用 http 的方式访问,但是我想要 https 也能访问,并且我不想用一个域名带着一个端口,这个时候我们有很多方式可以解决,我选择 NGINX 的方式。

3.1 安装 nginx

使用以下命令安装:

代码语言:shell
复制
sudo update
sudo apt install nginx

配置 nginx:

代码语言:shell
复制
# 下载 Halo 官方的 Nginx 配置模板
curl -o /etc/nginx/conf.d/halo.conf --create-dirs https://dl.halo.run/config/nginx.conf

下载之后,需要修改配置:

代码语言:shell
复制
sudo vi /etc/nginx/conf.d/halo.conf

里面格式应该是这样,把我们的域名和端口配置上,80 端口留给 nginx 本身:

image.png
image.png

修改完成之后

代码语言:shell
复制
# 检查配置是否有误
sudo nginx -t

# 重载 Nginx 配置
sudo nginx -s reload

3.2 使用 certbot 申请并自动安装 SSL 证书

  1. 安装 certbot 和 certbot nginx 插件:# Ubuntu 安装 certbot 以及 certbot nginx 插件 sudo apt install certbot sudo apt install python3-certbot-nginx
  2. 申请并自动配置证书:sudo certbot --nginx需要输入邮箱并按 ya 同意相关协议,具体请参考输入命令后的输出。
  3. 自动续约 这里申请的免费证书可以免费续期,理论上可以一直免费使用,这里提供了自动执行续期的命令。sudo certbot renew --dry-run

这个时候,重新启动 Docker 容器就可以了,值得注意的是,在设置完反向代理后,必须在博客的后台管理界面设置正确的博客地址,否则可能导致 CSS 加载不成功、样式混乱等错误。

image.png
image.png

4 其他细节

4.1 每次打开新标签

如果每次点击都跳走打开新标签,可以看看主题设置 -- 主题相关 -- 链接跳转行为(全局-内容区域) -- 选当前页

image.png
image.png

4.2 导航栏跳转不正确

导航栏配置了之后,点击标签,会到首页下,可以看看菜单,需要配置为相对路径,不要加上域名:

image.png
image.png

4.3 备份问题

备份之后,导入发现是需要 json ,但是我备份的是全量文件,瞬间傻眼。可以通过数据库导入重新找回,但是我是个怕麻烦的人,直接重新搞。最好就是两个都备份一下,省事很多。

作者: 秦怀,个人站点 秦怀杂货店,纵使缓慢,驰而不息。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 Halo 安装
    • 1.1 Docker安装
    • 1.2 docker-compose
    • 1.3 Halo 容器
  • 2 域名访问
  • 3 Https 配置
    • 3.1 安装 nginx
    • 3.2 使用 certbot 申请并自动安装 SSL 证书
  • 4 其他细节
    • 4.1 每次打开新标签
    • 4.2 导航栏跳转不正确
    • 4.3 备份问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档