fix: 初步转移为docker

This commit is contained in:
Tim
2025-09-28 21:06:52 +08:00
parent 774611f3a8
commit 0d7dc93a67
10 changed files with 215 additions and 96 deletions

94
.env.example Normal file
View File

@@ -0,0 +1,94 @@
# === Core Service Ports ===
SERVER_PORT=8080
FRONTEND_PORT=3000
WEBSOCKET_PORT=8082
MYSQL_PORT=3306
REDIS_PORT=6379
RABBITMQ_PORT=5672
RABBITMQ_MANAGEMENT_PORT=15672
# === OpenSearch Configuration ===
OPENSEARCH_PORT=9200
OPENSEARCH_METRICS_PORT=9600
OPENSEARCH_DASHBOARDS_PORT=5601
OPENSEARCH_ENABLED=true
OPENSEARCH_SCHEME=http
OPENSEARCH_USERNAME=
OPENSEARCH_PASSWORD=
# === Database Configuration ===
MYSQL_DATABASE=openisle
MYSQL_ROOT_PASSWORD=
MYSQL_USER=
MYSQL_PASSWORD=
MYSQL_HOST=
# === Redis Configuration ===
REDIS_HOST=redis
REDIS_DATABASE=0
# === RabbitMQ Configuration ===
RABBITMQ_HOST=rabbitmq
RABBITMQ_USERNAME=openisle
RABBITMQ_PASSWORD=openisle_password
# === Backend Application Secrets ===
JWT_SECRET=change-me-jwt-secret
JWT_REASON_SECRET=change-me-jwt-reason-secret
JWT_RESET_SECRET=change-me-jwt-reset-secret
JWT_INVITE_SECRET=change-me-jwt-invite-secret
JWT_EXPIRATION=2592000000
PASSWORD_STRENGTH=LOW
POST_PUBLISH_MODE=DIRECT
REGISTER_MODE=WHITELIST
UPLOAD_CHECK_TYPE=true
UPLOAD_MAX_SIZE=5242880
AVATAR_STYLE=pixel-art-neutral
AVATAR_SIZE=128
AVATAR_BASE_URL=https://api.dicebear.com/6.x
USER_POSTS_LIMIT=10
USER_REPLIES_LIMIT=50
SNIPPET_LENGTH=200
SEARCH_INDEX_PREFIX=openisle
SEARCH_HIGHLIGHT_FRAGMENT_SIZE=200
SEARCH_REINDEX_ON_STARTUP=true
SEARCH_REINDEX_BATCH_SIZE=500
CAPTCHA_ENABLED=false
RECAPTCHA_SECRET_KEY=
CAPTCHA_REGISTER_ENABLED=false
CAPTCHA_LOGIN_ENABLED=false
CAPTCHA_POST_ENABLED=false
CAPTCHA_COMMENT_ENABLED=false
RESEND_API_KEY=
RESEND_FROM_EMAIL=
COS_BASE_URL=https://<你的cos>.cos.accelerate.myqcloud.com
COS_SECRET_ID=
COS_SECRET_KEY=
COS_REGION=ap-guangzhou
COS_BUCKET_NAME=
GOOGLE_CLIENT_ID=
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
DISCORD_CLIENT_ID=
DISCORD_CLIENT_SECRET=
TWITTER_CLIENT_ID=
TWITTER_CLIENT_SECRET=
TELEGRAM_BOT_TOKEN=
OPENAI_API_KEY=
OPENAI_MODEL=gpt-4o
AI_FORMAT_LIMIT=3
WEBSITE_URL=http://localhost:3000
WEBPUSH_PUBLIC_KEY=
WEBPUSH_PRIVATE_KEY=
LOG_LEVEL=INFO
# === Frontend (Nuxt) ===
NUXT_PUBLIC_API_BASE_URL=http://127.0.0.1:8080
NUXT_PUBLIC_WEBSOCKET_URL=https://127.0.0.1:8082
NUXT_PUBLIC_WEBSITE_BASE_URL=http://localhost:3000
NUXT_PUBLIC_GOOGLE_CLIENT_ID=777830451304-nt8afkkap18gui4f9entcha99unal744.apps.googleusercontent.com
NUXT_PUBLIC_GITHUB_CLIENT_ID=Ov23liOlrZnPKRF7s7NN
NUXT_PUBLIC_DISCORD_CLIENT_ID=1394985417044000779
NUXT_PUBLIC_TWITTER_CLIENT_ID=ZTRTU05KSk9KTTJrTTdrVC1tc1E6MTpjaQ
NUXT_PUBLIC_TELEGRAM_BOT_ID=8450237135

View File

@@ -1,3 +1,6 @@
# 所有环境变量已集中在仓库根目录的 .env.*.example 文件。
# 此文件保留作参考用途,如需在 Docker 之外手动配置,可按需复制。
# === Spring Boot === # === Spring Boot ===
SERVER_PORT=8080 SERVER_PORT=8080

View File

@@ -4,7 +4,7 @@ server.port=${SERVER_PORT:8080}
# for mysql # for mysql
logging.level.root=${LOG_LEVEL:INFO} logging.level.root=${LOG_LEVEL:INFO}
logging.level.com.openisle.service.CosImageUploader=DEBUG logging.level.com.openisle.service.CosImageUploader=DEBUG
spring.datasource.url=${MYSQL_URL:jdbc:mysql://localhost:3306/openisle} spring.datasource.url=jdbc:mysql://${MYSQL_HOST}:3306/${MYSQL_DATABASE}
spring.datasource.username=${MYSQL_USER:root} spring.datasource.username=${MYSQL_USER:root}
spring.datasource.password=${MYSQL_PASSWORD:password} spring.datasource.password=${MYSQL_PASSWORD:password}
spring.jpa.hibernate.ddl-auto=update spring.jpa.hibernate.ddl-auto=update
@@ -47,11 +47,11 @@ app.snippet-length=${SNIPPET_LENGTH:200}
# OpenSearch integration # OpenSearch integration
app.search.enabled=${SEARCH_ENABLED:true} app.search.enabled=${SEARCH_ENABLED:true}
app.search.host=${SEARCH_HOST:localhost} app.search.host=${OPENSEARCH_HOST:localhost}
app.search.port=${SEARCH_PORT:9200} app.search.port=${OPENSEARCH_PORT:9200}
app.search.scheme=${SEARCH_SCHEME:http} app.search.scheme=${OPENSEARCH_SCHEME:http}
app.search.username=${SEARCH_USERNAME:} app.search.username=${OPENSEARCH_USERNAME:}
app.search.password=${SEARCH_PASSWORD:} app.search.password=${OPENSEARCH_PASSWORD:}
app.search.index-prefix=${SEARCH_INDEX_PREFIX:openisle} app.search.index-prefix=${SEARCH_INDEX_PREFIX:openisle}
app.search.highlight-fragment-size=${SEARCH_HIGHLIGHT_FRAGMENT_SIZE:${SNIPPET_LENGTH:200}} app.search.highlight-fragment-size=${SEARCH_HIGHLIGHT_FRAGMENT_SIZE:${SNIPPET_LENGTH:200}}
app.search.reindex-on-startup=${SEARCH_REINDEX_ON_STARTUP:true} app.search.reindex-on-startup=${SEARCH_REINDEX_ON_STARTUP:true}
@@ -81,15 +81,15 @@ cos.bucket-name=${COS_BUCKET_NAME:}
# your image upload services: ... # your image upload services: ...
# Google OAuth configuration # Google OAuth configuration
google.client-id=${GOOGLE_CLIENT_ID:} google.client-id=${NUXT_PUBLIC_GOOGLE_CLIENT_ID:}
# GitHub OAuth configuration # GitHub OAuth configuration
github.client-id=${GITHUB_CLIENT_ID:} github.client-id=${NUXT_PUBLIC_GITHUB_CLIENT_ID:}
github.client-secret=${GITHUB_CLIENT_SECRET:} github.client-secret=${GITHUB_CLIENT_SECRET:}
# Discord OAuth configuration # Discord OAuth configuration
discord.client-id=${DISCORD_CLIENT_ID:} discord.client-id=${NUXT_PUBLIC_DISCORD_CLIENT_ID:}
discord.client-secret=${DISCORD_CLIENT_SECRET:} discord.client-secret=${DISCORD_CLIENT_SECRET:}
# Twitter OAuth configuration # Twitter OAuth configuration
twitter.client-id=${TWITTER_CLIENT_ID:} twitter.client-id=${NUXT_PUBLIC_TWITTER_CLIENT_ID:}
twitter.client-secret=${TWITTER_CLIENT_SECRET:} twitter.client-secret=${TWITTER_CLIENT_SECRET:}
# Telegram login configuration # Telegram login configuration
telegram.bot-token=${TELEGRAM_BOT_TOKEN:} telegram.bot-token=${TELEGRAM_BOT_TOKEN:}

View File

@@ -1,16 +1,4 @@
# 前端访问端口 # 已迁移到仓库根目录的 .env.*.example 文件。
SERVER_PORT=8080 # 请复制对应环境的示例文件到项目根目录,例如:
# cp ../.env.dev.example ../.env
# OpenSearch 配置 # docker-compose 将自动读取 ../.env。
OPENSEARCH_PORT=9200
OPENSEARCH_METRICS_PORT=9600
OPENSEARCH_DASHBOARDS_PORT=5601
# MySQL 配置
MYSQL_ROOT_PASSWORD=toor
# 会覆盖 `open-isle.env`
MYSQL_PORT=3306
MYSQL_DATABASE=openisle
MYSQL_USER=<数据库用户名>
MYSQL_PASSWORD=<数据库密码>

View File

@@ -5,16 +5,20 @@ services:
container_name: openisle-mysql container_name: openisle-mysql
restart: always restart: always
env_file: env_file:
- ../backend/open-isle.env - ../.env
- ./.env environment:
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
ports: ports:
- "${MYSQL_PORT}:3306" - "${MYSQL_PORT:-3306}:3306"
volumes: volumes:
- mysql-data:/var/lib/mysql - mysql-data:/var/lib/mysql
- ../backend/src/main/resources/db/init:/docker-entrypoint-initdb.d - ../backend/src/main/resources/db/init:/docker-entrypoint-initdb.d
networks: networks:
- openisle-network - openisle-network
# OpenSearch Service # OpenSearch Service
opensearch: opensearch:
build: build:
@@ -52,6 +56,35 @@ services:
- opensearch - opensearch
restart: unless-stopped restart: unless-stopped
rabbitmq:
image: rabbitmq:3.13-management
container_name: openisle-rabbitmq
restart: unless-stopped
env_file:
- ../.env
environment:
RABBITMQ_DEFAULT_USER: ${RABBITMQ_USERNAME}
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD}
ports:
- "${RABBITMQ_PORT:-5672}:5672"
- "${RABBITMQ_MANAGEMENT_PORT:-15672}:15672"
volumes:
- rabbitmq-data:/var/lib/rabbitmq
networks:
- openisle-network
redis:
image: redis:7
container_name: openisle-redis
restart: unless-stopped
env_file:
- ../.env
ports:
- "${REDIS_PORT:-6379}:6379"
volumes:
- redis-data:/data
networks:
- openisle-network
# Java spring boot service # Java spring boot service
springboot: springboot:
@@ -59,21 +92,63 @@ services:
container_name: openisle-springboot container_name: openisle-springboot
working_dir: /app working_dir: /app
env_file: env_file:
- ../backend/open-isle.env - ../.env
- ./.env
environment:
- MYSQL_URL=jdbc:mysql://mysql:${MYSQL_PORT}/${MYSQL_DATABASE}?useUnicode=yes&characterEncoding=UTF-8&useInformationSchema=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
ports: ports:
- "${SERVER_PORT}:8080" - "${SERVER_PORT:-8080}:${SERVER_PORT:-8080}"
volumes: volumes:
- ../backend:/app - ../backend:/app
- maven-repo:/root/.m2 - maven-repo:/root/.m2
depends_on: depends_on:
- mysql - mysql
- redis
- rabbitmq
command: mvn clean spring-boot:run -Dmaven.test.skip=true command: mvn clean spring-boot:run -Dmaven.test.skip=true
networks: networks:
- openisle-network - openisle-network
websocket-service:
image: maven:3.9-eclipse-temurin-17
container_name: openisle-websocket
working_dir: /app
env_file:
- ../.env
environment:
SERVER_PORT: ${WEBSOCKET_PORT}
RABBITMQ_HOST: ${RABBITMQ_HOST}
RABBITMQ_PORT: ${RABBITMQ_PORT}
RABBITMQ_USERNAME: ${RABBITMQ_USERNAME}
RABBITMQ_PASSWORD: ${RABBITMQ_PASSWORD}
JWT_SECRET: ${JWT_SECRET}
WEBSITE_URL: ${WEBSITE_URL}
ports:
- "${WEBSOCKET_PORT:-8082}:${WEBSOCKET_PORT:-8082}"
volumes:
- ../websocket_service:/app
- websocket-maven-repo:/root/.m2
depends_on:
- rabbitmq
command: mvn clean spring-boot:run -Dmaven.test.skip=true
networks:
- openisle-network
frontend:
image: node:20
container_name: openisle-frontend
working_dir: /app
env_file:
- ../.env
command: sh -c "npm install && npm run dev"
volumes:
- ../frontend_nuxt:/app
- frontend-node-modules:/app/node_modules
ports:
- "${FRONTEND_PORT:-3000}:3000"
depends_on:
- springboot
- websocket-service
networks:
- openisle-network
networks: networks:
openisle-network: openisle-network:
driver: bridge driver: bridge
@@ -81,3 +156,7 @@ networks:
volumes: volumes:
mysql-data: mysql-data:
maven-repo: maven-repo:
redis-data:
rabbitmq-data:
websocket-maven-repo:
frontend-node-modules:

View File

@@ -1,12 +1,3 @@
; 本地部署后端 # 环境变量已统一迁移至仓库根目录的 .env.*.example 文件。
NUXT_PUBLIC_API_BASE_URL=http://127.0.0.1:8080 # 如需在本地运行 Nuxt请复制对应的示例文件到项目根目录
NUXT_PUBLIC_WEBSOCKET_URL=https://127.0.0.1:8082 # cp ../.env.dev.example ../.env
NUXT_PUBLIC_WEBSITE_BASE_URL=http://localhost:3000
NUXT_PUBLIC_GOOGLE_CLIENT_ID=777830451304-nt8afkkap18gui4f9entcha99unal744.apps.googleusercontent.com
# NUXT_PUBLIC_GITHUB_CLIENT_ID=Ov23liVkO1NPAX5JyWxJ
; 本地
NUXT_PUBLIC_GITHUB_CLIENT_ID=Ov23liOlrZnPKRF7s7NN
NUXT_PUBLIC_DISCORD_CLIENT_ID=1394985417044000779
NUXT_PUBLIC_TWITTER_CLIENT_ID=ZTRTU05KSk9KTTJrTTdrVC1tc1E6MTpjaQ
NUXT_PUBLIC_TELEGRAM_BOT_ID=8450237135

View File

@@ -1,19 +1,5 @@
; 本地部署后端 # 环境变量已统一迁移至仓库根目录的 .env.*.example 文件。
; NUXT_PUBLIC_API_BASE_URL=https://127.0.0.1:8081 # 根据环境选择对应文件复制至项目根目录:
; 预发环境后端 # cp ../.env.dev.example ../.env
; NUXT_PUBLIC_API_BASE_URL=https://staging.open-isle.com # cp ../.env.staging.example ../.env
; 生产环境后端 # cp ../.env.production.example ../.env
NUXT_PUBLIC_API_BASE_URL=https://open-isle.com
; 生产环境ws后端
NUXT_PUBLIC_WEBSOCKET_URL=https://open-isle.com/websocket
; 预发环境
; NUXT_PUBLIC_WEBSITE_BASE_URL=https://staging.open-isle.com
; 正式环境/生产环境
NUXT_PUBLIC_WEBSITE_BASE_URL=https://open-isle.com
NUXT_PUBLIC_GOOGLE_CLIENT_ID=777830451304-nt8afkkap18gui4f9entcha99unal744.apps.googleusercontent.com
NUXT_PUBLIC_GITHUB_CLIENT_ID=Ov23liVkO1NPAX5JyWxJ
NUXT_PUBLIC_DISCORD_CLIENT_ID=1394985417044000779
NUXT_PUBLIC_TWITTER_CLIENT_ID=ZTRTU05KSk9KTTJrTTdrVC1tc1E6MTpjaQ
NUXT_PUBLIC_TELEGRAM_BOT_ID=8450237135

View File

@@ -1,13 +1,3 @@
# 环境变量已统一迁移至仓库根目录的 .env.*.example 文件。
; 生产环境后端 # 如需配置生产环境,请复制并修改对应示例文件:
NUXT_PUBLIC_API_BASE_URL=https://www.open-isle.com # cp ../.env.production.example ../.env
; 正式环境/生产环境
NUXT_PUBLIC_WEBSITE_BASE_URL=https://www.open-isle.com
; 生产环境ws后端
NUXT_PUBLIC_WEBSOCKET_URL=https://www.open-isle.com/websocket
NUXT_PUBLIC_GOOGLE_CLIENT_ID=777830451304-nt8afkkap18gui4f9entcha99unal744.apps.googleusercontent.com
NUXT_PUBLIC_GITHUB_CLIENT_ID=Ov23liVkO1NPAX5JyWxJ
NUXT_PUBLIC_DISCORD_CLIENT_ID=1394985417044000779
NUXT_PUBLIC_TWITTER_CLIENT_ID=ZTRTU05KSk9KTTJrTTdrVC1tc1E6MTpjaQ
NUXT_PUBLIC_TELEGRAM_BOT_ID=8450237135

View File

@@ -1,17 +1,3 @@
; 本地部署后端 # 环境变量已统一迁移至仓库根目录的 .env.*.example 文件。
; NUXT_PUBLIC_API_BASE_URL=http://127.0.0.1:8080 # 如需配置预发环境,请复制并修改对应示例文件:
# cp ../.env.staging.example ../.env
; 预发环境后端
NUXT_PUBLIC_API_BASE_URL=https://staging.open-isle.com
; 预发环境ws后端
NUXT_PUBLIC_WEBSOCKET_URL=https://staging.open-isle.com/websocket
; 预发环境
NUXT_PUBLIC_WEBSITE_BASE_URL=https://staging.open-isle.com
NUXT_PUBLIC_GOOGLE_CLIENT_ID=777830451304-nt8afkkap18gui4f9entcha99unal744.apps.googleusercontent.com
NUXT_PUBLIC_GITHUB_CLIENT_ID=Ov23liVkO1NPAX5JyWxJ
NUXT_PUBLIC_DISCORD_CLIENT_ID=1394985417044000779
NUXT_PUBLIC_TWITTER_CLIENT_ID=ZTRTU05KSk9KTTJrTTdrVC1tc1E6MTpjaQ
NUXT_PUBLIC_TELEGRAM_BOT_ID=8450237135

View File

@@ -1,3 +1,5 @@
# 所有环境变量已集中在仓库根目录的 .env.*.example 文件。
# 如需在独立环境中运行,可参考以下字段:
SERVER_PORT=<your-server-port> SERVER_PORT=<your-server-port>
# RabbitMQ 配置 # RabbitMQ 配置