Docker系列 | 好用美观强大的博客建站程序 - Halo 2.0
Halo 2.0 简介
Halo官方链接:
文档地址:http://docs.halo.run/
社区地址:https://bbs.halo.run/
官网地址:https://halo.run/
GitHub地址:https://github.com/halo-dev/halo
Demo地址:https://demo.halo.run
Demo后台:https://demo.halo.run/console
用户名:demo
密码:P@ssw0rd123..
图片展示


搭建环境
- 服务器: 我用的是腾讯云轻量应用服务器,地区是香港的,众所周知,大陆内的服务器及域名需要备案才能使用,香港的vps可以免备案,而且大陆访问香港的vps速度也很快,基本上都是20~60ms左右的延迟,而且带宽高,流量大。我是非常推荐的。
入口==>腾讯云轻量应用服务器(优惠活动新用户1折起) - 系统: CentOS-7,(Ubantu或Debian也是可以的,看个人习惯,我是习惯用CentOS了)
- 域名: 搭建前提前注册域名,并把域名解析到服务器。(这里推荐使用 Cloudflare 来管理域名解析)
- 容器环境: 如果安装的系统是纯净系统,第一是时间更新系统的库,同时务必安装Docker、Docker- compose容器环境,方便后续部署及管理程序容器。
- (非必需) 如果觉得有些时候用UI界面管理服务器比较方便简单,也可以安装宝塔面板,具体可以到宝塔面板官网查看教程,一键安装非常方便。
Nginx反向代理: 可以在本机宿主机安装,或在另外一台服务器安装都可以,记得域名解析的时候,Nginx部署在哪里,域名解析就解析到哪个服务器的IP上。(这个Nginx也是使用Docker部署的,同时可以自动申请及续约免费SSL证书)
正式搭建Halo2.0
简要说明
我们搭建Halo2.0,采用的是最简单的方式,即Docker- compose。这种方式不仅搭建简单,同时维护及更新也简单,而且这个方式同样适用于其他Docker容器的搭建,正所谓“一理通,百理用”。
创建Docker-compose.yml文件
我习惯为服务器的docker容器服务统一放到一个文件夹里,方便管理及数据迁移。(这里我举个例子:我在vps的
root目录下,创建一个docker_data文件夹,然后在这个文件夹下再创建Halo的文件夹halo,最后的路径即/root/docker_data/halo)sudo -i #获取最高管理员权限 mkdir -p /root/docker_data/halo #创建`halo`文件夹,这是完整路径 cd /root/docker_data/halo #进入到halo的目录里在
/root/docker_data/halo这个目录下,我们用以下代码,新建及编辑docker-compose.yml这个文件。vim docker-compose.yml创建并打开文件后,点击键盘上
i键,进入编辑状态。接下来,我们完善halo的docker-compose.yml文件:
version: "3" services: halo: image: halohub/halo:2.3.2 #这里官方建议使用具体版本号,不要使用latest标签 container_name: halo restart: on-failure:3 depends_on: halodb: condition: service_healthy networks: halo_network: volumes: - ./:/root/.halo2 ports: - "28090:8090" #左边是容器访问端口,改成自己想用的;右边是容器内部端口,勿动 command: - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo - --spring.r2dbc.username=root # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致 - --spring.r2dbc.password=Abc123456 - --spring.sql.init.platform=mysql # 外部访问地址,请根据实际需要修改 - --halo.external-url=https://blog.abcabc.com # 初始化的超级管理员用户名 - --halo.security.initializer.superadminusername=admin # 初始化的超级管理员密码 - --halo.security.initializer.superadminpassword=adminadmin halodb: image: mysql:8.0.31 container_name: halodb 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: - ./mysql:/var/lib/mysql - ./mysqlBackup:/data/mysqlBackup ports: - "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=Abc123456 - MYSQL_DATABASE=halo networks: halo_network:这里有几个要点需要注意:
- 里面涉及到的管理员登陆用户名及密码,需要改为你自己的。
- 数据库名及密码,也尽量改成自己的,但要注意上下文都要对应同样的库名及密码。
- 里面
- --halo.external-url=https://blog.abcabc.com这一段=号后面的域名,直接修改为解析后并加了SSL证书的最终域名,例如我这里改为https://blog.abcabc.com。 还有一点,里面数据库的
3306端口,我并没有按照官方原版的方法做端口映射,就是为了尽最大可能保证数据库安全,不暴露到外网。开放服务端口
注意:
- 我们只需要开放映射后的端口即可,不用开放容器内原端口。我这里只需要开放
28090这个端口。 - 如果有安装宝塔面板,除了需要把vps的对应端口开放,同时也要在面板里开放同样的端口。
- 我们只需要开放映射后的端口即可,不用开放容器内原端口。我这里只需要开放
查看端口是否被占用:
lsof -i:28090 #查看 28090 端口是否被占用,不返回提示就说明端口没被占用;如果被占用,需要在`docker-compose.yml`里面更改运行docker-compose.yml以安装Halo
cd /root/data/docker_data/halo # 来到 docker-compose.yml 文件所在的文件夹里面 docker-compose up -d # 运行、安装halo完成安装,访问halo
只要页面上没有出现什么错误的代码,就可以正常访问服务了。
输入http://<服务器ip>:28090/即可打开登陆页面。- 安装后,如果发现docker容器里只运行了
halodb这个服务,而halo没有运行,很有可能服务器的可用运行内存RAM小于1G,这个halo2.X对内存的要求还是有一丢丢高的,小内存的vps没法安装使用。 对于管理后台的登陆地址,好像是不同的主题会对应不同登陆后缀名?待验证,我这里给出几个可能的登陆地址供参考:
http://<服务器ip>:28090/console # 我自己的是用这个地址 http://<服务器ip>:28090/admin http://<服务器ip>:28090/login反向代理
Nginx反代
这里我们直接用
docker部署的Nginx服务来做反代,具体教程,可以看我另外的文章,有做具体介绍。


宝塔面板反代
在域名站点那里,点击进去,点进配置项。
把下面的反代代码复制进去,覆盖掉原来location那一段:
location / {
proxy_pass http://127.0.0.1:28090/; # 注意改成你实际使用的端口
rewrite ^/(.*)$ /$1 break;
proxy_redirect off;
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;
proxy_set_header Upgrade-Insecure-Requests 1;
proxy_set_header X-Forwarded-Proto https;
}
修改好后,保存即可。
衍生知识
管理Halo
在日常使用中,我们可能需要停止服务、更新镜像等,那么下面就是常用的代码:
cd /root/docker_data/halo # 进入halo文件夹
docker-compose down # 停止halo服务
cp -r /root/docker_data/halo /root/docker_data/halo.archive # 备份halo整体文件夹
docker-compose pull # 拉取镜像,如果镜像有新版本,记得改成最新的具体版本号
docker-compose up -d # 请不要使用 docker-compose stop 来停止容器,因为这么做需要额外的时间等待容器停止;docker-compose up -d 直接升级容器时会自动停止并立刻重建新的容器,完全没有必要浪费那些时间。
docker image prune # prune 命令用来删除不再使用的 docker 镜像。删除所有未被 tag 标记和未被容器使用的镜像
卸载halo
cd /root/docker_data/halo # 进入halo文件夹
docker-compose down # 停止halo服务
cd ..
rm -rf /root/data/docker_data/halo # 完全删除映射到本地的容器数据
进阶使用手册
插件及主题
地址:https://github.com/halo-sigs/awesome-halo
1,目前Halo属于大更新,能用的主题和插件还不多,但也够用。以前1.X版本的主题很多不使用于2.X版本。
2,新版Halo默认不支持MarkDown语法在线编辑文章,需要安装单独插件,可以参考官方文档说明。
3,从1.X升级到2.X,需要手动备份旧档数据,建议全局备份一次,再按照官方方法单独到处数据json文件。在2.X版本里,需要安装迁移插件来导入json文件以完成数据迁移,但目前似乎还不是很完美。
(待完善补充更多进阶玩法)
2. 简介
Halo官方链接:
文档地址:http://docs.halo.run/
社区地址:https://bbs.halo.run/
官网地址:https://halo.run/
GitHub地址:https://github.com/halo-dev/halo
Demo地址:https://demo.halo.run
Demo后台:https://demo.halo.run/console
用户名:demo
密码:P@ssw0rd123..
图片展示


搭建环境
- 服务器: 我用的是腾讯云轻量应用服务器,地区是香港的,众所周知,大陆内的服务器及域名需要备案才能使用,香港的vps可以免备案,而且大陆访问香港的vps速度也很快,基本上都是20~60ms左右的延迟,而且带宽高,流量大。我是非常推荐的。
入口==>腾讯云轻量应用服务器(优惠活动新用户1折起) - 系统: CentOS-7,(Ubantu或Debian也是可以的,看个人习惯,我是习惯用CentOS了)
- 域名: 搭建前提前注册域名,并把域名解析到服务器。(这里推荐使用 Cloudflare 来管理域名解析)
- 容器环境: 如果安装的系统是纯净系统,第一是时间更新系统的库,同时务必安装Docker、Docker- compose容器环境,方便后续部署及管理程序容器。
- (非必需) 如果觉得有些时候用UI界面管理服务器比较方便简单,也可以安装宝塔面板,具体可以到宝塔面板官网查看教程,一键安装非常方便。
Nginx反向代理: 可以在本机宿主机安装,或在另外一台服务器安装都可以,记得域名解析的时候,Nginx部署在哪里,域名解析就解析到哪个服务器的IP上。(这个Nginx也是使用Docker部署的,同时可以自动申请及续约免费SSL证书)
正式搭建Halo2.0
简要说明
我们搭建Halo2.0,采用的是最简单的方式,即Docker- compose。这种方式不仅搭建简单,同时维护及更新也简单,而且这个方式同样适用于其他Docker容器的搭建,正所谓“一理通,百理用”。
创建Docker-compose.yml文件
我习惯为服务器的docker容器服务统一放到一个文件夹里,方便管理及数据迁移。(这里我举个例子:我在vps的
root目录下,创建一个docker_data文件夹,然后在这个文件夹下再创建Halo的文件夹halo,最后的路径即/root/docker_data/halo)sudo -i #获取最高管理员权限 mkdir -p /root/docker_data/halo #创建`halo`文件夹,这是完整路径 cd /root/docker_data/halo #进入到halo的目录里在
/root/docker_data/halo这个目录下,我们用以下代码,新建及编辑docker-compose.yml这个文件。vim docker-compose.yml创建并打开文件后,点击键盘上
i键,进入编辑状态。接下来,我们完善halo的docker-compose.yml文件:
version: "3" services: halo: image: halohub/halo:2.3.2 #这里官方建议使用具体版本号,不要使用latest标签 container_name: halo restart: on-failure:3 depends_on: halodb: condition: service_healthy networks: halo_network: volumes: - ./:/root/.halo2 ports: - "28090:8090" #左边是容器访问端口,改成自己想用的;右边是容器内部端口,勿动 command: - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo - --spring.r2dbc.username=root # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致 - --spring.r2dbc.password=Abc123456 - --spring.sql.init.platform=mysql # 外部访问地址,请根据实际需要修改 - --halo.external-url=https://blog.abcabc.com # 初始化的超级管理员用户名 - --halo.security.initializer.superadminusername=admin # 初始化的超级管理员密码 - --halo.security.initializer.superadminpassword=adminadmin halodb: image: mysql:8.0.31 container_name: halodb 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: - ./mysql:/var/lib/mysql - ./mysqlBackup:/data/mysqlBackup ports: - "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=Abc123456 - MYSQL_DATABASE=halo networks: halo_network:这里有几个要点需要注意:
- 里面涉及到的管理员登陆用户名及密码,需要改为你自己的。
- 数据库名及密码,也尽量改成自己的,但要注意上下文都要对应同样的库名及密码。
- 里面
- --halo.external-url=https://blog.abcabc.com这一段=号后面的域名,直接修改为解析后并加了SSL证书的最终域名,例如我这里改为https://blog.abcabc.com。 还有一点,里面数据库的
3306端口,我并没有按照官方原版的方法做端口映射,就是为了尽最大可能保证数据库安全,不暴露到外网。开放服务端口
注意:
- 我们只需要开放映射后的端口即可,不用开放容器内原端口。我这里只需要开放
28090这个端口。 - 如果有安装宝塔面板,除了需要把vps的对应端口开放,同时也要在面板里开放同样的端口。
- 我们只需要开放映射后的端口即可,不用开放容器内原端口。我这里只需要开放
查看端口是否被占用:
lsof -i:28090 #查看 28090 端口是否被占用,不返回提示就说明端口没被占用;如果被占用,需要在`docker-compose.yml`里面更改运行docker-compose.yml以安装Halo
cd /root/data/docker_data/halo # 来到 docker-compose.yml 文件所在的文件夹里面 docker-compose up -d # 运行、安装halo完成安装,访问halo
只要页面上没有出现什么错误的代码,就可以正常访问服务了。
输入http://<服务器ip>:28090/即可打开登陆页面。- 安装后,如果发现docker容器里只运行了
halodb这个服务,而halo没有运行,很有可能服务器的可用运行内存RAM小于1G,这个halo2.X对内存的要求还是有一丢丢高的,小内存的vps没法安装使用。 对于管理后台的登陆地址,好像是不同的主题会对应不同登陆后缀名?待验证,我这里给出几个可能的登陆地址供参考:
http://<服务器ip>:28090/console # 我自己的是用这个地址 http://<服务器ip>:28090/admin http://<服务器ip>:28090/login反向代理
Nginx反代
这里我们直接用
docker部署的Nginx服务来做反代,具体教程,可以看我另外的文章,有做具体介绍。


宝塔面板反代
在域名站点那里,点击进去,点进配置项。
把下面的反代代码复制进去,覆盖掉原来location那一段:
location / {
proxy_pass http://127.0.0.1:28090/; # 注意改成你实际使用的端口
rewrite ^/(.*)$ /$1 break;
proxy_redirect off;
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;
proxy_set_header Upgrade-Insecure-Requests 1;
proxy_set_header X-Forwarded-Proto https;
}
修改好后,保存即可。
衍生知识
管理Halo
在日常使用中,我们可能需要停止服务、更新镜像等,那么下面就是常用的代码:
cd /root/docker_data/halo # 进入halo文件夹
docker-compose down # 停止halo服务
cp -r /root/docker_data/halo /root/docker_data/halo.archive # 备份halo整体文件夹
docker-compose pull # 拉取镜像,如果镜像有新版本,记得改成最新的具体版本号
docker-compose up -d # 请不要使用 docker-compose stop 来停止容器,因为这么做需要额外的时间等待容器停止;docker-compose up -d 直接升级容器时会自动停止并立刻重建新的容器,完全没有必要浪费那些时间。
docker image prune # prune 命令用来删除不再使用的 docker 镜像。删除所有未被 tag 标记和未被容器使用的镜像
卸载halo
cd /root/docker_data/halo # 进入halo文件夹
docker-compose down # 停止halo服务
cd ..
rm -rf /root/data/docker_data/halo # 完全删除映射到本地的容器数据
进阶使用手册
插件及主题
地址:https://github.com/halo-sigs/awesome-halo
1,目前Halo属于大更新,能用的主题和插件还不多,但也够用。以前1.X版本的主题很多不使用于2.X版本。
2,新版Halo默认不支持MarkDown语法在线编辑文章,需要安装单独插件,可以参考官方文档说明。
3,从1.X升级到2.X,需要手动备份旧档数据,建议全局备份一次,再按照官方方法单独到处数据json文件。在2.X版本里,需要安装迁移插件来导入json文件以完成数据迁移,但目前似乎还不是很完美。
评论