Linux使用Docker部署Node.js+Express+SQLite项目

在CentOS服务器中使用Docker部署Node.js + Express + SQLite项目具体步骤如下:

1. 环境准备

安装Docker

bash 复制代码
# 更新系统
sudo yum update -y

# 安装Docker
sudo yum install -y docker

# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker

# 验证安装
docker --version

将用户添加到docker组(可选)

bash 复制代码
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(可选)

yaml 复制代码
version: '3.8'

services:
  app:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - ./database:/usr/src/app/database
      - ./logs:/usr/src/app/logs
    environment:
      - NODE_ENV=production
    restart: unless-stopped

6. 部署步骤

上传项目到服务器

可以使用FinalShell上传文件到相应目录下

复制代码
# 使用scp上传项目
scp -r your-project/ user@your-server-ip:/path/to/destination/

在服务器上构建和运行

bash 复制代码
# 进入项目目录
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(推荐)

bash 复制代码
# 启动服务
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose down

7. 项目配置注意事项

确保Express应用正确配置

javascript 复制代码
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脚本配置

json 复制代码
{
  "scripts": {
    "start": "node app.js",
    "dev": "nodemon app.js"
  }
}

8. 数据库处理

初始化数据库脚本(可选)

javascript 复制代码
// 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命令

bash 复制代码
# 查看运行中的容器
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反向代理(可选)

bash 复制代码
# 安装Nginx
sudo yum install -y nginx

# 配置反向代理
sudo nano /etc/nginx/conf.d/node-app.conf

Nginx配置示例:

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. 安全考虑(可选)

使用环境变量

bash 复制代码
# 创建.env文件
echo "NODE_ENV=production" >> .env
echo "DB_PATH=/usr/src/app/database/mydb.sqlite" >> .env

在Docker Compose中使用环境变量

yaml 复制代码
environment:
  - NODE_ENV=production
  - DB_PATH=/usr/src/app/database/mydb.sqlite

这样就完成了在CentOS服务器上使用Docker部署Node.js + Express + SQLite项目的全部流程。记得在部署前测试应用在本地Docker环境中的运行情况。

相关推荐
蝎子莱莱爱打怪11 小时前
GitLab CI/CD + Docker Registry + K8s 部署完整实战指南
后端·docker·kubernetes
codingWhat12 小时前
整理「祖传」代码,就是在开发脚手架?
前端·javascript·node.js
ServBay12 小时前
Node.js、Bun 与 Deno,2026 年后端运行时选择指南
node.js·deno·bun
码路飞19 小时前
Node.js 中间层我维护了两年,这周终于摊牌了——成本账单算完我人傻了
node.js
xy1230620 小时前
OpenStack Train 部署实战(三)控制节点--keystone服务
centos·openstack
小p2 天前
docker学习7:docker 容器的通信方式
docker
小p2 天前
docker学习5:提升Dockerfile水平的5个技巧
docker
小p2 天前
docker学习3:docker是怎么实现的?
docker
None3212 天前
【NestJs】使用Winston+ELK分布式链路追踪日志采集
javascript·node.js
Dilettante2582 天前
这一招让 Node 后端服务启动速度提升 75%!
typescript·node.js