奋斗
努力

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

云计算

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


✅ 核心原则

  • 动静分离:API(动态)与官网(静态)物理/逻辑分离,互不干扰
  • 单机多服务共存:通过反向X_X统一入口,避免端口暴露
  • 零运维负担:全自动化部署 + 健康监控,适合无专职运维团队
  • 安全第一:HTTPS 强制、最小权限、自动更新

🌐 推荐架构(Nginx + Docker + Let’s Encrypt)

公网 443/80 → Nginx(反向X_X & SSL 终结)
                      ├─ /api/*   → 转发到 http://localhost:3000(Node.js/Python API)
                      ├─ /        → 指向 /var/www/company-website/(静态官网)
                      └─ /admin   → 可选:保护后台路径(Basic Auth 或 IP 白名单)

✅ 优势:Nginx 高性能处理静态文件 + TLS 卸载,API 服务专注业务逻辑,互不影响。


🛠️ 分步实施指南(以 Ubuntu 22.04 为例)

1️⃣ 基础环境准备(5分钟)

# 更新系统 + 安装必要工具
sudo apt update && sudo apt upgrade -y
sudo apt install -y nginx curl git docker.io docker-compose

# 启用并启动 Docker
sudo systemctl enable docker && sudo systemctl start docker
sudo usermod -aG docker $USER  # 当前用户加入 docker 组(登出重进生效)

2️⃣ 静态官网部署(极简)

# 创建网站目录
sudo mkdir -p /var/www/company-website
sudo chown -R $USER:$USER /var/www/company-website

# 将你的 HTML/CSS/JS 文件上传至此(如用 git clone 或 sftp)
# 示例:git clone https://github.com/your-org/website.git /var/www/company-website

# 确保权限正确
sudo chmod -R 755 /var/www/company-website

3️⃣ API 服务容器化(推荐 Docker)

假设你的小程序后端是 Node.js(Express)或 Python(FastAPI/Flask):

✅ *示例:Node.js API(`/api/`)**

# Dockerfile (项目根目录)
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
# 构建并运行(后台守护)
docker build -t company-api .
docker run -d 
  --name api-service 
  -p 127.0.0.1:3000:3000 
  --restart=unless-stopped 
  -v /path/to/api/logs:/app/logs 
  company-api

💡 提示:用 docker-compose.yml 更易管理(见下方附录)

4️⃣ Nginx 配置(核心!统一入口)

sudo nano /etc/nginx/sites-available/company.conf
server {
    listen 80;
    server_name your-domain.com www.your-domain.com;
    return 301 https://$server_name$request_uri;  # HTTP → HTTPS 强制跳转
}

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

    # SSL(Let's Encrypt 自动配置,见下一步)
    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

    # 静态官网(根路径)
    location / {
        root /var/www/company-website;
        try_files $uri $uri/ /index.html;  # 支持 Vue/React 路由
        index index.html;
        expires 1h;
        add_header Cache-Control "public, immutable";
    }

    # API 接口(转发到本地容器)
    location /api/ {
        proxy_pass http://127.0.0.1:3000/;
        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_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    # 可选:屏蔽敏感路径
    location ~ ^/(.git|node_modules|package.json) {
        deny all;
    }
}

启用配置:

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

5️⃣ 免费 HTTPS(Certbot 自动续期)

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com -d www.your-domain.com
# ✅ 自动配置 SSL 并添加 cron 续期任务(无需手动干预)

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

  • 🔒 关闭 SSH 密码登录,改用密钥认证
  • 🚫 禁用 root 远程登录
  • 🛑 安装 fail2ban 防暴力破解
  • 📦 使用 ufw 仅开放 80/443/22(限制 SSH 源 IP)
  • 🧹 定期 apt update && apt upgrade -y(可设为自动)
sudo ufw allow OpenSSH  # 或指定 IP:sudo ufw allow from 203.0.113.42 to any port 22
sudo ufw allow 'Nginx Full'
sudo ufw enable

📈 性能与扩展建议(小企业友好)

场景 方案 成本
流量增长(日 UV > 1万) Nginx 开启 gzip_static on; + 静态资源加 CDN(Cloudflare 免费版) ¥0
API 压力大 在同一台机器上用 PM2 管理多个 Node 实例(CPU 绑定),或升级到 4核8G ¥100/月起(云服务器)
需要数据库 Docker 运行 PostgreSQL/MySQL(数据卷持久化),禁止网络访问,仅 API 容器连接 ✅ 安全又轻量
自动部署 GitHub Webhook + 简单 Bash 脚本(推送即更新官网/API) ✅ 10行代码搞定

📄 附录:一键式 docker-compose.yml(API + DB 示例)

# docker-compose.yml
version: '3.8'
services:
  api:
    build: ./api
    restart: unless-stopped
    ports:
      - "127.0.0.1:3000:3000"
    environment:
      - DATABASE_URL=postgresql://user:pass@db:5432/company
    depends_on: [db]

  db:
    image: postgres:15-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: company
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U user -d company"]
      interval: 30s
      timeout: 10s
      retries: 5

volumes:
  pgdata:

✅ 最终效果

  • 访问 https://your-domain.com → 企业官网(秒开,CDN 提速后更佳)
  • 小程序调用 https://your-domain.com/api/login → 后端 API(Nginx 透传,支持 CORS)
  • 所有流量 HTTPS 加密,证书自动续期
  • 故障隔离:官网挂了不影响 API,反之亦然
  • 运维成本 ≈ 每月 10 分钟检查日志 + docker logs api

需要我为你:

  • ✍️ 生成完整 docker-compose.yml(适配 Python/FastAPI 或 PHP/Laravel)?
  • 📥 提供官网部署脚本(自动拉取 GitHub 页面 + 重启 Nginx)?
  • 🛡️ 输出 fail2ban + UFW 安全配置模板?
  • 📊 推荐适合小程序的轻量 API 框架(如 Gin/Express/FastAPI)对比?

欢迎随时告诉我你的技术栈(Node/Python/PHP/Java?),我可定制化交付全部配置文件 👇

未经允许不得转载:云服务器 » 小型企业如何用一台Linux服务器兼顾小程序API服务和静态企业网站?