Aq/aq-flex-api/deploy.sh

181 lines
5.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
set -e
DEPLOY_DIR="/data/aq-flex"
ENV_FILE="$DEPLOY_DIR/.env"
mkdir -p "$DEPLOY_DIR"
# 自动生成强密码
gen_password() {
< /dev/urandom tr -dc 'A-Za-z0-9' | head -c 16
}
# 获取主机 IP(排除 loopback 和 docker 网络)
HOST_IP=$(ip -4 addr | grep inet | grep -v 127.0.0.1 | grep -v docker | awk '{print $2}' | cut -d/ -f1 | head -n 1)
if [ -z "$HOST_IP" ]; then
echo "❌ 无法自动获取主机 IP 地址,请手动设置 API_BASE_URL"
exit 1
fi
# 自动生成内容
MYSQL_ROOT_PASSWORD=$(gen_password)
MYSQL_DATABASE="aq_flex"
MYSQL_USER="aq_flex"
MYSQL_PASSWORD=$(gen_password)
MYSQL_IMAGE="swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.0.42"
REDIS_IMAGE="swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/bitnami/redis:6.2.7-debian-11-r11"
API_IMAGE="registry.cn-qingdao.aliyuncs.com/xingc/aq-flex-api:25120901"
WEB_IMAGE="registry.cn-qingdao.aliyuncs.com/xingc/aq-flex-web:25120901"
APP_IMAGE="registry.cn-qingdao.aliyuncs.com/xingc/aq-flex-app:25120901"
API_PORT="10010"
WEB_PORT="10000"
APP_PORT="10001"
API_BASE_URL="http://$HOST_IP:$API_PORT"
# 可选: Docker 登录配置
#DOCKER_REGISTRY=""
#DOCKER_USERNAME=""
#DOCKER_PASSWORD=""
echo "👉 安装 Docker(如未安装)..."
if [ -z "$(command -v docker 2>/dev/null)" ]; then
curl -fsSL https://get.docker.com -o install-docker.sh
sudo sh install-docker.sh --mirror Aliyun
fi
if [ -z "$(command -v docker-compose 2>/dev/null)" ] && [ -z "$(docker compose version 2>/dev/null)" ]; then
echo "⚠️ Docker Compose 插件未安装,需手动安装 compose 插件。"
exit 1
fi
echo "✅ Docker 安装完成"
#echo "🔐 Docker 登录..."
#echo "$DOCKER_PASSWORD" | docker login "$DOCKER_REGISTRY" -u "$DOCKER_USERNAME" --password-stdin
echo "📁 创建部署目录结构..."
mkdir -p $DEPLOY_DIR/mysql/conf
mkdir -p $DEPLOY_DIR/mysql/data
mkdir -p $DEPLOY_DIR/app/.cache
mkdir -p $DEPLOY_DIR/app/logs
mkdir -p $DEPLOY_DIR/app/upload
echo "📝 生成 mysqld.cnf 配置文件..."
cat > $DEPLOY_DIR/mysql/conf/mysqld.cnf <<EOF
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
symbolic-links = 0
lower_case_table_names = 1
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 默认编码和排序规则
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
EOF
echo "📝 生成 .env 文件..."
cat > $ENV_FILE <<EOF
MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD
MYSQL_DATABASE=$MYSQL_DATABASE
MYSQL_USER=$MYSQL_USER
MYSQL_PASSWORD=$MYSQL_PASSWORD
MYSQL_IMAGE=$MYSQL_IMAGE
API_IMAGE=$API_IMAGE
WEB_IMAGE=$WEB_IMAGE
APP_IMAGE=$APP_IMAGE
API_PORT=$API_PORT
WEB_PORT=$WEB_PORT
APP_PORT=$APP_PORT
API_BASE_URL=$API_BASE_URL
EOF
echo "📝 生成 docker-compose.yml 配置文件..."
cat > $DEPLOY_DIR/docker-compose.yml <<EOF
version: '2.1'
services:
db:
image: $MYSQL_IMAGE
restart: always
ports:
- 10009:3306
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/conf/mysqld.cnf:/etc/mysql/conf.d/mysqld.cnf
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD
MYSQL_DATABASE: $MYSQL_DATABASE
MYSQL_USER: $MYSQL_USER
MYSQL_PASSWORD: $MYSQL_PASSWORD
redis:
image: $REDIS_IMAGE
restart: always
# ports:
# - 6379:6379
environment:
TZ: Asia/Shanghai
ALLOW_EMPTY_PASSWORD: "yes"
api:
image: $API_IMAGE
restart: always
depends_on:
- db
ports:
- $API_PORT:10010
volumes:
- ./app/.cache:/app/.cache
- ./app/logs:/app/logs
- ./app/upload:/app/data/upload
environment:
TZ: Asia/Shanghai
SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/$MYSQL_DATABASE?useUnicode=true&characterEncoding=utf8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
SPRING_DATASOURCE_USERNAME: $MYSQL_USER
SPRING_DATASOURCE_PASSWORD: $MYSQL_PASSWORD
SPRING_DATA_REDIS_EMBEDDED: false
SPRING_DATA_REDIS_HOST: redis
JAVET_DISABLE_PKU: 1 # fix javet SIGSEGV at createV8Runtime() in V8 Mode
web:
image: $WEB_IMAGE
restart: always
ports:
- $WEB_PORT:80
environment:
TZ: Asia/Shanghai
API_BASE_URL: $API_BASE_URL
# app:
# image: $APP_IMAGE
# restart: always
# ports:
# - $APP_PORT:80
# environment:
# TZ: Asia/Shanghai
# API_BASE_URL: $API_BASE_URL/admin
EOF
echo "🚀 启动服务..."
cd $DEPLOY_DIR
docker compose up -d
echo ""
echo "✅ 部署完成!"
echo "🔐 数据库 root 密码: $MYSQL_ROOT_PASSWORD"
echo "🔐 数据库用户密码: $MYSQL_PASSWORD"
echo "🌐 PC端地址: http://$HOST_IP:$WEB_PORT"
#echo "🌐 APP端地址: http://$HOST_IP:$APP_PORT"
echo "🌐 接口地址: $API_BASE_URL"
echo "📄 所有敏感配置已保存至: $ENV_FILE"
echo "✅ 服务日志查看命令如下:"
echo " 查看所有服务日志: docker compose logs -f"
echo " 查看 API 日志: docker compose logs -f api"
echo " 查看 Web 日志: docker compose logs -f web"
echo " 查看 Client 日志: docker compose logs -f client"
echo " 查看 DB 日志: docker compose logs -f db"