181 lines
5.2 KiB
Bash
181 lines
5.2 KiB
Bash
#!/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"
|