mirror of
https://github.com/nagisa77/OpenIsle.git
synced 2026-08-17 00:31:01 +00:00
fix: 添加环境名、变量名
This commit is contained in:
@@ -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)"
|
||||||
+22
-13
@@ -2,7 +2,7 @@ services:
|
|||||||
# MySQL service
|
# MySQL service
|
||||||
mysql:
|
mysql:
|
||||||
image: mysql:8.0
|
image: mysql:8.0
|
||||||
container_name: openisle-mysql
|
container_name: ${COMPOSE_PROJECT_NAME}-openisle-mysql
|
||||||
restart: always
|
restart: always
|
||||||
env_file:
|
env_file:
|
||||||
- ${ENV_FILE:-../.env}
|
- ${ENV_FILE:-../.env}
|
||||||
@@ -32,7 +32,7 @@ services:
|
|||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: opensearch.Dockerfile
|
dockerfile: opensearch.Dockerfile
|
||||||
container_name: opensearch
|
container_name: ${COMPOSE_PROJECT_NAME}-opensearch
|
||||||
environment:
|
environment:
|
||||||
- cluster.name=os-single
|
- cluster.name=os-single
|
||||||
- node.name=os-node-1
|
- node.name=os-node-1
|
||||||
@@ -45,8 +45,8 @@ services:
|
|||||||
memlock: { soft: -1, hard: -1 }
|
memlock: { soft: -1, hard: -1 }
|
||||||
nofile: { soft: 65536, hard: 65536 }
|
nofile: { soft: 65536, hard: 65536 }
|
||||||
volumes:
|
volumes:
|
||||||
- ./data:/usr/share/opensearch/data
|
- ${OPENSEARCH_DATA_DIR:-./data}:/usr/share/opensearch/data
|
||||||
- ./snapshots:/snapshots
|
- ${OPENSEARCH_SNAPSHOT_DIR:-./snapshots}:/snapshots
|
||||||
ports:
|
ports:
|
||||||
- "${OPENSEARCH_PORT:-9200}:9200"
|
- "${OPENSEARCH_PORT:-9200}:9200"
|
||||||
- "${OPENSEARCH_METRICS_PORT:-9600}:9600"
|
- "${OPENSEARCH_METRICS_PORT:-9600}:9600"
|
||||||
@@ -64,7 +64,7 @@ services:
|
|||||||
|
|
||||||
dashboards:
|
dashboards:
|
||||||
image: opensearchproject/opensearch-dashboards:3.0.0
|
image: opensearchproject/opensearch-dashboards:3.0.0
|
||||||
container_name: os-dashboards
|
container_name: ${COMPOSE_PROJECT_NAME}-os-dashboards
|
||||||
environment:
|
environment:
|
||||||
OPENSEARCH_HOSTS: '["http://opensearch:9200"]'
|
OPENSEARCH_HOSTS: '["http://opensearch:9200"]'
|
||||||
DISABLE_SECURITY_DASHBOARDS_PLUGIN: "true"
|
DISABLE_SECURITY_DASHBOARDS_PLUGIN: "true"
|
||||||
@@ -78,7 +78,7 @@ services:
|
|||||||
|
|
||||||
rabbitmq:
|
rabbitmq:
|
||||||
image: rabbitmq:3.13-management
|
image: rabbitmq:3.13-management
|
||||||
container_name: openisle-rabbitmq
|
container_name: ${COMPOSE_PROJECT_NAME}-openisle-rabbitmq
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
RABBITMQ_DEFAULT_VHOST: "${RABBITMQ_VHOST:-/}"
|
RABBITMQ_DEFAULT_VHOST: "${RABBITMQ_VHOST:-/}"
|
||||||
@@ -101,7 +101,7 @@ services:
|
|||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis:7
|
image: redis:7
|
||||||
container_name: openisle-redis
|
container_name: ${COMPOSE_PROJECT_NAME}-openisle-redis
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
env_file:
|
env_file:
|
||||||
- ${ENV_FILE:-../.env}
|
- ${ENV_FILE:-../.env}
|
||||||
@@ -115,7 +115,7 @@ services:
|
|||||||
# Java spring boot service (开发便捷镜像,后续可换成打包镜像)
|
# Java spring boot service (开发便捷镜像,后续可换成打包镜像)
|
||||||
springboot:
|
springboot:
|
||||||
image: maven:3.9-eclipse-temurin-17
|
image: maven:3.9-eclipse-temurin-17
|
||||||
container_name: openisle-springboot
|
container_name: ${COMPOSE_PROJECT_NAME}-openisle-springboot
|
||||||
working_dir: /app
|
working_dir: /app
|
||||||
env_file:
|
env_file:
|
||||||
- ${ENV_FILE:-../.env}
|
- ${ENV_FILE:-../.env}
|
||||||
@@ -156,7 +156,7 @@ services:
|
|||||||
|
|
||||||
websocket-service:
|
websocket-service:
|
||||||
image: maven:3.9-eclipse-temurin-17
|
image: maven:3.9-eclipse-temurin-17
|
||||||
container_name: openisle-websocket
|
container_name: ${COMPOSE_PROJECT_NAME}-openisle-websocket
|
||||||
working_dir: /app
|
working_dir: /app
|
||||||
env_file:
|
env_file:
|
||||||
- ${ENV_FILE:-../.env}
|
- ${ENV_FILE:-../.env}
|
||||||
@@ -187,7 +187,7 @@ services:
|
|||||||
|
|
||||||
frontend_dev:
|
frontend_dev:
|
||||||
image: node:20
|
image: node:20
|
||||||
container_name: openisle-frontend-dev
|
container_name: ${COMPOSE_PROJECT_NAME}-openisle-frontend-dev
|
||||||
working_dir: /app
|
working_dir: /app
|
||||||
env_file:
|
env_file:
|
||||||
- ${ENV_FILE:-../.env}
|
- ${ENV_FILE:-../.env}
|
||||||
@@ -213,7 +213,7 @@ services:
|
|||||||
dockerfile: docker/frontend-service.Dockerfile
|
dockerfile: docker/frontend-service.Dockerfile
|
||||||
args:
|
args:
|
||||||
NUXT_ENV: ${NUXT_ENV:-staging}
|
NUXT_ENV: ${NUXT_ENV:-staging}
|
||||||
container_name: openisle-frontend
|
container_name: ${COMPOSE_PROJECT_NAME}-openisle-frontend
|
||||||
env_file:
|
env_file:
|
||||||
- ${ENV_FILE:-../.env}
|
- ${ENV_FILE:-../.env}
|
||||||
ports:
|
ports:
|
||||||
@@ -227,7 +227,7 @@ services:
|
|||||||
|
|
||||||
loopback_8080:
|
loopback_8080:
|
||||||
image: alpine/socat
|
image: alpine/socat
|
||||||
container_name: loopback-8080
|
container_name: ${COMPOSE_PROJECT_NAME}-loopback-8080
|
||||||
# 监听“frontend_dev 容器自身的” 127.0.0.1:8080 → 转发到 springboot:8080
|
# 监听“frontend_dev 容器自身的” 127.0.0.1:8080 → 转发到 springboot:8080
|
||||||
command:
|
command:
|
||||||
- -d
|
- -d
|
||||||
@@ -249,7 +249,7 @@ services:
|
|||||||
|
|
||||||
loopback_8082:
|
loopback_8082:
|
||||||
image: alpine/socat
|
image: alpine/socat
|
||||||
container_name: loopback-8082
|
container_name: ${COMPOSE_PROJECT_NAME}-loopback-8082
|
||||||
# 监听 127.0.0.1:8082 → 转发到 websocket-service:8082(WS 纯 TCP 可直接过)
|
# 监听 127.0.0.1:8082 → 转发到 websocket-service:8082(WS 纯 TCP 可直接过)
|
||||||
command:
|
command:
|
||||||
- -d
|
- -d
|
||||||
@@ -271,14 +271,23 @@ services:
|
|||||||
|
|
||||||
networks:
|
networks:
|
||||||
openisle-network:
|
openisle-network:
|
||||||
|
name: "${COMPOSE_PROJECT_NAME}_net"
|
||||||
driver: bridge
|
driver: bridge
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
mysql-data:
|
mysql-data:
|
||||||
|
name: "${COMPOSE_PROJECT_NAME}_mysql-data"
|
||||||
maven-repo:
|
maven-repo:
|
||||||
|
name: "${COMPOSE_PROJECT_NAME}_maven-repo"
|
||||||
redis-data:
|
redis-data:
|
||||||
|
name: "${COMPOSE_PROJECT_NAME}_redis-data"
|
||||||
rabbitmq-data:
|
rabbitmq-data:
|
||||||
|
name: "${COMPOSE_PROJECT_NAME}_rabbitmq-data"
|
||||||
websocket-maven-repo:
|
websocket-maven-repo:
|
||||||
|
name: "${COMPOSE_PROJECT_NAME}_websocket-maven-repo"
|
||||||
frontend-node-modules:
|
frontend-node-modules:
|
||||||
|
name: "${COMPOSE_PROJECT_NAME}_frontend-node-modules"
|
||||||
frontend-service-node-modules:
|
frontend-service-node-modules:
|
||||||
|
name: "${COMPOSE_PROJECT_NAME}_frontend-service-node-modules"
|
||||||
frontend-static:
|
frontend-static:
|
||||||
|
name: "${COMPOSE_PROJECT_NAME}_frontend-static"
|
||||||
|
|||||||
Reference in New Issue
Block a user