mirror of
https://github.com/remvze/moodist.git
synced 2025-12-18 09:24:14 +00:00
feat: add comprehensive Docker deployment support and Chinese documentation
- Add Docker deployment configuration with multiple Dockerfile variants - Implement simplified Docker build scripts for better compatibility - Update docker-compose configurations to use walllee/moodist image - Create comprehensive Docker deployment documentation - Add Chinese README (README.zh-CN.md) with full translation - Implement language selection links in both README files - Add quick start guide and Docker deployment instructions in Chinese - Include Docker build and push commands in package.json scripts New files added: - Docker configurations (Dockerfile.* variants) - Docker Compose files (dev, optimized versions) - Build scripts (scripts/*.sh) - Docker deployment documentation (DOCKER_DEPLOY.md) - Chinese README with complete translation
This commit is contained in:
parent
65958f8482
commit
a8718df8d2
15 changed files with 1390 additions and 2 deletions
77
.dockerignore
Normal file
77
.dockerignore
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
# Dependencies
|
||||
node_modules
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# Git
|
||||
.git
|
||||
.gitignore
|
||||
.github
|
||||
|
||||
# Documentation
|
||||
README.md
|
||||
CHANGELOG.md
|
||||
LICENSE
|
||||
*.md
|
||||
|
||||
# Environment variables
|
||||
.env
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
# Testing
|
||||
coverage
|
||||
.nyc_output
|
||||
|
||||
# IDE
|
||||
.vscode
|
||||
.idea
|
||||
*.swp
|
||||
*.swo
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
|
||||
# Build outputs (exclude .build-cache for multi-stage builds)
|
||||
# Note: dist/ is included for simple build approach
|
||||
.build-cache
|
||||
|
||||
# Docker files
|
||||
Dockerfile*
|
||||
docker-compose*.yml
|
||||
.dockerignore
|
||||
|
||||
# Temporary files
|
||||
.tmp
|
||||
.temp
|
||||
|
||||
# Cache
|
||||
.cache
|
||||
.parcel-cache
|
||||
|
||||
# Storybook build
|
||||
storybook-static
|
||||
|
||||
# Spec workflow files
|
||||
.spec-workflow
|
||||
.serenatoken
|
||||
|
||||
# Astro cache
|
||||
.astro
|
||||
305
DOCKER_DEPLOY.md
Normal file
305
DOCKER_DEPLOY.md
Normal file
|
|
@ -0,0 +1,305 @@
|
|||
# Moodist Docker 部署指南
|
||||
|
||||
## 🐳 Docker 镜像构建和部署
|
||||
|
||||
### 📋 镜像信息
|
||||
|
||||
- **镜像名称**: `walllee/moodist`
|
||||
- **Docker Hub**: https://hub.docker.com/r/walllee/moodist
|
||||
- **支持平台**: `linux/amd64`, `linux/arm64`
|
||||
- **基础镜像**: `nginx:alpine`
|
||||
- **镜像大小**: ~30MB
|
||||
|
||||
### 🚀 快速开始
|
||||
|
||||
#### 1. 直接拉取并运行
|
||||
```bash
|
||||
# 拉取镜像
|
||||
docker pull walllee/moodist:latest
|
||||
|
||||
# 运行容器
|
||||
docker run -d \
|
||||
--name moodist \
|
||||
-p 8080:8080 \
|
||||
--restart unless-stopped \
|
||||
walllee/moodist:latest
|
||||
```
|
||||
|
||||
#### 2. 使用 Docker Compose
|
||||
```bash
|
||||
# 简单版本
|
||||
docker-compose up -d
|
||||
|
||||
# 或使用优化版本
|
||||
docker-compose -f docker-compose.optimized.yml up -d
|
||||
|
||||
# 查看日志
|
||||
docker-compose logs -f
|
||||
# 或
|
||||
docker-compose -f docker-compose.optimized.yml logs -f
|
||||
|
||||
# 停止服务
|
||||
docker-compose down
|
||||
```
|
||||
|
||||
### 🔨 自定义构建
|
||||
|
||||
#### 1. 简化本地构建(推荐)
|
||||
```bash
|
||||
# 克隆仓库
|
||||
git clone https://github.com/wheesys/moodist.git
|
||||
cd moodist
|
||||
|
||||
# 简化构建(推荐,兼容性最好)
|
||||
npm run docker:push
|
||||
|
||||
# 或带版本号构建
|
||||
./scripts/build-docker-simple.sh 2.1.0
|
||||
|
||||
# 构建并推送到 Docker Hub
|
||||
npm run docker:push-and-upload
|
||||
```
|
||||
|
||||
**特点:**
|
||||
- ✅ 完全兼容,不依赖 Docker Buildx
|
||||
- ✅ 先本地构建再打包,避免容器内依赖问题
|
||||
- ✅ 构建速度快,使用缓存优化
|
||||
- ✅ 支持版本标签和自动 latest 标签
|
||||
|
||||
#### 2. 多平台构建
|
||||
```bash
|
||||
# 克隆仓库
|
||||
git clone https://github.com/wheesys/moodist.git
|
||||
cd moodist
|
||||
|
||||
# 本地构建和测试
|
||||
./scripts/build-local.sh
|
||||
|
||||
# 查看构建结果
|
||||
docker images | grep moodist
|
||||
```
|
||||
|
||||
#### 3. 推送到 Docker Hub
|
||||
```bash
|
||||
# 登录 Docker Hub
|
||||
docker login
|
||||
|
||||
# 使用简化脚本推送
|
||||
npm run docker:push-and-upload
|
||||
|
||||
# 或手动推送指定版本
|
||||
docker push walllee/moodist:2.1.0
|
||||
docker push walllee/moodist:latest
|
||||
```
|
||||
|
||||
### 📦 部署配置
|
||||
|
||||
#### 生产环境配置
|
||||
```yaml
|
||||
version: '3.8'
|
||||
services:
|
||||
moodist:
|
||||
image: wheeysys/moodist:latest
|
||||
container_name: moodist-prod
|
||||
restart: always
|
||||
ports:
|
||||
- "80:8080"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- TZ=Asia/Shanghai
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:8080/"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
```
|
||||
|
||||
#### 开发环境配置
|
||||
```bash
|
||||
# 使用开发配置
|
||||
docker-compose -f docker-compose.dev.yml up -d
|
||||
|
||||
# 或者使用开发工具
|
||||
docker-compose -f docker-compose.dev.yml --profile tools up -d
|
||||
```
|
||||
|
||||
### 🔧 环境变量
|
||||
|
||||
| 变量名 | 默认值 | 说明 |
|
||||
|--------|--------|------|
|
||||
| `NODE_ENV` | `production` | 运行环境 |
|
||||
| `TZ` | `Asia/Shanghai` | 时区设置 |
|
||||
|
||||
### 📊 性能优化
|
||||
|
||||
#### 镜像特性
|
||||
- ✅ **多阶段构建**: 优化镜像大小
|
||||
- ✅ **多平台支持**: AMD64 + ARM64
|
||||
- ✅ **非root用户**: 提高安全性
|
||||
- ✅ **健康检查**: 自动监控应用状态
|
||||
- ✅ **静态优化**: Nginx + Gzip 压缩
|
||||
|
||||
#### 资源使用
|
||||
- **内存占用**: ~32MB (运行时)
|
||||
- **CPU占用**: < 0.1 (空闲时)
|
||||
- **启动时间**: ~2秒
|
||||
- **镜像大小**: ~30MB
|
||||
|
||||
### 🔍 监控和日志
|
||||
|
||||
#### 查看容器状态
|
||||
```bash
|
||||
# 查看容器状态
|
||||
docker ps | grep moodist
|
||||
|
||||
# 查看健康检查状态
|
||||
docker inspect moodist | grep Health -A 10
|
||||
|
||||
# 查看资源使用
|
||||
docker stats moodist
|
||||
```
|
||||
|
||||
#### 日志管理
|
||||
```bash
|
||||
# 查看实时日志
|
||||
docker logs -f moodist
|
||||
|
||||
# 查看最近日志
|
||||
docker logs --tail 100 moodist
|
||||
|
||||
# 日志轮转(在 docker-compose 中配置)
|
||||
logging:
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
```
|
||||
|
||||
### 🛠️ 故障排除
|
||||
|
||||
#### 常见问题
|
||||
|
||||
1. **容器无法启动**
|
||||
```bash
|
||||
# 检查端口占用
|
||||
netstat -tlnp | grep 8080
|
||||
|
||||
# 查看容器日志
|
||||
docker logs moodist
|
||||
```
|
||||
|
||||
2. **健康检查失败**
|
||||
```bash
|
||||
# 手动检查应用是否响应
|
||||
curl -f http://localhost:8080/
|
||||
|
||||
# 查看健康检查状态
|
||||
docker inspect moodist | grep Health
|
||||
```
|
||||
|
||||
3. **构建失败**
|
||||
```bash
|
||||
# 清理Docker缓存
|
||||
docker system prune -a
|
||||
|
||||
# 重新构建
|
||||
docker build --no-cache -f Dockerfile.optimized -t moodist:test .
|
||||
```
|
||||
|
||||
### 🔄 更新部署
|
||||
|
||||
#### 滚动更新
|
||||
```bash
|
||||
# 拉取新版本
|
||||
docker pull wheeysys/moodist:latest
|
||||
|
||||
# 停止旧容器
|
||||
docker stop moodist
|
||||
|
||||
# 启动新容器
|
||||
docker run -d \
|
||||
--name moodist \
|
||||
-p 8080:8080 \
|
||||
--restart unless-stopped \
|
||||
wheeysys/moodist:latest
|
||||
|
||||
# 删除旧容器
|
||||
docker rm $(docker ps -aq --filter "status=exited")
|
||||
```
|
||||
|
||||
#### 使用 Docker Compose 更新
|
||||
```bash
|
||||
# 拉取新镜像
|
||||
docker-compose -f docker-compose.optimized.yml pull
|
||||
|
||||
# 重启服务
|
||||
docker-compose -f docker-compose.optimized.yml up -d
|
||||
|
||||
# 清理旧镜像
|
||||
docker image prune -f
|
||||
```
|
||||
|
||||
### 🔐 安全配置
|
||||
|
||||
#### 生产环境安全建议
|
||||
```yaml
|
||||
services:
|
||||
moodist:
|
||||
image: wheeysys/moodist:latest
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
read_only: true
|
||||
tmpfs:
|
||||
- /var/cache/nginx
|
||||
- /var/run
|
||||
user: "nginx"
|
||||
cap_drop:
|
||||
- ALL
|
||||
cap_add:
|
||||
- CHOWN
|
||||
- SETGID
|
||||
- SETUID
|
||||
```
|
||||
|
||||
### 📈 扩展部署
|
||||
|
||||
#### 使用反向代理
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name moodist.example.com;
|
||||
|
||||
location / {
|
||||
proxy_pass http://localhost:8080;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 负载均衡配置
|
||||
```yaml
|
||||
version: '3.8'
|
||||
services:
|
||||
moodist:
|
||||
image: wheeysys/moodist:latest
|
||||
deploy:
|
||||
replicas: 3
|
||||
# ... 其他配置
|
||||
```
|
||||
|
||||
### 📞 支持
|
||||
|
||||
- **GitHub**: https://github.com/wheesys/moodist
|
||||
- **Docker Hub**: https://hub.docker.com/r/walllee/moodist
|
||||
- **问题反馈**: 请在 GitHub Issues 中提交
|
||||
|
||||
---
|
||||
|
||||
*最后更新: 2024-11-16*
|
||||
83
Dockerfile.multiplatform
Normal file
83
Dockerfile.multiplatform
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
# 多平台构建 Dockerfile
|
||||
# 使用: docker buildx build --platform linux/amd64,linux/arm64 -f Dockerfile.multiplatform -t wheesys/moodist:latest --push .
|
||||
|
||||
# 使用官方Node.js镜像作为构建环境
|
||||
FROM --platform=linux/amd64,linux/arm64 node:20-alpine AS base
|
||||
|
||||
# 安装必要的系统依赖
|
||||
RUN apk add --no-cache libc6-compat
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# 复制package文件
|
||||
COPY package*.json ./
|
||||
|
||||
# 安装依赖(使用npm ci进行更快、更可靠的安装)
|
||||
RUN npm ci --only=production && npm cache clean --force
|
||||
|
||||
# 构建阶段
|
||||
FROM base AS builder
|
||||
COPY . .
|
||||
|
||||
# 设置构建环境变量
|
||||
ARG NODE_ENV=production
|
||||
ARG BUILD_DATE
|
||||
ARG VERSION
|
||||
ARG VCS_REF
|
||||
|
||||
ENV NODE_ENV=$NODE_ENV
|
||||
ENV BUILD_DATE=$BUILD_DATE
|
||||
ENV VERSION=$VERSION
|
||||
ENV VCS_REF=$VCS_REF
|
||||
|
||||
# 构建应用
|
||||
RUN npm run build
|
||||
|
||||
# 生产运行阶段 - 使用轻量级Nginx
|
||||
FROM nginx:alpine AS runtime
|
||||
|
||||
# 安装curl用于健康检查
|
||||
RUN apk add --no-cache curl
|
||||
|
||||
# 创建非root用户提高安全性
|
||||
RUN addgroup -g 1001 -S nginx && \
|
||||
adduser -S nginx -u 1001 -G nginx
|
||||
|
||||
# 复制自定义nginx配置
|
||||
COPY docker/nginx/nginx.conf /etc/nginx/nginx.conf
|
||||
|
||||
# 从构建阶段复制构建产物
|
||||
COPY --from=builder /app/dist /usr/share/nginx/html
|
||||
|
||||
# 设置正确的权限
|
||||
RUN chown -R nginx:nginx /usr/share/nginx/html && \
|
||||
chown -R nginx:nginx /var/cache/nginx && \
|
||||
chown -R nginx:nginx /var/log/nginx && \
|
||||
chown -R nginx:nginx /etc/nginx/conf.d
|
||||
|
||||
# 创建nginx运行时需要的目录
|
||||
RUN touch /var/run/nginx.pid && \
|
||||
chown -R nginx:nginx /var/run/nginx.pid
|
||||
|
||||
# 切换到非root用户
|
||||
USER nginx
|
||||
|
||||
# 暴露端口
|
||||
EXPOSE 8080
|
||||
|
||||
# 健康检查
|
||||
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
||||
CMD curl -f http://localhost:8080/ || exit 1
|
||||
|
||||
# 启动nginx
|
||||
CMD ["nginx", "-g", "daemon off;"]
|
||||
|
||||
# 添加标签信息
|
||||
LABEL maintainer="walllee" \
|
||||
org.opencontainers.image.title="Moodist" \
|
||||
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"
|
||||
89
Dockerfile.optimized
Normal file
89
Dockerfile.optimized
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
# 使用官方Node.js镜像作为构建环境
|
||||
FROM node:20-alpine AS base
|
||||
|
||||
# 安装必要的系统依赖
|
||||
RUN apk add --no-cache libc6-compat
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# 复制package文件
|
||||
COPY package*.json ./
|
||||
|
||||
# 构建阶段
|
||||
FROM node:20-alpine AS builder
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# 复制package文件
|
||||
COPY package*.json ./
|
||||
|
||||
# 设置构建环境变量
|
||||
ARG NODE_ENV=production
|
||||
ARG BUILD_DATE
|
||||
ARG VERSION
|
||||
ARG VCS_REF
|
||||
|
||||
ENV NODE_ENV=$NODE_ENV
|
||||
ENV BUILD_DATE=$BUILD_DATE
|
||||
ENV VERSION=$VERSION
|
||||
ENV VCS_REF=$VCS_REF
|
||||
|
||||
# 安装所有依赖(构建需要所有依赖,包括devDependencies)
|
||||
RUN npm ci --ignore-scripts && \
|
||||
npm install --save-dev autoprefixer postcss postcss-nesting && \
|
||||
npm cache clean --force
|
||||
|
||||
# 复制源代码
|
||||
COPY . .
|
||||
|
||||
# 构建应用
|
||||
RUN npm run build
|
||||
|
||||
# 生产运行阶段 - 使用轻量级Nginx
|
||||
FROM nginx:alpine AS runtime
|
||||
|
||||
# 安装curl用于健康检查
|
||||
RUN apk add --no-cache curl
|
||||
|
||||
# 创建非root用户提高安全性
|
||||
RUN addgroup -g 1001 -S nginx && \
|
||||
adduser -S nginx -u 1001 -G nginx
|
||||
|
||||
# 复制自定义nginx配置
|
||||
COPY docker/nginx/nginx.conf /etc/nginx/nginx.conf
|
||||
|
||||
# 从构建阶段复制构建产物
|
||||
COPY --from=builder /app/dist /usr/share/nginx/html
|
||||
|
||||
# 设置正确的权限
|
||||
RUN chown -R nginx:nginx /usr/share/nginx/html && \
|
||||
chown -R nginx:nginx /var/cache/nginx && \
|
||||
chown -R nginx:nginx /var/log/nginx && \
|
||||
chown -R nginx:nginx /etc/nginx/conf.d
|
||||
|
||||
# 创建nginx运行时需要的目录
|
||||
RUN touch /var/run/nginx.pid && \
|
||||
chown -R nginx:nginx /var/run/nginx.pid
|
||||
|
||||
# 切换到非root用户
|
||||
USER nginx
|
||||
|
||||
# 暴露端口
|
||||
EXPOSE 8080
|
||||
|
||||
# 健康检查
|
||||
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
||||
CMD curl -f http://localhost:8080/ || exit 1
|
||||
|
||||
# 启动nginx
|
||||
CMD ["nginx", "-g", "daemon off;"]
|
||||
|
||||
# 添加标签信息
|
||||
LABEL maintainer="walllee" \
|
||||
org.opencontainers.image.title="Moodist" \
|
||||
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"
|
||||
44
Dockerfile.simple
Normal file
44
Dockerfile.simple
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
# 简化的Dockerfile - 使用本地构建产物
|
||||
FROM nginx:alpine
|
||||
|
||||
# 安装curl用于健康检查
|
||||
RUN apk add --no-cache curl
|
||||
|
||||
# 复制自定义nginx配置
|
||||
COPY docker/nginx/nginx.conf /etc/nginx/nginx.conf
|
||||
|
||||
# 复制本地构建的静态文件
|
||||
COPY dist/ /usr/share/nginx/html
|
||||
|
||||
# 设置正确的权限
|
||||
RUN chown -R nginx:nginx /usr/share/nginx/html && \
|
||||
chown -R nginx:nginx /var/cache/nginx && \
|
||||
chown -R nginx:nginx /var/log/nginx && \
|
||||
chown -R nginx:nginx /etc/nginx/conf.d
|
||||
|
||||
# 创建nginx运行时需要的目录
|
||||
RUN touch /var/run/nginx.pid && \
|
||||
chown -R nginx:nginx /var/run/nginx.pid
|
||||
|
||||
# 切换到非root用户
|
||||
USER nginx
|
||||
|
||||
# 暴露端口
|
||||
EXPOSE 8080
|
||||
|
||||
# 健康检查
|
||||
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
||||
CMD curl -f http://localhost:8080/ || exit 1
|
||||
|
||||
# 启动nginx
|
||||
CMD ["nginx", "-g", "daemon off;"]
|
||||
|
||||
# 添加标签信息
|
||||
LABEL maintainer="walllee" \
|
||||
org.opencontainers.image.title="Moodist" \
|
||||
org.opencontainers.image.description="Ambient sounds for focus and calm - 多语言环境音应用" \
|
||||
org.opencontainers.image.version="2.1.0" \
|
||||
org.opencontainers.image.created="2025-11-16T06:53:40Z" \
|
||||
org.opencontainers.image.revision="65958f8" \
|
||||
org.opencontainers.image.source="https://github.com/wheesys/moodist" \
|
||||
org.opencontainers.image.licenses="MIT"
|
||||
|
|
@ -1,3 +1,9 @@
|
|||
## 🌍 Language / 语言
|
||||
|
||||
**[English](README.md)** | **[简体中文](README.zh-CN.md)**
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
<img src="/assets/banner.png" alt="Moodist Logo Banner" />
|
||||
<h2>Moodist 🌲</h2>
|
||||
|
|
|
|||
168
README.zh-CN.md
Normal file
168
README.zh-CN.md
Normal file
|
|
@ -0,0 +1,168 @@
|
|||
## 🌍 Language / 语言
|
||||
|
||||
**[English](README.md)** | **[简体中文](README.zh-CN.md)**
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
<img src="/assets/banner.png" alt="Moodist Logo Banner" />
|
||||
<h2>Moodist 🌲</h2>
|
||||
<p>环境音生成器 - 专注与平静的声音伴侣。</p>
|
||||
<a href="https://moodist.mvze.net">访问 <strong>Moodist</strong></a> | <a href="https://buymeacoffee.com/remvze">请我喝杯咖啡</a>
|
||||
</div>
|
||||
|
||||
## 目录
|
||||
|
||||
- ⚡ [功能特性](#功能特性)
|
||||
- 🚀 [快速开始](#快速开始)
|
||||
- 🐳 [Docker 部署](#docker-部署)
|
||||
- 🧰 [技术工具](#技术工具)
|
||||
- 🔮 [命令说明](#命令说明)
|
||||
- 🚧 [贡献指南](#贡献指南)
|
||||
- ⭐ [支持项目](#支持-moodist)
|
||||
- 📜 [许可证](#许可证)
|
||||
|
||||
## 功能特性
|
||||
|
||||
1. 🎵 超过 75 种环境音
|
||||
1. 📝 持久化的声音选择
|
||||
1. ✈️ 与他人分享声音选择
|
||||
1. 🧰 自定义声音预设
|
||||
1. 🌙 睡眠定时器
|
||||
1. 📓 快速记事本
|
||||
1. 🍅 番茄钟计时器
|
||||
1. ✅ 简单的待办事项列表(即将推出)
|
||||
1. ⏯️ 媒体控制
|
||||
1. ⌨️ 全功能键盘快捷键
|
||||
1. 🥷 注重隐私:不收集任何数据
|
||||
1. 💰 完全免费、开源、可自托管
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### 本地开发
|
||||
|
||||
```bash
|
||||
# 克隆项目
|
||||
git clone https://github.com/wheesys/moodist.git
|
||||
cd moodist
|
||||
|
||||
# 安装依赖
|
||||
npm install
|
||||
|
||||
# 启动开发服务器
|
||||
npm run dev
|
||||
```
|
||||
|
||||
访问 [http://localhost:4321](http://localhost:4321) 查看应用。
|
||||
|
||||
### 构建生产版本
|
||||
|
||||
```bash
|
||||
# 构建应用
|
||||
npm run build
|
||||
|
||||
# 预览构建结果
|
||||
npm run preview
|
||||
```
|
||||
|
||||
## 🐳 Docker 部署
|
||||
|
||||
### 直接运行
|
||||
|
||||
```bash
|
||||
# 拉取镜像
|
||||
docker pull walllee/moodist:latest
|
||||
|
||||
# 运行容器
|
||||
docker run -d \
|
||||
--name moodist \
|
||||
-p 8080:8080 \
|
||||
--restart unless-stopped \
|
||||
walllee/moodist:latest
|
||||
```
|
||||
|
||||
### 使用 Docker Compose
|
||||
|
||||
```bash
|
||||
# 简单版本
|
||||
docker-compose up -d
|
||||
|
||||
# 或使用优化版本
|
||||
docker-compose -f docker-compose.optimized.yml up -d
|
||||
```
|
||||
|
||||
访问 [http://localhost:8080](http://localhost:8080) 查看应用。
|
||||
|
||||
### 自定义构建
|
||||
|
||||
```bash
|
||||
# 构建镜像
|
||||
npm run docker:push
|
||||
|
||||
# 带版本号构建
|
||||
./scripts/build-docker-simple.sh 2.1.0
|
||||
|
||||
# 构建并推送到 Docker Hub
|
||||
npm run docker:push-and-upload
|
||||
```
|
||||
|
||||
📖 详细部署指南请查看 [DOCKER_DEPLOY.md](DOCKER_DEPLOY.md)
|
||||
|
||||
## 技术工具
|
||||
|
||||
- ⚡ **TypeScript**: 编程语言
|
||||
- 🔨 **React**: UI 库
|
||||
- 🧑🚀 **Astro**: 元框架
|
||||
- 🎨 **CSS Modules**: 样式方案
|
||||
- 🐻 **Zustand**: 状态管理
|
||||
- 🎭 **Framer Motion**: 动画库
|
||||
- ⚙️ **Radix**: 无障碍组件
|
||||
- 📕 **Storybook**: 组件文档
|
||||
- 🧪 **Vitest**: 单元测试(即将推出)
|
||||
- 🔭 **Playwright**: 端到端测试(即将推出)
|
||||
- 🔍 **ESLint**: 代码检查
|
||||
- 🧹 **Prettier**: 代码格式化
|
||||
- 🧼 **Stylelint**: CSS 检查
|
||||
- 🐶 **Husky**: Git 钩子
|
||||
- 📝 **Lint Staged**: 暂存文件检查器
|
||||
- 🧽 **Commitlint**: Git 提交信息检查
|
||||
- 🧭 **Commitizen**: Git 提交信息助手
|
||||
- 📓 **Standard Version**: 版本管理和更新日志生成
|
||||
- 🧰 **PostCSS**: CSS 转换
|
||||
|
||||
## 命令说明
|
||||
|
||||
- `npm run dev`: 运行开发服务器
|
||||
- `npm run build`: 构建生产版本
|
||||
- `npm run preview`: 预览构建的应用
|
||||
- `npm run lint`: 使用 ESLint 检查代码
|
||||
- `npm run lint:fix`: 使用 ESLint 检查并修复代码
|
||||
- `npm run lint:style`: 使用 Stylelint 检查样式
|
||||
- `npm run lint:style:fix`: 使用 Stylelint 检查并修复样式
|
||||
- `npm run format`: 使用 Prettier 格式化文件
|
||||
- `npm run commit`: 使用 Commitizen 提交代码
|
||||
- `npm run release:major`: 发布主版本
|
||||
- `npm run release:minor`: 发布次版本
|
||||
- `npm run release:patch`: 发布补丁版本
|
||||
- `npm run storybook`: 运行 Storybook
|
||||
|
||||
## 贡献指南
|
||||
|
||||
🚧 请查看 [CONTRIBUTING.md](CONTRIBUTING.md) 文件。
|
||||
|
||||
## 支持 Moodist
|
||||
|
||||
⭐ 如果您喜欢这个项目,请给它一个星标。
|
||||
|
||||
☕ [请我喝杯咖啡](https://buymeacoffee.com/remvze) 来帮助我维护 Moodist。
|
||||
|
||||
## 许可证
|
||||
|
||||
本项目基于 **MIT 许可证** - 详情请查看 [LICENSE](LICENSE) 文件。
|
||||
|
||||
### ⚠️ 第三方资源
|
||||
|
||||
本项目使用的部分声音来源于第三方提供商,并**遵循不同的许可证**:
|
||||
|
||||
- 遵循 **Pixabay 内容许可证** 的声音:[Pixabay 内容许可证](https://pixabay.com/service/license-summary/)
|
||||
- 遵循 **CC0** 的声音:[知识共享署名许可协议](https://creativecommons.org/publicdomain/zero/1.0/)
|
||||
88
docker-compose.dev.yml
Normal file
88
docker-compose.dev.yml
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
version: '3.8'
|
||||
|
||||
services:
|
||||
moodist-dev:
|
||||
# 构建上下文
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile.optimized
|
||||
target: builder # 只构建到builder阶段用于开发
|
||||
args:
|
||||
- NODE_ENV=development
|
||||
- BUILD_DATE=${BUILD_DATE:-$(date -u +'%Y-%m-%dT%H:%M:%SZ')}
|
||||
- VERSION=dev
|
||||
- VCS_REF=${VCS_REF:-dev}
|
||||
|
||||
container_name: moodist-dev
|
||||
restart: unless-stopped
|
||||
|
||||
# 开发端口映射
|
||||
ports:
|
||||
- "3000:3000" # Astro开发服务器
|
||||
- "8080:8080" # 预览服务器
|
||||
|
||||
# 开发环境变量
|
||||
environment:
|
||||
- NODE_ENV=development
|
||||
- TZ=Asia/Shanghai
|
||||
|
||||
# 卷挂载用于开发
|
||||
volumes:
|
||||
- .:/app
|
||||
- /app/node_modules # 防止node_modules被覆盖
|
||||
- moodist-dist:/app/dist
|
||||
|
||||
# 工作目录
|
||||
working_dir: /app
|
||||
|
||||
# 开发命令
|
||||
command: npm run dev
|
||||
|
||||
# 健康检查
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:3000/"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 60s
|
||||
|
||||
# 开发资源配置
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '1.0'
|
||||
memory: 512M
|
||||
reservations:
|
||||
cpus: '0.25'
|
||||
memory: 128M
|
||||
|
||||
# 日志配置
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "5m"
|
||||
max-file: "2"
|
||||
|
||||
networks:
|
||||
- moodist-network
|
||||
|
||||
# 开发工具容器
|
||||
dev-tools:
|
||||
image: node:20-alpine
|
||||
container_name: moodist-dev-tools
|
||||
working_dir: /app
|
||||
volumes:
|
||||
- .:/app
|
||||
networks:
|
||||
- moodist-network
|
||||
profiles:
|
||||
- tools
|
||||
command: sh -c "npm install && tail -f /dev/null"
|
||||
|
||||
volumes:
|
||||
moodist-dist:
|
||||
driver: local
|
||||
|
||||
networks:
|
||||
moodist-network:
|
||||
driver: bridge
|
||||
84
docker-compose.optimized.yml
Normal file
84
docker-compose.optimized.yml
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
version: '3.8'
|
||||
|
||||
services:
|
||||
moodist:
|
||||
# 使用优化的镜像名称
|
||||
image: walllee/moodist:latest
|
||||
container_name: moodist-app
|
||||
|
||||
# 重启策略
|
||||
restart: unless-stopped
|
||||
|
||||
# 端口映射
|
||||
ports:
|
||||
- "8080:8080"
|
||||
|
||||
# 环境变量
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- TZ=Asia/Shanghai
|
||||
|
||||
# 健康检查
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:8080/"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
# 资源限制
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '0.5'
|
||||
memory: 128M
|
||||
reservations:
|
||||
cpus: '0.1'
|
||||
memory: 32M
|
||||
|
||||
# 日志配置
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
|
||||
# 网络配置
|
||||
networks:
|
||||
- moodist-network
|
||||
|
||||
# 安全选项
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
|
||||
# 只读根文件系统
|
||||
read_only: true
|
||||
tmpfs:
|
||||
- /var/cache/nginx
|
||||
- /var/run
|
||||
- /var/log/nginx
|
||||
|
||||
# Nginx反向代理(可选)
|
||||
nginx-proxy:
|
||||
image: nginx:alpine
|
||||
container_name: moodist-nginx
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
volumes:
|
||||
- ./docker/nginx-proxy/nginx.conf:/etc/nginx/nginx.conf:ro
|
||||
- ./docker/nginx-proxy/ssl:/etc/nginx/ssl:ro
|
||||
depends_on:
|
||||
- moodist
|
||||
networks:
|
||||
- moodist-network
|
||||
profiles:
|
||||
- proxy
|
||||
|
||||
networks:
|
||||
moodist-network:
|
||||
driver: bridge
|
||||
ipam:
|
||||
config:
|
||||
- subnet: 172.20.0.0/16
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
version: '3.9'
|
||||
services:
|
||||
moodist:
|
||||
image: ghcr.io/remvze/moodist
|
||||
image: walllee/moodist:latest
|
||||
logging:
|
||||
options:
|
||||
max-size: 1g
|
||||
|
|
|
|||
|
|
@ -21,7 +21,14 @@
|
|||
"release:minor": "npm run release -- --release-as minor",
|
||||
"release:patch": "npm run release -- --release-as patch",
|
||||
"storybook": "storybook dev -p 6006",
|
||||
"build-storybook": "storybook build"
|
||||
"build-storybook": "storybook build",
|
||||
"docker:build": "./scripts/build-local.sh",
|
||||
"docker:push": "./scripts/build-docker-simple.sh",
|
||||
"docker:push-and-upload": "./scripts/build-docker-simple.sh latest push",
|
||||
"docker:multi": "./scripts/build-docker-compatible.sh",
|
||||
"docker:dev": "docker-compose -f docker-compose.dev.yml up -d",
|
||||
"docker:prod": "docker-compose -f docker-compose.optimized.yml up -d",
|
||||
"docker:logs": "docker-compose -f docker-compose.optimized.yml logs -f"
|
||||
},
|
||||
"dependencies": {
|
||||
"@astrojs/react": "3.6.0",
|
||||
|
|
|
|||
152
scripts/build-docker-compatible.sh
Executable file
152
scripts/build-docker-compatible.sh
Executable file
|
|
@ -0,0 +1,152 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Moodist Docker 构建脚本 - 兼容版本
|
||||
# 支持标准Docker和Docker Buildx(可选)
|
||||
|
||||
set -e
|
||||
|
||||
# 配置变量
|
||||
IMAGE_NAME="walllee/moodist"
|
||||
VERSION=${1:-latest}
|
||||
BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')
|
||||
VCS_REF=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
|
||||
USE_BUILDX=${2:-false}
|
||||
|
||||
echo "🐳 开始构建 Moodist Docker 镜像..."
|
||||
echo "📦 镜像名称: ${IMAGE_NAME}"
|
||||
echo "🏷️ 版本标签: ${VERSION}"
|
||||
echo "📅 构建时间: ${BUILD_DATE}"
|
||||
echo "🔗 Git提交: ${VCS_REF}"
|
||||
echo "🔧 使用Buildx: ${USE_BUILDX}"
|
||||
|
||||
# 检查Docker是否安装并运行
|
||||
if ! docker info &> /dev/null; then
|
||||
echo "❌ Docker未运行,请启动Docker服务"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 构建参数
|
||||
BUILD_ARGS="--build-arg BUILD_DATE=${BUILD_DATE}"
|
||||
BUILD_ARGS="${BUILD_ARGS} --build-arg VERSION=${VERSION}"
|
||||
BUILD_ARGS="${BUILD_ARGS} --build-arg VCS_REF=${VCS_REF}"
|
||||
BUILD_ARGS="${BUILD_ARGS} --build-arg NODE_ENV=production"
|
||||
|
||||
# 构建函数
|
||||
build_image() {
|
||||
local tag=$1
|
||||
local push_flag=$2
|
||||
local build_cmd="docker build"
|
||||
|
||||
if [ "$USE_BUILDX" = "true" ]; then
|
||||
# 检查buildx是否可用
|
||||
if docker buildx version &> /dev/null; then
|
||||
echo "🔨 使用Docker Buildx构建..."
|
||||
build_cmd="docker buildx build"
|
||||
|
||||
# 创建buildx构建器(如果不存在)
|
||||
if ! docker buildx ls | grep -q "moodist-builder"; then
|
||||
echo "🔨 创建Docker Buildx构建器..."
|
||||
docker buildx create --name moodist-builder --use 2>/dev/null || true
|
||||
docker buildx inspect --bootstrap 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# 多平台构建参数
|
||||
PLATFORM_ARGS="--platform linux/amd64,linux/arm64"
|
||||
PUSH_FLAG="--push"
|
||||
else
|
||||
echo "⚠️ Docker Buildx不可用,回退到标准Docker构建..."
|
||||
USE_BUILDX="false"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "🏗️ 开始构建镜像: ${tag}"
|
||||
|
||||
if [ "$USE_BUILDX" = "true" ]; then
|
||||
# 使用buildx
|
||||
$build_cmd \
|
||||
$PLATFORM_ARGS \
|
||||
--tag "${tag}" \
|
||||
$BUILD_ARGS \
|
||||
--file ./Dockerfile.optimized \
|
||||
$PUSH_FLAG \
|
||||
.
|
||||
else
|
||||
# 使用标准Docker
|
||||
$build_cmd \
|
||||
--tag "${tag}" \
|
||||
$BUILD_ARGS \
|
||||
--file ./Dockerfile.optimized \
|
||||
.
|
||||
|
||||
# 如果需要推送,使用标准Docker push
|
||||
if [ "$push_flag" = "true" ]; then
|
||||
echo "📤 推送镜像: ${tag}"
|
||||
docker push "${tag}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# 检查是否需要登录Docker Hub
|
||||
if [ "$USE_BUILDX" = "true" ] || [ "${2}" = "push" ]; then
|
||||
if ! docker info 2>/dev/null | grep -q "Username"; then
|
||||
echo "⚠️ 未检测到Docker登录,请先运行: docker login"
|
||||
echo "💡 如果您有Docker Hub账号,请使用以下命令登录:"
|
||||
echo " docker login"
|
||||
read -p "是否继续构建?(y/N): " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo "❌ 构建已取消"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# 构建镜像
|
||||
if [ "$USE_BUILDX" = "true" ]; then
|
||||
# Buildx模式(支持多平台)
|
||||
build_image "${IMAGE_NAME}:${VERSION}" true
|
||||
|
||||
# 如果指定了特定版本,同时创建version-specific标签
|
||||
if [ "$VERSION" != "latest" ]; then
|
||||
echo "🏷️ 添加版本标签: ${VERSION}"
|
||||
build_image "${IMAGE_NAME}:${VERSION}" true
|
||||
fi
|
||||
else
|
||||
# 标准Docker模式
|
||||
build_image "${IMAGE_NAME}:${VERSION}" false
|
||||
|
||||
# 如果指定了特定版本,创建额外的标签
|
||||
if [ "$VERSION" != "latest" ]; then
|
||||
docker tag "${IMAGE_NAME}:${VERSION}" "${IMAGE_NAME}:latest"
|
||||
fi
|
||||
|
||||
# 如果需要推送
|
||||
if [ "${2}" = "push" ]; then
|
||||
echo "📤 推送镜像到Docker Hub..."
|
||||
docker push "${IMAGE_NAME}:${VERSION}"
|
||||
|
||||
if [ "$VERSION" != "latest" ]; then
|
||||
docker push "${IMAGE_NAME}:latest"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🎉 镜像构建完成!"
|
||||
echo "📋 镜像信息:"
|
||||
echo " 🔗 镜像名称: ${IMAGE_NAME}"
|
||||
echo " 🏷️ 标签: ${VERSION}${VERSION != "latest" ? ", latest" : ""}"
|
||||
echo " 📅 构建时间: ${BUILD_DATE}"
|
||||
echo " 🔗 Git提交: ${VCS_REF}"
|
||||
echo ""
|
||||
echo "🚀 使用方法:"
|
||||
echo " docker run -d -p 8080:8080 ${IMAGE_NAME}:${VERSION}"
|
||||
echo ""
|
||||
echo "📝 查看镜像信息:"
|
||||
echo " docker images | grep ${IMAGE_NAME}"
|
||||
echo " docker inspect ${IMAGE_NAME}:${VERSION}"
|
||||
|
||||
# 显示镜像大小
|
||||
echo ""
|
||||
echo "📊 镜像大小:"
|
||||
docker images ${IMAGE_NAME}:${VERSION} --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
|
||||
111
scripts/build-docker-simple.sh
Executable file
111
scripts/build-docker-simple.sh
Executable file
|
|
@ -0,0 +1,111 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Moodist Docker 简化构建脚本
|
||||
# 先本地构建,再打包成Docker镜像
|
||||
|
||||
set -e
|
||||
|
||||
# 配置变量
|
||||
IMAGE_NAME="walllee/moodist"
|
||||
VERSION=${1:-latest}
|
||||
BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')
|
||||
VCS_REF=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
|
||||
|
||||
echo "🐳 开始构建 Moodist Docker 镜像(简化版)..."
|
||||
echo "📦 镜像名称: ${IMAGE_NAME}"
|
||||
echo "🏷️ 版本标签: ${VERSION}"
|
||||
echo "📅 构建时间: ${BUILD_DATE}"
|
||||
echo "🔗 Git提交: ${VCS_REF}"
|
||||
|
||||
# 检查Docker是否安装并运行
|
||||
if ! docker info &> /dev/null; then
|
||||
echo "❌ Docker未运行,请启动Docker服务"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 步骤1: 本地构建
|
||||
echo ""
|
||||
echo "📦 步骤 1: 本地构建应用..."
|
||||
npm run build
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ 本地构建失败"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ 本地构建完成!"
|
||||
|
||||
# 步骤2: 构建Docker镜像
|
||||
echo ""
|
||||
echo "🐳 步骤 2: 构建 Docker镜像..."
|
||||
|
||||
# 构建参数
|
||||
BUILD_ARGS="--build-arg BUILD_DATE=${BUILD_DATE}"
|
||||
BUILD_ARGS="${BUILD_ARGS} --build-arg VERSION=${VERSION}"
|
||||
BUILD_ARGS="${BUILD_ARGS} --build-arg VCS_REF=${VCS_REF}"
|
||||
|
||||
# 构建镜像
|
||||
docker build \
|
||||
${BUILD_ARGS} \
|
||||
--tag "${IMAGE_NAME}:${VERSION}" \
|
||||
--file ./Dockerfile.simple \
|
||||
.
|
||||
|
||||
echo "✅ Docker镜像构建完成!"
|
||||
|
||||
# 步骤3: 可选推送
|
||||
if [ "${2}" = "push" ]; then
|
||||
echo ""
|
||||
echo "📤 步骤 3: 推送镜像到Docker Hub..."
|
||||
|
||||
# 检查是否登录Docker Hub
|
||||
if ! docker info 2>/dev/null | grep -q "Username"; then
|
||||
echo "⚠️ 未检测到Docker登录,请先运行: docker login"
|
||||
read -p "是否继续推送?(y/N): " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo "❌ 推送已取消"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# 推送镜像
|
||||
docker push "${IMAGE_NAME}:${VERSION}"
|
||||
|
||||
# 如果指定了特定版本,同时创建latest标签
|
||||
if [ "$VERSION" != "latest" ]; then
|
||||
docker tag "${IMAGE_NAME}:${VERSION}" "${IMAGE_NAME}:latest"
|
||||
docker push "${IMAGE_NAME}:latest"
|
||||
fi
|
||||
|
||||
echo "✅ 镜像推送完成!"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🎉 简化构建完成!"
|
||||
echo "📋 镜像信息:"
|
||||
echo " 🔗 镜像名称: ${IMAGE_NAME}"
|
||||
if [ "$VERSION" != "latest" ]; then
|
||||
echo " 🏷️ 标签: ${VERSION}, latest"
|
||||
else
|
||||
echo " 🏷️ 标签: ${VERSION}"
|
||||
fi
|
||||
echo " 📅 构建时间: ${BUILD_DATE}"
|
||||
echo " 🔗 Git提交: ${VCS_REF}"
|
||||
echo ""
|
||||
echo "🚀 使用方法:"
|
||||
echo " docker run -d -p 8080:8080 ${IMAGE_NAME}:${VERSION}"
|
||||
echo ""
|
||||
echo "📝 查看镜像信息:"
|
||||
echo " docker images | grep ${IMAGE_NAME}"
|
||||
echo " docker inspect ${IMAGE_NAME}:${VERSION}"
|
||||
|
||||
# 显示镜像大小
|
||||
echo ""
|
||||
echo "📊 镜像大小:"
|
||||
docker images ${IMAGE_NAME}:${VERSION} --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
|
||||
|
||||
# 显示构建产物大小
|
||||
echo ""
|
||||
echo "📦 构建产物大小:"
|
||||
du -sh dist/ | tail -1
|
||||
91
scripts/build-docker.sh
Executable file
91
scripts/build-docker.sh
Executable file
|
|
@ -0,0 +1,91 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Moodist Docker 构建和推送脚本
|
||||
# 支持多平台构建并推送到 Docker Hub
|
||||
|
||||
set -e
|
||||
|
||||
# 配置变量
|
||||
IMAGE_NAME="walllee/moodist"
|
||||
VERSION=${1:-latest}
|
||||
BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')
|
||||
VCS_REF=$(git rev-parse --short HEAD)
|
||||
|
||||
echo "🐳 开始构建 Moodist Docker 镜像..."
|
||||
echo "📦 镜像名称: ${IMAGE_NAME}"
|
||||
echo "🏷️ 版本标签: ${VERSION}"
|
||||
echo "📅 构建时间: ${BUILD_DATE}"
|
||||
echo "🔗 Git提交: ${VCS_REF}"
|
||||
|
||||
# 检查Docker是否安装并运行
|
||||
if ! docker info &> /dev/null; then
|
||||
echo "❌ Docker未运行,请启动Docker服务"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查是否登录Docker Hub
|
||||
if ! docker info | grep -q "Username"; then
|
||||
echo "⚠️ 未检测到Docker登录,请先运行: docker login"
|
||||
echo "💡 如果您有Docker Hub账号,请使用以下命令登录:"
|
||||
echo " docker login"
|
||||
echo " # 输入您的用户名和密码或访问令牌"
|
||||
read -p "是否继续构建?(y/N): " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo "❌ 构建已取消"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# 创建buildx构建器(如果不存在)
|
||||
if ! docker buildx ls | grep -q "moodist-builder"; then
|
||||
echo "🔨 创建Docker Buildx构建器..."
|
||||
docker buildx create --name moodist-builder --use
|
||||
docker buildx inspect --bootstrap
|
||||
fi
|
||||
|
||||
# 构建参数
|
||||
BUILD_ARGS="--build-arg BUILD_DATE=${BUILD_DATE}"
|
||||
BUILD_ARGS="${BUILD_ARGS} --build-arg VERSION=${VERSION}"
|
||||
BUILD_ARGS="${BUILD_ARGS} --build-arg VCS_REF=${VCS_REF}"
|
||||
BUILD_ARGS="${BUILD_ARGS} --build-arg NODE_ENV=production"
|
||||
|
||||
echo "🏗️ 开始构建多平台镜像..."
|
||||
|
||||
# 构建并推送多平台镜像
|
||||
docker buildx build \
|
||||
--platform linux/amd64,linux/arm64 \
|
||||
--tag "${IMAGE_NAME}:${VERSION}" \
|
||||
--tag "${IMAGE_NAME}:latest" \
|
||||
${BUILD_ARGS} \
|
||||
--file ./Dockerfile.optimized \
|
||||
--push \
|
||||
.
|
||||
|
||||
echo "✅ 构建完成!"
|
||||
|
||||
# 如果指定了特定版本,同时创建version-specific标签
|
||||
if [ "$VERSION" != "latest" ]; then
|
||||
echo "🏷️ 添加版本标签: ${VERSION}"
|
||||
docker buildx build \
|
||||
--platform linux/amd64,linux/arm64 \
|
||||
--tag "${IMAGE_NAME}:${VERSION}" \
|
||||
${BUILD_ARGS} \
|
||||
--file ./Dockerfile.optimized \
|
||||
--push \
|
||||
.
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🎉 镜像构建和推送完成!"
|
||||
echo "📋 镜像信息:"
|
||||
echo " 🔗 Docker Hub: https://hub.docker.com/r/${IMAGE_NAME}"
|
||||
echo " 🏷️ 标签: ${VERSION}, latest"
|
||||
echo " 🏗️ 平台: linux/amd64, linux/arm64"
|
||||
echo ""
|
||||
echo "🚀 使用方法:"
|
||||
echo " docker run -d -p 8080:8080 ${IMAGE_NAME}:${VERSION}"
|
||||
echo ""
|
||||
echo "📝 查看镜像信息:"
|
||||
echo " docker pull ${IMAGE_NAME}:${VERSION}"
|
||||
echo " docker inspect ${IMAGE_NAME}:${VERSION}"
|
||||
83
scripts/build-local.sh
Executable file
83
scripts/build-local.sh
Executable file
|
|
@ -0,0 +1,83 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Moodist Docker 本地构建脚本
|
||||
# 用于本地测试和开发
|
||||
|
||||
set -e
|
||||
|
||||
# 配置变量
|
||||
IMAGE_NAME="moodist-local"
|
||||
VERSION=${1:-dev}
|
||||
BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')
|
||||
VCS_REF=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
|
||||
|
||||
echo "🐳 开始本地构建 Moodist Docker 镜像..."
|
||||
echo "📦 镜像名称: ${IMAGE_NAME}"
|
||||
echo "🏷️ 版本标签: ${VERSION}"
|
||||
echo "📅 构建时间: ${BUILD_DATE}"
|
||||
echo "🔗 Git提交: ${VCS_REF}"
|
||||
|
||||
# 检查Docker是否安装并运行
|
||||
if ! docker info &> /dev/null; then
|
||||
echo "❌ Docker未运行,请启动Docker服务"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 构建参数
|
||||
BUILD_ARGS="--build-arg BUILD_DATE=${BUILD_DATE}"
|
||||
BUILD_ARGS="${BUILD_ARGS} --build-arg VERSION=${VERSION}"
|
||||
BUILD_ARGS="${BUILD_ARGS} --build-arg VCS_REF=${VCS_REF}"
|
||||
BUILD_ARGS="${BUILD_ARGS} --build-arg NODE_ENV=production"
|
||||
|
||||
echo "🏗️ 开始本地构建..."
|
||||
|
||||
# 构建本地镜像
|
||||
docker build \
|
||||
${BUILD_ARGS} \
|
||||
--tag "${IMAGE_NAME}:${VERSION}" \
|
||||
--file ./Dockerfile.optimized \
|
||||
.
|
||||
|
||||
echo "✅ 本地构建完成!"
|
||||
|
||||
# 运行容器进行测试
|
||||
echo "🧪 启动测试容器..."
|
||||
|
||||
# 停止并删除现有容器(如果存在)
|
||||
docker stop moodist-test 2>/dev/null || true
|
||||
docker rm moodist-test 2>/dev/null || true
|
||||
|
||||
# 启动新容器
|
||||
docker run -d \
|
||||
--name moodist-test \
|
||||
-p 8081:8080 \
|
||||
--restart unless-stopped \
|
||||
"${IMAGE_NAME}:${VERSION}"
|
||||
|
||||
echo "🚀 测试容器已启动!"
|
||||
echo ""
|
||||
echo "📋 访问信息:"
|
||||
echo " 🌐 本地访问: http://localhost:8081"
|
||||
echo " 🐳 容器名称: moodist-test"
|
||||
echo " 🏷️ 镜像标签: ${IMAGE_NAME}:${VERSION}"
|
||||
echo ""
|
||||
echo "🔧 常用命令:"
|
||||
echo " 查看日志: docker logs moodist-test"
|
||||
echo " 停止容器: docker stop moodist-test"
|
||||
echo " 删除容器: docker rm moodist-test"
|
||||
echo " 进入容器: docker exec -it moodist-test /bin/sh"
|
||||
echo ""
|
||||
echo "⏳ 等待容器启动..."
|
||||
sleep 5
|
||||
|
||||
# 健康检查
|
||||
echo "🔍 执行健康检查..."
|
||||
if curl -f http://localhost:8081/ &> /dev/null; then
|
||||
echo "✅ 健康检查通过!应用正常运行"
|
||||
else
|
||||
echo "⚠️ 健康检查失败,请查看容器日志"
|
||||
echo " docker logs moodist-test"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🎉 本地构建和测试完成!"
|
||||
Loading…
Add table
Reference in a new issue