Aq/aq-flex-api/deploy.sh

181 lines
5.2 KiB
Bash
Raw Normal View History

2026-07-21 12:51:40 +08:00
#!/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"