在 Linux 上实现 Node.js 应用的自动化部署可以通过多种方式来完成,以下是一些常见的方法和步骤:
持续集成和持续部署(CI/CD)工具可以帮助你自动化整个部署流程。常用的 CI/CD 工具有 Jenkins、GitLab CI、Travis CI、CircleCI 等。
创建 .gitlab-ci.yml 文件:
image: node:latest
stages:
- build
- deploy
variables:
NODE_ENV: production
before_script:
- npm install
- npm run build
build:
stage: build
script:
- echo "Building the project..."
- npm run build
deploy:
stage: deploy
script:
- echo "Deploying to server..."
- ssh -o StrictHostKeyChecking=no $DEPLOY_USER@$DEPLOY_SERVER "bash -s" < deploy_script.sh
only:
- master
创建 deploy_script.sh 脚本:
#!/bin/bash
cd /path/to/your/node/app
git pull origin master
npm install
pm2 restart your-app-name
配置 SSH 密钥: 确保你的 GitLab Runner 有权限通过 SSH 访问你的服务器。
PM2 是一个进程管理器,可以用来管理和守护 Node.js 应用。Supervisor 是另一个进程管理工具,也可以用来监控和管理 Node.js 应用。
安装 PM2:
npm install pm2 -g
创建 ecosystem.config.js 文件:
module.exports = {
apps: [{
name: 'your-app-name',
script: './app.js',
instances: 'max',
autorestart: true,
watch: false,
max_memory_restart: '1G',
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production'
}
}]
};
配置 Supervisor:
创建一个 Supervisor 配置文件 /etc/supervisor/conf.d/your-app.conf:
[program:your-app-name]
command=pm2 start ecosystem.config.js --env production
autostart=true
autorestart=true
stderr_logfile=/var/log/your-app-name.err.log
stdout_logfile=/var/log/your-app-name.out.log
更新 Supervisor 配置并启动应用:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start your-app-name
Docker 可以帮助你创建一个可移植的部署环境,简化部署流程。
创建 Dockerfile:
FROM node:latest
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
构建 Docker 镜像:
docker build -t your-app-name .
运行 Docker 容器:
docker run -p 3000:3000 your-app-name
使用 Docker Compose:
创建 docker-compose.yml 文件:
version: '3'
services:
app:
build: .
ports:
- "3000:3000"
environment:
NODE_ENV: production
运行 Docker Compose:
docker-compose up -d
Ansible 是一个自动化运维工具,可以用来自动化部署和管理服务器。
安装 Ansible:
sudo apt update
sudo apt install ansible
创建 Ansible Playbook:
---
- name: Deploy Node.js application
hosts: your_server
become: yes
tasks:
- name: Pull latest code
git:
repo: 'https://github.com/your-repo/your-app.git'
dest: '/path/to/your/node/app'
version: master
- name: Install dependencies
shell: npm install
args:
chdir: '/path/to/your/node/app'
- name: Build the project
shell: npm run build
args:
chdir: '/path/to/your/node/app'
- name: Restart PM2 process
shell: pm2 restart your-app-name
args:
chdir: '/path/to/your/node/app'
运行 Ansible Playbook:
ansible-playbook -i inventory_file playbook.yml
通过以上方法,你可以在 Linux 上实现 Node.js 应用的自动化部署。选择哪种方法取决于你的具体需求和项目规模。