首页 默认分类 正文
  • 本文约3440字,阅读需17分钟
  • 115
  • 0

我是如何用Vercel零成本部署小程序后台的

最近在做一个微信小程序项目,后台需要部署到云端,但是后端业务相对简单,购买服务器的话超出预算了。经过一番调研,发现 Vercel 是个不错的选择:免费、简单、速度快。今天就来分享一下具体的部署过程。

项目后台演示

为什么选择 Vercel

传统的服务器部署需要自己管理服务器、配置环境、处理运维问题。而 Vercel 这类 Serverless 平台的出现,让部署和API部署变得极其简单。

对于小程序后台来说,Vercel 有几个明显的优势:

  1. 零配置部署:推送代码就能自动部署
  2. 全球 CDN:访问速度快
  3. 免费额度:个人项目完全够用
  4. 自动 HTTPS:省去证书配置的麻烦

项目结构

我们的小程序后台是一个标准的 Node.js + Express 应用,主要文件结构如下:

backend/
├── app.js              # 主应用文件
├── package.json        # 依赖配置
├── vercel.json         # Vercel 配置文件
├── deploy.sh           # 部署脚本
├── .env                # 环境变量
└── admin/              # 管理后台静态文件

核心配置文件

1. vercel.json

这是 Vercel 的配置文件,告诉 Vercel 如何构建和运行我们的应用:

{
  "version": 2,
  "builds": [
    {
      "src": "app.js",
      "use": "@vercel/node"
    }
  ],
  "routes": [
    {
      "src": "/(.*)",
      "dest": "/app.js"
    }
  ],
  "env": {
    "NODE_ENV": "production",
    "VERCEL": "1"
  }
}

这个配置很简单:

  • builds 指定构建规则,使用 @vercel/node 来处理 Node.js 应用
  • routes 将所有请求都路由到 app.js
  • env 设置环境变量

2. package.json

关键是要有正确的启动脚本:

{
  "name": "backend",
  "version": "1.0.0",
  "main": "app.js",
  "scripts": {
    "start": "node app.js",
    "dev": "nodemon app.js",
    "vercel-build": "echo \"Vercel build completed\""
  },
  "dependencies": {
    "express": "^5.1.0",
    "cors": "^2.8.5",
    "mysql2": "^3.14.3",
    "jsonwebtoken": "^9.0.2",
    "bcryptjs": "^3.0.2",
    "dotenv": "^17.2.1",
    "axios": "^1.11.0",
    "multer": "^2.0.2",
    "sharp": "^0.34.3",
    "sqlite3": "^5.1.7"
  }
}

3. 应用入口文件

app.js 是我们的主应用文件,需要注意几个关键点:

const express = require('express');
const cors = require('cors');
const mysql = require('mysql2/promise');
require('dotenv').config();

const app = express();
const PORT = process.env.PORT || 3000;

// CORS 配置 - 重要!
app.use(cors({
  origin: true,
  credentials: true,
  methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
  allowedHeaders: ['Content-Type', 'Authorization', 'X-Requested-With']
}));

// 静态文件服务
app.use('/admin', express.static(path.join(__dirname, './admin')));

// 数据库配置
const dbConfig = {
  host: process.env.DB_HOST || 'localhost',
  port: process.env.DB_PORT || 3306,
  user: process.env.DB_USER || 'root',
  password: process.env.DB_PASSWORD || '',
  database: process.env.DB_NAME || 'zhaoyimei_db'
};

// 重要:Vercel 环境下不启动监听
if (process.env.NODE_ENV !== 'production' || !process.env.VERCEL) {
  const server = app.listen(PORT, '0.0.0.0', () => {
    console.log(`服务器运行在端口 ${PORT}`);
  });
}

// 导出 app 供 Vercel 使用
module.exports = app;

最后两行很关键。在 Vercel 环境下,我们不需要启动 HTTP 服务器,只需要导出 Express 应用实例即可。

部署脚本

为了简化部署流程,我写了一个自动化脚本:

#!/bin/bash

echo "🚀 开始部署到 Vercel..."

# 检查是否安装了 Vercel CLI
if ! command -v vercel &> /dev/null; then
    echo "❌ Vercel CLI 未安装,正在安装..."
    npm install -g vercel
fi

# 检查是否已登录
echo "🔐 检查 Vercel 登录状态..."
if ! vercel whoami &> /dev/null; then
    echo "📝 请先登录 Vercel:"
    vercel login
fi

# 部署到生产环境
echo "📦 部署到生产环境..."
vercel --prod

echo "✅ 部署完成!"
echo "📋 请记住在 Vercel Dashboard 中配置环境变量"

环境变量配置

部署完成后,需要在 Vercel Dashboard 中配置环境变量。我们的项目需要这些变量:

  • DB_HOST - 数据库主机
  • DB_PORT - 数据库端口
  • DB_USER - 数据库用户名
  • DB_PASSWORD - 数据库密码
  • DB_NAME - 数据库名称
  • JWT_SECRET - JWT 密钥
  • WECHAT_APPID - 微信小程序 AppID
  • WECHAT_SECRET - 微信小程序密钥

在 Vercel Dashboard 的项目设置页面,找到 "Environment Variables" 选项,逐一添加这些变量。

数据库选择

我用的sqlpub的开发版数据库,数据库版本是mysql8.4.0,一年9元,1G容量。也有免费版的500M容量,如果测试用可以免费申请使用这个版本的

网址:https://sqlpub.com/

部署步骤

整个部署过程非常简单:
直接运行我们的部署脚本:

chmod +x deploy.sh && ./deploy.sh

常见问题

1. CORS 问题

小程序访问后台 API 时,经常遇到跨域问题。解决方案是在 Express 中正确配置 CORS:

app.use(cors({
  origin: true, // 允许所有来源
  credentials: true,
  methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS']
}));

2. 静态文件服务

如果你的后台包含管理界面等静态文件,需要正确配置静态文件服务:

app.use('/admin', express.static(path.join(__dirname, './admin')));

3. 数据库连接

建议使用连接池来管理数据库连接,避免连接数过多的问题:

const pool = mysql.createPool(dbConfig);

访问优化

自定义域名

部署成功后vercel会免费分配一个域名,但是国内访问效果不佳,需要自定义域名

服务器位置选择

系统默认部署到其他洲的服务器,这就让我们的访问速度比较慢,需要手动更改地区为亚洲的HongKong

总结

Vercel 让小程序后台的部署变得非常简单。整个过程只需要几个配置文件和一条命令,就能把本地开发的应用部署到全球 CDN 上。

相比传统的服务器部署,Vercel 的优势很明显:

  • 不需要管理服务器
  • 自动扩容
  • 全球加速
  • 免费 HTTPS
  • 与 Git 集成,推送即部署

对于个人开发者和小团队来说,这种 Serverless 的部署方式确实是个不错的选择。

当然,Vercel 也有一些限制,比如函数执行时间限制、冷启动问题等。但对于大多数小程序后台来说,这些限制都不是问题。

我之前还写过一篇关于把小程序后台部署的cloudflare workers的教程,大家感兴趣也可以参考一下。

评论
友情链接