1、前言
先浇一盆冷水:
注:在热血上头建站前,请先冷静,扪心自问一下,是否真的要建站,是否真的有需要!!!
注:请先再问问自己,上云建站是常见做法(例如本文),这也意味着每年要给云服务商送钱,值不值?
注:按照合法合规的思路来看,个人建站是不能盈利的,所以请再考虑一下!
什么?即便如此,你还是要建站?
好!那开始看下文吧!
本文以 Halo 这个开源建站工具为核心,讲述从零开始到最终完成一个博客的搭建的流程。(其实就是以本博客网站的第一次搭建过程为例)
2、购买服务器
注意:各个博客系统,都有对服务器进行性能要求,所以一定要先看官方文档再买服务器。如Halo的要求。
本文示例购买:
一台云服务器(作为应用服务器,上面还兼带部署数据库,不然可以再买一个云数据库)
一台云服务器(作为网关服务器)(可不购买,那就是浏览器直接访问应用服务器,此时下文中所指的网关服务器就是应用服务器)
如果不购买云服务器,而是使用自己的物理服务器,那么也是可以的。只是要解决固定IP地址、断电等问题。
关于云服务器的首次使用,可以参考以下文章:
如果你准备使用云数据库,则可以参考这篇文章:阿里云 云数据库的使用
如果购买的是多台云服务器,且都有月流量限制,则建议是在同一个云服务提供商里,这样的话可以节省流量消耗。(内网通信一般运营商是默认不耗流量的)
下图为阿里云的流量统计规则:
华为云的流量统计规则为:
如果是内网传输数据,走的是内网的线路,是不消耗流量的,如果是公网传输数据,会消耗流量包里面的流量。
——华为云工程师
如果没有月流量限制,就随便。
不过初期来说访问量很低,或者你图片不多的话,流量基本消耗不完,不用特别担心流量耗尽。
3、购买域名
在任意服务商都行,不放心的话推荐是网关服务器所在运营商,后面方便做域名DNS解析、SSL证书申请啥的。
以阿里云为例(其他平台也类似,比如我是在华为云上买的):
搜索框输入 域名
选择域名注册
查询你要注册的域名是否已经被别人注册了。(注意后缀是可以更换来查)
要注意区分注册时的价格和续费的价格,别被首年优惠给骗了。
选择查询结果中没有被占用的域名,点击加入清单,然后点击域名清单
在弹出来的页面里,点击购买即可进入下图页面
上图中:
选择的域名购买时长,将影响价格(其实选择的后缀也会影响价格,.com、.cn 就比较贵一些)
不管哪个平台,都需要你先实名认证,并且等待审核通过,然后才能购买域名(如果已经实名认证过了,这里就可以直接选信息模板,不需要等待审核)(个人实测华为云的话实名认证的审批一天就好了)
是否开启自动续费,取决于你的实际需求
这里购买完成,那域名这一节就完成了。
注:本节不用我实际购买域名所用的华为云举例,是因为当时没截图,现在要弄的话,因为已经弄过一次,实名化啥的已经通过了,所以无法展示第一次用的时候的画面。
4、ICP备案
请在网关服务器所在的服务商上进行本环节的操作,建议在部署服务前申请,因为需要一定的时间。
本节以华为云为例(各家应该都差不多,毕竟流程也没啥可变的)。
其实各家云服务商都在首页有放置了备案的操作入口,很容易就能找到(实测阿里云、腾讯云也是在差不多的位置)。
备案过程其实很简单,云服务商都给你弄好步骤了,一步一步操作下来并不困难。(个人也是可以申请备案的,不局限于企业)
例如下图是华为云的备案流程说明:
申请之前建议先看云服务商提供的相关说明文档,可以降低被退回的概率。
特别说明:域名实名认证信息与备案主体必须一致
准备好材料后,点击登录备案系统,进入备案页面去填写资料
填写资料后会进入初审,初审大概要一两天。
实测华为云的话,一天之内就会打电话找你确认(说是按照法律法规,要求进行确认,你需要告知你的信息用于核对),沟通填写的问题。有问题的话,会和你说,然后给你打回,让你修改。(一定要接电话!!!)
如果是没问题,初审通过了,华为云那边也会打电话通知你,并提醒你一天之内就会有工信部发来短信。
实测就过了几个小时,工信部就发来短信,短信上有验证码和工信部的链接,你需要在24小时以内进入链接对应的工信部网站上,输入手机号、身份证后六位、验证码,然后提交。
然后会进入管局审核,说是3-20天,这里如果审核通过了,就算备案成功完成了。
我实际体验下来是8天(2.21华为云提交给管局,2.29通过),通过后,云服务商和工信部都会给你发邮件、短信,告诉你通过了!(注意没有线下的渠道,要防诈骗)
收到的工信部的邮件:
到这里,ICP备案就算完成了。
此时,记得在Halo的控制台里,配置一下你的ICP备案号。
配置好以后,博客页面的最底下就会显示备案号(展示位置取决于你的主题样式)。(这也正是法规要求的——要展示出来你的备案号)
5、在应用服务器上搭建Halo
在等待ICP备案期间,可以先搭建好你的博客服务。
按照你选择的Halo的安装方式来搭建服务器环境,我基于的是 jar包部署的方案
我准备的环境:
OpenJDK 17 (安装很简单,可随便网上搜索一下)
MySQL 8.0(安装可参考:Linux MySQL安装及初始化)
Nginx (安装可参考:Linux nginx的安装与入门)
Wget (一般云服务器都自带了,没有的话就搜索一下安装一下)
VIM (一般云服务器都自带了,没有的话就搜索一下安装一下)
步骤上基本上就是按照官方文档的描述进行一步一步操作。
但是有几处不同/补充:
(一)vim编辑粘贴到 vi/vim 的代码,怎样避免向右不断缩进,保持原来的格式
解决步骤:
在拷贝前输入 :set paste (这样的话,vi/vim就不会启动自动缩进,而只是纯拷贝粘贴。)
拷贝完成之后,输入 :set nopaste (但是在粘贴插入模式下代码是不会自动按格式缩进的,需要使用 nopaste 设置回来,即 关闭 paste。)
(二)执行 jar包
原文档中,是把jar包配置到服务里执行,以及配置成开机自启。
但是我觉得不需要,所以我写了一个简单的shell脚本(start.sh)来手动执行。
内容很简单:
#!/bin/bash
nohup java -Xms256m -Xmx256m -jar halo.jar &
其中的两个参数:
-Xmx:指定Java堆的最大内存大小。例如,-Xmx512m表示将最大堆内存设置为512MB。通过调整堆内存大小,可以优化应用程序的性能和内存使用情况。
-Xms:指定Java堆的初始内存大小。例如,-Xms256m表示将初始堆内存设置为256MB。这个参数可以帮助您在启动应用程序时控制初始内存分配的大小。
实际还可以记录 PID,以便再写一个 stop.sh。
(三)防火墙
注意一定要把 Linux系统防火墙 和 服务器安全组 的 端口 打开,不然没法访问。(这个端口,应该是你在Halo上配置的外部访问的端口)
注:此时配置的端口开放,建议先设置只允许你的PC机地址访问,等后面真正弄完所有配置后再真正对所有IP开放端口。
如果已经开放了端口规则,但是还无法访问。建议看一下 yaml配置文件 有没有写错,jar包的执行日志 是否有报错。
(四)新建用户无法查看上下文和使用Tab自动填充问题解决
原因:
默认情况下,Ubuntu新建的用户基于的 Shell 是 /bin/sh (可以通过以下命令查看)
cat /etc/passwd
实际上,多数 Linux 系统的 /bin/sh 都是软链接到 /bin/dash(可通过以下shell命令查看)
ll -h /bin/sh
又因为 /bin/dash 可以认为是简化版的 /bin/bash ,对话能力弱。
所以出现了这种操作体验不佳的情况。
解决:
将用户的 Shell 改为使用 /bin/bash 即可(如对用户 yokila 操作时如下)
usermod -s /bin/bash yokila
6、首次登录
部署好以后,输入打开 http://ip:端口号 即可跳转到初始化页面。
注:这里的地址的IP,是你的服务器的公网IP。
注:这里的端口号,是你给Halo配置使用的端口号。
此时参考这个文档,设置即可。
设置好以后,登录,即可进入管理页面。
注:此时还没弄 Nginx、域名解析啥的,所以是直接通过IP+端口访问服务。
7、申请SSL证书(可选项)
只要域名购买好了,其实就可以开始申请了。
但建议是 ICP备案 完毕以后,再申请,毕竟 SSL证书 是有时长的,ICP备案没弄好,申请了也没啥用,纯浪费时长(不过其实也浪费不了几天)。
申请SSL证书需要去云服务提供商那里,搜索 SSL证书,申请SSL证书,用于等下配置 HTTPS 的 S。
注:个人网站使用,例如本文描述的个人博客网站使用,实际上完全可以申请免费的SSL证书来使用(毕竟付费的那些都太贵了)。(华为云的话,有效期是三个月)(阿里云我没找到免费的证书,有知道的请指路一下,谢谢!)
注:如果你不想申请SSL证书,也不是不行,就是安全性差,并且用浏览器访问你的博客网站时会提示说不安全。
过程可参考这篇:免费SSL证书申请(华为云)
8、DNS域名解析
ICP备案通过后,才能进行这个环节!!!
此处以华为云为例。
要使用域名的话,需要在网关服务器的DNS域名解析服务里,增加添加解析记录,然后才能映射到我们的IP上。
我们可以在页面上直接搜索 域名,然后选择进入 云解析服务DNS 页面。
点击 公网域名
点击 管理解析
点击 添加记录集 按照提示填写信息后,就好了。
注:在 管理解析 页面,我们可能会看到云服务商已经给我们添加了一些解析,可以不用去管它们。
此时,我们可以试一下看看用域名访问服务,如果可以,那么就说明域名解析正常。
9、反向代理
9.1 有网关服务器
这里需要区分两种情况:
网关服务器和应用服务器在同一个局域网内(在同一个云服务商上)
网关服务器和应用服务器不在一个局域网内(不在一个云服务商上)
9.1.1 在同一个局域网内
按照常规理解来说,局域网内服务器之间的交互,似乎不太需要HTTPS的保护。但是我看有文章是说建议还是使用HTTPS。
所以,如果你准备提高安全性,用HTTPS,则可以考虑依旧使用HTTPS来交互。那就可以直接参考这篇文章:Nginx HTTPS代理转发HTTPS
如果你觉得局域网是够安全的,则可以不配置HTTPS,使用HTTP来交互。那就可以直接参考这篇文章:Nginx HTTPS转发HTTP
注:局域网时,一般是有一台服务器负责统一与外部进行交互,其他服务器是不开放给外网访问的。
9.1.2 不在一个局域网内
此时建议使用HTTPS双向认证的方式保护两台服务器之间的交互。
可参考这篇文章配置:Nginx HTTPS代理转发HTTPS
9.2 无网关服务器
此时即直接在应用服务器上配置Nginx。
可以参考这篇文章:Nginx HTTP/HTTPS反向代理
9.3 补充
yaml配置文件 里的 external-url
官网注释:外部访问的地址。(这个字段信息最终会显示在控制台的“系统概览”里)
如果你是刚开始部署并进行验证,则通常是 http://服务器IP:服务监听端口 。
但是,如果你后续配置了 Nginx 转发,则此时应该改成 http://服务器IP:Nginx监听的端口
如果你后续有了域名,则此时应该改成 http://域名:Nginx监听的端口
不然博客里“回到首页”的功能会出问题。
如果有SSL证书,则记得改成 https。
10、公安部备案
配置了域名解析,且网站已经可用,则要在1-30天以内,去公安部备案。
法律法规依据:计算机信息网络国际联网安全保护管理办法
其中相关的描述:
第十二条 互联单位、接入单位、使用计算机信息网络国际联网的法人和其他组织(包括跨省、自治区、直辖市联网的单位和所属的分支机构),应当自网络正式联通之日起30日内,到所在地的省、自治区、直辖市人民政府公安机关指定的受理机关办理备案手续。
前款所列单位应当负责将接入本网络的接入单位和用户情况报当地公安机关备案,并及时报告本网络中接入单位和用户的变更情况。
备案时,建议参考网关服务器所在云服务商的备案说明文档(因为需要填写云服务商的信息):
注:履行公安备案时,请确保你的互联网信息服务已完成ICP/APP备案并取得工信部备案号(例如博客网站已获得前文提及的ICP备案),且互联网信息服务(网站/APP)能正常访问(例如博客网站现在是能访问了)。
备案网站:全国互联网安全管理服务平台
按照要求提交后,需要等待审核(提示是说30天内会出结果)
实测花了35天才通过,通过的时候会发短信通知。
此时记得上 全国互联网安全管理服务平台 去把公安备案号复制下来。
然后配置到网站上:Halo的控制台 -> 主题 -> 备案设置 -> 设置备案号 -> 保存。
此时,就设置完成了。
注:网上有人说不去备案也问题不大,但是建议还是合法合规地去备案一下。
11、增值电信业务许可证(可选项)
如果你不准备用博客网站盈利,那么可以忽略这一点。
如果你准备用博客网站盈利,那么就需要办理这个许可证,不然算是非法盈利。
相关法规可以看《中华人民共和国电信条例》
其中有说明,未取得许可证,不可以经营业务:
第七条 国家对电信业务经营按照电信业务分类,实行许可制度。
经营电信业务,必须依照本条例的规定取得国务院信息产业主管部门或者省、自治区、直辖市电信管理机构颁发的电信业务经营许可证。
未取得电信业务经营许可证,任何组织或者个人不得从事电信业务经营活动。
其中描述的申请许可证所需材料:
第十三条 经营增值电信业务,应当具备下列条件:
(一)经营者为依法设立的公司;
(二)有与开展经营活动相适应的资金和专业人员;
(三)有为用户提供长期服务的信誉或者能力;
(四)国家规定的其他条件。
申请条件可看《电信业务经营许可证申请条件》
重点信息:
二、申请经营增值电信业务经营许可证的条件
根据《电信条例》第十三条和《电信业务经营许可管理办法》第六条的规定,申请经营增值电信业务的,应当符合下列条件:
(一)经营者为依法设立的公司。
(二)有与开展经营活动相适应的资金和专业人员。
(三)有为用户提供长期服务的信誉或者能力。
(四)在省、自治区、直辖市范围内经营的,注册资本最低限额为100万元人民币;在全国或者跨省、自治区、直辖市范围经营的,注册资本最低限额为1000万元人民币。
(五)有必要的场地、设施及技术方案。
(六)公司及其主要出资者和主要经营管理人员三年内无违反电信监督管理制度的违法记录。
(七)国家规定的其他条件。
申请材料可看《电信业务经营许可证申请材料》
违规经营会被处罚:
第六十九条 违反本条例规定,有下列行为之一的,由国务院信息产业主管部门或者省、自治区、直辖市电信管理机构依据职权责令改正,没收违法所得,处违法所得3倍以上5倍以下罚款;没有违法所得或者违法所得不足5万元的,处10万元以上100万元以下罚款;情节严重的,责令停业整顿:
(一)违反本条例第七条第三款的规定或者有本条例第五十九条第(一)项所列行为,擅自经营电信业务的,或者超范围经营电信业务的;
(二)未通过国务院信息产业主管部门批准,设立国际通信出入口进行国际通信的;
(三)擅自使用、转让、出租电信资源或者改变电信资源用途的;
(四)擅自中断网间互联互通或者接入服务的;
(五)拒不履行普遍服务义务的。
结论:个人搭建博客,按照规定来说,基本上说是不能设置盈利业务的(比如收费文章、广告收费等)。因为首先你没有公司,而且注册资本没有一百万。
另外,按照网上别人的实际经验分享,似乎各个云服务商还会定期审查你的网站,如果违规了就会立即警告你,你没改就会给你断服务。(不知真假)
补充:网上看到有人上有政策,下有对策,进行法规的周旋。因为我没试过,而且不知是否违法,所以不在这引用。具体实在有需求就自行去搜索吧!
12、安全与体验优化(进阶内容指引)
未来可能未必会及时补充到这里,建议浏览目录:关于博客
12.1 建议
无论是本文描述的 Halo,还是其他博客服务,其实大多是只有基础功能。如果需要一些功能扩展,基本上还是得靠各位大佬制作的插件。
所以,建议多看看相关的插件市场,买/免费下载一些插件来扩展功能。
另外,需要谨记,程序不可能一步到位就完美,往往会不断迭代更新,所以不是安装完就结束了。还是需要多多关注官方动态,必要的时候,更新新版本。
12.2 安全
关闭 Nginx的版本号显示(默认响应报文头、报错页面都会显示版本号)。防止某个版本的 Nginx 有漏洞,然后别人利用这个漏洞攻击你。这个配置很简单,即利用 server_tokens 这个字段,在 http 模块里把值设置为 off 即可。(实在不会就搜索吧,有很多文章讲解)(如果有多台服务器,比如有网关、应用服务器,则需要都配置一下)
防盗链(基础版:基于HTTP请求头的 referer,Nginx配置项参考)
12.3 体验优化
优化图片加载速度:Halo 支持 WebP 图片输出
优化维护过程中的网站反馈:Nginx “正在维护中”页面
HTTP 响应 gzip 压缩:halo 源码的 application.yaml 中已配置
server.compression.enabled=true
,开启了HTTP响应压缩,其他配置使用 Servlet容器 的默认配置,所以无需在 nginx 等代理上额外配置开启 gzip之类的 HTTP响应压缩配置。