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

Next.js + SQLite 项目 Docker 生产环境部署方案

以下是完整的 Next.js + SQLite 项目 Docker 生产环境部署方案:


1. 项目结构准备

your-project/
├── prisma/
│   ├── schema.prisma
│   └── migrations/
├── app/
├── lib/
├── Dockerfile
├── docker-compose.yml
├── .dockerignore
└── .env.production

2. 关键配置文件

Dockerfile
# 使用官方 Node 镜像
FROM node:18-alpine AS builder

# 安装依赖
WORKDIR /app
COPY package*.json ./
COPY prisma ./prisma/
RUN npm ci

# 生成 Prisma 客户端
RUN npx prisma generate

# 构建应用
COPY . .
RUN npm run build

# 生产镜像
FROM node:18-alpine AS runner
WORKDIR /app

# 仅安装生产依赖
COPY --from=builder /app/package*.json ./
RUN npm ci --only=production

# 复制必要文件
COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/prisma ./prisma
COPY --from=builder /app/package.json ./

# 设置环境变量
ENV NODE_ENV production
ENV DATABASE_URL file:/app/data/prod.db

# 持久化数据卷
VOLUME /app/data

EXPOSE 3000
CMD ["npm", "start"]
docker-compose.yml
version: '3.8'

services:
  app:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - db_data:/app/data
    environment:
      - NODE_ENV=production
      - DATABASE_URL=file:/app/data/prod.db
    restart: unless-stopped

volumes:
  db_data:
.dockerignore
node_modules
.next
.env*
Dockerfile
docker-compose.yml
.env.production
DATABASE_URL="file:./data/prod.db"
NEXTAUTH_SECRET="your-production-secret"
NEXTAUTH_URL="http://your-domain.com"

3. 部署步骤

1. 构建生产镜像
docker-compose build
2. 初始化数据库
# 创建数据目录
mkdir -p data

# 应用数据库迁移
docker-compose run --rm app npx prisma migrate deploy
3. 启动服务
docker-compose up -d
4. 查看日志
docker-compose logs -f

4. 关键配置说明

SQLite 生产环境优化
// prisma/schema.prisma
datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}

generator client {
  provider = "prisma-client-js"
  previewFeatures = ["fullTextSearch"]
}
数据库备份方案
# 备份数据库
docker exec -it your-container-id sqlite3 /app/data/prod.db ".backup /app/data/backup.db"

# 恢复数据库
docker exec -it your-container-id cp /app/data/backup.db /app/data/prod.db
健康检查配置
# docker-compose.yml 补充
healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost:3000/api/health"]
  interval: 30s
  timeout: 10s
  retries: 3

5. 常见问题解决方案

问题1:数据库权限错误
# 确保数据目录可写
docker-compose run --rm app chown -R node:node /app/data
问题2:迁移失败
# 重置开发环境
docker-compose down -v
docker-compose run --rm app npx prisma migrate reset --force
问题3:性能优化
# Dockerfile 补充
RUN apk add --no-cache libc6-compat
ENV NEXT_TELEMETRY_DISABLED 1

6. 监控与维护

日志收集
# 查看最近100行日志
docker-compose logs --tail=100
性能监控
docker stats
更新流程
docker-compose down
git pull origin main
docker-compose build --no-cache
docker-compose up -d

7. 安全建议

  1. 数据库加密

    // 使用 SQLCipher
    datasource db {
      provider = "sqlite"
      url      = "file:./data/prod.db?cipher=sqlcipher&key=your-secret-key"
    }
    
  2. 定期备份

    # 每日备份脚本
    0 3 * * * docker exec app sqlite3 /app/data/prod.db ".backup /app/data/backup-$(date +\%Y\%m\%d).db"
    
  3. 网络隔离

    # docker-compose.yml
    networks:
      internal:
        internal: true
    

通过以上配置,你将获得:
✅ 可复制的生产环境部署
✅ 持久化的 SQLite 数据库存储
✅ 自动化的迁移流程
✅ 完善的监控方案
✅ 企业级安全实践

***问题记录:

[next-auth][error][NO_SECRET]

# 每月轮换脚本
#!/bin/bash
NEW_SECRET=$(openssl rand -base64 32)
sed -i "s/NEXTAUTH_SECRET=.*/NEXTAUTH_SECRET=$NEW_SECRET/" .env.production
docker-compose down && docker-compose up -d
http://www.dtcms.com/a/118029.html

相关文章:

  • 从数据到成果:R 语言在气象水文全流程中的关键技术应用
  • linux查看当前文件夹下面文件大小
  • 队列➕宽搜(BFS)算法的应用
  • Invalid bound statement (not found)
  • OceanBase V4.3.5 上线全文索引功能,让数据检索更高效
  • 【UE5 C++课程系列笔记】34——结构体与Json的相互转化
  • VBA第三十九期 VBA自动把工作表转换成PPT
  • CExercise_06_1指针和数组_1查找数组的最大值和最小值
  • 数据库——Redis
  • 使用 `keytool` 生成 SSL 证书密钥库
  • 【DeepSeek工具教程】IntersectionObserver+API分页懒加载实现指南之React项目1
  • 【KMP】P7114 [NOIP2020] 字符串匹配|省选-
  • 蓝桥杯 封闭图形个数 刷题笔记
  • Set 集合
  • Allegro软件自带的封装库
  • 目录穿越 + pickle反序列化 -- xyctf Signin WP
  • 智能DNS解析:解决高防IP地区访问异常的实战指南
  • Spring Boot 自定义 Redis Starter 开发指南(附动态 TTL 实现)
  • 【MATLAB】将数据保存在mat文件中 save/load/matfile
  • 力扣HOT100之链表:142. 环形链表 II
  • Spring MVC 返回 JSON 视图的方式及对比(6种)
  • [Linux系统编程]多线程
  • 从ERTS会议学习Scade的发展
  • x-cmd install | Slumber - 告别繁琐,拥抱高效的终端 HTTP 客户端
  • 软件工程第三章习题
  • 【蓝桥杯】Python大学A组第十五届省赛
  • 大数据处理全链路优化:从并行文件处理到可视化加速的工程实践
  • 【Linux工具篇】保姆级配置vscode连接远端主机以及免密配置
  • react 18 可中断的理解以及应用
  • 蓝桥杯第十二届省赛B组C++真题解析