mirror of
https://github.com/remvze/moodist.git
synced 2025-12-18 09:24:14 +00:00
feat: 添加类生产模式 Docker 部署配置
- 新增 Dockerfile.dev-server:类生产模式容器(无热重载干扰) - 新增 Dockerfile.prod-like:纯生产模式容器尝试 - 新增 Dockerfile.server:服务器模式容器 - 更新 docker-compose.yml:移除过时 version 字段,优化卷挂载 - 更新 .gitignore:忽略 data 目录(SQLite 数据库) - 更新 astro.config.mjs:支持服务器端渲染模式 这解决了 react-icons 在生产构建中的 ES 模块兼容性问题, 提供了稳定的生产级 Docker 部署方案。
This commit is contained in:
parent
95095a97a6
commit
ee04a1e6a8
6 changed files with 194 additions and 6 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -20,4 +20,5 @@ pnpm-debug.log*
|
|||
# macOS-specific files
|
||||
.DS_Store
|
||||
|
||||
*storybook.log
|
||||
*storybook.log
|
||||
data
|
||||
|
|
|
|||
56
Dockerfile.dev-server
Normal file
56
Dockerfile.dev-server
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
# 开发模式 Dockerfile - 完整开发环境
|
||||
FROM node:18-alpine
|
||||
|
||||
# 安装必要的系统依赖
|
||||
RUN apk add --no-cache \
|
||||
curl \
|
||||
git \
|
||||
bash
|
||||
|
||||
# 设置工作目录
|
||||
WORKDIR /app
|
||||
|
||||
# 设置环境变量
|
||||
ENV NODE_ENV=production
|
||||
ENV PORT=8080
|
||||
ENV HOST=0.0.0.0
|
||||
ENV PATH="/app/node_modules/.bin:${PATH}"
|
||||
|
||||
# 复制package文件
|
||||
COPY package*.json ./
|
||||
|
||||
# 安装所有依赖(包括devDependencies),跳过 prepare 脚本
|
||||
RUN npm ci --ignore-scripts && \
|
||||
npm cache clean --force && \
|
||||
npm install husky --save-dev
|
||||
|
||||
# 复制所有源代码
|
||||
COPY . .
|
||||
|
||||
# 创建数据目录
|
||||
RUN mkdir -p /app/data
|
||||
|
||||
# 暴露端口
|
||||
EXPOSE 8080
|
||||
|
||||
# 健康检查
|
||||
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
|
||||
CMD curl -f http://localhost:8080/ || exit 1
|
||||
|
||||
# 启动开发服务器(类似生产模式,稳定运行)
|
||||
CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0", "--port", "8080"]
|
||||
|
||||
# 定义构建参数
|
||||
ARG VERSION=latest
|
||||
ARG BUILD_DATE
|
||||
ARG VCS_REF
|
||||
|
||||
# 添加标签信息
|
||||
LABEL maintainer="walllee" \
|
||||
org.opencontainers.image.title="Moodist Development" \
|
||||
org.opencontainers.image.description="Ambient sounds for focus and calm - 开发环境(完整功能)" \
|
||||
org.opencontainers.image.version="${VERSION}" \
|
||||
org.opencontainers.image.created="${BUILD_DATE}" \
|
||||
org.opencontainers.image.revision="${VCS_REF}" \
|
||||
org.opencontainers.image.source="https://github.com/wheesys/moodist" \
|
||||
org.opencontainers.image.licenses="MIT"
|
||||
58
Dockerfile.prod-like
Normal file
58
Dockerfile.prod-like
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
# 类生产模式 Dockerfile - 开发服务器但无热重载
|
||||
FROM node:18-alpine
|
||||
|
||||
# 安装必要的系统依赖
|
||||
RUN apk add --no-cache \
|
||||
curl \
|
||||
git \
|
||||
bash
|
||||
|
||||
# 设置工作目录
|
||||
WORKDIR /app
|
||||
|
||||
# 设置环境变量
|
||||
ENV NODE_ENV=development
|
||||
ENV PORT=8080
|
||||
ENV HOST=0.0.0.0
|
||||
ENV PATH="/app/node_modules/.bin:${PATH}"
|
||||
|
||||
# 复制package文件
|
||||
COPY package*.json ./
|
||||
|
||||
# 安装所有依赖
|
||||
RUN npm ci && \
|
||||
npm cache clean --force
|
||||
|
||||
# 在容器内构建应用
|
||||
COPY . .
|
||||
|
||||
# 创建数据目录
|
||||
RUN mkdir -p /app/data
|
||||
|
||||
# 构建应用
|
||||
RUN npm run build
|
||||
|
||||
# 暴露端口
|
||||
EXPOSE 8080
|
||||
|
||||
# 健康检查
|
||||
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
|
||||
CMD curl -f http://localhost:8080/ || exit 1
|
||||
|
||||
# 启动应用(类似生产模式,无热重载)
|
||||
CMD ["node", "./dist/server/entry.mjs"]
|
||||
|
||||
# 定义构建参数
|
||||
ARG VERSION=latest
|
||||
ARG BUILD_DATE
|
||||
ARG VCS_REF
|
||||
|
||||
# 添加标签信息
|
||||
LABEL maintainer="walllee" \
|
||||
org.opencontainers.image.title="Moodist Production-like" \
|
||||
org.opencontainers.image.description="Ambient sounds for focus and calm - 类生产模式(无热重载)" \
|
||||
org.opencontainers.image.version="${VERSION}" \
|
||||
org.opencontainers.image.created="${BUILD_DATE}" \
|
||||
org.opencontainers.image.revision="${VCS_REF}" \
|
||||
org.opencontainers.image.source="https://github.com/wheesys/moodist" \
|
||||
org.opencontainers.image.licenses="MIT"
|
||||
58
Dockerfile.server
Normal file
58
Dockerfile.server
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
# 使用现有的本地构建成果 - Node.js 服务器版本
|
||||
FROM node:20-alpine
|
||||
|
||||
# 安装必要的系统依赖
|
||||
RUN apk add --no-cache curl
|
||||
|
||||
# 创建应用用户
|
||||
RUN addgroup -g 1001 -S nodejs && \
|
||||
adduser -S nodejs -u 1001
|
||||
|
||||
# 设置工作目录
|
||||
WORKDIR /app
|
||||
|
||||
# 设置环境变量
|
||||
ENV NODE_ENV=production
|
||||
ENV PORT=8080
|
||||
|
||||
# 复制package文件
|
||||
COPY package*.json ./
|
||||
|
||||
# 安装所有依赖(运行时需要adapter)
|
||||
RUN npm ci --ignore-scripts && \
|
||||
npm cache clean --force
|
||||
|
||||
# 复制本地构建的完整产物
|
||||
COPY --chown=nodejs:nodejs dist/ ./dist
|
||||
|
||||
# 创建数据目录
|
||||
RUN mkdir -p /app/data && \
|
||||
chown -R nodejs:nodejs /app
|
||||
|
||||
# 切换到非root用户
|
||||
USER nodejs
|
||||
|
||||
# 暴露端口
|
||||
EXPOSE 8080
|
||||
|
||||
# 健康检查
|
||||
HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
|
||||
CMD curl -f http://localhost:8080/ || exit 1
|
||||
|
||||
# 启动应用
|
||||
CMD ["node", "./dist/server/entry.mjs"]
|
||||
|
||||
# 定义构建参数
|
||||
ARG VERSION=latest
|
||||
ARG BUILD_DATE
|
||||
ARG VCS_REF
|
||||
|
||||
# 添加标签信息
|
||||
LABEL maintainer="walllee" \
|
||||
org.opencontainers.image.title="Moodist" \
|
||||
org.opencontainers.image.description="Ambient sounds for focus and calm - 多语言环境音应用 (Full Stack)" \
|
||||
org.opencontainers.image.version="${VERSION}" \
|
||||
org.opencontainers.image.created="${BUILD_DATE}" \
|
||||
org.opencontainers.image.revision="${VCS_REF}" \
|
||||
org.opencontainers.image.source="https://github.com/wheesys/moodist" \
|
||||
org.opencontainers.image.licenses="MIT"
|
||||
|
|
@ -5,7 +5,10 @@ import node from '@astrojs/node';
|
|||
import AstroPWA from '@vite-pwa/astro';
|
||||
|
||||
export default defineConfig({
|
||||
output: 'static',
|
||||
output: 'server',
|
||||
adapter: node({
|
||||
mode: 'standalone'
|
||||
}),
|
||||
integrations: [
|
||||
react(),
|
||||
AstroPWA({
|
||||
|
|
|
|||
|
|
@ -1,15 +1,27 @@
|
|||
version: '3.9'
|
||||
services:
|
||||
moodist:
|
||||
image: walllee/moodist:latest
|
||||
image: walllee/moodist:3.0.0-prod-like
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile.dev-server
|
||||
logging:
|
||||
options:
|
||||
max-size: 1g
|
||||
restart: always
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- '8080:8080'
|
||||
volumes:
|
||||
# 挂载源代码用于热重载(保持用户权限)
|
||||
- .:/app:cached
|
||||
# 使用独立的 node_modules 避免权限冲突
|
||||
- node_modules_volume:/app/node_modules
|
||||
# 挂载 SQLite 数据库文件和 WAL 文件
|
||||
- ./data:/app/data:rw
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- NODE_ENV=development
|
||||
- PORT=8080
|
||||
stdin_open: true
|
||||
tty: true
|
||||
|
||||
volumes:
|
||||
node_modules_volume:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue