Docker系列 | 好用美观强大的博客建站程序 - Halo 2.0
标签搜索

Docker系列 | 好用美观强大的博客建站程序 - Halo 2.0

jack698
2024-10-18 / 0 评论 / 2 阅读 / 正在检测是否收录...

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端口,我并没有按照官方原版的方法做端口映射,就是为了尽最大可能保证数据库安全,不暴露到外网。

    开放服务端口

    注意:

    1. 我们只需要开放映射后的端口即可,不用开放容器内原端口。我这里只需要开放 28090 这个端口。
    2. 如果有安装宝塔面板,除了需要把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端口,我并没有按照官方原版的方法做端口映射,就是为了尽最大可能保证数据库安全,不暴露到外网。

    开放服务端口

    注意:

    1. 我们只需要开放映射后的端口即可,不用开放容器内原端口。我这里只需要开放 28090 这个端口。
    2. 如果有安装宝塔面板,除了需要把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文件以完成数据迁移,但目前似乎还不是很完美。

(待完善补充更多进阶玩法)

0

评论

博主关闭了所有页面的评论