mirror of
https://github.com/nagisa77/OpenIsle.git
synced 2026-02-27 16:40:50 +08:00
fix: 添加环境名、变量名
This commit is contained in:
57
deploy/deploy_staging.sh
Normal file
57
deploy/deploy_staging.sh
Normal file
@@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# 可用法:
|
||||
# ./deploy-staging.sh
|
||||
# ./deploy-staging.sh feature/docker
|
||||
deploy_branch="${1:-feature/docker}"
|
||||
|
||||
repo_dir="/opt/openisle/OpenIsle-staging"
|
||||
compose_file="${repo_dir}/docker/docker-compose.yaml"
|
||||
# 使用仓库根目录的 .env(CI 预先写好),也可以改成绝对路径
|
||||
env_file="${repo_dir}/.env"
|
||||
project="openisle_staging"
|
||||
|
||||
echo "👉 Enter repo..."
|
||||
cd "$repo_dir"
|
||||
|
||||
echo "👉 Syncing code & switching to branch: $deploy_branch"
|
||||
git fetch --all --prune
|
||||
git checkout -B "$deploy_branch" "origin/$deploy_branch"
|
||||
git reset --hard "origin/$deploy_branch"
|
||||
|
||||
echo "👉 Ensuring env file: $env_file"
|
||||
if [ ! -f "$env_file" ]; then
|
||||
echo "❌ ${env_file} not found. Create it based on .env.example (with staging domains)."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export COMPOSE_PROJECT_NAME="$project"
|
||||
# 供 compose 内各 service 的 env_file 使用
|
||||
export ENV_FILE="$env_file"
|
||||
|
||||
echo "👉 Validate compose..."
|
||||
docker compose -f "$compose_file" --env-file "$env_file" config >/dev/null
|
||||
|
||||
echo "👉 Pull base images (for image-based services)..."
|
||||
docker compose -f "$compose_file" --env-file "$env_file" pull --ignore-pull-failures
|
||||
|
||||
echo "👉 Build images (staging)..."
|
||||
# 前端 + OpenSearch 都是自建镜像;--pull 更新其基础镜像
|
||||
docker compose -f "$compose_file" --env-file "$env_file" \
|
||||
build --pull \
|
||||
--build-arg NUXT_ENV=staging \
|
||||
frontend_service opensearch
|
||||
|
||||
echo "👉 Recreate & start all target services (no dev profile)..."
|
||||
docker compose -f "$compose_file" --env-file "$env_file" \
|
||||
up -d --force-recreate --remove-orphans \
|
||||
mysql redis rabbitmq opensearch dashboards websocket-service springboot frontend_service
|
||||
|
||||
echo "👉 Current status:"
|
||||
docker compose -f "$compose_file" --env-file "$env_file" ps
|
||||
|
||||
echo "👉 Pruning dangling images..."
|
||||
docker image prune -f
|
||||
|
||||
echo "✅ Staging stack deployed at $(date)"
|
||||
@@ -2,7 +2,7 @@ services:
|
||||
# MySQL service
|
||||
mysql:
|
||||
image: mysql:8.0
|
||||
container_name: openisle-mysql
|
||||
container_name: ${COMPOSE_PROJECT_NAME}-openisle-mysql
|
||||
restart: always
|
||||
env_file:
|
||||
- ${ENV_FILE:-../.env}
|
||||
@@ -32,7 +32,7 @@ services:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: opensearch.Dockerfile
|
||||
container_name: opensearch
|
||||
container_name: ${COMPOSE_PROJECT_NAME}-opensearch
|
||||
environment:
|
||||
- cluster.name=os-single
|
||||
- node.name=os-node-1
|
||||
@@ -45,8 +45,8 @@ services:
|
||||
memlock: { soft: -1, hard: -1 }
|
||||
nofile: { soft: 65536, hard: 65536 }
|
||||
volumes:
|
||||
- ./data:/usr/share/opensearch/data
|
||||
- ./snapshots:/snapshots
|
||||
- ${OPENSEARCH_DATA_DIR:-./data}:/usr/share/opensearch/data
|
||||
- ${OPENSEARCH_SNAPSHOT_DIR:-./snapshots}:/snapshots
|
||||
ports:
|
||||
- "${OPENSEARCH_PORT:-9200}:9200"
|
||||
- "${OPENSEARCH_METRICS_PORT:-9600}:9600"
|
||||
@@ -64,7 +64,7 @@ services:
|
||||
|
||||
dashboards:
|
||||
image: opensearchproject/opensearch-dashboards:3.0.0
|
||||
container_name: os-dashboards
|
||||
container_name: ${COMPOSE_PROJECT_NAME}-os-dashboards
|
||||
environment:
|
||||
OPENSEARCH_HOSTS: '["http://opensearch:9200"]'
|
||||
DISABLE_SECURITY_DASHBOARDS_PLUGIN: "true"
|
||||
@@ -78,7 +78,7 @@ services:
|
||||
|
||||
rabbitmq:
|
||||
image: rabbitmq:3.13-management
|
||||
container_name: openisle-rabbitmq
|
||||
container_name: ${COMPOSE_PROJECT_NAME}-openisle-rabbitmq
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
RABBITMQ_DEFAULT_VHOST: "${RABBITMQ_VHOST:-/}"
|
||||
@@ -101,7 +101,7 @@ services:
|
||||
|
||||
redis:
|
||||
image: redis:7
|
||||
container_name: openisle-redis
|
||||
container_name: ${COMPOSE_PROJECT_NAME}-openisle-redis
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- ${ENV_FILE:-../.env}
|
||||
@@ -115,7 +115,7 @@ services:
|
||||
# Java spring boot service (开发便捷镜像,后续可换成打包镜像)
|
||||
springboot:
|
||||
image: maven:3.9-eclipse-temurin-17
|
||||
container_name: openisle-springboot
|
||||
container_name: ${COMPOSE_PROJECT_NAME}-openisle-springboot
|
||||
working_dir: /app
|
||||
env_file:
|
||||
- ${ENV_FILE:-../.env}
|
||||
@@ -156,7 +156,7 @@ services:
|
||||
|
||||
websocket-service:
|
||||
image: maven:3.9-eclipse-temurin-17
|
||||
container_name: openisle-websocket
|
||||
container_name: ${COMPOSE_PROJECT_NAME}-openisle-websocket
|
||||
working_dir: /app
|
||||
env_file:
|
||||
- ${ENV_FILE:-../.env}
|
||||
@@ -187,7 +187,7 @@ services:
|
||||
|
||||
frontend_dev:
|
||||
image: node:20
|
||||
container_name: openisle-frontend-dev
|
||||
container_name: ${COMPOSE_PROJECT_NAME}-openisle-frontend-dev
|
||||
working_dir: /app
|
||||
env_file:
|
||||
- ${ENV_FILE:-../.env}
|
||||
@@ -213,7 +213,7 @@ services:
|
||||
dockerfile: docker/frontend-service.Dockerfile
|
||||
args:
|
||||
NUXT_ENV: ${NUXT_ENV:-staging}
|
||||
container_name: openisle-frontend
|
||||
container_name: ${COMPOSE_PROJECT_NAME}-openisle-frontend
|
||||
env_file:
|
||||
- ${ENV_FILE:-../.env}
|
||||
ports:
|
||||
@@ -227,7 +227,7 @@ services:
|
||||
|
||||
loopback_8080:
|
||||
image: alpine/socat
|
||||
container_name: loopback-8080
|
||||
container_name: ${COMPOSE_PROJECT_NAME}-loopback-8080
|
||||
# 监听“frontend_dev 容器自身的” 127.0.0.1:8080 → 转发到 springboot:8080
|
||||
command:
|
||||
- -d
|
||||
@@ -249,7 +249,7 @@ services:
|
||||
|
||||
loopback_8082:
|
||||
image: alpine/socat
|
||||
container_name: loopback-8082
|
||||
container_name: ${COMPOSE_PROJECT_NAME}-loopback-8082
|
||||
# 监听 127.0.0.1:8082 → 转发到 websocket-service:8082(WS 纯 TCP 可直接过)
|
||||
command:
|
||||
- -d
|
||||
@@ -271,14 +271,23 @@ services:
|
||||
|
||||
networks:
|
||||
openisle-network:
|
||||
name: "${COMPOSE_PROJECT_NAME}_net"
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
mysql-data:
|
||||
name: "${COMPOSE_PROJECT_NAME}_mysql-data"
|
||||
maven-repo:
|
||||
name: "${COMPOSE_PROJECT_NAME}_maven-repo"
|
||||
redis-data:
|
||||
name: "${COMPOSE_PROJECT_NAME}_redis-data"
|
||||
rabbitmq-data:
|
||||
name: "${COMPOSE_PROJECT_NAME}_rabbitmq-data"
|
||||
websocket-maven-repo:
|
||||
name: "${COMPOSE_PROJECT_NAME}_websocket-maven-repo"
|
||||
frontend-node-modules:
|
||||
name: "${COMPOSE_PROJECT_NAME}_frontend-node-modules"
|
||||
frontend-service-node-modules:
|
||||
name: "${COMPOSE_PROJECT_NAME}_frontend-service-node-modules"
|
||||
frontend-static:
|
||||
name: "${COMPOSE_PROJECT_NAME}_frontend-static"
|
||||
|
||||
Reference in New Issue
Block a user