我自建服务器部署了 Next.js 全栈项目
前言
之前我分享了我开源的两个全栈项目,《舔狗日记》 和 《吃啥好呢》,可以看前文
新作品《舔狗日记》:在爱的剧本里,我们都是自己的主角
新作品:吃啥好呢 - 个性化美食推荐
在文章里面我提到了我放弃 Vercel + Supabase,选择自建服务器自己运维。
我不建议新手和我一样,特别是对编程不熟悉的朋友,Vercel 提供了自动化的 CI/CD,Supabse Free 账户提供 2 个免费 PostgreSQL 数据库,用来折腾学习还是很不错的,如果后期你的访问量起来了或者项目变多了,我建议你学习一下容器技术(docker/k8s),自建服务器部署,这样性比价就更高,但是随之带来的就是运维成本,不过现在 AI 工具那么多,脚本命令什么的 GPT 都可以信手拈来。
如果真的一点技术不会,其实还有一个折中的办法,把项目迁移到 Cloudflare,CF 价格会低很多。
如何将全栈项目部署到自建服务器?
我使用的是 Docker 容器对应用进行管理,我写过一键安装 Docker 的脚本(开源),可以直接拿来用,脚本里面还可以一键安装 MySQL,方便的很,就算是自己手动安装使用 Docker 安装应用也是一行命令的事情。
一键安装脚本:https://github.com/jonssonyan/install-script
Docker 官网文档:https://docs.docker.com/engine/
以吃啥好呢为例
吃啥好呢 GitHub:https://github.com/jonssonyan/what-to-eat
- clone 项目
git clone https://github.com/jonssonyan/what-to-eat.git
cd what-to-eat
- 构建镜像
docker build -t what-to-eat:0.1.0 .
- 运行容器
docker run -d --name what-to-eat --restart always \--network=host \-e PORT="$PORT" \-e DATABASE_URL="$DATABASE_URL" \-e NEXTAUTH_URL="$NEXTAUTH_URL" \-e NEXTAUTH_SECRET="$NEXTAUTH_SECRET" \-e GOOGLE_CLIENT_ID="$GOOGLE_CLIENT_ID" \-e GOOGLE_CLIENT_SECRET="$GOOGLE_CLIENT_SECRET" \-v $APP_LOG:/app/logs \what-to-eat:0.1.0
这里面有几个环境变量必须设置
- DATABASE_URL:数据库连接
- NEXTAUTH_URL:网站公网地址(本地开发是 http://localhost:300)
- NEXTAUTH_SECRET:密钥(不可泄露)
- GOOGLE_CLIENT_ID:Google OAuth 的 Client ID
- GOOGLE_CLIENT_SECRET:Google OAuth 的 Client Secret
- APP_LOG:项目日志文件夹
申请 Google OAuth 2.0 客户端 ID:https://console.cloud.google.com/apis/dashboard ,登录之后创建一个凭据即可。
打开浏览器访问 http://ip:3000
就可以访问了。
涉及到的 Dockerfile 文件以及我写好的 install.sh 文件都可以在开源项目中找到,给想知道细节的朋友作为参考。
如何管理 SSL 证书?
可以用我自己手搓的 nginx-acme(开源)自动申请和续签证书,同时还可以借助 Nginx 反向代理对请求进行转发,实现一台服务器共用 80/443 端口访问不同服务的效果。
nginx-acme GitHub:https://github.com/jonssonyan/nginx-acme
有了 Nginx 我们还可以对网站流量进行监控、限流、负载均衡、优化提高网站并发。
nginx-acme 是定制化的程序,可以实现一键安装,申请续签证书,转发一条龙。你也可以用一些开源的 Nginx 管理面板,有可视化的页面可以配置,使用门槛更低,我这里推荐:Nginx UI:https://nginxui.com/zh_CN/
总结
以上就是我部署 Next.js 全栈项目的全过程,希望大家早日赚到第一桶金。