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环境中的运行情况。

相关推荐
Q_Q51100828519 小时前
python+django/flask婚纱摄影拍照管理系统
spring boot·python·django·flask·node.js·php
长空任鸟飞_阿康20 小时前
Node.js 核心模块详解:fs 模块原理与应用
前端·人工智能·ai·node.js
CS Beginner20 小时前
【node】运行windows7下的高版本node.js
node.js
insight^tkk21 小时前
【Docker】记录一次使用docker部署dify网段冲突的问题
运维·人工智能·docker·ai·容器
江湖人称小鱼哥21 小时前
WSL + Docker 网络访问详解
网络·docker·容器·wsl
韩宏伟21 小时前
使用 Loki + Promtail + Grafana 实现 Docker 容器日志采集与可视化
docker·容器·grafana
水冗水孚1 天前
fastify-sse-v2搭配EventSource实现SSE中的AI流式回复打字机效果&Fetch+ReadableStream+Chunked分块也可实现
node.js
迷路爸爸1801 天前
源码编译安装最新 tmux 教程(含 Debian/Ubuntu/CentOS/Arch/macOS 等系统)
linux·ubuntu·macos·centos·debian·tmux·archlinux
小于小于09121 天前
npx 与 npm 区别
前端·npm·node.js
JanelSirry1 天前
微服务是不是一定要容器化(如 Docker)?我该怎么选
docker·微服务·架构