个人网站搭建笔记v1

我的网站搭建之路

前言

这篇笔记旨在完整记录我个人服务器上网站集群的搭建历程。从最初的两个简单网站,到最终形成一个结构清晰、安全可靠、易于管理的多站点平台。这不仅是一份技术档案,也是一次宝贵的实践经历。


一、最终架构总览

经过一系列的规划与调整,我的网站平台最终形成了以一个主域名引导页为门户,两个子域名提供核心内容的服务架构。所有服务均由Nginx统一接入和管理,并通过Cloudflare提供全球加速与安全防护。

架构图示

graph TD

    A["用户 (Internet)"] --> B["Cloudflare
(DNS, SSL/TLS, CDN, Firewall)"];     B -- "HTTPS (端口 443)" --> C["阿里云服务器 (ECS)"];     subgraph C         D["Nginx"]     end     D -- "czchx.cc" --> E["引导页 (Static)"];     D -- "garden.czchx.cc" --> F["PM2 → http-server"];     D -- "game.czchx.cc" --> G["游戏站 (Static)"];

二、各站点详解

所有网站相关的文件最终都被统一存放在服务器的 /home/czc/web/ 目录下,便于集中管理。

1. 主域名引导页 (https://czchx.cc)

*   这是Nginx的默认站点 (default_server),处理所有未被其他配置捕获的请求,避免域名混淆。

*   将所有HTTP请求 (:80) 强制301重定向到HTTPS (:443)。

*   直接提供 /home/czc/web/landing_page/ 目录下的静态文件服务。

2. 数字花园 (https://garden.czchx.cc)

*   部署脚本和工具: /home/czc/web/digitalgarden/

*   网站源码: /home/czc/web/digitalgarden/digitalgardendist/ (由Git从GitHub仓库克隆)

*   我们使用PM2来守护http-server进程,确保其稳定运行。

*   启动命令为:pm2 start http-server -- /home/czc/web/digitalgarden/digitalgardendist/ -p 8080 --name digitalgarden

*   监听 garden.czchx.cc 的所有HTTP和HTTPS请求。

*   将HTTP请求重定向到HTTPS。

*   作为反向代理,将所有HTTPS流量安全地转发到本地运行在8080端口的http-server服务上。

*   这是整个数字花园的灵魂,它实现了"一键部署"。

*   核心流程:

1.  进入项目目录 /home/czc/web/digitalgarden/

2.  删除旧的源码,通过git clone重新拉取最新的笔记产物。

3.  通过ln -sfn创建文件软链接。

4.  通过pm2 deletepm2 start重启http-server

5.  调用Python脚本,自动生成最新的站点地图sitemap.xml

*   一个定制的Python脚本,它会递归扫描所有笔记文件,生成符合规范的sitemap.xml,并能正确处理URL中的特殊字符。

3. 游戏站 (https://game.czchx.cc)

*   配置非常直接,监听game.czchx.cc的HTTP和HTTPS请求。

*   将HTTP重定向到HTTPS。

*   直接提供/home/czc/web/game/目录下的静态文件服务。


三、基础设施与安全配置

1. 域名、DNS与SSL/TLS (Cloudflare)

*   我们采用了Cloudflare的源服务器证书 (Origin Certificate),这是一个免费且安全的方案。

*   证书模式设置为最高安全级别的 "完全(严格)" (Full (Strict))

*   服务器上,我们将Cloudflare提供的证书和其根证书合并为了一个 fullchain.pem 文件,解决了所有SSL证书链问题。

*   所有证书文件都安全地存放在 /etc/nginx/ssl/czchx.cc/ 目录下。

2. 服务器防火墙 (阿里云安全组)

3. 核心管理工具与脚本

*   remove_publish_flag.py: 用于批量移除笔记中的 dg-publish: true 标签,实现内容的"一键撤回"。

*   add_publish_flag.py: 用于批量添加或修正 dg-publish: true 标签,实现内容的"一键发布"。


四、未来可改进的方向

虽然目前的架构已经非常稳定和高效,但总有追求卓越的空间。

  1. 实现真正的CI/CD (持续集成/持续部署)

*   现状: 我需要登录服务器,手动运行czc_d.sh来部署。

*   改进: 使用 GitHub Actions。当我的笔记仓库有新的push时,可以自动触发一个Action,通过SSH连接到我的服务器并执行部署脚本。这将实现真正的"写完即发布",完全自动化。

  1. 容器化 (Docker)

*   现状: 应用和服务直接运行在服务器上。

*   改进: 使用 Docker 将数字花园的http-server应用,甚至Nginx本身都打包成容器。通过docker-compose来编排它们。

*   优势: 极大地提升了环境的可移植性、隔离性和部署速度。未来迁移服务器会变得像复制几个配置文件一样简单。

  1. 加强服务器安全

*   现状: 阿里云安全组规则过于宽松。

*   改进: 遵循**"最小权限原则"**。关闭所有不必要的端口,只开放22 (SSH), 80 (HTTP), 443 (HTTPS)等必需端口。对于SSH端口,可以进一步限制只允许特定IP地址访问。

  1. 建立独立的暂存/测试环境

*   现状: 所有更改直接部署到生产环境。

*   改进: 可以再创建一个staging.garden.czchx.cc子域名。在部署重大更新前,先部署到这个测试环境进行验证,确认无误后再部署到正式环境。

  1. 完善的监控与告警

*   现状: 依赖Cloudflare的Analytics和手动检查。

*   改进: 引入UptimeRobot之类的免费服务,对所有站点进行24小时可用性监控,一旦网站宕机,可以立即收到邮件或App通知。


结语

从简单的文件上传,到拥有自动化部署脚本、反向代理、全站HTTPS、CDN加速的规范化网站集群,这个过程中的每一步都充满了挑战和收获。这份文档将作为我未来继续优化和扩展这个平台的基石。