当前位置: 首页 > news >正文

我自建服务器部署了 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

  1. clone 项目
git clone https://github.com/jonssonyan/what-to-eat.git
cd what-to-eat
  1. 构建镜像
docker build -t what-to-eat:0.1.0 .
  1. 运行容器
  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 全栈项目的全过程,希望大家早日赚到第一桶金。

http://www.dtcms.com/a/276676.html

相关文章:

  • hot100 hot75 栈、队列题目思路
  • os.machine()详解
  • 开阳630HV100芯片的外设配置
  • 如何重置被入侵服务器的Root密码?并且提高服务器安全?
  • 《当技术遇见毁灭:rm -rf的哲学隐喻与现实警示》
  • 【八股消消乐】Kafka集群 full GC 解决方案
  • pytorch深度学习—RNN-循环神经网络
  • 服务端高效处理拖拽排序
  • [创业之路-502]:企业管理层 - 什么是企业经营,什么是企业管理?什么是业务?
  • [Token]Token merging for Vision Generation
  • 2025全网最详细的软件测试面试八股文
  • 面试150 翻转二叉树
  • FreeRTOS内核实现与应用之0——编码风格
  • 【离线数仓项目】——电商域DWS层开发实战
  • 【AI大模型】部署优化量化:INT8压缩模型
  • 深入理解设计模式:原型模式(Prototype Pattern)
  • 深入解析5G核心网容灾:SMF在PCF全故障下的PDU会话处理机制
  • 绘制气候预报图:利用地理空间技术解锁气候洞察
  • 深大计算机游戏开发 实验二
  • Linux操作系统之进程间通信:共享内存
  • 商编轮巡作为一种策略,旨在帮助商户规避支付平台(如VX. ZFB) 的风控措施。这种策略通过轮换使用不同的商户编号(商编)来减少单一商户因频繁交
  • c++-base
  • ActionPeice-ICML2025-谷歌deepmind-生成式推荐中上下文感知分词技术
  • 深入浅出:RS232、RS485、UART、Modbus与差分信号、共模信号的那些事儿
  • 力扣刷题(第八十五天)
  • dubbo源码学习3-dubbo反射调用服务源码分析
  • Unity开发中常用的洗牌算法
  • 数据结构——散列表
  • 数据结构栈的实现(C语言)
  • C语言--原码、反码、补码转换