基于halo框架采用docker-compose快速部署个人博客

news2024/11/29 4:39:47

halo快速部署个人博客

技术方案

docker+docker-compose+nginx+mysql

halo简介

Halo是一款现代化的开源博客/CMS系统,所有代码开源在GitHub上且处于积极维护状态。它是基于 Java Spring Boot 构建的,易于部署,支持REST API、模板系统、附件系统和评论系统等功能。

Halo 作为一款好用又强大的开源建站工具,配合上不同的模板与插件,可以很好地帮助你构建你心中的理想站点。它可以是你公司的官方网站,可以是你的个人博客,也可以是团队共享的知识库,甚至可以是一个论坛、一个商城。

相关地址

开源仓库

halo-dev/halo: 强大易用的开源建站工具。 (github.com)

halo: 强大易用的开源建站工具。 (gitee.com)

中文文档

Halo 文档

社区

Halo 社区

官网

Halo 建站 - 强大易用的开源建站工具

主题仓库

应用市场 - Halo 建站 - 强大易用的开源建站工具

基础设置

关闭防火墙(docker启动之前关闭)

systemctl status firewalld
systemctl stop firewalld

docker

安装

1.卸载旧的版本
$sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
2.需要的安装包
$sudo yum install -y yum-utils
3.设置镜像的仓库(官方)
$sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo  (官网速度慢)
$sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(推荐使用,阿里云速度快)
4.更新yum软件包索引
$sudo yum makecache fast
5.安装docker  docker-ce 社区版  docker-ee 企业版
$sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
6.启动docker
$sudo systemctl start docker
7.查看docker是否安装成功
$sudo docker version

卸载

1.卸载依赖
$sudo yum remove docker-ce docker-ce-cli containerd.io
2.删除资源
$sudo rm -rf /var/lib/docker
# /var/lib/docker     docker的默认工作路径

阿里云镜像加速

配置镜像加速器
通过shell脚本追加文本内容
$sudo mkdir -p /etc/docker
$sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://f2k3b83v.mirror.aliyuncs.com"]
}
EOF
$sudo systemctl daemon-reload
$sudo systemctl restart docker

设置开机自动启动

#systemctl enable docker

查看docker服务状态

#systemctl status docker

查看docker具体信息

#docker info

docker-compose

这里采用离线安装,在线安装或多或少有各种问题

所有版本预览Releases · docker/compose (github.com)

#最好是进入到/usr/local/bin/目录下安装,我第一次在根目录下安装,报错docker-compose: command not found,第二次在上述目录下安装可以成功
#将文件上传到linux后,重命名
mv docker-compose-linux-x86_64.docker-compose-linux-x86_64 docker-compose


#添加可执行权限
chmod +x /usr/local/bin/docker-compose

#测试
docker-compose version

nginx反向代理配置

在系统任意位置创建一个 halo 文件夹,并创建多级目录

mkdir -p /halo/nginx/conf/

编写Nginx配置文件

vim /halo/nginx/conf/nginx.conf

vim: command not found
yum install vim -y
#user  root;
error_log  /var/log/nginx/error.log notice;
worker_processes  1;

pid        /var/run/nginx.pid;

events {
  worker_connections  1024;
}
http {
  include       mime.types;
  default_type  application/octet-stream;
  sendfile        on;
  keepalive_timeout  65;
  # 设置上传文件的最大值
  client_max_body_size 256m;
  
  upstream blog {
    # 使用容器服务名
	server halo:8090;
  }
    
  server {
      listen       80;
      # 可进行域名绑定
      server_name  nwth.xyz;
      location / {
          # 设置反向代理的地址(实际是请求转发)
          proxy_pass http://blog;
          # 设置HTTP请求头
          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;
      }
      error_page   500 502 503 504  /50x.html;
      location = /50x.html {
          root   html;
      }
  }
}

Docker-compose部署halo,mysql,nginx

vim /halo/compose.yaml

修改的自定义配置,找到下面的参数所在位置修改:

服务器或虚拟机ip:halo.external-url 中的 ip 设置,修改为自己的服务器ip地址。

超级管理员账号密码
账号 halo.security.initializer.superadminusername,我写的配置中是 admin
密码 halo.security.initializer.superadminpassword ,我写的配置中是 123456
mysql的root用户密码,以下两个参数的值都需要修改且必须保持一致
spring.r2dbc.password,我写的配置中是 123456
MYSQL_ROOT_PASSWORD,我写的配置中是 123456

建议本地编辑再上传

记得用notepad++打开编辑完成后,格式修改为UTF-8无BOM编码格式

要不然报错

parsing /root/halo/compose.yaml: yaml: invalid leading UTF-8 octet

services:
  halo:
    image: halohub/halo:2.10
    container_name: halo
    restart: on-failure:3
    depends_on:
      halodb:
        condition: service_healthy
    networks:
      halo_network:
    volumes:
      - ./halo:/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=123456
      - --spring.sql.init.platform=mysql
      # 外部访问地址,我的服务器 ip 为8.130.97.145,此处需要修改为你自己的服务器或虚拟机 ip
      - --halo.external-url=http://192.168.101.128:80/
      # 初始化的超级管理员用户名
      - --halo.security.initializer.superadminusername=admin
      # 初始化的超级管理员密码
      - --halo.security.initializer.superadminpassword=123456

  halodb:
    image: mysql:8.1.0
    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: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=123456
      - MYSQL_DATABASE=halo

  halonginx: # 服务名称,用户自定义
    image: nginx:1.24.0  # 镜像版本
    container_name: halonginx
    # 链接到其它容器,能在 nginx.conf 反向代理配置时使用
    links:
      - halo
    networks:
      halo_network:
    ports:
      - 80:80  # 暴露端口
    volumes: # 挂载
      - /halo/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
    privileged: true # 这个必须要,解决nginx的文件调用的权限问题
    
networks:
  halo_network:

容器编排

# 1.进入 halo 目录
cd /halo

# 2.容器编排
启动并访问服务
docker-compose up -d
关停服务
docker-compose down
查看状态:docker ps

访问测试

http://【服务器或虚拟机ip】

初次访问有点慢

账号密码为compose.yml中填写的超级管理员的账号密码

admin/123456

基础操作

参考用户指南 | Halo 文档

主题

2.10版本加入了应用市场,可在其中下载安装喜欢的主题

我的主题!

Hao
另外推荐以下几个主题,都不错
Sakura
Joe

番外:有界面的反向代理神器 Nginx Proxy Manager

创建一个docker-compose.yml 文件

version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '8080:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

一键启动

docker-compose up -d

登录到管理界面

当docker容器跑起来后, 连接到81端口即可访问管理界面。有时候需要稍等一会儿。

访问:http://你的服务器IP:80

第一次登录的默认管理员账户:

Email:    admin@example.com
Password: changeme

第一次登陆后,你会立刻被要求修改登录密码和一些重要信息。

image-20231121211848621

image-20231122171935199

番外:twikoo部署

(目前还没成功,可能配置还有点问题)
云函数部署 | Twikoo 文档

Halo Twikoo 插件以及 ssl 部署 | L’s Blog (liuocean.com)

ssl证书

我使用的就是免费生成的,但是只能用于一个域名,如果还要用二级域名,需要重新生成

cer和key后缀结尾的文件

https://freessl.cn/

ACME v2证书自动化快速入门 (freessl.cn)

参考文章

Let’s Encrypt泛域名证书生成 acme.sh免费申请使用_letsencrypt泛域名-CSDN博客

番外:错误集锦

下面两处错误主要是nginx和nginx proxy端口冲突

Error response from daemon: driver failed programming external connectivity on endpo int nginx-proxy-manager-app-1 (b39ad26f01f7599bcee2fc11c042ea357c4b33369ccdd9effcdb7 97a92ce94e4): Bind for 0.0.0.0:80 failed: port is already allocated

查看docker 代理占用的端口
ps -aux | grep -v grep | grep docker-proxy
关闭docker 服务
sudo service docker stop
### 重启docker服务

sudo service docker start
还不行的话就
docker rm $(docker ps -aq)
sudo rm /var/lib/docker/network/files/local-kv.db

Error response from daemon: failed to update store for object type *libnetwork.endpointCnt: Key not found in store

# pkill docker
# iptables -t nat -F
# ifconfig docker0 down
# brctl delbr docker0
# service docker restart

个人搭建博客简单记录,目前很多配置还有许多问题,之前用hexo搭建部署到github上,但是排版出现问题,不得不放弃,也试过用宝塔部署wordpress,觉得太笨重,耗资源,使用halo框架,进行了简单的配置。
博客网站
大家可以评论留言,提出改进办法,不胜感激,虽然评论也暂时用不了v😂😂😂

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1256448.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二叉树算法—后继节点

与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 1 后继节点1.1 解题思路1.2 代码实现 &#x1f48e;总结 1 后继节点 1.1 解题思路 二叉树节点结构定义如下&#xff1a; public static class Node { public int cal; public Node left; public Node right; public…

记一次处理大数据而导致的内存溢出问题

问题 订单服务通过MQ进行订单同步时&#xff0c;刚启动可以正常消费&#xff0c;但是跑一会就会卡住&#xff0c;每次都是第8个kafka分区不行再进行消费&#xff0c;其他分区消费的很慢。 现象 首先&#xff0c;CPU超高&#xff0c;达到百分之300多&#xff1b;其次&#xf…

纯新手发布鸿蒙的第一个java应用

第一个java开发鸿蒙应用 1.下载和安装华为自己的app开发软件DevEco Studio HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 2.打开IDE新建工程&#xff08;当前用的IDEA 3.1.1 Release&#xff09; 选择第一个&#xff0c;其他的默认只能用(API9)版本&#xff0c;…

【教学类-06-09】20231126 X-Y数字分合-分-下空右

结果展示&#xff1a; 背景需求&#xff1a; 1、加减法理论上在幼儿园不适用&#xff08;虽然实际上幼儿在家早就练习了&#xff09; 2、分合题是大班教学数上涉及的内容&#xff0c;可以尝试&#xff08;类似于减法、加法&#xff09;可以用雪花片等实物进行增加、减少。——…

【教学类-06-13】20231126 (55格版)趣味题(一)1-9加法题(10倍)(整十相加)

作品展示 背景需求&#xff1a; 1、会做加法题的孩子5分钟内完成题目&#xff0c;太快了&#xff0c;所以为了拉平差异&#xff0c;需要给这些会做另外的题目&#xff0c;比如提供一些他们没有做过的“趣味题形”。 2、好多次&#xff0c;听见大班孩子在互相“考试”——“老…

数据结构与算法Java版本单元测验题

1.【实验题 2-2】实现以下对单链表的操作&#xff0c;题意和算法描述见《习题解答》图 2-7。 //将单链表 list 逆转&#xff0c;将各结点的 next 指向其前驱。泛型方法&#xff0c;返回值类型前声明类型参数 T public static void reverse(SinglyList list) 【思考题 2-6】实现…

Horizon地平线财富一直坚持“创新、开放、协作、共享”的运营理念

在“寒风凛冽”的熊市&#xff0c;投资人需要一颗不断探索、勇于尝试的心。 勇气意味着即使你知道这条路很难&#xff0c;你仍然选择坚持。而信念则是相信&#xff0c;即使现在很多人不理解、甚至嘲笑&#xff0c;未来总会有一天他们会明白。 Horizon一直坚持着“创新、开放、…

4 时间序列预测入门: LSTM+ATTENTION

0 前沿 注意力机制其本质是一种通过网络自主学习出的一组权重系数&#xff0c;并以“动态加权”的方式来强调我们所感兴趣的区域同时抑制不相关背景区域的机制。核心目标也是从众多信息中选择出对当前任务目标更关键的信息。 Multi-Head Attention&#xff08;MHA&#xff09;&…

一网打尽异步神器CompletableFuture

Future接口以及它的局限性 我们都知道&#xff0c;Java中创建线程的方式主要有两种方式&#xff0c;继承Thread或者实现Runnable接口。但是这两种都是有一个共同的缺点&#xff0c;那就是都无法获取到线程执行的结果&#xff0c;也就是没有返回值。于是在JDK1.5 以后为了解决这…

C# WPF上位机开发(掌握一点c#基础)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 wpf虽然比较简单&#xff0c;但是最好还是要有一点c#的基础比较好。本身wpf有点类似于web开发&#xff0c;前端和html差不多&#xff0c;后端则和j…

2024年第十六届山东省职业院校技能大赛中职组 “网络安全”赛项竞赛正式卷任务书

2024年第十六届山东省职业院校技能大赛中职组 “网络安全”赛项竞赛正式卷任务书 2024年第十六届山东省职业院校技能大赛中职组 “网络安全”赛项竞赛正式卷A模块基础设施设置/安全加固&#xff08;200分&#xff09;A-1&#xff1a;登录安全加固&#xff08;Windows, Linux&am…

【推荐系统】MMOE笔记 20231126

paper阅读 任务差异带来的固有冲突实际上会损害至少某些任务的预测&#xff0c;特别是当模型参数在所有任务之间广泛共享时。&#xff08;在说ESMM&#xff09; 共享底层参数可以减少过拟合风险&#xff0c;但是会遇到任务差异引起的优化冲突&#xff0c;因为所有任务都需要在…

CRC 循环冗余检测

目录 一、基础知识1.异或运算xor2.模2算术&#xff08;1&#xff09;模2加法和减法&#xff08;2&#xff09;模2乘法&#xff08;3&#xff09;模2除法 二、CRC循环冗余检测1.背景2.原理3.求R 一、基础知识 1.异或运算xor 异或&#xff0c;顾名思义&#xff0c;只有当两个数…

React 入门使用 (官方文档向 Part2)

文章目录 用 State 响应输入声明式地考虑 UI步骤 1&#xff1a;定位组件中不同的视图状态步骤 2&#xff1a;确定是什么触发了这些状态的改变步骤 3&#xff1a;通过 useState 表示内存中的 state步骤 4&#xff1a;删除任何不必要的 state 变量步骤 5&#xff1a;连接事件处理…

(二) Windows 下 Sublime Text 3 安装离线插件 Anaconda

1 下载 Sublime Text 3 免安装版 Download - Sublime Text 2 下载 Package Control&#xff0c;放到 Sublime Text Build 3211\Data\Installed Packages 目录下。 Installation - Package Control 3 页面搜索 anaconda anaconda - Search - Package Control Anaconda - Pac…

使用 Java 客户端通过 HTTPS 连接到 Easysearch

Easysearch 一直致力于提高易用性&#xff0c;这也是我们的核心宗旨&#xff0c;然而之前一直没有官方的 Java 客户端&#xff0c;也对用户使用造成了一些困扰&#xff0c;现在&#xff0c;我们正式发布了第一个 Java 客户端 Easysearch-client:1.0.1。 这一里程碑式的更新为开…

C语言--利用选择法对数组中的10个整数按由小到大排序

一.选择法排序介绍&#x1f357; 所谓选择法就是先将10个数中最小的数字与arr[0]交换&#xff0c;再将arr[1]-arr[9]中最小的数字与arr[1]进行交换....每一次比较&#xff0c;找出一个未经排序的数中最小的一个。总共比较9轮。 下面以5个数字为例说明选择法的步骤。 二.完整代码…

【高级网络程序设计】Week3-2 Servlet

一、 What are servlets? 1. 定义 &#xff08;1&#xff09;Servlets are Java’s answer to CGI&#xff1a; programs that run on a web server acting as middle layer between HTTP request and databases or other applications.Used for client requests that cann…

Rust的异步编程与Futures

欢迎关注我的公众号lincyang新自媒体&#xff0c;回复关键字【程序员经典书单】&#xff0c;领取程序员的100本经典书单 大家好&#xff01;我是lincyang。 今天&#xff0c;我们来探讨Rust中的异步编程和Futures。Rust的异步编程是一个强大的特性&#xff0c;它允许开发者编写…

FloodFill

"绝境之中才窥见&#xff0c;Winner&#xff0c;Winner" FloodFill算法简介: floodfill又翻译成漫水填充。我们可以将下面的矩阵理解为一片具有一定高度的坡地&#xff0c;此时突发洪水&#xff0c;洪水会将高度<0的地方填满。 话句话来说&#xff0c;Fl…