一切都来源于一次心血来潮。在学习和尝试开发小程序生成体验版的时候,遇到要校验合法域名以及HTTPS证书的问题,为了解决这个问题,又开始搞起了云服务器和域名,到最后解决域名合法的问题后,觉得仅仅是这样的话太浪费这个云服务器和域名了,突然想为何不自己搞一个个人博客,于是就又开启另一条折腾之路。
由于是在云服务器上搭建个人博客,因此需要在服务器和域名上要花费一定的费用,同时根据规定,未进行ICP备案的域名无法进行访问,所以还需要ICP备案,从备案开始到结束,顺利的话大概是在20天内完成,备案完成后就可以根据域名访问网站了,但是根据网络安全相关规定,ICP备案后还需要一个公安网备案,填写一些信息和上传一些资料后,继续等待审核。这些步骤都是开办一个网站的必要条件。
所以确定要继续折腾么。
这里使用的是阿里云ECS服务器,直接到官网https://www.aliyun.com/
产品列表中选择ECS服务器,然后快速购买,因为只是简单搭建一个博客,不需要太高级的配置,这里选择1核1G内存即可。
操作系统这里直接选择了预安装LAMP,能省去单独安装数据库的操作,勾选分配公网IP,带宽直接选择固定带宽1Mbps就行了,后续可以自行按需升级配置。
最后确认订单付款后,进入ECS控制台等待实例自动部署启动成功后,就能看到所有服务器的相关信息了。
同样在阿里云官网https://wanwang.aliyun.com
注册域名,购买之先要查看下自己要注册的域名是否已经被占用。不同域名后缀的价格也都不相同,根据自己选择合适的域名,然后经过一些身份认证后这个域名就属于你了。
在域名控制台,可以查看到你购买的域名的详细信息。
然后点击解析,进行解析设置,按照新手引导,配置好你的域名和云服务器IP地址的对应关系。就次你的域名和IP就已经配对完成了。
申请这个主要是为了使用https服务,增加网站的安全性,在官网搜索栏搜索数字证书管理
进入控制台,在SSL证书这一栏里点击免费证书,在这可以申请免费证书,使用免费证书绑定域名,有效期为一年。
然后点击证书申请,填写要关联的域名和个人信息后,提交审核,等待通过。
审核通过后,就可以在证书列表中看到证书相关信息了
然后点击下载,下载nginx证书,以备后续使用,也可以点击帮助,查看证书使用方法,就此数字证书的操作完成了。
与此同时,进入ECS控制台中安全组选项,开放https
对应端口443
,方便后面https
服务的调试
Halo是一款强大且开源博客系统,配合使用不同的模版和插件,可以轻松的构建网站,使用简单的命令就可以直接启动运行,直接部署到云服务器中即可。
进入ECS控制台,选择创建好的实例,点击重置实例密码。
输入root用户的新密码,开启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 ~]#
使用官方脚本自动安装
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 ~]#
下载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 ~]#
由于在订购云服务器的时候,选择了预安装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...
8月 15 16:18:14 arthuryu systemd[1]: Starting LSB: start and stop MySQL...
8月 15 16:18:17 arthuryu mysqld[1142]: Starting MySQL...[ OK ]
8月 15 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默认端口是8090,不想暴露过多端口,所以这里要使用nginx来进行反向代理。
yum install -y gcc pcre-devel zlib-devel
官网http://nginx.org/en/download.html
下载自己需要版本的nginx源码包
通过SFTP工具上传下载好的nginx的tar包到服务器,并使用命令解压
tar -xvf nginx-1.25.2.tar
进入解压好的nginx目录,执行命令,指定安装目录同时安装http_ssl_module
模块
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install
进入 /usr/local/nginx/sbin
目录,执行 ./nginx
命令,启动nginx。
启动成后在浏览器输入 http://ip:80
即可进入到nginx默认欢迎页面,就此nginx安装成功。
进入nginx配置文件目录 /usr/local/nginx/conf
,新增SSL证书文件夹cert mkdir cert
,并将上面步骤中下载的数字证书上传到该目录。
编辑nginx.conf文件 vi nginx.conf
,在listen 80
的server
模块下,增加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备案通过)
进入nginx配置文件目录 /usr/local/nginx/conf
,编辑nginx.conf文件 vi nginx.conf
,修改listen 80
的server
模块,如下。
进入 /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
则证明修改成功。
新增目录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
)即可
进入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。
进入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]#
浏览器直接输入http://ip
(ICP备案通过的输入http://域名
),然后进入Halo初始化界面。(设置SSL
证书的输入https://ip
或者https://域名
)
填写信息后点击初始化,提示初始化成功后,再次输入刚才注册的信息点击登录。
在经过一小段加载动画,进入halo控制台
页面,在控制台中可以修改主题,添加插件,发表文章,管理评论等功能,可以根据个人自由发挥了。
此时,再次在浏览器中输入 http://ip
(ICP备案通过的输入http://域名
),(设置SSL
证书的输入https://ip
或者https://域名
),则会展示你的博客主页。
如果想再次进入控制台就在地址栏后面加上 /console
并回车,则会再次进入halo控制台
页面
关于ICP备案,主要是使用域名而非使用ip地址来打开网站,到阿里云官网点击备案,跟着步骤上传资料信息,下载个阿里云app实名认证后,会有工作人员联系你,确认信息帮助你提交工信部审核。
大概步骤如下所示
在备案通过后会获得备案号,要把备案好放到你的网站下方,此步骤可以在halo控制台上直接添加保存,然后刷新你的博客地址,就会发现在页脚自动添加好了。
公安备案和ICP备案类似,也是需要填写相关信息,拍摄身份证和自己的证件照。
官网地址 https://www.beian.gov.cn/portal/index.do
填写信息上传好对应材料后提交审核,之后也有相应工作人员联系你。
备案通过后同样记得把备案号添加到网站底部。
就此,基于halo的个人博客网站就搭建完成。完结 撒花~