Halo 动态博客搭建和代理配置
本文最后更新于:2022年9月11日 下午
使用阿里云服务器搭建动态博客,以及配置Nginx反向代理。
动态博客搭建
之前搭建了静态的Hexo博客,因为是部署在Git Page上,所以服务器端基本不用操心,整个博客搭建过程也比较顺利;后面就一直想试试在一台真正的服务器上搭建一个网站,今天也是终于把这个愿望给完成了。这次选的是Halo这个动态博客框架,文档资料比较全,配置步骤也还好。
云服务器购买
首先当然是要租一台云服务器来放这个博客,我选的是阿里云的服务器,因为只是想来练练手,所以云主机选的是1核2G的配置,算上新人优惠一年也才 20 多块。服务器系统我装的是用的比较多的CentOS 7.4,然后设个好记的root用户密码,其他的就没什么了。
服务器端部署博客
服务器系统装好后,需要远程登录进行操作,我用的远程登录软件是Mobaxterm,集成文件传输功能,支持的协议也多。另外,在远程登录前,可以先去阿里云控制台云服务器 ECS面板的安全组下确认一下当前服务器的远程登录端口22端口是否是打开的,否则远程登录不上。
在Mobaxterm中新建一个session,选择ssh登录方式,然后输入云主机的公网IP地址,选择root用户登录,然后按提示输入之前设置的密码就可以成功登录了。正常来说应该创建一个新用户来进行博客的部署,但我打算就用这个服务器来搭建这个博客,没有别的用途,所以就无所谓了,直接用root用户开整。
到这里,就可以参考Halo给的文档来部署博客了。
安装 Java
由于Halo是依赖于Java运行的,因此需要先安装JDK:
1 | |
Halo 下载与配置
首先下载Halo的jar包:
1 | |
然后创建Halo的工作目录,并编辑配置文件:
1 | |
Vim打开配置文件后如下,可以改端口号和数据库用户名密码,其他保持默认就行:
1 | |
启动 Halo
回到halo.jar的存放目录启动Halo:
1 | |
出现如下提示则表示安装成功,Ctrl + C结束运行:
1 | |
如果是升级Halo版本,则可能会报错提示8090端口被占用,这时只需要结束占用该端口的进程就行:
1 | |
设置 Halo 服务
因为最后要随时能访问博客,所以需要将Halo作为服务运行,Halo提供了服务的模板文件,将其下载并放到系统守护进程目录下:
1 | |
vim打开后的halo.service如下,只需填入halo.jar的目录就行:
1 | |
重新加载系统守护进程
现在重新加载守护进程,并把Halo设为开机启动就行了:
1 | |
至此,Halo的服务器端的配置基本就完成了,最后在阿里云控制台云服务器 ECS面板下的安全组中找到我们的服务器,添加规则开放8090端口,就可以在我们自己电脑上的浏览器通过主机IP地址:8090来访问搭建好的博客了。
域名购买与解析
通过IP访问毕竟不太方便,所以我又在阿里云上买了一个域名,算上新人优惠第一年只要 10 块钱左右,跟白嫖一样。域名买完后需要进行注册、实名认证、ICP备案和公安备案等一系列操作,虽然麻烦,但基本按流程走一下就行了,过程中会有阿里的客服联系确认信息。
有了域名之后,还要将域名解析到自己服务器的公网IP上,这个在阿里云控制台的云解析 DNS面板下添加记录,设置记录值为服务器主机IP地址就行了,
这样就可以通过域名:8090来访问刚刚建立的博客内容了。
SSL 证书购买
为了让服务器支持HTTPS,需要给服务器配置安全证书,在阿里云控制台数字证书管理服务面板下的SSL 证书选择免费证书购买,并绑定自己的域名,然后将证书压缩包xxx_nginx.zip下载到本地。通过Mobaxterm登录服务器,借助其FTP功能,直接将下载的证书压缩包文件拖到窗口中,就可以将证书上传到服务器中了。
Nginx 反向代理配置
虽然按照上面的配置就可以访问我们的博客了,但还存在一个问题,那就是由于上述服务器配置是直接接受网络请求的,当有大量的连接请求访问服务器的8090端口时,服务器不高的配置注定了它处理不过来这么多请求,这样就可能造成服务器卡死宕机。所以对于分布式部署的服务器,一般会使用Nginx服务器来接收客户端的请求,并按一定规则将请求分配给不同的后端服务器,实现负载均衡,这也就是反向代理。这里我只有一台服务器,所以Nginx会将请求直接转发给这台服务器,这样配置的基本思路就是:Halo仅监测云主机本地服务器127.0.0.1:8090的请求,Nginx服务器则接收外部客户端的请求并转发给本地服务器。
最后一句话中的Nginx服务器其实就是云主机本身,只不过它不是把请求转发给别的服务器,而是转发到自己内部的本地服务器上。
关于正向代理和反向代理的区别,前者相当于是在一个局域网中的客户端想要访问外网的服务器,这时候就需要客户端设置代理,让自己的请求通过代理服务器发送到外网服务器上,代理的是客户端;而后者则是在服务器端设置代理,将客户端的请求转发给不同的服务器去处理,比如图片请求就给图片服务器处理,视频请求就给视频服务器处理等等,代理的是服务器。
Nginx 编译和安装
首先下载Nginx 官网的源码到服务器:
1 | |
然后解压下载的压缩包并编译:
1 | |
如果后面需要给服务器配置安全证书,则需要在编译选项中添加--with-http_ssl_module参数,否则证书配置时会报错。
Nginx默认安装在/usr/local/nginx/目录下,执行以下命令测试是否安装成功:
1 | |
Nginx 配置
接着配置Nginx代理,这之前需要将证书文件解压并放到Nginx的配置目录中:
1 | |
然后编辑Nginx的配置文件,关于Nginx配置文件的介绍和说明可以参考CNBLOGS:
1 | |
进入编辑界面后定位到http模块,这里只需要编辑两个模块,首先是在upstream中定义http服务器组:
1 | |
然后是编辑server模块,相当于是设置具体的转发规则,即Nginx接收到客户端请求后,根据这里设置的规则将请求转发给不同的服务器。对于我现在这台云主机,并不需要太复杂的配置,只需将客户端的http和https请求转发到云主机的本地服务器就行,首先配置http请求转发规则:
1 | |
然后再配置https请求转发规则:
1 | |
配置完后启动Nginx进行代理:
1 | |
配置文件修改后,重新加载Nginx可能会报错,这时一般先指定一下配置文件的位置,再重新加载一次就可以了。
最后还需要检查云主机的80和443端口是否已打开,打开后就可以使用域名安全地访问博客了,这时候就可以把云主机的8090端口对外关闭,只通过Nginx对博客进行访问。
总结
这次从头开始的博客搭建让我学到了很多知识,也积累了一些建站的经验,关于Nginx还需要学习的地方也还很多,慢慢来吧。
彩蛋
最近由于课题组服务器资源紧张,于是在阿里云上租了一个16核32G配置的Windows服务器来跑数值模拟,因为在浏览器登录和管理服务器太不方便了,就想着用Windows自带的远程桌面在自己的电脑上登录服务器使用。结果发现登不上去,于是就开始找问题:
- 1.检查
Windows远程登录端口3389否打开——没问题 - 2.检查服务器是否开启远程登录以及管理员是否有远程登录权限——没问题
- 3.检查
Windows防火墙出入站规则——和阿里云安全组设的是一致的,没问题
一通操作之后还是登录不上,结果在阿里云的帮助里看到最后一条换网络环境,于是用电脑连手机热点,就登上去了😅。