Add Docker support with development and production configurations
This commit is contained in:
		
							parent
							
								
									857739af97
								
							
						
					
					
						commit
						43083de965
					
				
							
								
								
									
										58
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								README.md
									
									
									
									
									
								
							| @ -47,6 +47,64 @@ pnpm build | |||||||
| pnpm start | pnpm start | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
|  | ### 使用 Docker | ||||||
|  | 
 | ||||||
|  | 我们提供了两种 Docker 环境配置:开发环境和生产环境。所有 Docker 相关文件都位于 `docker` 目录下。 | ||||||
|  | 
 | ||||||
|  | #### 开发环境 | ||||||
|  | 
 | ||||||
|  | 使用 Docker Compose 启动开发环境(支持热重载): | ||||||
|  | 
 | ||||||
|  | ```bash | ||||||
|  | # 启动开发环境 | ||||||
|  | docker compose -f docker/docker-compose.yml up | ||||||
|  | 
 | ||||||
|  | # 在后台运行 | ||||||
|  | docker compose -f docker/docker-compose.yml up -d | ||||||
|  | 
 | ||||||
|  | # 停止服务 | ||||||
|  | docker compose -f docker/docker-compose.yml down | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | #### 生产环境 | ||||||
|  | 
 | ||||||
|  | ```bash | ||||||
|  | # 构建生产镜像 | ||||||
|  | docker build -t neurapress:prod -f docker/Dockerfile.prod . | ||||||
|  | 
 | ||||||
|  | # 运行生产容器 | ||||||
|  | docker run -p 3000:3000 neurapress:prod | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | #### 发布到 Docker Hub | ||||||
|  | 
 | ||||||
|  | ```bash | ||||||
|  | # 登录到 Docker Hub | ||||||
|  | docker login | ||||||
|  | 
 | ||||||
|  | # 构建并标记镜像 | ||||||
|  | docker build -t [your-dockerhub-username]/neurapress:latest -f docker/Dockerfile.prod . | ||||||
|  | 
 | ||||||
|  | # 推送到 Docker Hub | ||||||
|  | docker push [your-dockerhub-username]/neurapress:latest | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | #### 从 Docker Hub 拉取和运行 | ||||||
|  | 
 | ||||||
|  | ```bash | ||||||
|  | # 拉取镜像 | ||||||
|  | docker pull [your-dockerhub-username]/neurapress:latest | ||||||
|  | 
 | ||||||
|  | # 运行容器 | ||||||
|  | docker run -p 3000:3000 [your-dockerhub-username]/neurapress:latest | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | 注意: | ||||||
|  | - 使用 Docker Hub 时,请将 `[your-dockerhub-username]` 替换为你的 Docker Hub 用户名 | ||||||
|  | - 开发环境支持热重载,代码修改后会自动更新 | ||||||
|  | - 生产环境使用多阶段构建,优化了镜像大小和安全性 | ||||||
|  | - 所有环境都使用非 root 用户运行,提高安全性 | ||||||
|  | 
 | ||||||
| ## 使用指南 | ## 使用指南 | ||||||
| 
 | 
 | ||||||
| 1. **编辑内容** | 1. **编辑内容** | ||||||
|  | |||||||
							
								
								
									
										58
									
								
								docker/.dockerignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								docker/.dockerignore
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,58 @@ | |||||||
|  | # Dependencies | ||||||
|  | node_modules | ||||||
|  | .pnpm-store | ||||||
|  | .npm | ||||||
|  | .yarn | ||||||
|  | 
 | ||||||
|  | # Next.js build output | ||||||
|  | .next | ||||||
|  | out | ||||||
|  | build | ||||||
|  | 
 | ||||||
|  | # Testing | ||||||
|  | coverage | ||||||
|  | .nyc_output | ||||||
|  | 
 | ||||||
|  | # Debug | ||||||
|  | npm-debug.log* | ||||||
|  | yarn-debug.log* | ||||||
|  | yarn-error.log* | ||||||
|  | .pnpm-debug.log* | ||||||
|  | 
 | ||||||
|  | # Local env files | ||||||
|  | .env*.local | ||||||
|  | .env | ||||||
|  | .env.development | ||||||
|  | .env.test | ||||||
|  | .env.production | ||||||
|  | 
 | ||||||
|  | # Version control | ||||||
|  | .git | ||||||
|  | .gitignore | ||||||
|  | .gitattributes | ||||||
|  | 
 | ||||||
|  | # IDE | ||||||
|  | .idea | ||||||
|  | .vscode | ||||||
|  | *.swp | ||||||
|  | *.swo | ||||||
|  | *.swn | ||||||
|  | .DS_Store | ||||||
|  | 
 | ||||||
|  | # Docker | ||||||
|  | docker/ | ||||||
|  | Dockerfile* | ||||||
|  | docker-compose* | ||||||
|  | .dockerignore | ||||||
|  | 
 | ||||||
|  | # Cursor | ||||||
|  | .cursor | ||||||
|  | 
 | ||||||
|  | # Misc | ||||||
|  | *.log | ||||||
|  | .cache | ||||||
|  | .eslintcache | ||||||
|  | .stylelintcache | ||||||
|  | *.bak | ||||||
|  | *.tmp | ||||||
|  | *~  | ||||||
							
								
								
									
										29
									
								
								docker/Dockerfile.dev
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								docker/Dockerfile.dev
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | |||||||
|  | FROM node:20-alpine | ||||||
|  | 
 | ||||||
|  | WORKDIR /app | ||||||
|  | 
 | ||||||
|  | # Install pnpm | ||||||
|  | RUN npm install -g pnpm | ||||||
|  | 
 | ||||||
|  | # Add a non-root user | ||||||
|  | RUN addgroup -g 1001 -S nodejs && \ | ||||||
|  |     adduser -S nextjs -u 1001 | ||||||
|  | 
 | ||||||
|  | # Copy package files | ||||||
|  | COPY package.json pnpm-lock.yaml ./ | ||||||
|  | 
 | ||||||
|  | # Install dependencies with cache optimization | ||||||
|  | RUN --mount=type=cache,target=/root/.local/share/pnpm/store \ | ||||||
|  |     pnpm install --frozen-lockfile | ||||||
|  | 
 | ||||||
|  | # Switch to non-root user | ||||||
|  | USER nextjs | ||||||
|  | 
 | ||||||
|  | # Copy source code | ||||||
|  | COPY --chown=nextjs:nodejs . . | ||||||
|  | 
 | ||||||
|  | # Expose port | ||||||
|  | EXPOSE 3000 | ||||||
|  | 
 | ||||||
|  | # Start development server | ||||||
|  | CMD ["pnpm", "dev"]  | ||||||
							
								
								
									
										60
									
								
								docker/Dockerfile.prod
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								docker/Dockerfile.prod
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,60 @@ | |||||||
|  | # Build stage | ||||||
|  | FROM node:20-alpine AS builder | ||||||
|  | 
 | ||||||
|  | # Add a non-root user | ||||||
|  | RUN addgroup -g 1001 -S nodejs && \ | ||||||
|  |     adduser -S nextjs -u 1001 | ||||||
|  | 
 | ||||||
|  | WORKDIR /app | ||||||
|  | 
 | ||||||
|  | # Install pnpm | ||||||
|  | RUN npm install -g pnpm | ||||||
|  | 
 | ||||||
|  | # Copy package files | ||||||
|  | COPY package.json pnpm-lock.yaml ./ | ||||||
|  | 
 | ||||||
|  | # Install dependencies with cache optimization | ||||||
|  | RUN --mount=type=cache,target=/root/.local/share/pnpm/store \ | ||||||
|  |     pnpm install --frozen-lockfile | ||||||
|  | 
 | ||||||
|  | # Copy source code | ||||||
|  | COPY . . | ||||||
|  | 
 | ||||||
|  | # Build application | ||||||
|  | RUN pnpm build | ||||||
|  | 
 | ||||||
|  | # Production stage | ||||||
|  | FROM node:20-alpine AS runner | ||||||
|  | 
 | ||||||
|  | # Add a non-root user | ||||||
|  | RUN addgroup -g 1001 -S nodejs && \ | ||||||
|  |     adduser -S nextjs -u 1001 | ||||||
|  | 
 | ||||||
|  | WORKDIR /app | ||||||
|  | 
 | ||||||
|  | # Install pnpm | ||||||
|  | RUN npm install -g pnpm | ||||||
|  | 
 | ||||||
|  | # Set production environment | ||||||
|  | ENV NODE_ENV=production | ||||||
|  | ENV PORT=3000 | ||||||
|  | 
 | ||||||
|  | # Copy necessary files from builder | ||||||
|  | COPY --from=builder --chown=nextjs:nodejs /app/package.json . | ||||||
|  | COPY --from=builder --chown=nextjs:nodejs /app/pnpm-lock.yaml . | ||||||
|  | COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next | ||||||
|  | COPY --from=builder --chown=nextjs:nodejs /app/public ./public | ||||||
|  | COPY --from=builder --chown=nextjs:nodejs /app/next.config.js . | ||||||
|  | 
 | ||||||
|  | # Install production dependencies only | ||||||
|  | RUN --mount=type=cache,target=/root/.local/share/pnpm/store \ | ||||||
|  |     pnpm install --prod --frozen-lockfile | ||||||
|  | 
 | ||||||
|  | # Switch to non-root user | ||||||
|  | USER nextjs | ||||||
|  | 
 | ||||||
|  | # Expose port | ||||||
|  | EXPOSE 3000 | ||||||
|  | 
 | ||||||
|  | # Start the application | ||||||
|  | CMD ["pnpm", "start"]  | ||||||
							
								
								
									
										16
									
								
								docker/docker-compose.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								docker/docker-compose.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | |||||||
|  | version: '3.8' | ||||||
|  | 
 | ||||||
|  | services: | ||||||
|  |   app: | ||||||
|  |     build: | ||||||
|  |       context: .. | ||||||
|  |       dockerfile: docker/Dockerfile.dev | ||||||
|  |     ports: | ||||||
|  |       - "3000:3000" | ||||||
|  |     volumes: | ||||||
|  |       - ..:/app | ||||||
|  |       - /app/node_modules | ||||||
|  |       - /app/.next | ||||||
|  |     environment: | ||||||
|  |       - NODE_ENV=development | ||||||
|  |     command: pnpm dev  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 herui02
						herui02