从零搭建个人网站的完整指南
很多人觉得搭一个属于自己的网站很难,其实核心只有三步:域名 → 服务器 → 部署文件。如果用免费托管,连服务器都能省掉。
这篇以你正在看的这个博客为例,把完整流程记一遍,包括我实际踩到的坑。
先想清楚:你需要哪种方案?
不是所有人都需要买服务器。先看这张对比,再决定往下走哪条路:
| 方案 | 成本 | 需要备案 | 适合谁 |
|---|---|---|---|
| 云服务器 + Nginx | 域名 + 服务器,每年百元级 | 需要(大陆服务器) | 想顺便练 Linux,以后可能跑后端 |
| GitHub Pages | 免费 | 不需要 | 纯静态,不在意国内访问速度 |
| Cloudflare Pages | 免费 | 不需要 | 纯静态,想要全球 CDN |
| 对象存储 + CDN | 按流量算,通常每月几块钱 | 需要(绑自有域名) | 静态站,但要国内速度 |
我选的是第一种,纯粹因为想借这个机会把 Linux 和 Nginx 练熟。如果你只想让站点尽快上线,直接跳到最后一节看免费托管。
第一步:准备域名
域名是网站的地址,比如 example.com。可以在阿里云、腾讯云、Cloudflare 等平台注册,.com 一般一年几十元。
两个容易忽略的点:
- 必须实名认证。国内注册商买的域名不做实名认证,解析不会生效,而且认证有几小时到一天的审核时间。
- 别贪便宜选生僻后缀。有些后缀首年一块钱,续费却要几百;也有部分后缀在国内无法备案。
第二步:备案(大陆服务器绕不开)
这一步最耗时间,也最容易被教程跳过:如果服务器在中国大陆,域名必须先完成 ICP 备案,否则 80 端口会被拦,域名根本访问不了。
- 在服务器厂商的备案控制台提交(阿里云、腾讯云都有专门入口),资料包括身份证、域名证书、服务器实例。
- 等待审核,通常 1–20 个工作日,期间会有电话核验。
- 备案号下来后,必须放在网站页脚,并链接到
beian.miit.gov.cn。 - ICP 备案通过后 30 日内,再办公安备案,同样把编号挂在页脚。
顺序很重要:先买服务器 → 再备案 → 最后解析域名。反过来做,你会对着一个打不开的域名排查半天网络问题。
用 GitHub Pages、Cloudflare Pages 这类境外托管则不需要备案,代价是国内访问速度不稳定。
第三步:准备服务器
云服务器就是一台 24 小时在线的机器。以阿里云为例:
- 买一台轻量应用服务器或 ECS,静态站选最低配完全够用(1 核 2G 绰绰有余)。
- 系统选 Ubuntu 22.04 LTS,资料多、命令通用。
- 在控制台的安全组里放行 80(HTTP)和 443(HTTPS)。
安全组是云服务器的"外层防火墙",和系统里的 ufw 是两套东西。不放行 80,别人就是访问不到你的网站——这是新手最常踩的坑,而且没有任何报错提示。
第四步:安装 Nginx 并部署
SSH 登录服务器后安装 Nginx:
# Ubuntu / Debian
sudo apt update
sudo apt install -y nginx
# 启动并设置开机自启
sudo systemctl enable --now nginx
此时访问服务器公网 IP,应该能看到 Nginx 的欢迎页。看不到就回去检查安全组。
接着把网站文件传上去。第一次可以用 scp:
scp -r ./* root@你的服务器IP:/var/www/html/
但日常更新我更推荐 rsync——它只传有变化的文件,还能顺手删掉服务器上已经不存在的文件:
rsync -avz --delete \
--exclude '.git' --exclude 'README.md' \
./ root@你的服务器IP:/var/www/html/
注意 --delete 会让服务器目录和本地保持完全一致,用之前确认路径没写错。
第五步:写一份像样的 Nginx 配置
默认配置能跑,但缓存策略不合理:要么全都不缓存,要么把 HTML 也缓存住,导致你改了文章、用户却看到旧版本。我用的配置大致是这样:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/html;
index index.html;
# 静态资源带指纹或很少变,缓存一年
location ~* \.(css|js|png|jpg|jpeg|svg|ico|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# HTML 不缓存,保证文章更新后立刻可见
location ~* \.html$ {
add_header Cache-Control "no-cache";
}
# 开启压缩
gzip on;
gzip_types text/css application/javascript image/svg+xml;
}
改完别忘了先检查语法再重载,-t 这一步能帮你避免把线上站点弄挂:
sudo nginx -t && sudo systemctl reload nginx
第六步:解析域名与 HTTPS
在域名控制台加一条 A 记录,主机记录填 @(根域名)和 www,记录值填服务器公网 IP。几分钟生效后就能用域名访问了。
然后用 Certbot 申请免费证书,开启 HTTPS:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
Certbot 会自动改好 Nginx 配置并配置 80 跳 443。证书 90 天到期,它会装一个定时任务自动续期,装完顺手确认一下:
systemctl list-timers | grep certbot
sudo certbot renew --dry-run
我踩过的坑
- 安全组没放行 80/443。页面一直转圈,没有任何报错。排查顺序:安全组 → 系统防火墙 → Nginx 是否在跑。
- 域名没实名认证。解析配了也不生效,白排查半天。
- 备案没下来就急着解析。大陆服务器上 80 端口被直接拦掉。
- 文件权限不对导致 403。上传后执行
sudo chown -R www-data:www-data /var/www/html。 - 改了文件浏览器还是旧的。先用无痕窗口确认是不是缓存,再去调
Cache-Control。
不想折腾服务器?
纯静态站完全可以免费托管,把仓库推上去就自动部署:
- GitHub Pages:仓库设置里开启即可,适合放源码的项目。
- Cloudflare Pages:连上仓库就能自动构建部署,全球 CDN,免费额度很宽松。
两者都不需要备案,但国内访问速度不保证。如果主要读者在国内,还是大陆服务器或"对象存储 + CDN"更稳。
小结
- 静态网站不需要复杂运行环境,一个 Nginx 就够。
- 更新文章 = 本地改文件 +
rsync同步,十几秒的事。 - 最费时间的不是技术,是备案——想上线的话尽早提交。
这个博客就是按这套流程跑起来的。有问题欢迎邮件交流~