基于Halo的个人博客搭建

个人博客搭建

    • 前言
    • 0. 开始之前
    • 1. 云服务搭建
    • 2. 域名购买
    • 3. 数字证书管理(可选)
    • 4. 部署Halo
      • 4.1 重置云服务器密码
      • 4.2 远程ssh连接云服务器
      • 4.3 安装docker
      • 4.4 安装docker-compose
      • 4.5 初始化mysql
      • 4.6 安装nginx
        • 下载nginx依赖的包
        • 下载nginx源码包
        • 上传nginx包文件
        • 指定安装目录,并安装ssl模块
        • 编译并安装
        • 启动nginx
      • 4.7 开启https服务并配置证书(可选)
      • 4.8 配置默认http跳转到https请求(可选)
      • 4.9 编写docker-compose.yaml
      • 4.10 设置反向代理
      • 4.11 启动Halo
      • 4.12 初始化Halo
    • 5.ICP备案
    • 6.公安网备案
    • 结语

前言

一切都来源于一次心血来潮。在学习和尝试开发小程序生成体验版的时候,遇到要校验合法域名以及HTTPS证书的问题,为了解决这个问题,又开始搞起了云服务器和域名,到最后解决域名合法的问题后,觉得仅仅是这样的话太浪费这个云服务器和域名了,突然想为何不自己搞一个个人博客,于是就又开启另一条折腾之路。

0. 开始之前

由于是在云服务器上搭建个人博客,因此需要在服务器和域名上要花费一定的费用,同时根据规定,未进行ICP备案的域名无法进行访问,所以还需要ICP备案,从备案开始到结束,顺利的话大概是在20天内完成,备案完成后就可以根据域名访问网站了,但是根据网络安全相关规定,ICP备案后还需要一个公安网备案,填写一些信息和上传一些资料后,继续等待审核。这些步骤都是开办一个网站的必要条件。
所以确定要继续折腾么。

1. 云服务搭建

这里使用的是阿里云ECS服务器,直接到官网https://www.aliyun.com/产品列表中选择ECS服务器,然后快速购买,因为只是简单搭建一个博客,不需要太高级的配置,这里选择1核1G内存即可。
基于Halo的个人博客搭建_第1张图片
操作系统这里直接选择了预安装LAMP,能省去单独安装数据库的操作,勾选分配公网IP,带宽直接选择固定带宽1Mbps就行了,后续可以自行按需升级配置。
基于Halo的个人博客搭建_第2张图片
最后确认订单付款后,进入ECS控制台等待实例自动部署启动成功后,就能看到所有服务器的相关信息了。
基于Halo的个人博客搭建_第3张图片

2. 域名购买

同样在阿里云官网https://wanwang.aliyun.com注册域名,购买之先要查看下自己要注册的域名是否已经被占用。不同域名后缀的价格也都不相同,根据自己选择合适的域名,然后经过一些身份认证后这个域名就属于你了。
基于Halo的个人博客搭建_第4张图片
在域名控制台,可以查看到你购买的域名的详细信息。
基于Halo的个人博客搭建_第5张图片
然后点击解析,进行解析设置,按照新手引导,配置好你的域名和云服务器IP地址的对应关系。就次你的域名和IP就已经配对完成了。
基于Halo的个人博客搭建_第6张图片

3. 数字证书管理(可选)

申请这个主要是为了使用https服务,增加网站的安全性,在官网搜索栏搜索数字证书管理进入控制台,在SSL证书这一栏里点击免费证书,在这可以申请免费证书,使用免费证书绑定域名,有效期为一年。
基于Halo的个人博客搭建_第7张图片
然后点击证书申请,填写要关联的域名和个人信息后,提交审核,等待通过。
基于Halo的个人博客搭建_第8张图片
审核通过后,就可以在证书列表中看到证书相关信息了
基于Halo的个人博客搭建_第9张图片
然后点击下载,下载nginx证书,以备后续使用,也可以点击帮助,查看证书使用方法,就此数字证书的操作完成了。
基于Halo的个人博客搭建_第10张图片
与此同时,进入ECS控制台中安全组选项,开放https对应端口443,方便后面https服务的调试
基于Halo的个人博客搭建_第11张图片

4. 部署Halo

Halo是一款强大且开源博客系统,配合使用不同的模版和插件,可以轻松的构建网站,使用简单的命令就可以直接启动运行,直接部署到云服务器中即可。

4.1 重置云服务器密码

进入ECS控制台,选择创建好的实例,点击重置实例密码。
基于Halo的个人博客搭建_第12张图片
输入root用户的新密码,开启SSH密码登录策略点击确定,等待实例重新启动。
基于Halo的个人博客搭建_第13张图片

4.2 远程ssh连接云服务器

使用ssh工具远程连接ssh root@公网IP输入密码后回车确认,当出现
“Welcome to Alibaba Cloud Elastic Compute Service !”,证明你已经成功连接到服务器。

Last login: Mon Sep 18 19:44:51 on ttys000
macbookpro@localhost ~ % ssh root@公网IP地址
root@公网IP地址's password: 
Last login: Mon Sep 18 19:44:59 2023 from xxxxxx

Welcome to Alibaba Cloud Elastic Compute Service !

[root@xxxx ~]# 

4.3 安装docker

使用官方脚本自动安装

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

安装成功新增docker用户组

sudo groupadd docker

将当前用户添加到docker用户组

sudo gpasswd -a ${USER} docker

重启docker

sudo systemctl restart docker

查看docker信息

[root@xxx ~]# docker version
Client: Docker Engine - Community
 Version:           24.0.6
 API version:       1.43
 Go version:        go1.20.7
 Git commit:        ed223bc
 Built:             Mon Sep  4 12:35:25 2023
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          24.0.6
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.7
  Git commit:       1a79695
  Built:            Mon Sep  4 12:34:28 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.22
  GitCommit:        8165feabfdfe38c65b599c4993d227328c231fca
 runc:
  Version:          1.1.8
  GitCommit:        v1.1.8-0-g82f18fe
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
[root@xxx ~]# 

4.4 安装docker-compose

下载docker-compose,根据自己使用版本来下载

curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

赋予docker-compose可执行权限

chmod +x /usr/local/bin/docker-compose

检查docker-compose是否安装成功

[root@xxxx ~]# docker-compose version
docker-compose version 1.21.1, build 5a3f1a3
docker-py version: 3.3.0
CPython version: 3.6.5
OpenSSL version: OpenSSL 1.0.1t  3 May 2016
[root@xxxx ~]# 

4.5 初始化mysql

由于在订购云服务器的时候,选择了预安装LAMP,已经自动安装好了mysql,可以直接查看mysql运行情况。

[root@xxxx ~]# systemctl status mysql
● mysqld.service - LSB: start and stop MySQL
   Loaded: loaded (/etc/rc.d/init.d/mysqld; bad; vendor preset: disabled)
   Active: active (running) since 二 2023-08-15 16:18:17 CST; 1 months 3 days ago
     Docs: man:systemd-sysv-generator(8)
    Tasks: 36
   Memory: 95.1M
   CGroup: /system.slice/mysqld.service
           ├─1159 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/mysql.pid
           └─2034 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/li...

815 16:18:14 arthuryu systemd[1]: Starting LSB: start and stop MySQL...
815 16:18:17 arthuryu mysqld[1142]: Starting MySQL...[  OK  ]
815 16:18:17 arthuryu systemd[1]: Started LSB: start and stop MySQL.
[root@xxxx ~]# 

通过ssh远程连接服务器成功后,在当前目录下有一个ReadMe文件,该文件存放着mysql数据库root账号的密码。查看该文件获取默认密码。

[root@xxxx ~]# ls
Halo  oneinstack  ReadMe  SpringClod
[root@xxxx ~]# more ReadMe 
#######################################################################
#       OneinStack for CentOS/RedHat 7+ Debian 8+ and Ubuntu 16+      #
#       For more information please visit https://oneinstack.com      #
#######################################################################

MySQL root password: xxxxx

FTP account: xxxxx
FTP password: xxxxx

在线文档:
https://oneinstack.com/docs/lampstack-image-guide/
[root@xxxx ~]# 

登录连接数据库

mysql -u root -p

创建halo数据库

create database halo;

修改默认密码

update mysql.user set authentication_string=password(‘newPwd') where user='root';

开启远程访问权限

update mysql.user set host = '%' where user='root';

刷新权限

FLUSH PRIVILEGES;

在ECS控制台安全组开放mysql对应端口,方便本地连接使用。
基于Halo的个人博客搭建_第14张图片

4.6 安装nginx

Halo默认端口是8090,不想暴露过多端口,所以这里要使用nginx来进行反向代理。

下载nginx依赖的包
yum install -y gcc pcre-devel zlib-devel
下载nginx源码包

官网http://nginx.org/en/download.html下载自己需要版本的nginx源码包
基于Halo的个人博客搭建_第15张图片

上传nginx包文件

通过SFTP工具上传下载好的nginx的tar包到服务器,并使用命令解压

tar -xvf nginx-1.25.2.tar
指定安装目录,并安装ssl模块

进入解压好的nginx目录,执行命令,指定安装目录同时安装http_ssl_module模块

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
编译并安装
make && make install
启动nginx

进入 /usr/local/nginx/sbin 目录,执行 ./nginx 命令,启动nginx。
启动成后在浏览器输入 http://ip:80 即可进入到nginx默认欢迎页面,就此nginx安装成功。
基于Halo的个人博客搭建_第16张图片

4.7 开启https服务并配置证书(可选)

进入nginx配置文件目录 /usr/local/nginx/conf ,新增SSL证书文件夹cert mkdir cert ,并将上面步骤中下载的数字证书上传到该目录。
编辑nginx.conf文件 vi nginx.conf,在listen 80server模块下,增加server模块,把对应证书绑定的域名证书名称密钥文件名称换成自己对应的各个名称。
进入 /usr/local/nginx/sbin 目录,执行 ./nginx -s reload 命令,重新加载nginx。

server {
     #HTTPS的默认访问端口443。
     #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
     listen 443 ssl;
     #填写证书绑定的域名
     server_name <yourdomain>;
     #填写证书文件名称
     ssl_certificate cert/<cert-file-name>.pem;
     #填写证书私钥文件名称
     ssl_certificate_key cert/<cert-file-name>.key;
     ssl_session_cache shared:SSL:1m;
     ssl_session_timeout 5m;
     #自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
     #TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
     ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
     #表示优先使用服务端加密套件。默认开启
     ssl_prefer_server_ciphers on;
    location / {
           root html;
           index index.html index.htm;
    }
}

加载成后在浏览器输入 https://ip:443 同样能进入到nginx默认欢迎页面,则证明https服务启动成功。(这里也可以直接使用https://域名 打开,前提是需要ICP备案通过)
基于Halo的个人博客搭建_第17张图片

4.8 配置默认http跳转到https请求(可选)

进入nginx配置文件目录 /usr/local/nginx/conf ,编辑nginx.conf文件 vi nginx.conf,修改listen 80server模块,如下。
进入 /usr/local/nginx/sbin 目录,执行 ./nginx -s reload 命令,重新加载nginx。

server {
    listen 80;
    #填写证书绑定的域名
    server_name <yourdomain>;
    #将所有HTTP请求通过rewrite指令重定向到HTTPS。
    rewrite ^(.*)$ https://$host$1;
}

然后在浏览器中输入 http://ip 回车后发现地址栏信息变成 https://ip则证明修改成功。

4.9 编写docker-compose.yaml

新增目录Halo mkdir Halo,此目录作为halo的安装目录,进入该目录新建docker-compose.yaml文件,编辑文件 vi docker-compose.yaml 内容如下,保存退出。

version: "3"

services:
  halo:
    image: halohub/halo:2.9
    container_name: halo
    restart: on-failure:3
    network_mode: "host"
    volumes:
      - ./:/root/.halo2
    command:
      # 修改为自己已有的 MySQL 配置
      - --spring.r2dbc.url=r2dbc:pool:mysql://localhost:3306/halo
      - --spring.r2dbc.username=root
      - --spring.r2dbc.password=
      - --spring.sql.init.platform=mysql
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=http://localhost:8090/
      # 端口号 默认8090
      - --server.port=8090

将配置文件中mysql相关内容换成自己云服务器中mysql的地址和用户密码。
注意的是halo.external-url参数对应的是你实际上对外展示的博客地址,这里由于要通过nginx做反向代理,所以可以直接换成 http://公网ip (ICP备案通过的可设置成 http://域名,开启SSL证书验证的,则需要将http换成https)即可

4.10 设置反向代理

进入nginx配置文件目录 /usr/local/nginx/conf ,编辑nginx.conf文件 vi nginx.conf,找到 location / 那行,修改成如下所示,代表默认直接打开博客地址。

location / {
            proxy_pass http://内网IP:8090;
            #root   html;
            #index  index.html index.htm;
        }

进入 /usr/local/nginx/sbin 目录,执行 ./nginx -s reload 命令,重新加载nginx。

4.11 启动Halo

进入Halo目录,执行 docker-compose up -d 启动命令。

[root@xxxx Halo]# docker-compose up -d
Pulling halo (halohub/halo:2.9)...
2.9: Pulling from halohub/halo
44ba2882f8eb: Pull complete
2cabec57fa36: Pull complete
c20481384b6a: Pull complete
bf7b17ee74f8: Pull complete
38617faac714: Pull complete
a299db77015b: Pull complete
153567037b90: Pull complete
4dc9208b33d8: Pull complete
4f4fb700ef54: Pull complete
a0fdc4dcda14: Pull complete
0cdfd6ac561a: Pull complete
Digest: sha256:a834ff078cf5ad3c27271e3b147043f9cb52430b2d010ef02ac61225e47e9fe9
Status: Downloaded newer image for halohub/halo:2.9
Creating halo ... done
[root@xxxx Halo]# 

查看实时日志,执行 docker-compose logs -f 命令。

[root@arthuryu Halo]# docker-compose logs -f
Attaching to halo
halo    | 
halo    |     __  __      __
halo    |    / / / /___ _/ /___
halo    |   / /_/ / __ `/ / __ \
halo    |  / __  / /_/ / / /_/ /
halo    | /_/ /_/\__,_/_/\____/
halo    | 
halo    | Version: 2.9.1
halo    | 2023-09-18T23:25:04.769+08:00  INFO 7 --- [           main] run.halo.app.Application                 : Starting Application v2.9.1 using Java 17.0.8.1 with PID 7 (/application/BOOT-INF/classes started by root in /application)

关闭halo,执行 docker-compose down 命令。

[root@xxxx Halo]# docker-compose down
Stopping halo ... done
Removing halo ... done
[root@xxxx Halo]# 

4.12 初始化Halo

浏览器直接输入http://ip(ICP备案通过的输入http://域名),然后进入Halo初始化界面。(设置SSL证书的输入https://ip或者https://域名
基于Halo的个人博客搭建_第18张图片
填写信息后点击初始化,提示初始化成功后,再次输入刚才注册的信息点击登录。
基于Halo的个人博客搭建_第19张图片
在经过一小段加载动画,进入halo控制台页面,在控制台中可以修改主题,添加插件,发表文章,管理评论等功能,可以根据个人自由发挥了。
基于Halo的个人博客搭建_第20张图片

此时,再次在浏览器中输入 http://ip(ICP备案通过的输入http://域名),(设置SSL证书的输入https://ip或者https://域名),则会展示你的博客主页。
如果想再次进入控制台就在地址栏后面加上 /console 并回车,则会再次进入halo控制台页面
基于Halo的个人博客搭建_第21张图片

5.ICP备案

关于ICP备案,主要是使用域名而非使用ip地址来打开网站,到阿里云官网点击备案,跟着步骤上传资料信息,下载个阿里云app实名认证后,会有工作人员联系你,确认信息帮助你提交工信部审核。
基于Halo的个人博客搭建_第22张图片
大概步骤如下所示
基于Halo的个人博客搭建_第23张图片
在备案通过后会获得备案号,要把备案好放到你的网站下方,此步骤可以在halo控制台上直接添加保存,然后刷新你的博客地址,就会发现在页脚自动添加好了。
基于Halo的个人博客搭建_第24张图片
基于Halo的个人博客搭建_第25张图片

6.公安网备案

公安备案和ICP备案类似,也是需要填写相关信息,拍摄身份证和自己的证件照。
官网地址 https://www.beian.gov.cn/portal/index.do 填写信息上传好对应材料后提交审核,之后也有相应工作人员联系你。
备案通过后同样记得把备案号添加到网站底部。

结语

就此,基于halo的个人博客网站就搭建完成。完结 撒花~

你可能感兴趣的:(阿里云,开源软件)