走啊走
加油

小型企业如何用一台Linux服务器兼顾小程序API服务和静态企业网站?

服务器价格表

小型企业用一台 Linux 服务器(如 2核4G、100GB SSD 的云服务器)同时承载小程序后端 API 服务静态企业官网,完全可行且非常常见。关键在于合理规划、安全隔离、资源复用与自动化运维。以下是经过生产验证的轻量级、高性价比方案:


✅ 一、整体架构设计(推荐)

公网 IP(如:1.2.3.4)
│
├── Nginx(反向X_X + 静态托管) ← 统一入口(80/443)
│   ├── / → 静态官网(/var/www/company-website/)
│   └── /api/ → 反代到本地 Node.js/Python API(http://127.0.0.1:3000/api/)
│
├── 小程序后端(例如:Node.js + Express / Python + FastAPI)
│   └── 监听 127.0.0.1:3000(仅内网访问,不暴露公网)
│
├── 静态网站(纯 HTML/CSS/JS + 图片/字体)
│   └── 构建后部署至 /var/www/company-website/(支持 gzip、缓存、HTTPS)
│
└── 其他(可选):
    • SQLite 或 PostgreSQL(轻量数据库,API 使用)
    • Certbot(自动 HTTPS 证书)
    • PM2 或 systemd(进程守护)
    • rsync + Git Hook(简易 CI/CD)

✅ 优势:Nginx 单点入口、零端口暴露、静态资源直出高效、API 安全隔离、HTTPS 统一管理。


✅ 二、详细实施步骤(以 Ubuntu 22.04 为例)

1️⃣ 基础环境准备

# 更新 & 安装必要工具
sudo apt update && sudo apt upgrade -y
sudo apt install nginx curl git python3-pip python3-venv certbot python3-certbot-nginx -y

# 创建项目目录结构
sudo mkdir -p /var/www/company-website
sudo mkdir -p /opt/api-service

2️⃣ 部署静态企业官网(超轻量)

  • 将官网源码(如 Vue/React 打包后 dist/,或纯 HTML 文件)上传至 /var/www/company-website
  • 确保权限正确:
    sudo chown -R $USER:www-data /var/www/company-website
    sudo chmod -R 755 /var/www/company-website

3️⃣ 配置 Nginx(核心!)

编辑 /etc/nginx/sites-available/company

server {
    listen 80;
    server_name your-domain.com www.your-domain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name your-domain.com www.your-domain.com;

    # SSL(Certbot 自动配置后会写入此处)
    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

    # 静态网站根目录
    root /var/www/company-website;
    index index.html;

    # 强制 HTTPS + 安全头
    add_header X-Frame-Options "DENY" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;

    # 静态资源缓存优化
    location / {
        try_files $uri $uri/ /index.html;
        expires 1h;
        add_header Cache-Control "public, immutable";
    }

    # 小程序 API 接口反向X_X(关键!)
    location /api/ {
        proxy_pass http://127.0.0.1:3000/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 超时调优(防小程序请求卡住)
        proxy_connect_timeout 5s;
        proxy_send_timeout 30s;
        proxy_read_timeout 30s;
    }

    # 可选:禁止访问敏感文件
    location ~ /.(git|htaccess|env|log)$ {
        deny all;
    }
}

启用站点:

sudo ln -sf /etc/nginx/sites-available/company /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

4️⃣ 部署小程序后端(以 Node.js 为例)

cd /opt/api-service
git clone https://github.com/your-org/miniapp-api.git .
npm install

# 使用 PM2 守护(避免终端关闭退出)
npm install -g pm2
pm2 start app.js --name "miniapp-api" --watch --env production

# 开机自启
pm2 startup
pm2 save

✅ 确保 app.js 中监听 127.0.0.1:3000(非 0.0.0.0:3000),保证仅本机可访问。

💡 Python/FastAPI 示例(main.py):

from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/health") def health(): return {"status": "ok"}
if __name__ == "__main__":
    uvicorn.run(app, host="127.0.0.1", port=3000)  # 注意是 127.0.0.1!

启动:gunicorn -w 2 -b 127.0.0.1:3000 main:app --daemon

5️⃣ 自动 HTTPS(Let’s Encrypt)

sudo certbot --nginx -d your-domain.com -d www.your-domain.com
# Certbot 会自动修改 Nginx 配置并添加自动续期定时任务(systemd timer)

6️⃣ 安全加固(必做!)

  • 🔐 关闭 SSH 密码登录,改用密钥:
    sudo nano /etc/ssh/sshd_config  # 设置 `PasswordAuthentication no`
    sudo systemctl restart ssh
  • 🛡️ 启用 UFW 防火墙:
    sudo ufw allow OpenSSH
    sudo ufw allow 'Nginx Full'  # 即 80+443
    sudo ufw enable
  • 🧹 定期更新:sudo apt update && sudo apt upgrade -y(建议配合 unattended-upgrades

✅ 三、运维与扩展建议(小企业友好)

场景 推荐方案 说明
网站更新 rsync + 本地脚本 rsync -avz ./dist/ user@server:/var/www/company-website/
API 更新 Git Pull + PM2 Reload git pull && pm2 reload miniapp-api
日志查看 pm2 logs miniapp-api / journalctl -u nginx 避免满屏乱码,加 --lines 50
备份 tar + rclone 到腾讯云 COS/阿里云 OSS 每日压缩 /var/www + /opt/api-service + DB
监控 htop + netstat -tuln + curl -I https://your-domain.com/api/health 小企业无需复杂 Prometheus
未来扩容 数据库迁出、静态资源上 CDN(如 Cloudflare) 当流量增大时,先 CDN 提速静态资源,再拆分 API 服务器

⚠️ 注意事项(避坑指南)

  • ❌ 不要让 API 直接监听 0.0.0.0:3000 并开放防火墙端口(严重安全隐患!)
  • ❌ 不要在 Nginx 中用 root 指向开发目录(如 /home/user/project/dist),应统一到 /var/www 标准路径
  • ✅ 小程序 requesturl 必须是 https://your-domain.com/api/xxx(不能带端口)
  • ✅ 后端需设置 CORS(若前端调试需跨域),但正式上线建议 Nginx 层统一处理或后端关闭(因已同域)
  • ✅ 微信小程序要求所有请求必须为 HTTPS,且域名需在「小程序后台 → 开发管理 → 服务器域名」中备案

✅ 四、成本参考(国内主流云厂商)

项目 配置 月成本(约)
云服务器 2核4G / 100GB SSD / 5M带宽 ¥90–150(新用户首年更低)
域名 .com(首年) ¥50
HTTPS 证书 Let’s Encrypt(免费) ¥0
CDN(可选) Cloudflare 免费版 / 腾讯云 CDN 基础版 ¥0–¥30
合计 ¥140–230/月(远低于外包建站+云 API 服务)

如需,我可以为你提供:

  • ✅ 完整的 nginx.conf 模板(含 HTTP/2、Brotli、安全头)
  • ✅ Node.js/Express 或 Python/FastAPI 的最小可运行 API 示例(含微信校验、JWT 登录)
  • ✅ 自动化部署脚本(一键安装 Nginx + Node + PM2 + Certbot)
  • ✅ 小程序端 wx.request 封装示例(自动加 token、错误统一处理)

欢迎告诉我你的技术栈(如:前端用 Vue 还是原生?后端倾向 Node 还是 Python?是否已有域名?),我可为你定制完整部署清单 👇