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/dataEXPOSE 3000
CMD ["npm", "start"]
docker-compose.yml
version: '3.8'services:app:build: .ports:- "3000:3000"volumes:- db_data:/app/dataenvironment:- NODE_ENV=production- DATABASE_URL=file:/app/data/prod.dbrestart: unless-stoppedvolumes: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: 30stimeout: 10sretries: 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.pswp.cn/pingmian/75896.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75896.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/75896.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MCU軟件開發使用指針有哪些坑?

目錄 1、空指針訪問 2、野指針(未初始化的指針) 3、指針越界 4、內存泄漏 5、懸空指針 6、指針類型不匹配 7、多任務環境中的指針訪問 8、對齊問題 在MCU軟件開發中,使用指針雖然可以提高程序的靈活性和性能,但也存在許多…

【SPSS/EXCEl】主成分分析構建__綜合評價指數

學習過程中實驗操作的記錄 1.數據準備和標準化: (1)區分正負相關性:判斷每個因子是正向指標還是負向指標,計算每個的最大值和最小值 (2) 標準化: Min-Max標準化 Min-Max標準化(最大最小值法): 將數據映射到指定的區間&#xff…

selenium安裝,以及瀏覽器驅動下載詳細步驟

1.下載谷歌瀏覽器Chromedriver 查看谷歌瀏覽器版本 2.去官網下載Chromedriver 114之前的版本鏈接chromedriver.storage.googleapis.com/index.html 選擇和瀏覽器版本較接近的點擊進行下載 125之后的版本鏈接Chrome for Testing availability (googlechromelabs.github.io)&a…

LabVIEW 油井動液面在線監測系統?

項目背景 傳統油井動液面測量依賴人工現場操作,面臨成本高、效率低、安全風險大等問題。尤其在偏遠地區或復雜工況下,測量準確性與時效性難以保障。本系統通過LabVIEW虛擬儀器技術實現硬件與軟件深度融合,為油田智能化轉型提供實時連續監測解…

C++標準庫 —— round 函數用法詳解

round 是 C/C 標準庫中的一個數學函數,用于對浮點數進行四舍五入取整。以下是它的詳細用法說明: 目錄 1. 基本語法 2. 功能描述 3. 使用示例 示例1:基本用法 示例2:保留小數位 4. 相關函數對比 5. 注意事項 6. 實際應用場景…

嵌入式C語言11(宏/程序的編譯過程)

宏 ? 基本概念 C語言中可以利用宏定義實現文本的快速替換,注意:宏定義是單純的文本替換,不檢查語法是否合法。 C語言標準中提供了很多的預處理指令,比如#include、#pragma…以#開頭的都屬于預處理指令。 預處理指令指的是在…

【湖南大學】2025我們該如何看待DeepSeek

大家好,我是櫻木。 DeepSeek 官方網站:https://www.deepseek.com/ 一、DeepSeek 到底是什么? TA 到底厲害在哪里? 故事從 ChatGPT 說起 去年我們看到 Open AI 發布ChatGPT 后,全球的注意力到了 AI 身上。 我們來拆…

【區塊鏈安全 | 第三十三篇】備忘單

文章目錄 備忘單操作符優先級備忘單ABI 編碼和解碼函數bytes 和 string 的成員Address 的成員區塊與交易屬性校驗和斷言數學和加密函數合約相關類型信息函數可見性說明符修飾符備忘單 操作符優先級備忘單 以下是操作符的優先級順序,按評估順序列出: 優先級描述操作符1后綴遞…

Python----計算機視覺處理(Opencv:道路檢測之車道線顯示)

完整版:Python----計算機視覺處理(Opencv:道路檢測完整版:透視變換,提取車道線,車道線擬合,車道線顯示) 一、透視變換 將透視變換之后的圖像再繼續透視變換為原圖像 可參考Python----計算機視…

26屆Java暑期實習面經,騰訊視頻一面

短鏈接的生成原理 如何解決短鏈接生成的哈希沖突問題 如何加快從短鏈接到原鏈接的重定向過程 TCP 和 UDP 協議 如何理解 TCP 是面向連接的 為什么 TCP 的握手是 3 次 IO 模式 是否有真正寫過一個底層的 Socket 通信 MySQL 的事務隔離級別 MVCC 機制 什么叫服務的并行 為什么能基…

Windows注冊鼠標鉤子,獲取用戶選中的文本

注冊鼠標鉤子 // 注冊鼠標鉤子 HHOOK hMouseHook; hMouseHook SetWindowsHookEx(WH_MOUSE_LL, MouseProc, GetModuleHandle(NULL), 0);// 取消鼠標鉤子 UnhookWindowsHookEx(hMouseHook); hMouseHook nullptr; 上述代碼中MouseProc方法用于處理系統的鼠標消息 處理鼠標消息…

flink cdc的source數據流如何配置事件時間,如何設置時間語義,分配時間戳并生成水位線

在 Flink CDC 中為 Source 數據流配置事件時間需要結合時間語義設置、時間戳分配和水位線生成三個核心步驟。以下是具體配置方法及注意事項: 1. 設置時間語義 Flink 默認使用處理時間(Processing Time),需顯式指定事件時間語義&a…

C++ 指針類型轉換全面解析與最佳實踐

文章目錄 C 指針類型轉換全面解析與最佳實踐1. 隱式轉換基類和派生類指針 2. 顯式轉換(1) static_cast(2) dynamic_cast(3) reinterpret_cast(4) const_cast 3. C 風格轉換4. 常見問題與注意事項5. 總結最佳實踐 C 指針類型轉換全面解析與最佳實踐 在 C 中,指針類型…

批量將 txt/html/json/xml/csv 等文本拆分成多個文件

我們的文本文件太大的時候,我們通常需要對文本文件進行拆分,比如按多少行一個文件將一個大的文本文件拆分成多個小的文本文件。這樣我們在打開或者傳輸的時候都比較方便。今天就給大家介紹一種同時對多個文本文件進行批量拆分的方法,可以快速…

ARM 匯編啟動代碼詳解:從中斷向量表到中斷處理

ARM 匯編啟動代碼詳解:從中斷向量表到中斷處理 引言 在嵌入式系統開發中,ARM 處理器(如 Cortex-A 系列)的啟動代碼是系統初始化和運行的基礎。啟動代碼通常包括中斷向量表的創建、初始化硬件狀態(如關閉緩存和 MMU&a…

4.7學習總結 可變參數+集合工具類Collections+不可變集合

可變參數: 示例: public class test {public static void main(String[] args) {int sumgetSum(1,2,3,4,5,6,7,8,9,10);System.out.println(sum);}public static int getSum(int...arr){int sum0;for(int i:arr){sumi;}return sum;} } 細節&#xff1a…

2023年藍橋杯第十四屆CC++大學B組真題及代碼

目錄 1A:日期統計 解析代碼_暴力_正解 2B:01串的熵 解析代碼_暴力_正解 3C:冶煉金屬 解析代碼_暴力_正解 4D:飛機降落 解析代碼_暴力dfs_正解 5E:接龍數列 解析代碼_dp_正解 6F:島嶼個數 解析代…

rom定制系列------小米10pro機型定制解鎖固件 原生安卓15批量線刷固件 操作解析與界面預覽

注意;固件用于自己機型忘記密碼或者手機號注銷等出現設備鎖 過保修期 售后無視的機型,勿用于非法途徑 目前有粉絲聯系,自己的機型由于手機號注銷導致手機更新系統后出現設備鎖界面。另外也沒有解鎖bl。目前無法使用手機。經過詢問是小米10pro機型。根據…

信息學奧賽一本通 1861:【10NOIP提高組】關押罪犯 | 洛谷 P1525 [NOIP 2010 提高組] 關押罪犯

【題目鏈接】 ybt 1861:【10NOIP提高組】關押罪犯 洛谷 P1525 [NOIP 2010 提高組] 關押罪犯 【題目考點】 1. 圖論:二分圖 2. 二分答案 3. 種類并查集 【解題思路】 解法1:種類并查集 一個囚犯是一個頂點,一個囚犯對可以看…

我的NISP二級之路-01

目錄 一.SSE-CMM系統安全工程-能力成熟度模型(Systems Security Engineering - Capability Maturity Model) 二.ISMS 即信息安全管理體系(Information Security Management System),是一種基于風險管理的、系統化的管理體系 三.Kerberos協議 1. 用戶登錄與 AS 請求 2…