发布于2026-06-09 阅读(0)
扫一扫,手机访问
在Ubuntu上折腾Node.js自动化部署,说起来不算什么新鲜事,但要把流程跑得顺、不出幺蛾子,还是有几个关键点需要留意。下面就从最基础的准备开始,一步步把整个链路搭起来。

先把环境收拾利索。Ubuntu上安装Node.js和npm其实就两条命令的事:
sudo apt update
sudo apt install nodejs npm
如果项目用Git做版本控制,顺手把Git也装了:
sudo apt install git
基本的工具箱备齐了,下面的活儿才好干。
假设你的项目目录像下面这样,比较典型:
my-node-app/
├── app.js
├── package.json
├── .gitignore
└── ...
别小看这个结构,后面部署脚本都要基于这个路径来写。如果项目里有特殊目录(比如静态资源文件夹),记得在脚本里也对应处理好。
Node应用跑在后台,最怕的就是进程意外设掉没人管。PM2算是社区里比较成熟的选择,既能保持应用持续运行,又能方便地查看日志和资源占用。
安装PM2:
sudo npm install pm2 -g
启动应用时给个名字方便管理:
pm2 start app.js --name my-app
这步做完,你的应用就已经在后台跑着了,PM2会负责重启和守护。
手动部署的流程无非是:拉代码 → 装依赖 → 重启服务。把这些步骤写成Shell脚本,以后一键执行就行。
创建一个 deploy.sh:
#!/bin/bash
REPO_URL="https://github.com/your-username/my-node-app.git"
DEPLOY_DIR="/var/www/my-node-app"
APP_NAME="my-app"
cd $DEPLOY_DIR
git pull origin master
npm install
pm2 restart $APP_NAME
这个脚本写得很直白,但有几个细节值得注意:git pull前最好确认当前分支没错,npm install可能会因为网络问题卡住,可以考虑加个--production参数避免安装开发依赖。
现在大多数团队都在用GitHub,Webhook机制可以让仓库在收到push事件时自动通知你的服务器,省去手动登录执行脚本的麻烦。
在GitHub仓库里配置Webhook:
http://your-server-ip/deployapplication/json这一步只完成了GitHub端的配置,服务器端还得有个程序来接收这个HTTP请求并触发上面的deploy.sh。
你可以在服务器上装一个简单的HTTP服务来监听/deploy端点,收到请求后执行脚本。这里用一个轻量的Python+Flask方案做示例。
首先安装Nginx和uWSGI(Nginx用来做反向袋里,uWSGI负责跑Flask应用):
sudo apt install nginx uwsgi uwsgi-plugin-python3
然后配置Nginx,新建配置文件 /etc/nginx/sites-a vailable/my-node-app:
server {
listen 80;
server_name your-server-ip;
location /deploy {
include uwsgi_params;
uwsgi_pass unix:/tmp/uwsgi.sock;
}
location / {
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;
}
}
启用配置并重启Nginx:
sudo ln -s /etc/nginx/sites-a vailable/my-node-app /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx
接下来写一个Flask应用 deploy-server.py:
from flask import Flask, request
import subprocess
app = Flask(__name__)
@app.route('/deploy', methods=['POST'])
def deploy():
subprocess.run(['bash', '/path/to/deploy.sh'])
return 'Deployment successful!'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)
安装Flask后启动这个服务:
pip install Flask
python deploy-server.py
这样一来,GitHub推送代码时就会向服务器发POST请求,Flask接到后执行部署脚本,整个过程自动完成。
当然,这个方案在生产环境里还可以进一步加固——比如验证Webhook签名、加个简单的请求认证,或者直接用现成的工具如Webhook Relay。但作为入门示例,上面这套已经能让你跑通自动部署的闭环了。
现在你可以试着在本地修改代码,push到GitHub仓库,然后观察服务器上的响应。如果一切正常,你会在服务器上看到git pull的执行日志,PM2也会自动重启应用。
整个思路并不复杂:Git仓库触发 → 服务器接收 → 脚本执行。关键是要把每个环节的权限、路径、错误处理都想清楚。比如deploy.sh里的目录路径是否写死?服务器用户对部署目录有没有写权限?PM2重启时能否正确处理应用进程?这些细节往往决定着自动化部署到底能“自动化”到什么程度。
按照上述步骤,你完全可以在Ubuntu上搭建一个可靠、可复用的Node.js自动化部署流程。至于后续的扩展——比如多环境配置、回滚脚本、灰度发布——那就看具体项目需求了,但基础框架已经有了。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8