写在开头的话:今天是公元2022年的第一天,是2022年起始。所以想在今天写第一篇博客,希望2022年能够有崭新的开始、美好的过程和完美的结束。过去我也弄过不少类型的博客,但是无一例外都没有坚持下来。2022年的第一天给自己定一个小目标,希望多阅读好书,多交益友和多写博客(每周至少一篇吧(~ ̄▽ ̄)~ )。
Halo博客搭建主要参考:
-
Halo官方文档
-
视频教程:如何用服务器优雅地搭建一个博客—Hello,Halo!
根据官方文档,Halo主要有两种搭建方式:
-
直接在Linux环境下搭建
可参考文档:
Linux 部署 Halo 博客
在Linux服务器部署Halo博客系统及配置HTTPS
Halo博客Linux_CentOS7从零搭建部署
用Halo在自己服务器搭建一个个人博客
-
使用Docker搭建
本文是基于宝塔面板+Docker+MySQL快速搭建Halo博客。
服务器选购可以考虑阿里云和腾讯云,年底阿里云和腾讯云有活动,根据需求进行选择。
阿里云小站
阿里云新用户规则:
“同一用户”,是指根据不同阿里云账号在注册、登录、使用中的关联信息,阿里云判断其实际为同一用户。关联信息举例:同一手机号、同一邮箱、同一证件等。
“同人账号”,是指同一用户拥有多个阿里云账号的,各个账号之间互为同人账号。
“新用户”,是指在阿里云官网没有收费云产品购买记录的阿里云会员用户。新用户在进行首次云产品购买行为时,也被称为“首购用户”,首购用户不包含老用户注册的新阿里云账号 。
我购买的是阿里云2核4G的计算型服务器,使用新注册的号活动优惠力度很大,注意新注册号的必须是在阿里云上没有注册过的身份证、邮箱和手机号等。而且我打算长期写博客,所以一次性就购买了3年。
买完服务器之后需要开放一些软件(如宝塔面板 8888端口)的端口,我的服务器最后开放端口如下(开放端口也可以在配置软件的过程中操作,下图是一个参考):
域名域名我也是在阿里的万网上购买,域名购买好之后还要备案,备案过程花费几天审核,具体的操作步骤这里就不记录了。
如果你已经有了阿里云账号A,并且A当中已经注册了域名。现在你又注册一个新的阿里云账号B,阿里云账号之间转让域名是很方便的,可以直接从A将域名转让给B。教程:阿里云域名可以转给别人吗?当然可以!
域名解析阿里云的域名解析很简单,可以参考 如何在阿里云中进行域名解析
- 在控制台左侧列表-域名:
2. 我这里添加了二级域名解析,目的打算访问 blog.starstone.top 来访问博客。
新手建站入门教程—宝塔面板的安装与使用
宝塔Linux面板安装教程 - 2021年12月28日更新 - 7.8.0正式版
宝塔面板安装要求:
安装要求:
内存:512M以上,推荐768M以上(纯面板约占系统60M内存)
硬盘:300M以上可用硬盘空间(纯面板约占20M磁盘空间)
系统:CentOS 7.1+ (Ubuntu16.04+.、Debian9.0+),确保是干净的操作系统,没有安装过其它环境带的Apache/Nginx/php/MySQL/pgsql/gitlab/java(已有环境不可安装)
架构:x86_64(主流服务器均是此架构),ARM不完整兼容(面板环境安装慢,部分软件可能安装不上)
以上提到了是干净的操作系统,所以买好服务器之后可以直接安装宝塔面板了。
我的服务器是阿里云服务器,所以还需要在阿里云控制台配好安全组,开放端口。阿里云打开宝塔端口
Centos安装命令:
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
宝塔面板安装成功后,会显示账户、密码和访问地址,我们可以在浏览器上输入相应信息打开宝塔面板。
进入宝塔面板之后,可能需要注册宝塔账号才能进行下一步安装,我们在宝塔官网注册登入之后进入到安装界面:
常用的LNMP及LAMP,区别就是前者使用的是Nginx引擎,后者是用的Apache引擎。这里直接使用推荐的LNMP。
-
Nginx:选择最新版本。
-
MySQL:选5.7就可以,不要选MySQL8.0,因为可能会有兼容问题。
-
FTP:如果云服务器就一个人使用不必安装,后面可以直接使用SFTP登录FTP。
-
PHP:建议选择7.3+,不要超过PHP8.0(原因同MYSQL)。
-
phpMyadmin:选择最新版本。
安装方式这里根据自身实际的情况选择,如果当前环境为生产环境,请使用(编译安装),确保后期程序运行的稳定性,(极速安装)主要用体验和测试使用,正式情况下请避免使用(极速安装),如果不需要这些套件也可以在面板左侧功能栏选择《软件管理》,在当前列表自行选择安装程序。选择一键安装后,在面板的左上角,会自动显示任务的数量,点击后进入任务列表。
我的选择是:LNMP+编译安装。
2.安装Dockercentos安装Docker官方文档
使用ssh工具连接阿里云服务器
-
更新yum
yum update
-
设置repository
sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo -
安装 Docker 引擎
sudo yum install docker-ce docker-ce-cli containerd.io
这里能验证指纹是否匹配060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35,如果匹配,则接受下一步安装。
-
通过运行 hello-world 映像验证 Docker Engine 是否已正确安装。
sudo docker run hello-world
官方文档-使用 Docker 部署 Halo
按照官方文档步骤,使用ssh工具和Docker部署Halo
-
创建工作目录
mkdir ~/.halo && cd ~/.halo
-
下载示例配置文件到工作目录
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml
-
编辑配置文件,配置数据库或者端口等,如需配置请参考配置参考
vim application.yaml
Halo默认是H2数据库,但是我之前在宝塔面板安装过MySQL,所以我使用MySQL数据库。
application.yaml中注释掉H2数据库配置:
spring: datasource: driver-class-name: org.h2.Driver url: jdbc:h2:file:~/.halo/db/halo username: admin password: 123456 h2: console: settings: web-allow-others: false path: /h2-console enabled: falseapplication.yaml中取消Mysql相关注释:
# 这里需要更改为MySQL用户名和密码 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true username: root password: 123456Halo的MySQL数据库要求:
- 版本:5.7 +
- 字符集(Character Set):utf8mb4
- 排序规则(Collate):utf8mb4_bin
- 存储引擎:InnoDB
创建MySQL数据库halodb的两种方式:
(1)我们在创建数据库halodb采用下面的命令:
create database halodb character set utf8mb4 collate utf8mb4_bin;
(2)我们也可以直接在宝塔面板上创建数据库halodb:
到此,halodb创建成功。
-
拉取最新的 Halo 镜像
docker pull halohub/halo:1.4.16
-
创建容器
这一步骤和官方文档有所不同。Halo默认使用H2数据库,如果使用H2数据库,则按照官方文档步骤。
docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.4.16
-
-it: 开启输入功能并连接伪终端
-
-d: 后台运行容器
-
–name: 为容器指定一个名称
-
-p: 端口映射,格式为 主机(宿主)端口:容器端口 ,可在 application.yaml 配置。
-
-v: 工作目录映射。形式为:-v 宿主机路径:/root/.halo,后者不能修改。
-
–restart: 建议设置为 unless-stopped,在 Docker 启动的时候自动启动 Halo 容器。
如果使用MySQL数据库,我们需要更改容器的网络配置。
从零部署halo博客
Docker默认的网络模式是bridge,因此默认容器内无法访问本地127.0.0.1
docker run -it -d --net host --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.4.16
- -net,指定容器的网络配置:
-
- -net=bridge 这个是默认值,连接到默认的网桥。
-
- -net=host 容器使用本地主机的网络,它拥有完全的本地主机接口访问权限
-
- -net=container:NAME_or_ID 让 Docker 使用其他容器的网路,共享IP和PORT等网络资源,两者进程可以直接通过 lo 环回接口通信
-
- -net=none 容器使用自己的网络,但是不进行网络配置,之后用户可以自行配置
官方论坛上更多关于MySQL的问题:[MySQL相关问题](https://bbs.halo.run/?q=docker mysql)
-
-
打开 http://ip:端口号 即可看到安装引导界面(不要往下安装了!!!)。
端口号默认8090,这里需要在云服务器和宝塔面板上都开放这个端口。
官方文档有提示:
**如果需要配置域名访问,建议先配置好反向代理以及域名解析再进行初始化。**如果通过 http://ip:端口号 的形式无法访问,请到服务器厂商后台将运行的端口号添加到安全组,如果服务器使用了 Linux 面板,请检查此 Linux 面板是否有还有安全组配置,需要同样将端口号添加到安全组。
接下来去配置反向代理和域名解析,再初始化Halo。
4.配置反向代理(先配置反向代理再初始化Halo)官方文档-与宝塔面板配合使用
官方文档介绍了如何使用宝塔面板配置反向代理,按照其步骤:
- 点击左侧的 网站 菜单项,点击 添加站点 按钮。
需要填写的表单信息如下:
- 域名:填写您已经解析到当前服务器公网 IP 的域名。
- PHP版本:纯静态
填写完成之后点击提交按钮即可。
2. 设置 SSL
- 第一步:可选择 宝塔 SSL 或者 Let's Encrypt 进行证书申请。
- 第二步:需要开启右上角的 强制 HTTPS。
3. 修改配置文件
网上很多人直接配置反向代理,这里并不推荐。
我采用的方式是在配置文件中配置:
3. (1) 在server节点中修改:
#未修改的配置文件中
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log /dev/null;
access_log /dev/null;
}
location ~ .*.(js|css)?$
{
expires 12h;
error_log /dev/null;
access_log /dev/null;
}
# 替代为
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
proxy_pass http://halo;
expires 30d;
error_log /dev/null;
access_log off;
}
location ~ .*.(js|css)?$
{
proxy_pass http://halo;
expires 12h;
error_log /dev/null;
access_log off;
}
location / {
proxy_pass http://halo;
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;
}
(2) 在根节点添加:
upstream halo {
server 127.0.0.1:8090;
}
# 其中的 8090 为 Halo 的运行端口,请按需修改。
(3) 完整配置文件示例(仅包含关键部分):
upstream halo {
server 127.0.0.1:8090;
}
server
{
...
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
proxy_pass http://halo;
expires 30d;
error_log /dev/null;
access_log off;
}
location ~ .*.(js|css)?$
{
proxy_pass http://halo;
expires 12h;
error_log /dev/null;
access_log off;
}
location / {
proxy_pass http://halo;
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;
}
...
}
5.Halo初始化
在反向代理完成后可以访问 网站地址:8090,如 blog.starstone.top:8090 进行初始化。
需要设置管理员的账号、邮箱、密码等,然后重新登录进一步进入到后台界面。
访问网址 域名:8090/admin (默认) 登录到管理界面
systemctl enable docker
Halo博客简单搭建完成了,Halo的其他功能我也在慢慢了解中~~完结撒花❀❀❀



