温馨提示×

Linux上JS如何部署应用

小樊
42
2025-11-16 18:54:10
栏目: 编程语言

Linux上部署 JavaScript 应用的实用流程

一 准备环境与上传代码

  • 选择 Ubuntu 20.04+ 等主流发行版,先做系统更新:sudo apt update && sudo apt upgrade -y
  • 安装运行时与工具:
    • 方式一(稳定仓库):sudo apt install -y nodejs npm
    • 方式二(版本灵活):使用 nvm 安装 Node.js LTS,例如:
      curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
      重新加载后:nvm install 18 && nvm use 18
  • 代码上传:使用 SCP/SFTPGit 将项目拉取到服务器(如 git clone <repo>)。

二 部署后端 Node.js 服务

  • 安装依赖:进入项目目录,生产环境执行 npm install --production;如有构建步骤(如 Webpack/Babel),先运行 npm run build
  • 配置环境变量:准备 .env 文件(数据库连接、密钥、端口等),并在代码中用 dotenv 加载;也可通过 PM2 传入环境:pm2 start app.js --env production --env-file .env.production
  • 启动与守护:使用 PM2 管理进程,pm2 start app.js --name "api"(或 pm2 start npm --name "api" -- start);设置开机自启:pm2 startup,按提示执行生成命令;常用运维:pm2 list/restart/stop/logs/monit
  • 运行端口:确保应用监听 0.0.0.0(而非仅 127.0.0.1),端口如 3000

三 部署前端静态资源与 Nginx 反向代理

  • 构建前端:在本地执行 npm run build,生成 build/dist/ 目录。
  • 上传静态文件:将构建产物放到服务器目录(如 /var/www/myapp),设置权限:sudo chown -R www-data:www-data /var/www/myapp && sudo chmod -R 755 /var/www/myapp
  • 配置 Nginx:编辑站点配置(如 /etc/nginx/sites-available/default),同时支持静态站点与 API 反向代理:
    • 静态站点:root /var/www/myapp; index index.html; try_files $uri $uri/ =404;
    • API 代理:location /api { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; }
  • 生效与重启:sudo nginx -t && sudo systemctl reload nginx(或 restart)。

四 网络与安全配置

  • 防火墙放行:开放 22/80/443 端口(UFW 示例:sudo ufw allow 22,80,443/tcp;或 sudo ufw allow 'Nginx Full')。
  • HTTPS 与证书:使用 Certbot 为域名申请 Let’s Encrypt 证书并自动配置 Nginx:sudo apt install certbot python3-certbot-nginx,然后 sudo certbot --nginx -d yourdomain.com
  • 资源与内核参数:提升文件描述符限制(示例:sudo ulimit -n 65536),生产环境设置 NODE_ENV=production

五 全栈与容器化简要方案

  • 全栈分离部署:前端静态文件由 Nginx 托管;后端 Node.jsPM2 守护;Nginx 将 /api 反向代理到后端端口(如 3000);数据库可用托管服务(如 MongoDB Atlas),注意安全组与连接字符串配置。
  • Docker 化(可选):
    • Dockerfile 示例:
      FROM node:18
      WORKDIR /usr/src/app
      COPY package*.json ./
      RUN npm ci --only=production
      COPY . .
      EXPOSE 3000
      CMD ["node","app.js"]
      
    • 构建与运行:docker build -t my-node-app .docker run -p 3000:3000 my-node-app

0