引入
我的博客一直托管在 GitHub Pages 上。对于单纯的前端页面来说够用了,但如果想放点需要服务器的东西,比如跑个后端服务、存个数据库,还是需要自己有一台云服务器。于是有了这次建站。
现在网站已经稳定运行了快一个月,拥有了主页和几个子项目,它们都跑在我的云服务器上,前后端都是自己开发的。欢迎大家访问 https://tsx.world/

省流版的建站成本和时间线
我的域名、服务器和相关服务都在阿里云上:
| 项目 | 规格 | 价格 |
|---|---|---|
| 域名 | .world 后缀,首年 |
23元 |
| 轻量应用服务器 | 2 核 2G / 40G 系统盘 / 峰值带宽 200Mbps | 半年免费! |
| HTTPS 证书 | Let’s Encrypt | 免费,自动续期 |
| 备案 | ICP + 公安备案 | 0 元(自己办,不找代办) |
时间线
| 日期 | 事项 |
|---|---|
| 8-28 | 买服务器 |
| 9-06 | 提交 ICP 备案订单 |
| 9-15 | ICP 备案通过,等了 9 天, |
| 9-19 | 域名解析 + Nginx + HTTPS + 网站上线,当天提交公安备案 |
| 10-10 | 公安备案通过,去掉国庆假期,等了 2 周, |
省流版总结:技术部分用agent半天就能搞定,真正占时间的是两个备案。所以顺序很重要:先提交备案,再搞技术,让等待时间和你的准备工作并行。
接下来是详细介绍。
一、买域名
域名购买的渠道有很多,我选择在阿里云购买,因为可以和我的服务器在一起管理,域名注册等服务阿里云也会提供,比较省心。一般.com和.cn的后缀名比较贵,其他的后缀名比较便宜,所以我选择了 tsx.world ,我的名字缩写加上便宜且有意义的后缀名。第一年仅需23元,第二年104。

买完第一件事是实名认证。国内注册的域名必须实名,不认证域名会被暂停解析。在阿里云控制台下图界面,按流程进行认证,一般一两天就通过了。
二、买服务器
阿里云和腾讯云的优惠力度都很大,一台轻量服务器第一年仅需一百元左右,甚至都不用。这方面网上的教程非常多,这里不再赘述。我使用了阿里云的大学生300元无门槛券,免费购买了原价270的2核2G的轻量应用服务器
https://university.aliyun.com/buycenter/?spm=5176.46783215


基本配置:

| 项目 | 选择 | 理由 |
|---|---|---|
| 镜像 | Ubuntu 22.04 LTS | 长期支持版,资料多 |
| 规格 | 2 核 2G | 跑 Nginx + 一两个 Go 服务够用 |
| 系统盘 | 40G | 数据库 + 日志 + 快照,够用 |
三、域名解析
域名解析,就是把域名翻译成 IP 地址。
服务器在网络里的真实地址是一串数字(比如 118.31.60.18),域名只是给它起的一个好记的名字。浏览器里输入 tsx.world 的时候,它并不知道要连哪台机器,会先去问 DNS 服务器”这个域名对应哪个 IP”,拿到答案才能连上你的服务器。
所以买完域名,还要做一步解析:告诉 DNS”tsx.world 指向我的服务器 IP”。不做这一步,域名就是一个没人认识的空名字。
在阿里云云解析 DNS 里加两条 A 记录:
| 记录类型 | 主机记录 | 记录值 |
|---|---|---|
| A | @ |
服务器公网 IP |
| A | www |
服务器公网 IP |
@ 代表裸域名(tsx.world),www 代表 www.tsx.world。两条都加上,两个地址就都能访问。
加完后本地验证一下,可能要等几分钟生效:
1 | ping tsx.world |


四、服务器初始配置
4.1 可选:装个 SSH 客户端
服务器上执行的命令,都要先通过 SSH 远程登录到服务器,在它的终端里敲。Windows 自带的 PowerShell 也能连(直接输 ssh root@服务器IP 就行),但每次都要敲一遍 IP,日常维护可以装个专门的 SSH 客户端,能保存连接、双击即连。我用的是 Xshell。当然也可以直接让agent来帮你登录。
下载安装:搜「Xshell」进官网 → 选「家庭/学校免费版」→ 填个邮箱就能下载,安装一路下一步。
装好后新建连接:
- 点左上角「新建」,名称随便起(比如
我的服务器) - 在「连接」页填三项:
- 协议:
SSH - 主机:你的服务器公网 IP
- 端口号:
22
- 协议:
- 点「连接」——第一次会弹「SSH 安全警告」,选「接受并保存」
- 输入用户名
root和密码,回车,就登进服务器了
4.2 SSH 登录与免密配置
命令行方式,PowerShell 里直接连,不装 Xshell 也能用:
1 | ssh root@你的服务器IP |
登录成功后配一下免密登录(本机生成密钥对,把公钥装到服务器):
1 | # 本机执行 |
⚠️ 我遇到的问题:在 Xshell 里粘贴长命令时,公钥被插入了换行、变成两行写进
authorized_keys,sshd 直接静默忽略——命令显示”安装完成”,但免密登录还是失败。诊断方法:cat -A ~/.ssh/authorized_keys看有没有异常的$换行符。修复:分段用echo -n写入。
配好之后,在本机 ~/.ssh/config 加个别名,以后 ssh 别名 就能连:
1 | Host myserver |
4.3 装 Nginx + 放第一个页面
1 | # 服务器上执行 |
此时访问 http://tsx.world 就能看到页面了。轻量服务器的防火墙默认放行 80/443 端口,不需要额外配置。
五、HTTPS:一条命令的事
HTTPS 就是给网站的通信加密。
HTTP 协议下,浏览器和服务器之间传输的所有数据都是明文——访客填的表单、输入的密码,在网络上经过的任何节点都能看到、能篡改。HTTPS 会在两端建立一条加密通道,数据在传输途中是加密的,中途被截获也读不出内容。另外,现在浏览器对 HTTP 网站会直接在地址栏标「不安全」,所以 HTTPS 已经是网站的标配。
加密通信需要一张「证书」来证明这个服务器确实是它声称的那个域名。证书以前要花钱买,现在有 Let’s Encrypt 提供免费的,而且能自动续期。我们只需要执行下列命令:
1 | apt install -y certbot python3-certbot-nginx |
这条命令自动完成三件事:申请证书 → 修改 Nginx 配置(加 443 监听 + 证书路径 + HTTP 301 跳转)→ 安装续期定时任务。完成后浏览器的网址界面就会显示这个网站是安全的。

六、ICP 备案
ICP 备案是什么:ICP 的全称是 Internet Content Provider,直译”网络内容提供商”。国内规定,网站必须向工信部登记”这个网站是谁办的、放在哪台服务器上、叫什么名字”,通过后发一个备案号。实际作用是硬性的:国内服务器上,没备案的域名不能用 80/443 端口对外提供服务——不备案,网站直接访问不了,没有绕过的办法。
网站备案分成 ICP 备案和公安备案:ICP 备案归工信部管,相当于”接入许可”;公安备案归公安部管,是”网络安全责任”登记,网站上线后 30 天内办理,办理时要签一份网络安全责任书。所以顺序是:先办 ICP 备案,再办公安备案,ICP备案通过后网站就能上线。
我实际经历的流程和时间线:
1 | 9-06 在阿里云提交备案订单(填主体信息、网站信息、上传证件) |
整个过程约 9 天,其中大部分是管局审核的排队时间。
管局是什么:管局是各省的通信管理局,工信部在各省的分支机构。备案的最终审核单位就是它。在阿里云提交材料后,阿里云先做初审,再转交管局排队审核,等待时间主要耗在管局这一环,各省管局的处理速度不太一样。
关于ICP备案,阿里云腾讯云等服务商都会有详细的备案流程介绍和指引,此处不再赘述

填表注意事项:
- 备案期间网站不能开:提交后到通过前,域名不能访问,或者只放一个静态占位页。
- 服务器所在地按服务器实际地域填。
备案通过后:备案号上墙。
备案通过后会收到工业和信息化部发来的手机短信,告知备案/许可证编号。
网站底部需要挂上网站备案号,链接到 https://beian.miit.gov.cn/:
https://beian.miit.gov.cn/ 是工信部的备案信息查询系统:任何人都可以在上面输入域名,查到网站的备案号、主办单位、备案时间。备案号必须链接到它,相当于留一个”验证入口”——访客点一下就能核实这个网站确实备过案,而不是随便写的一串编号。
1 | <a href="https://beian.miit.gov.cn/" target="_blank">浙ICP备XXXXXXXX号-1</a> |
⚠️ 注意:备案号有两个版本——主体备案号(
浙ICP备XXXXXXXX号)和网站备案号(带-1后缀)。网站底部要挂的是带-1的那个,后面公安备案要提供的也是这个,我一开始搞错了,导致公安备案审核不通过。
七、公安备案:上线后 30 天内必须办
公安备案不像之前ICP备案,没有阿里云帮你推进流程,需要自己全程跟进。
平台是全国互联网安全管理服务平台 https://beian.mps.gov.cn要自己注册账号填写。
注意:备案时使用的主体信息中,地址不是户籍地址,而是现居地址!
如果是个人备案的话,是否提供互联网交互服务这里一定要选否,否则过不了审!
审核通过后拿到公安备案号,需要在网站首页显著位置挂上备案图标 + 编号:
1 | <a href="https://beian.mps.gov.cn/" target="_blank"> |

办理公安备案时会签署一份《网络安全责任告知书》:
- 网站不再开办 → 5 个工作日内申请撤销备案。别直接扔着不管。
- 首页显著位置张贴备案图标。
八、部署工作流
网站上线后要持续更新的话,可以写一个脚本,所有修改都在本地做,改完运行部署脚本上传。
脚本逻辑:
1 |
|
配合一个 deploy.bat,现在更新网站就只需要双击一下这个文件,上传完自动校验线上字节数,不一致会报错。
九、一台服务器跑多个项目
建站最初的时候,我只放了个主页,后来陆续加了子项目,都是在同一台服务器上通过 Nginx 路径分流。
Nginx 是一个”Web 服务器”软件,职责是接收访客的请求,把对应的内容返回过去。它主要干两件事:
- 访客要的是 HTML、图片这类静态文件 → 直接从服务器磁盘上读出来返回
- 访客要的是 API 数据(需要后端程序现场处理的)→ 把请求转交给后端程序
多项目共存靠的就是它的路径分流能力:同一个域名下,访问 /pingpong/ 走乒乓球项目,访问 /lostfound/ 走失物招领,互不干扰:
1 | # 主页 |
配置里的 proxy_pass 就是反向代理:后端 Go 程序只监听本机地址(127.0.0.1:8081,外网根本访问不到),Nginx 对外接收请求后替访客转交给后端,再把结果带回来。相当于后端程序躲在 Nginx 后面,由 Nginx 统一对外接待——后端不用直接暴露到公网,更安全,多个服务也能共用一个域名。
每个后端服务用 systemd 托管。systemd 是 Linux 自带的”服务管家”:程序如果直接在终端里跑,窗口一关就停了;交给 systemd 托管后,程序后台常驻、开机自动启动、崩溃了自动拉起。只需要写一个配置文件告诉它”启动哪个程序”:
1 | # /etc/systemd/system/myapp.service |
1 | systemctl enable --now myapp # 启动 + 设为开机自启 |
systemctl 是跟这个管家打交道的命令:enable 设为开机自启,--now 表示顺便立刻启动。平时看运行状态用 systemctl status myapp,改完代码重启用 systemctl restart myapp。
结语
网站的建设一点也不难!如果你也在计划建站,希望这篇博客能有所帮助。