mirror of
https://github.com/remvze/moodist.git
synced 2025-12-18 17:34:17 +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
|
# macOS-specific files
|
||||||
.DS_Store
|
.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';
|
import AstroPWA from '@vite-pwa/astro';
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
output: 'static',
|
output: 'server',
|
||||||
|
adapter: node({
|
||||||
|
mode: 'standalone'
|
||||||
|
}),
|
||||||
integrations: [
|
integrations: [
|
||||||
react(),
|
react(),
|
||||||
AstroPWA({
|
AstroPWA({
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,27 @@
|
||||||
version: '3.9'
|
|
||||||
services:
|
services:
|
||||||
moodist:
|
moodist:
|
||||||
image: walllee/moodist:latest
|
image: walllee/moodist:3.0.0-prod-like
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile.dev-server
|
||||||
logging:
|
logging:
|
||||||
options:
|
options:
|
||||||
max-size: 1g
|
max-size: 1g
|
||||||
restart: always
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- '8080:8080'
|
- '8080:8080'
|
||||||
volumes:
|
volumes:
|
||||||
|
# 挂载源代码用于热重载(保持用户权限)
|
||||||
|
- .:/app:cached
|
||||||
|
# 使用独立的 node_modules 避免权限冲突
|
||||||
|
- node_modules_volume:/app/node_modules
|
||||||
# 挂载 SQLite 数据库文件和 WAL 文件
|
# 挂载 SQLite 数据库文件和 WAL 文件
|
||||||
- ./data:/app/data:rw
|
- ./data:/app/data:rw
|
||||||
environment:
|
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