Linux使用Docker部署Node.js+Express+SQLite项目
在CentOS服务器中使用Docker部署Node.js + Express + SQLite项目具体步骤如下:
1. 环境准备
安装Docker
# 更新系统
sudo yum update -y# 安装Docker
sudo yum install -y docker# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker# 验证安装
docker --version
将用户添加到docker组(可选)
sudo usermod -aG docker $USER
# 重新登录生效
2. 项目结构准备
确保项目结构如下:
your-project/
├── Dockerfile
├── .dockerignore
├── package.json
├── app.js
├── database/
│ └── (SQLite数据库文件)
├── routes/
├── public/
└── ...
3. 创建Dockerfile
dockerfile
# 使用Node.js官方镜像
FROM node:18-alpine# 安装SQLite3依赖
RUN apk add --no-cache sqlite# 创建应用目录
WORKDIR /usr/src/app# 复制package文件
COPY package*.json ./# 安装依赖
RUN npm install# 复制应用源代码
COPY . .# 创建数据库目录并设置权限
RUN mkdir -p /usr/src/app/database && \chown -R node:node /usr/src/app# 切换用户(安全考虑)
USER node# 暴露端口
EXPOSE 3000# 启动命令
CMD ["npm", "start"]
4. 创建.dockerignore文件
.dockerignore
node_modules
npm-debug.log
.git
.gitignore
README.md
.env
.nyc_output
coverage
.DS_Store
5. 创建docker-compose.yml(可选)
version: '3.8'services:app:build: .ports:- "3000:3000"volumes:- ./database:/usr/src/app/database- ./logs:/usr/src/app/logsenvironment:- NODE_ENV=productionrestart: unless-stopped
6. 部署步骤
上传项目到服务器
可以使用FinalShell上传文件到相应目录下
或
# 使用scp上传项目
scp -r your-project/ user@your-server-ip:/path/to/destination/
在服务器上构建和运行
# 进入项目目录
cd /path/to/your-project# 构建Docker镜像
docker build -t node-express-app .# 运行容器 需根据需要更改名称、端口号、项目地址、项目名称
docker run -d --name node-app -p 3000:3000 -v $(pwd)/database:/usr/src/app/database node-express-app# 查看容器状态
docker ps# 查看日志
docker logs node
使用Docker Compose(推荐)
# 启动服务
docker-compose up -d# 查看日志
docker-compose logs -f# 停止服务
docker-compose down
7. 项目配置注意事项
确保Express应用正确配置
const express = require('express');
const sqlite3 = require('sqlite3').verbose();
const path = require('path');const app = express();
const PORT = process.env.PORT || 3000;// 数据库路径配置
const dbPath = process.env.NODE_ENV === 'production' ? '/usr/src/app/database/mydb.sqlite' : path.join(__dirname, 'database', 'mydb.sqlite');// 中间件
app.use(express.json());
app.use(express.static('public'));// 路由
app.get('/', (req, res) => {res.json({ message: 'Hello from Docker!' });
});app.listen(PORT, '0.0.0.0', () => {console.log(`Server running on port ${PORT}`);
});
package.json脚本配置
{"scripts": {"start": "node app.js","dev": "nodemon app.js"}
}
8. 数据库处理
初始化数据库脚本(可选)
// db-init.js
const sqlite3 = require('sqlite3').verbose();
const path = require('path');const dbPath = path.join(__dirname, 'database', 'mydb.sqlite');
const db = new sqlite3.Database(dbPath);db.serialize(() => {db.run(`CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,email TEXT UNIQUE,created_at DATETIME DEFAULT CURRENT_TIMESTAMP)`);
});db.close();
9. 管理和监控
常用Docker命令
# 查看运行中的容器
docker ps# 查看所有容器
docker ps -a# 查看容器日志
docker logs node-app# 进入容器
docker exec -it node-app sh# 停止容器
docker stop node-app# 删除容器
docker rm node-app# 查看镜像
docker images# 删除镜像
docker rmi node-express-app
10. 使用Nginx反向代理(可选)
# 安装Nginx
sudo yum install -y nginx# 配置反向代理
sudo nano /etc/nginx/conf.d/node-app.conf
Nginx配置示例:
server {listen 80;server_name your-domain.com;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;}
}
11. 安全考虑(可选)
使用环境变量
# 创建.env文件
echo "NODE_ENV=production" >> .env
echo "DB_PATH=/usr/src/app/database/mydb.sqlite" >> .env
在Docker Compose中使用环境变量
environment:- NODE_ENV=production- DB_PATH=/usr/src/app/database/mydb.sqlite
这样就完成了在CentOS服务器上使用Docker部署Node.js + Express + SQLite项目的全部流程。记得在部署前测试应用在本地Docker环境中的运行情况。