Browse Source

重构 Dockerfile,优化构建流程,更新 entrypoint.sh 脚本,修复依赖管理,调整中间件导入路径

re
dash 3 months ago
parent
commit
e32f029bc0
  1. 51
      Dockerfile
  2. BIN
      bun.lockb
  3. BIN
      database/development.sqlite3-shm
  4. 8
      entrypoint.sh
  5. 11
      package.json
  6. 2
      src/middlewares/install.js

51
Dockerfile

@ -1,46 +1,29 @@
# 多阶段构建 - 构建阶段
FROM oven/bun:alpine AS builder
WORKDIR /app
# 复制依赖文件
COPY package.json bun.lockb ./
# 安装所有依赖(包括开发依赖)
RUN bun install --frozen-lockfile
# 复制源代码
COPY . .
# 构建阶段(如果需要)
RUN bun run build || true
# 生产阶段 # 生产阶段
FROM oven/bun:alpine AS production FROM oven/bun:alpine AS production
# 创建非root用户
RUN addgroup -g 1001 -S nodejs && \
adduser -S bun -u 1001
WORKDIR /app WORKDIR /app
# 从构建阶段复制依赖 # 安装构建依赖
COPY --from=builder --chown=bun:nodejs /app/node_modules ./node_modules RUN apk add --no-cache python3 make g++ gcc dos2unix
COPY --from=builder --chown=bun:nodejs /app/package.json ./
COPY --from=builder --chown=bun:nodejs /app/bun.lockb ./
COPY --from=builder --chown=bun:nodejs /app/knexfile.mjs ./
# 复制应用代码 # 复制应用文件
COPY --from=builder --chown=bun:nodejs /app/src ./src COPY --chown=bun:bun ./package.json ./package.json
COPY --from=builder --chown=bun:nodejs /app/public ./public COPY --chown=bun:bun ./bun.lockb ./bun.lockb
COPY --chown=bun:bun ./knexfile.mjs ./knexfile.mjs
COPY --chown=bun:bun ./jsconfig.json ./jsconfig.json
COPY --chown=bun:bun ./src ./src
COPY --chown=bun:bun ./public ./public
COPY --chown=bun:bun ./entrypoint.sh ./entrypoint.sh
# 复制并设置入口脚本权限 # 安装生产依赖和修复 entrypoint.sh
COPY --chown=bun:nodejs entrypoint.sh ./entrypoint.sh RUN bun install --frozen-lockfile --production --registry https://registry.npmjs.org && \
RUN chmod +x ./entrypoint.sh # 修复 entrypoint.sh 的换行符
dos2unix ./entrypoint.sh && \
chmod +x ./entrypoint.sh
# 创建必要的目录并设置权限 # 创建必要的目录并设置权限
RUN mkdir -p /app/database /app/logs && \ RUN mkdir -p ./database ./logs && \
chown -R bun:nodejs /app/database /app/logs chown -R bun:bun ./database ./logs
# 设置环境变量 # 设置环境变量
ENV NODE_ENV=production ENV NODE_ENV=production

BIN
bun.lockb

Binary file not shown.

BIN
database/development.sqlite3-shm

Binary file not shown.

8
entrypoint.sh

@ -7,7 +7,7 @@ ENV=${NODE_ENV:-production}
# 检查 bun 是否存在 # 检查 bun 是否存在
if command -v bun >/dev/null 2>&1; then if command -v bun >/dev/null 2>&1; then
RUNNER="bun run" RUNNER="bunx"
START="exec bun src/main.js" START="exec bun src/main.js"
else else
RUNNER="npx" RUNNER="npx"
@ -17,11 +17,11 @@ fi
# 如果数据库文件不存在,先 migrate 再 seed # 如果数据库文件不存在,先 migrate 再 seed
if [ ! -f "$DB_FILE" ]; then if [ ! -f "$DB_FILE" ]; then
echo "Database not found, running migration and seed..." echo "Database not found, running migration and seed..."
$RUNNER npx knex migrate:latest --env $ENV $RUNNER knex migrate:latest --env $ENV
$RUNNER npx knex seed:run --env $ENV $RUNNER knex seed:run --env $ENV
else else
echo "Database exists, running migration only..." echo "Database exists, running migration only..."
$RUNNER npx knex migrate:latest $RUNNER knex migrate:latest
fi fi
# 启动主服务 # 启动主服务

11
package.json

@ -1,6 +1,7 @@
{ {
"name": "koa3-demo", "name": "koa3-demo",
"module": "index.js", "module": "index.js",
"version": "0.0.1-alpha",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "bun --hot src/main.js", "dev": "bun --hot src/main.js",
@ -16,14 +17,16 @@
"devDependencies": { "devDependencies": {
"@types/bun": "latest", "@types/bun": "latest",
"@types/node": "^24.0.1", "@types/node": "^24.0.1",
"cross-env": "^10.0.0",
"module-alias": "^2.2.3",
"node-gyp": "^11.4.2", "node-gyp": "^11.4.2",
"vite": "^7.0.0" "vite": "^7.0.0",
"vite-plugin-static-copy": "^3.1.0"
}, },
"dependencies": { "dependencies": {
"@koa/etag": "^5.0.1", "@koa/etag": "^5.0.1",
"bcryptjs": "^3.0.2", "bcryptjs": "^3.0.2",
"consolidate": "^1.0.4", "consolidate": "^1.0.4",
"cross-env": "^10.0.0",
"get-paths": "^0.0.7", "get-paths": "^0.0.7",
"jsonwebtoken": "^9.0.0", "jsonwebtoken": "^9.0.0",
"knex": "^3.1.0", "knex": "^3.1.0",
@ -34,13 +37,11 @@
"lodash": "^4.17.21", "lodash": "^4.17.21",
"log4js": "^6.9.1", "log4js": "^6.9.1",
"minimatch": "^9.0.0", "minimatch": "^9.0.0",
"module-alias": "^2.2.3",
"node-cron": "^4.1.0", "node-cron": "^4.1.0",
"path-to-regexp": "^8.2.0", "path-to-regexp": "^8.2.0",
"pug": "^3.0.3", "pug": "^3.0.3",
"sqlite3": "^5.1.7", "sqlite3": "^5.1.7",
"svg-captcha": "^1.4.0", "svg-captcha": "^1.4.0"
"vite-plugin-static-copy": "^3.1.0"
}, },
"_moduleAliases": { "_moduleAliases": {
"@": "./src", "@": "./src",

2
src/middlewares/install.js

@ -3,7 +3,7 @@ import Send from "./Send"
import { resolve } from "path" import { resolve } from "path"
import { fileURLToPath } from "url" import { fileURLToPath } from "url"
import path from "path" import path from "path"
import ErrorHandler from "./ErrorHandler" import ErrorHandler from "./errorHandler"
import { Auth } from "./Auth" import { Auth } from "./Auth"
import bodyParser from "koa-bodyparser" import bodyParser from "koa-bodyparser"
import Views from "./Views" import Views from "./Views"

Loading…
Cancel
Save