halo博客搭建
视频教程
https://www.bilibili.com/video/BV1WZ4y167jx/?spm_id_from=333.337.search-card.all.click
文字教程
前言
搭建个人博客有很多种方式,例如可以自己使用github/wordpress从0开始搭建,也可以使用wix来直接进行模块式的搭建。本文使用了 阿里云 & halo的方式来搭建个人博客。其中, halo是一款现代化的开源博客/CMS系统,使用它可以非常方便且快速的搭建自己的个人博客(详细的介绍可以参见他的官网)。 在搭建过程中,主要用到的一些模块如下:
1. 阿里云
域名服务
阿里云ECS
阿里云个人域名备案服务
2. Halo个人博客系统
3. 宝塔面板
阿里云的准备工作
申请域名服务
首先,如果你希望你的博客可以被广大的网友更容易的看见,你需要有你自己的一个域名。这个域名类似于 www.baidu.com 或者 www.taobao.com。当然,你如果没有这样的域名,别人能不能访问你的网站呢?理论上来说是可以的。别人也可以用 ip + 端口的形式来进行访问。但是如果你真的希望网站可以被更多的人浏览的话,你要尽量避免这种方式。通过域名的方式,你的博客可以更好的被网络所检索到,广大的网友也可以更好的看到。
你可以使用阿里云的域名注册服务来进行域名注册。

可以看到,你可以有很多的域名后缀可以进行选择: com/com.cn/cc/vip/xyz 等等, 这个要看自己的喜好。通常情况下 com是最顶级的域名,认知程度会更高一些,但是也往往价格最贵,而且比较好的域名大概率已经被别人申请过了。因此如果没有特别的需求的话,申请一些其他后缀的网站也无妨。
如果你喜欢的域名名称被占用了,而你实在想要一个类似的话,可以点击下面的你可能感兴趣的看一下,说不定有你喜欢的。

选择一个你喜欢的域名加入购物车之后,你就可以购买啦。购买的时候可以选择购买的年限,同时选择域名的持有者。我们在这里选择个人就可以。另外一点, 购买的时候需要首先确保你的阿里云账号已经实名认证。后面会有一个ICP的备案,这个备案需要在实名认证三天之后才能送审。

把这些填完之后,就可以购买了。购买完成之后,可以到这里看下自己购买的域名。

在刚购买的时候,看到的域名状态可能并不是这样的。因为需要搭配后面购买的服务器做一个DNS解析的工作,完成解析之后,就能看到上图中的状态了。
购买阿里ECS服务器,并绑定域名
购买阿里ECS服务器
点击进入上面的页面之后,一步步的按照提示选择、购买就可以了,详见下图。
选的时候主要注意这么几个点就可以了:
你要购买的ECS的时长。你可以买一个月,也可以买三个月或者一年。
公共镜像选择CentOS 7.9。 这个也是为了适配后面的Halo的安装。
最后密码的时候可以选择密钥对,也可以自己设定密码。




购买完成后到这里可以看下你所购买的服务器。在这里看到的公网IP就是后面提到的,而且反复要用到的ip地址。

服务器绑定域名
有了服务器之后,我们就可以让我们的域名来绑定我们的服务器,更确切说,是让域名绑定服务器对应的ip地址。这样,让用户在输入我们的域名网址的时候,就可以导航(解析)到我们服务器对应的ip上。而如果我们在该服务器上起了一个服务,那么就可以实现通过域名来访问该服务了。
到这里看下自己购买的域名, 然后选择解析

2. 点击添加记录,然后按照上图中的样式填入相应的值就行了,其中记录值为你所购买的服务器的ip地址。
ICP备案服务
在完成域名->自己服务器的解析之后,还需要进行ICP的备案,否则你不能通过你的域名打开你的博客服务。打开这里的链接,点击右侧的开始备案,按照要求填好即可。
填完之后阿里云的客服会跟你电话联系,确认一些问题。没有问题的话会帮你提交。
安装Halo
接下来,我们要做的就是在我们购买的服务器上,把Halo的服务起起来。 后面的安装过程跟官网几乎一致,偶尔有的地方又解释了一下。
登陆阿里云机器
后面我们安装的过程都需要登陆到我们购买的阿里云ECS的机器上。因此我们这里首先介绍一下如何登陆阿里云的机器。你可以通过ssh 软件,更方便的方法是直接使用阿里云的界面登陆就行了。
登陆ECS机器的主页,进入你所购买的机器,然后直接点击远程连接



这里你可以选择密码认证或者证书认证,这个要看你当时购买服务器的时候,是选择的哪一项。
依赖检查及安装
安装halo有两种方式: 一种是基于ECS上的linux(CentOS),另外一种是基于docker。我们分别的进行介绍。
基于CentOS的方式
安装Java
首先我们登陆阿里云ECS的机器, 登陆方式见。登陆之后,默认为root权限。 由于halo基于java开发,因此你的机器上首先必须安装java。 可以通过以下命令安装(在上面购买ECS的机器的时候,我们默认选择了centOS的操作系统,因此我们这里只展示了CentOS的安装方法。Ubuntu的方法类似,可以参照官网)
sudo yum install java-11-openjdk -y安装完成后验证一下
java -version如果看到了以下内容,那就是成功了
openjdk version "11.0.10" 2021-01-19 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.10+9-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.10+9-LTS, mixed mode, sharing)安装Halo
创建新账号
在上面我们提到,我们默认用的是root的账号,但是一般我们不建议直接用root的权限来进行操作。因此我们新建一个用户账号
useradd -m halo # 新建一个账号
usermod -aG wheel halo #增加账号权限
passwd halo #给新账号设定密码
su - halo #切换到新账号2. 创建运行包的目录,我们命名为app
mkdir ~/app && cd ~/app3. 把halo的包下到~/app这个目录当中
wget https://dl.halo.run/release/halo-1.5.4.jar -O halo.jar4. 创建工作目录
mkdir ~/.halo && cd ~/.halo5. 下载配置目录文件
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml6. 然后你可以配置一下配置文件了,如果要配置的话可以参考配置文件
vim application.yaml7. 测试运行
cd ~/app && java -jar halo.jar8. 如看到类似以下日志输出,则代表启动成功。
run.halo.app.listener.StartedListener : Halo started at http://127.0.0.1:8090
run.halo.app.listener.StartedListener : Halo admin started at http://127.0.0.1:8090/admin
run.halo.app.listener.StartedListener : Halo has started successfully!然后你就可以通过ip:端口的方式打开看下了。 其中,ip是你ECS机器的ip地址, 端口可以通过上面提到的application.yaml来看。 通过这种方式,我们可以验证我们的服务确实可以起起来,没什么问题。
作为服务运行
前面的第八步只不过是测试了服务,现在我们要做的,是真正的把服务给起起来。当然,后续我们会是用宝塔面板来监控我们的服务,因此如果后续用宝塔面板来控制的话,本步骤也可以跳过。
刚才的账户还是
halo,需要退到root账户。
exit 2. 下载 Halo 官方的 halo.service 模板
wget https://dl.halo.run/config/halo.service -O /etc/systemd/system/halo.service3. 修改 halo.service
vim /etc/systemd/system/halo.service4. 修改配置 YOUR_JAR_PATH:Halo 运行包的绝对路径,例如 /home/halo/app/halo.jar,注意:此路径不支持 ~ 符号。 USER:运行 Halo 的系统用户,如果有按照上方教程创建新的用户来运行Halo,修改为你创建的用户名称即可。反之请删除 User=USER
[Unit]
Description=Halo Service
Documentation=https://halo.run
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=USER
ExecStart=/usr/bin/java -server -Xms256m -Xmx256m -jar YOUR_JAR_PATH
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
StandOutput=syslog
StandError=inherit
[Install]
WantedBy=multi-user.target5. 重新加载 systemd
systemctl daemon-reload6. 运行服务
systemctl start halo7. 在系统启动时启动服务
systemctl enable halo8. 您可以查看服务日志检查启动状态
journalctl -n 20 -u haloOK,通过这种方式,我们就在ECS的机器上成功的把服务给起起来了。
基于Docker的方式
创建工作目录
mkdir ~/.halo && cd ~/.halo2. 下载示例配置文件到 工作目录
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml3. 编辑配置文件,配置数据库或者端口等,如需配置请参考 配置参考
vim application.yaml4. 拉取最新的 Halo 镜像
docker pull halohub/halo:1.5.45. 创建容器
docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.5.4-it: 开启输入功能并连接伪终端-d: 后台运行容器--name: 为容器指定一个名称-p: 端口映射,格式为 主机(宿主)端口:容器端口 ,可在application.yaml配置。-v: 工作目录映射。形式为:-v宿主机路径:/root/.halo,后者不能修改。--restart: 建议设置为unless-stopped,在 Docker 启动的时候自动启动 Halo 容器。 这样,我们就可以通过Docker的形式,把服务起起来了。
设置代理,使用域名访问服务
通过上面的配置之后,我们成功的把halo服务起了起来,并且还可以通过ip:port的形式进行访问了。但是我们希望可以通过我们一开始购买的域名,就可以访问这个服务。那么这时候我们就需要配置一个反向代理来完成这个功能。这个功能,我们使用 宝塔面板 来帮我们完成相关的配置。
宝塔面板安装
首先登陆我们的ECS的机器,然后执行
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh安装之后,会显示对应的外网访问地址和用户名和密码。

然后我们通过显示的外网访问地址,登陆到宝塔面板的web页面当中。但是,如果你之前没有宝塔的账号的话,你还需要注册一下才能登陆。注册完毕之后,再按照上面提到的地址登陆进去,就可以看到相应的管理页面。
配置宝塔面板
进入我们的宝塔面板配置页面之后,点击左侧的
安全,然后按照下面的配置,把一些端口打开。

2. 安装nginx。

3. 配置域名以及更新配置
点击 网站->添加站点


首先在根目录下加
upstream halo {
server 127.0.0.1:8090;
}其中的 8090 为 Halo 的运行端口,请按需修改。
2. 在 server 节点添加:
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;
}3. 修改 server 节点中的 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ 节点:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
proxy_pass http://halo;
expires 30d;
error_log /dev/null;
access_log off;
}4. 修改 server 节点中的 location ~ .*\.(js|css)?$ 节点:
location ~ .*\.(js|css)?$
{
proxy_pass http://halo;
expires 12h;
error_log /dev/null;
access_log off;
}5. 完整配置文件示例(仅包含关键部分):
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;
}
...
}通过这种方式,就可以把代理配置好了。如果配置不生效,请重载 Nginx 或者 重启 Nginx。
尾声
通过这种方式,你基本上算是把你的博客服务以及域名解析完成了。然后你就可以使用ip:端口的方式(默认是 ip:8090)来登陆你的个人博客。一开始的时候需要注册,你只需要按照引导一步一步的进行就可以了,这个就比较简单了。当然,由于我们绑定了域名,因此理论上是可以直接用用你购买的域名来访问的。但是实际上,由于访问域名首先需要ICP的备案通过才行,因此需要等着你的ICP备案完成后,才可以通过域名打开。慢慢先等着吧,你可以先通过ip+port的形式折腾下你自己博客的模板配置之类的。
Good Luck!