Initializes Docker setup for the project
Establishes a containerized development and production environment. Creates Dockerfiles, docker-compose configurations, and associated scripts. Prioritizes easy setup, dependency isolation, and platform consistency. Enhances dev experience and simplifies deployment.
This commit is contained in:
parent
5c262d2f45
commit
9454359cd2
13 changed files with 5250 additions and 1 deletions
22
.dockerignore
Normal file
22
.dockerignore
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
node_modules
|
||||
npm-debug.log
|
||||
pnpm-lock.yaml
|
||||
yarn.lock
|
||||
.git
|
||||
.gitignore
|
||||
.DS_Store
|
||||
.vscode
|
||||
.idea
|
||||
.cache
|
||||
.turbo
|
||||
dist-ssr
|
||||
coverage
|
||||
.env*
|
||||
Dockerfile*
|
||||
docker-compose*.yml
|
||||
scripts
|
||||
src
|
||||
public
|
||||
!.dockerignore
|
||||
!dist/**
|
||||
|
||||
13
Dockerfile
Normal file
13
Dockerfile
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
# Production runtime image; 前端已在宿主机构建(Makefile: build)
|
||||
FROM nginx:1.27-alpine
|
||||
|
||||
# 拷贝 nginx 配置,启用 SPA fallback
|
||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||
|
||||
# 拷贝构建产物
|
||||
COPY dist/ /usr/share/nginx/html/
|
||||
|
||||
EXPOSE 80
|
||||
CMD ["nginx", "-g", "daemon off;"]
|
||||
|
||||
|
||||
189
Makefile
Normal file
189
Makefile
Normal file
|
|
@ -0,0 +1,189 @@
|
|||
# MiniMax Referral Hub Makefile
|
||||
# 提供统一的项目管理命令
|
||||
|
||||
# 颜色定义
|
||||
GREEN = \033[32m
|
||||
YELLOW = \033[33m
|
||||
RED = \033[31m
|
||||
BLUE = \033[34m
|
||||
RESET = \033[0m
|
||||
|
||||
# 项目信息
|
||||
PROJECT_NAME = minimax-referral-hub
|
||||
VERSION = 1.0.0
|
||||
BUILD_DIR = dist
|
||||
NODE_MODULES = node_modules
|
||||
|
||||
# 包管理器自动检测(优先 pnpm,否者回退 npm)
|
||||
PKG = $(shell command -v pnpm >/dev/null 2>&1 && echo pnpm || echo npm)
|
||||
|
||||
# 默认目标
|
||||
.PHONY: help
|
||||
help: ## 显示帮助信息
|
||||
@echo "$(BLUE)$(PROJECT_NAME) v$(VERSION)$(RESET)"
|
||||
@echo "$(BLUE)Referral Hub - 开发工具$(RESET)"
|
||||
@echo ""
|
||||
@echo "$(GREEN)可用命令:$(RESET)"
|
||||
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " $(YELLOW)%-15s$(RESET) %s\n", $$1, $$2}' $(MAKEFILE_LIST)
|
||||
|
||||
# 安装和依赖管理
|
||||
.PHONY: install
|
||||
install: ## 安装项目依赖
|
||||
@echo "$(GREEN)正在安装依赖...$(RESET)"
|
||||
$(PKG) install
|
||||
@echo "$(GREEN)依赖安装完成!$(RESET)"
|
||||
|
||||
.PHONY: clean-install
|
||||
clean-install: clean install ## 清理后重新安装依赖
|
||||
@echo "$(GREEN)清理并重新安装完成!$(RESET)"
|
||||
|
||||
# 开发环境
|
||||
.PHONY: dev
|
||||
dev: install ## 安装依赖并启动开发服务器
|
||||
@echo "$(GREEN)启动开发服务器...$(RESET)"
|
||||
$(PKG) run dev
|
||||
|
||||
.PHONY: start
|
||||
start: ## 启动开发服务器(需要先安装依赖)
|
||||
@echo "$(GREEN)启动开发服务器...$(RESET)"
|
||||
$(PKG) run dev
|
||||
|
||||
# 构建和生产
|
||||
.PHONY: build
|
||||
build: ## 构建生产版本
|
||||
@echo "$(GREEN)构建生产版本...$(RESET)"
|
||||
$(PKG) run build
|
||||
@echo "$(GREEN)构建完成! 输出目录: $(BUILD_DIR)$(RESET)"
|
||||
|
||||
.PHONY: preview
|
||||
preview: ## 预览生产版本
|
||||
@echo "$(GREEN)启动生产版本预览...$(RESET)"
|
||||
$(PKG) run preview
|
||||
|
||||
# 代码质量
|
||||
.PHONY: lint
|
||||
lint: ## 运行代码质量检查
|
||||
@echo "$(GREEN)运行 ESLint 检查...$(RESET)"
|
||||
$(PKG) run lint
|
||||
|
||||
.PHONY: lint-fix
|
||||
lint-fix: ## 自动修复代码质量问题
|
||||
@echo "$(GREEN)自动修复代码问题...$(RESET)"
|
||||
$(PKG) run lint -- --fix
|
||||
|
||||
# 清理
|
||||
.PHONY: clean
|
||||
clean: ## 清理构建文件和依赖
|
||||
@echo "$(YELLOW)清理构建文件和依赖...$(RESET)"
|
||||
rm -rf $(BUILD_DIR)
|
||||
rm -rf $(NODE_MODULES)
|
||||
rm -rf .vite
|
||||
@echo "$(GREEN)清理完成!$(RESET)"
|
||||
|
||||
.PHONY: clean-build
|
||||
clean-build: ## 清理构建文件
|
||||
@echo "$(YELLOW)清理构建文件...$(RESET)"
|
||||
rm -rf $(BUILD_DIR)
|
||||
rm -rf .vite
|
||||
@echo "$(GREEN)构建文件清理完成!$(RESET)"
|
||||
|
||||
# 项目维护
|
||||
.PHONY: check
|
||||
check: lint ## 运行所有检查
|
||||
@echo "$(GREEN)所有检查完成!$(RESET)"
|
||||
|
||||
.PHONY: fresh
|
||||
fresh: clean-install build ## 全新安装并构建
|
||||
@echo "$(GREEN)全新构建完成!$(RESET)"
|
||||
|
||||
# 开发工具
|
||||
.PHONY: deps-check
|
||||
deps-check: ## 检查依赖包状态
|
||||
@echo "$(GREEN)检查依赖包状态...$(RESET)"
|
||||
$(PKG) outdated || true
|
||||
|
||||
.PHONY: deps-update
|
||||
deps-update: ## 更新依赖包
|
||||
@echo "$(YELLOW)更新依赖包...$(RESET)"
|
||||
$(PKG) update || true
|
||||
@echo "$(GREEN)依赖包更新完成!$(RESET)"
|
||||
|
||||
# 部署相关
|
||||
.PHONY: pre-deploy
|
||||
pre-deploy: clean-install lint build ## 部署前检查
|
||||
@echo "$(GREEN)部署前检查完成!$(RESET)"
|
||||
|
||||
.PHONY: size-check
|
||||
size-check: build ## 检查构建文件大小
|
||||
@echo "$(GREEN)构建文件大小:$(RESET)"
|
||||
@du -sh $(BUILD_DIR)
|
||||
@echo "$(GREEN)主要文件:$(RESET)"
|
||||
@find $(BUILD_DIR) -name "*.js" -o -name "*.css" | xargs ls -lh
|
||||
|
||||
# 信息显示
|
||||
.PHONY: info
|
||||
info: ## 显示项目信息
|
||||
@echo "$(BLUE)项目信息:$(RESET)"
|
||||
@echo " 名称: $(PROJECT_NAME)"
|
||||
@echo " 版本: $(VERSION)"
|
||||
@echo " 构建目录: $(BUILD_DIR)"
|
||||
@echo " Node.js 版本: $$(node --version 2>/dev/null || echo '未安装')"
|
||||
@echo " 包管理器: $(PKG) ($$($(PKG) --version))"
|
||||
@echo ""
|
||||
@echo "$(BLUE)目录状态:$(RESET)"
|
||||
@echo " 依赖已安装: $$([ -d $(NODE_MODULES) ] && echo '✓' || echo '✗')"
|
||||
@echo " 构建文件存在: $$([ -d $(BUILD_DIR) ] && echo '✓' || echo '✗')"
|
||||
|
||||
# 快捷组合命令
|
||||
.PHONY: quick-start
|
||||
quick-start: install start ## 快速开始开发(安装依赖并启动)
|
||||
|
||||
.PHONY: quick-build
|
||||
quick-build: lint build ## 快速构建(检查代码并构建)
|
||||
|
||||
# 本地测试完整流程
|
||||
.PHONY: test-flow
|
||||
test-flow: clean-install lint build preview ## 完整测试流程
|
||||
@echo "$(GREEN)完整测试流程完成!$(RESET)"
|
||||
|
||||
# ----- Docker 开发/生产 -----
|
||||
.PHONY: dev-up
|
||||
dev-up: ## 启动开发环境 (自动探测平台;可通过 DOCKER_PLATFORM=linux/arm64 覆盖)
|
||||
@echo "$(GREEN)启动开发环境 (Docker)$(RESET)"
|
||||
bash scripts/dev-up.sh
|
||||
|
||||
.PHONY: prod-build
|
||||
prod-build: build ## 构建生产镜像 (前端在宿主机构建)
|
||||
@echo "$(GREEN)构建生产镜像$(RESET)"
|
||||
bash scripts/prod-build.sh
|
||||
|
||||
.PHONY: prod-up
|
||||
prod-up: ## 启动生产环境 (使用生产镜像)
|
||||
@echo "$(GREEN)启动生产环境$(RESET)"
|
||||
bash scripts/prod-up.sh
|
||||
|
||||
.PHONY: rebuild
|
||||
rebuild: ## 重建生产镜像(不切换容器)
|
||||
@echo "$(GREEN)重建生产镜像$(RESET)"
|
||||
bash scripts/prod-build.sh
|
||||
|
||||
.PHONY: redeploy
|
||||
redeploy: ## 重建镜像并重新部署(零配置一键发布)
|
||||
@echo "$(GREEN)重建镜像并重新部署到生产环境$(RESET)"
|
||||
bash scripts/prod-build.sh
|
||||
bash scripts/prod-up.sh
|
||||
|
||||
.PHONY: dev-down
|
||||
dev-down: ## 停止开发环境 (保留数据卷)
|
||||
@echo "$(YELLOW)停止开发环境 (Docker)$(RESET)"
|
||||
bash scripts/dev-down.sh
|
||||
|
||||
.PHONY: prod-down
|
||||
prod-down: ## 停止生产环境 (保留数据卷)
|
||||
@echo "$(YELLOW)停止生产环境 (Docker)$(RESET)"
|
||||
bash scripts/prod-down.sh
|
||||
|
||||
# 设置默认目标
|
||||
.DEFAULT_GOAL := help
|
||||
|
||||
|
||||
16
docker-compose.dev.yml
Normal file
16
docker-compose.dev.yml
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
services:
|
||||
app:
|
||||
image: node:20
|
||||
container_name: minimax-referral-hub-dev
|
||||
working_dir: /app
|
||||
command: sh -c "corepack enable && corepack prepare pnpm@latest --activate && pnpm install && pnpm run dev -- --host 0.0.0.0"
|
||||
ports:
|
||||
- "5173:5173"
|
||||
environment:
|
||||
- CHOKIDAR_USEPOLLING=1
|
||||
- WATCHPACK_POLLING=true
|
||||
- NODE_ENV=development
|
||||
volumes:
|
||||
- ./:/app
|
||||
restart: unless-stopped
|
||||
|
||||
8
docker-compose.prod.yml
Normal file
8
docker-compose.prod.yml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
services:
|
||||
web:
|
||||
image: minimax-referral-hub:latest
|
||||
container_name: minimax-referral-hub
|
||||
ports:
|
||||
- "8080:80"
|
||||
restart: unless-stopped
|
||||
|
||||
21
nginx.conf
Normal file
21
nginx.conf
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
|
||||
root /usr/share/nginx/html;
|
||||
index index.html;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
|
||||
location ~* \.(js|css|png|jpg|jpeg|gif|svg|ico|woff2?|ttf)$ {
|
||||
access_log off;
|
||||
add_header Cache-Control "public, max-age=31536000, immutable";
|
||||
try_files $uri =404;
|
||||
}
|
||||
|
||||
error_page 500 502 503 504 /index.html;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -80,5 +80,6 @@
|
|||
"typescript": "~5.7.2",
|
||||
"typescript-eslint": "^8.26.1",
|
||||
"vite": "^6.3.1"
|
||||
}
|
||||
},
|
||||
"packageManager": "pnpm@10.12.4+sha512.5ea8b0deed94ed68691c9bad4c955492705c5eeb8a87ef86bc62c74a26b037b08ff9570f108b2e4dbd1dd1a9186fea925e527f141c648e85af45631074680184"
|
||||
}
|
||||
|
|
|
|||
4924
pnpm-lock.yaml
generated
Normal file
4924
pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load diff
9
scripts/dev-down.sh
Executable file
9
scripts/dev-down.sh
Executable file
|
|
@ -0,0 +1,9 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
docker compose -f docker-compose.dev.yml down
|
||||
echo "[dev-down] Dev environment stopped"
|
||||
|
||||
|
||||
12
scripts/dev-up.sh
Executable file
12
scripts/dev-up.sh
Executable file
|
|
@ -0,0 +1,12 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
export DOCKER_PLATFORM="${DOCKER_PLATFORM:-$(docker info --format '{{.OSType}}/{{.Architecture}}' 2>/dev/null || echo linux/amd64)}"
|
||||
|
||||
echo "[dev-up] Using platform: ${DOCKER_PLATFORM}"
|
||||
docker compose -f docker-compose.dev.yml up -d --remove-orphans
|
||||
echo "[dev-up] Dev environment is up at http://localhost:5173"
|
||||
|
||||
|
||||
16
scripts/prod-build.sh
Executable file
16
scripts/prod-build.sh
Executable file
|
|
@ -0,0 +1,16 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
echo "[prod-build] Building frontend on host..."
|
||||
PKG=$(command -v pnpm >/dev/null 2>&1 && echo pnpm || echo npm)
|
||||
$PKG install
|
||||
$PKG run build
|
||||
|
||||
echo "[prod-build] Building docker image..."
|
||||
IMAGE_NAME="minimax-referral-hub:latest"
|
||||
docker build -t "$IMAGE_NAME" .
|
||||
echo "[prod-build] Image built: $IMAGE_NAME"
|
||||
|
||||
|
||||
9
scripts/prod-down.sh
Executable file
9
scripts/prod-down.sh
Executable file
|
|
@ -0,0 +1,9 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
docker compose -f docker-compose.prod.yml down
|
||||
echo "[prod-down] Production environment stopped"
|
||||
|
||||
|
||||
9
scripts/prod-up.sh
Executable file
9
scripts/prod-up.sh
Executable file
|
|
@ -0,0 +1,9 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
docker compose -f docker-compose.prod.yml up -d --remove-orphans
|
||||
echo "[prod-up] Production environment is up at http://localhost:8080"
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue