debian

Debian JS怎样部署到生产环境

小樊
39
2025-11-01 04:22:54
栏目: 编程语言

1. 更新系统包
首先确保Debian系统包是最新的,避免因旧版本依赖导致安装问题:

sudo apt update && sudo apt upgrade -y

2. 安装Node.js与npm
生产环境建议使用NodeSource仓库安装特定版本的Node.js(如18.x,需根据项目需求选择),以获取长期支持(LTS)版本和更好的性能:

# 添加NodeSource仓库(以18.x为例)
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
# 安装Node.js和npm
sudo apt install -y nodejs
# 验证安装
node -v  # 应输出v18.x.x
npm -v   # 应输出对应版本

3. 部署应用代码
将本地JS应用代码上传至服务器(如通过scprsync或Git克隆):

# 示例:通过scp上传本地项目到服务器~/my-js-app目录
scp -r ./local-js-app/* user@your_server_ip:~/my-js-app
cd ~/my-js-app

4. 安装项目依赖
进入项目目录,通过npm install安装package.json中定义的所有生产依赖(排除devDependencies):

npm install --production

5. 使用PM2管理进程
PM2是Node.js进程管理工具,可实现后台运行、自动重启、日志管理等功能,是生产环境的必备工具:

# 全局安装PM2
sudo npm install -g pm2
# 启动应用(假设入口文件为app.js)
pm2 start app.js --name "my-js-app"
# 保存当前进程列表,确保服务器重启后自动恢复
pm2 save
# 设置PM2开机自启动
pm2 startup

6. 配置Nginx反向代理
Nginx可作为反向代理,提供HTTPS支持、负载均衡、静态文件缓存等功能,提升应用性能和安全性:

# 安装Nginx
sudo apt install -y nginx
# 配置反向代理(编辑默认站点配置)
sudo nano /etc/nginx/sites-available/default

在配置文件中替换为以下内容(根据项目调整server_nameproxy_pass):

server {
    listen 80;
    server_name your_domain_or_ip;  # 替换为域名或公网IP

    location / {
        proxy_pass http://localhost:3000;  # 默认Node.js端口,需与项目一致
        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;
    }
}

保存后测试配置并重启Nginx:

sudo nginx -t  # 测试配置语法
sudo systemctl restart nginx

7. 配置防火墙
允许HTTP(80)和HTTPS(443)流量通过防火墙(若使用ufw):

sudo ufw allow 'Nginx Full'
sudo ufw enable  # 启用防火墙(若未启用)

8. 可选:配置HTTPS(推荐)
使用Let’s Encrypt免费获取SSL证书,加密数据传输:

# 安装Certbot和Nginx插件
sudo apt install -y certbot python3-certbot-nginx
# 获取证书并自动配置Nginx
sudo certbot --nginx -d your_domain.com -d www.your_domain.com  # 替换为域名
# 按提示完成验证,证书会自动安装到/etc/letsencrypt/live/your_domain.com/

证书有效期为90天,可通过以下命令自动续期:

sudo certbot renew --dry-run  # 测试续期
sudo certbot renew  # 实际续期

9. 可选:Docker容器化部署(高级)
若项目需要环境一致性,可使用Docker容器化部署:

# 创建Dockerfile(在项目根目录)
cat > Dockerfile <<EOF
FROM node:18-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --production
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
EOF
# 构建镜像
docker build -t my-js-app .
# 运行容器(映射端口、设置重启策略)
docker run -d --name my-js-app -p 3000:3000 --restart always my-js-app

注意事项

0
看了该问题的人还看了