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

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.confvim: 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.10container_name: halorestart: on-failure:3depends_on:halodb:condition: service_healthynetworks:halo_network:volumes:- ./halo:/root/.halo2ports:- "8090:8090"healthcheck:test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]interval: 30stimeout: 5sretries: 5start_period: 30scommand:- --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=123456halodb:image: mysql:8.1.0container_name: halodbrestart: on-failure:3networks:halo_network:command: - --default-authentication-plugin=mysql_native_password- --character-set-server=utf8mb4- --collation-server=utf8mb4_general_ci- --explicit_defaults_for_timestamp=truevolumes:- ./mysql:/var/lib/mysql- ./mysqlBackup:/data/mysqlBackupports:- "3306:3306"healthcheck:test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]interval: 3sretries: 5start_period: 30senvironment:# 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=halohalonginx: # 服务名称,用户自定义image: nginx:1.24.0  # 镜像版本container_name: halonginx# 链接到其它容器,能在 nginx.conf 反向代理配置时使用links:- halonetworks:halo_network:ports:- 80:80  # 暴露端口volumes: # 挂载- /halo/nginx/conf/nginx.conf:/etc/nginx/nginx.confprivileged: 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-stoppedports:- '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.mzph.cn/news/174823.shtml

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

相关文章

关于微服务的思考

目录 什么是微服务 定义 特点 利弊 引入时机 需要哪些治理环节 从单体架构到微服务架构的演进 单体架构 集群和垂直化 SOA 微服务架构 如何实现微服务架构 服务拆分 主流微服务解决方案 基础设施 下一代微服务架构Service Mesh 什么是Service Mesh&#xff1f…

python实现自动刷平台学时

背景 前一阵子有个朋友让我帮给小忙&#xff0c;因为他每学期都要看视频刷学时&#xff0c;一门平均需要刷500分钟&#xff0c;一学期有3-4门需要刷的。 如果是手动刷的话&#xff0c;比较麻烦&#xff0c;能否帮他做成自动化的。搞成功的话请我吃饭。为了这顿饭&#xff0c;咱…

京东秒杀之商品展示

1 在gitee上添加.yml文件 1.1 添加good-server.yml文件 server:port: 8084 spring:datasource:url: jdbc:mysql://localhost:3306/shop_goods?serverTimezoneGMT%2B8driverClassName: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSourceusername: rootpa…

多功能音乐沙漏的设计与实现

【摘要】随着当今社会快节奏生活的发展&#xff0c;当代大学生越来忽视时间管理的重要性&#xff0c;在原本计划只看几个视频只玩几个游戏的碎片化娱乐中耗费了大量的时光&#xff0c;对于自己原本的学习生活产生了巨大的影响。为更加有效的反映时间的流逝&#xff0c;特设计该…

第十七章 解读PyTorch断点训练(工具)

主要有以下几方面的内容&#xff1a; 对于多步长训练需要保存lr_schedule初始化随机数种子保存每一代最好的结果 简单详细介绍 最近在尝试用CIFAR10训练分类问题的时候&#xff0c;由于数据集体量比较大&#xff0c;训练的过程中时间比较长&#xff0c;有时候想给停下来&…

Gitee上传代码教程

1. 本地安装git 官网下载太慢&#xff0c;我们也可以使用淘宝镜像下载&#xff1a;CNPM Binaries Mirror 安装成功以后电脑会有Git Bush标识&#xff0c;空白处右键也可查看。 2. 注册gitee账号&#xff08;略&#xff09; 3. 创建远程仓库 4. 上传代码 4.1 在项目文件目录…

go当中的channel 无缓冲channel和缓冲channel的适用场景、结合select的使用

Channel Go channel就像Go并发模型中的“胶水”&#xff0c;它将诸多并发执行单元连接起来&#xff0c;或者正是因为有channel的存在&#xff0c;Go并发模型才能迸发出强大的表达能力。 无缓冲channel 无缓冲channel兼具通信和同步特性&#xff0c;在并发程序中应用颇为广泛。…

坚鹏:贵州银行西南财经大学零售业务数字化转型与场景营销策略

中国银保监会2022年1月正式发布了中国银保监会发布《关于银行业保险业数字化转型的指导意见》&#xff0c;这标准着中国银行业从局部的数字化转型向全面的数字化转型转变&#xff0c;进一步加速了银行数字化转型高潮的到来。 《关于银行业保险业数字化转型的指导意见》提出明确…

【教学类-06-12】20231126 (二)三位数 如何让加减乘除题目从小到大排序(以0-110之间加法为例,做正序排列用)

结果展示 背景需求&#xff1a; 二位数&#xff1a;去0 三位数&#xff08;需要排除很多0&#xff09; 解决思路 一、把数字改成三位数 二、对数组内的题目&#xff0c;8种可能性进行去“0”处理 1、十位数&#xff08;去百位数0&#xff09;十位数&#xff08;去百位数0&am…

数据增强让模型更健壮

在做一些图像分类训练任务时,我们经常会遇到一个很尴尬的情况,那就是: 明明训练数据集中有很多可爱猫咪的照片,但是当我们给训练好的模型输入一张戴着头盔的猫咪进行测试时,模型就不认识了,或者说识别精度很低。 很明显,模型的泛化能力太差,难道戴着头盔的猫咪就不是猫…

线性分类器--数据处理

数据集划分 通常按照 70%&#xff0c;20% &#xff0c;10% 来分数据集 数据处理 斯坦福的线性分类器体验 http://vision.stanford.edu/teaching/cs231n-demos/linear-classify/

【解决视觉引导多个位置需要标定多个位置的问题】

** 以下只针对2D定位&#xff0c;就是只有X、Y、Rz三个自由度的情况。** 假设一种情况&#xff0c;当视觉给机器人做引导任务时&#xff0c;零件有多个&#xff0c;分布在料框里&#xff0c;视觉需要走多个位置去拍&#xff0c;那么只需要对第一个位置确定拍照位&#xff0c;确…

美SEC与贝莱德,对比特币现货ETF申购方式产生分歧!

比特币现货ETF的通过时间是市场投资者密切关注的议题。虽然SEC最近推迟了Hashdex、富兰克林邓普顿&#xff08;Franklin Templeton&#xff09;和GlobalX申请的决议时间&#xff0c;但彭博ETF分析师James Seyffart对明年一月通过的机率持乐观态度&#xff0c;认为其通过的机会能…

Java - Stream Filter 多条件筛选过滤

Java Stream流中Filter用于通过设置的条件过滤出元素 &#xff0c;示例如下&#xff1a; List strings Arrays.asList(“abc”, “”, “bc”, “efg”, “abcd”,"", “jkl”);List filtered strings.stream().filter(string -> !string.isEmpty()).collect(C…

eclipse - jee 建立项目后没有 web.xml

eclipse -- jee 建立项目后没有 web.xml 处理它的方法是&#xff0c;点 File - New - Dynamic Web Project , 此时起一个项目名如M4 然后next 然后next 出现如此所示:

基于springboot实现农机电招平台系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现农机电招平台系统演示 摘要 随着农机电招行业的不断发展&#xff0c;农机电招在现实生活中的使用和普及&#xff0c;农机电招行业成为近年内出现的一个新行业&#xff0c;并且能够成为大群众广为认可和接受的行为和选择。设计农机电招平台的目的就是借助计算…

论文阅读:“Model-based teeth reconstruction”

文章目录 AbstractIntroductionTeeth Prior ModelData PreparationParametric Teeth Model Teeth FittingTeeth Boundary Extraction Reference Abstract 近年来&#xff0c;基于图像的人脸重建方法日趋成熟。这些方法可以捕捉整个面部或面部特定区域&#xff08;如头发、眼睛…

CAN总线星型连接器及特点

CAN总线星型连接特点 CAN总线是一种广泛应用于汽车、工业自动化、家庭等领域的现场总线技术。它具有高速度、高可靠性、灵活性等特点&#xff0c;被广泛应用于汽车电子、工业自动化、家庭自动化等领域。在CAN总线的实际应用中&#xff0c;其连接方式可以是星型或菊花型。本文将…

Leetcode—160.相交链表【简单】

2023每日刷题&#xff08;四十一&#xff09; Leetcode—160.相交链表 算法思想 两个链表的节点之和是相等的 如果两个链表相交&#xff0c;那么相交点之后的长度是相同的 我们需要做的事情是&#xff0c;让两个链表从同距离末尾同等距离的位置开始遍历。这个位置只能是较短…

Linux系统编程:文件系统总结

目录和文件 获取文件属性 获取文件属性有如下的系统调用&#xff0c;下面逐个来分析。 stat:通过文件路径获取属性&#xff0c;面对符号链接文件时获取的是所指向的目标文件的属性 从上图中可以看到stat函数接收一个文件的路径字符串&#xff08;你要获取哪个文件的属性&a…