轻量级个人建站
文章目录
- 一、背景
- 二、环境
- 三、云服务器
- 四、域名
- 五、备案
- 5.1 IPC备案
- 5.2 公安联网备案
- 六、web服务器
- 6.1 Nginx部署
- 6.1.1 安装Nginx
- 6.1.2 启动Nginx
- 6.1.3 配置Nginx
- 6.1.4 测试Nginx配置
- 6.1.5 重启Nginx
- 七、证书申请
- 7.1 证书选择
- 7.2 Let’s Encrypt证书申请
- 7.2.1 安装 Certbot
- 7.2.2 申请证书
- 7.2.3 配置Nginx
- 八、API服务框架
- 8.1 安装golang
- 8.2 配置Proxy
- 8.3 安装go-ctl
- 8.4 安装go-zero
- 8.5 api demo生成
- 8.6 编译Demo
- 8.7 运行Demo
- 8.8 验证API
- 九、总结
- 十、参考资料
一、背景
最近有幸参与到公司小程序的项目开发,感受到了轻量级开发的便捷性和高效性,同时也诱使我有学习个人建站的想法:在互联网上拥有一块专属的 “地皮”,用来展示我想展示的任何内容。
二、环境
- 云服务器:阿里云
- web服务:nginx
- API服务框架:go-zero
- 数据库:mysql
- 证书:Let’s Encrypt
三、云服务器
考虑到后期维护成本,我最开始比较犹豫使用云服务器或者NAS & Docker组合。但是后面考虑到小程序的开发和部署,服务器需要备案等问题,最终还是选择了商用的云服务器。云服务器都还蛮贵的,不过基于目前企业比较主流的选择,最终我也选择了阿里云。
特性 | 云服务器 (Cloud Server) | NAS (Network Attached Storage) |
---|---|---|
核心定位 | 远程计算、应用部署平台 | 家庭 / 小型办公文件存储中心 |
主要用途 | 搭建网站、运行程序、开发测试、数据备份 | 照片视频备份、家庭影音库、文件共享 |
数据安全 | 由云厂商保障,通常多副本存储,安全性高 | 数据在自己手里,但需自己负责备份和维护 |
成本模式 | 按月 / 年订阅(CPU、内存、带宽收费) | 一次性硬件购买,长期使用成本低 |
四、域名
基于后期备案的需求,需要选购一个个性化的域名,它不仅是一个地址,更是你的个人品牌和数字身份。域名的选购和域名的解析,都在阿里云上进行。建议选购一些比较常用的域名,比如 .com、.cn 等。
我的域名:zhiqinlin.cn
五、备案
备案是指在国内的互联网上,为了保护个人、企业或组织的合法权益,需要向国内的互联网服务提供商(如阿里云、腾讯云等)申请备案。备案的主要目的是为了确保网站的正常运行和访问,同时也为了遵守国内的法律和规定。
如果我们云服务器和域名已经购买,此时就可以申请备案。由于备案需要一定的时间去审核,所以如果比较着急的小伙伴,可以尽快申请备案。
5.1 IPC备案
我在阿里云上购买的域名,所以需要在阿里云上申请 IPC 备案。如下是我的备案时间流程,大家可参考:
5.2 公安联网备案
公安备案比较快,一般在一个工作日内就可以完成。备案完成后,会得到备案编号HTML代码&备案图标,这样,我们就有自己的"门牌号"拉:
六、web服务器
Web 服务器是网站的核心,它负责接收和响应用户的访问请求。简单来说,它就像你家的 “保安室”,专门负责接待访客。选择哪个服务器,取决于你的具体需求。以下是几个主流服务器的特点:
服务器 | 核心优势 | 适用场景 |
---|---|---|
Nginx | 高性能、高并发,资源占用低,擅长处理静态文件和反向代理 | 大多数网站的首选,尤其适合高访问量的场景,常作为前端代理 |
Apache | 功能强大、生态成熟,模块丰富,配置灵活,兼容性好 | 需要复杂配置、运行特定模块的传统项目,或对兼容性要求极高的场景 |
Caddy | 极简配置、自动 HTTPS,开箱即用,默认开启加密,非常省心 | 个人项目、开发环境、或追求简单运维的中小型网站 |
IIS | 与 Windows 系统深度集成,管理方便,适合运行ASP.NET程序 | 部署在 Windows Server 上的企业级应用,特别是使用微软技术栈的项目 |
个人建议,新手从 Nginx 或 Caddy 开始。Nginx 性能最强,Caddy 配置最简单。我目前使用的是Nginx。
6.1 Nginx部署
6.1.1 安装Nginx
sudo yum install epel-release
sudo yum install nginx
6.1.2 启动Nginx
sudo systemctl start nginx
6.1.3 配置Nginx
@/etc/nginx/nginx.conf
http {...server {listen 80;#配置访问域名server_name zhiqinlin.cn www.zhiqinlin.cn;location / {root /var/www/myh5app; #页面的的发布根路径index index.html; #索引}}...
}
6.1.4 测试Nginx配置
sudo nginx -t
6.1.5 重启Nginx
sudo systemctl restart nginx
七、证书申请
现在主流浏览器(Chrome、Edge、Safari 等)都有 “安全规则”:没有安装 SSL 证书的网站(即 “HTTP 网站”),会被标记为 “不安全”。
7.1 证书选择
Let’s Encrypt: 是由互联网安全研究小组(ISRG)发起的非营利性公益项目,旨在通过免费提供 SSL 证书推动全球网站普及 HTTPS 加密。其证书由自动化系统颁发,完全免费且开源。
阿里云商用证书: 是阿里云与全球知名商业 CA 机构(如 Symantec、GeoTrust、GlobalSign 等)合作提供的付费商业证书,属于商业服务范畴,证书颁发和管理有完整的商业服务体系支持。
对比维度 | Let’s Encrypt 证书 | 阿里云商用证书 |
---|---|---|
是否收费 | 完全免费(永久免费) | 按类型收费(从百元 / 年到数万元 / 年不等) |
证书类型 | 仅支持 DV 证书(域名验证型) | 支持 DV 证书、OV 证书(组织验证型)、EV 证书(扩展验证型) |
验证方式 | 仅验证域名所有权(自动完成,无需人工审核) | DV 同左;OV/EV 需验证企业 / 组织真实身份(人工审核,需提供营业执照等材料) |
信任等级 | 基础信任(浏览器认可,但不展示组织信息) | OV/EV 信任等级更高:OV 显示组织名称;EV 地址栏显示绿色锁 + 组织名称,视觉信任度最强 |
有效期 | 90 天(需定期自动 / 手动续期,不可延长) | 1-2 年(按购买时长,到期可续费) |
政府机构、教育机构等官方网站,代表着政府或教育机构的官方形象,需要较高的信任等级和严格的身份验证。DV 证书无法提供足够的组织身份验证,一般不适合使用,例如.gov、.edu 等后缀的域名通常需要使用 OV 或 EV 证书。 个人建站一般不会涉及到敏感数据传输的场景,使用Let’s Encrypt即可。
7.2 Let’s Encrypt证书申请
7.2.1 安装 Certbot
yum install epel-release -y # 启用 EPEL 源
yum install certbot python3-certbot-nginx -y
7.2.2 申请证书
1. 申请证书
certbot certonly --webroot -w /data/nginx/cert -d www.zhiqinlin.cn -d zhiqinlin.cn
–webroot -w /data/nginx/cert:指定验证目录
-d www.zhiqinlin.cn -d zhiqinlin.cn:指定需要证书的域名
2. 证书生成后默认存放:
/etc/letsencrypt/live/www.zhiqinlin.cn/cert.pem //域名证书
/etc/letsencrypt/live/www.zhiqinlin.cn/fullchain.pem //包含域名证书和中间证书的文件
/etc/letsencrypt/live/www.zhiqinlin.cn/chain.pem //中间证书
/etc/letsencrypt/live/www.zhiqinlin.cn/privkey.pem //私钥
7.2.3 配置Nginx
1. 编辑Nginx配置文件
@/etc/nginx/nginx.conf
http {...server {listen 443 ssl http2;#配置访问域名server_name zhiqinlin.cn www.zhiqinlin.cn;#配置证书ssl_certificate /etc/letsencrypt/live/www.zhiqinlin.cn/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/www.zhiqinlin.cn/privkey.pem;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;location / {root /var/www/myh5app; #页面的的发布根路径index index.html; #索引}}...
}
2. 重载 Nginx
nginx -t
systemctl restart nginx
八、API服务框架
考虑到后期微信小程序的开发会涉及到API接口的调用,因此需要搭建一个API服务框架。目前我司的项目开发使用的go-zero框架开发,一站式微服务框架,它完美解决了新手在后端开发中常遇到的 “技术栈复杂、配置繁琐、性能难优化、生产落地难” 等痛点,同时贴合 Go 语言 “简单、高效” 的特性,能让新手快速从 “入门” 到 “写出可落地的服务”。菜鸟首选
我目前的做法是在window下完成go-zero框架的Api服务开发,然后再部署到阿里云服务器下linux的环境下。
8.1 安装golang
go 是 Google 开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言, 于 2009 年 11 月正式宣布推出,成为开放源代码项目,需要安装go的环境。
此部分可参考:go 安装 (https://go-zero.dev/docs/tasks)
8.2 配置Proxy
此需要配置Proxy,否则会出现安装失败的情况。
go env -w GOPROXY=https://goproxy.cn,direct
8.3 安装go-ctl
goctl 是 go-zero 的内置脚手架,是提升开发效率的一大利器,可以一键生成代码、文档、部署 k8s yaml、dockerfile 等。
go install github.com/zeromicro/go-zero/tools/goctl@latest
8.4 安装go-zero
go-zero 是一个基于 Go 语言的微服务框架,它提供了一整套的工具和库,帮助开发者快速构建和部署微服务。
go install github.com/zeromicro/go-zero@latest
8.5 api demo生成
在完成了 goctl 安装 后,我们可以通过 goctl 创建一个最小化的 HTTP 服务来了解 goctl 的 go-zero api 服务的概况。
mkdir -p ~/workspace/api && cd ~/workspace/api
goctl api new demo
demo的树形结构如下:
F:\soft\Git\Git\workspace\api\demo$ tree
.
├── demo.api --- 定义api接口
├── demo.go --- 主程序
├── etc
│ └── demo-api.yaml --- 配置文件
├── go.mod --- 依赖管理文件
└── internal├── config│ └── config.go --- 配置文件├── handler│ ├── demohandler.go --- 处理http请求│ └── routes.go --- 路由配置├── logic│ └── demologic.go --- 业务逻辑├── svc│ └── servicecontext.go --- 服务上下文└── types└── types.go --- 定义数据结构
8.6 编译Demo
Linux环境
set GOARCH=amd64
go env -w GOARCH=amd64
set GOOS=linux
go env -w GOOS=linuxgo build -o demo
Windows环境
go env -u GOOS
go env -w GOOS=windows
go env -u GOARCH
go env -w GOARCH=amd64go build -o demo
8.7 运行Demo
1. 运行可执行程序
F:\soft\Git\Git\workspace\api\demo
λ .\demo.exe -f etc/demo-api.yaml
Starting server at 0.0.0.0:8888...
2. 指令启动
F:\soft\Git\Git\workspace\api\demo
λ go run demo.go -f etc/demo-api.yaml
Starting server at 0.0.0.0:8888...
8.8 验证API
1. 新增测试代码
@F:\soft\Git\Git\workspace\api\demo\internal\logic\demologic.go
func (l *DemoLogic) Demo(req *types.Request) (resp *types.Response, err error) {// todo: add your logic here and delete this line
+ resp = new(types.Response)
+ resp.Message = req.Name return
}
2. 验证API
C:\Users\qj-linzhiqin
λ curl --request GET 'http://127.0.0.1:8888/from/me'
{"message":"me"}
九、总结
通过以上步骤,我们成功搭建了一个基于go-zero框架的API服务框架,并且通过Ngnix部署到了阿里云服务器下linux的环境下。之后我们可以通过该API服务框架,去实现更复杂的功能。期待!
十、参考资料
- Let’s Encrypt 证书申请 (https://www.51cto.com/article/824837.html)
- go-zero 微服务框架 (https://go-zero.dev/)
- go代理 (https://www.cnblogs.com/yubo-guan/p/18926955.html)