当前位置: 首页 > news >正文

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

http://www.dtcms.com/a/486420.html

相关文章:

  • 如何自己开网站济南做平台网站的
  • STM32H743-ARM例程21-DSP
  • Linux下编译CGAL
  • 十五、OpenCV中的图像浮雕技术
  • 网站建设的搜索栏怎么设置重庆市建设工程信息网官网施工许可证查询
  • Effectively Using Public Data in Privacy Preserving Machine Learning
  • 国产电脑操作系统与硬盘兼容性现状分析:挑战与前景评估
  • 从 DAG 到 Shuffle:掌握 Spark RDD 宽窄依赖的调优密码
  • 48 元四核 ARM 核心板!明远智睿 2351 进入嵌入式市场
  • 李宏毅机器学习笔记23
  • 为何打不开中国建设银行网站深圳品牌营销策划机构
  • 大连旅顺网站制作有哪些网站可以做笔译
  • 【遥感图像处理】遥感图像车辆检测与跟踪全流程实战:从数据到部署(含Python代码)
  • PPO论文阅读
  • C++学习:异常及其处理
  • 无人机组队编队与相对定位原理详解
  • 两学一做网站登录沈阳网站设计外包
  • 网投网站如何建设中国建筑协会官网证件查询
  • 负载均衡:运维高可用的核心技术
  • 计网3.8 以太网交换机
  • 太原中小企业网站制作天津住房和城乡建设部网站
  • 如何选择最佳服务器搭建游戏?探索物理与云服务器的优势
  • 10.5 傅里叶级数:用线性代数研究函数
  • 攻防世界-[简单] 简单的base编码
  • 深入理解C++输入缓冲区:掌握各种输入方法的本质
  • 【字典树 单调栈】P9218 「TAOI-1」Apollo|普及+
  • 设计一个个人网站手机app是用什么软件开发的
  • 盘锦做网站选哪家app网站开发后台处理
  • [AI学习:SPIN -win-安装SPIN-工具过程 SPIN win 电脑安装=accoda 环境-第一篇:布置环境]
  • Spring Boot 3零基础教程,整合Redis,笔记12