脚本更新
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# AI Knowledge Link — 一键部署脚本
|
# AI Knowledge Link — 首次部署脚本
|
||||||
# 在服务器项目目录执行:bash deploy.sh
|
# 使用服务器本机 MySQL + 宝塔 Nginx
|
||||||
# ============================================================
|
# ============================================================
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
@@ -10,48 +10,41 @@ echo "=== AI Knowledge Link 部署 ==="
|
|||||||
|
|
||||||
# 检查 Docker
|
# 检查 Docker
|
||||||
if ! command -v docker &> /dev/null; then
|
if ! command -v docker &> /dev/null; then
|
||||||
echo "错误:未安装 Docker。请先安装:"
|
echo "错误:未安装 Docker"
|
||||||
echo " curl -fsSL https://get.docker.com | sh"
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! docker compose version &> /dev/null; then
|
# 1. 创建 .env
|
||||||
echo "错误:docker compose 不可用。请检查 Docker 版本。"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 1. 检查 .env
|
|
||||||
if [ ! -f .env ]; then
|
if [ ! -f .env ]; then
|
||||||
echo "创建 .env ..."
|
echo "创建 .env ..."
|
||||||
|
|
||||||
# 自动生成 SECRET_KEY
|
|
||||||
SECRET=$(python3 -c "import secrets; print(secrets.token_urlsafe(48))" 2>/dev/null || openssl rand -base64 48)
|
SECRET=$(python3 -c "import secrets; print(secrets.token_urlsafe(48))" 2>/dev/null || openssl rand -base64 48)
|
||||||
|
|
||||||
cat > .env << EOF
|
cat > .env << EOF
|
||||||
SECRET_KEY=${SECRET}
|
SECRET_KEY=${SECRET}
|
||||||
MYSQL_ROOT_PASSWORD=Lzcc6-01
|
|
||||||
MYSQL_PASSWORD=Lzcc6-01
|
MYSQL_PASSWORD=Lzcc6-01
|
||||||
EOF
|
EOF
|
||||||
echo ".env 已创建,SECRET_KEY 已自动生成"
|
echo ".env 已创建"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 2. 创建数据目录
|
# 2. 创建数据目录
|
||||||
mkdir -p data
|
mkdir -p data
|
||||||
|
|
||||||
# 3. 构建并启动
|
# 3. 创建数据库(如果不存在)
|
||||||
|
echo "检查数据库..."
|
||||||
|
mysql -h 127.0.0.1 -P 33306 -u admin -pLzcc6-01 -e "CREATE DATABASE IF NOT EXISTS amb_rag CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" 2>/dev/null || echo "提示:请确保 MySQL 已启动且密码正确"
|
||||||
|
|
||||||
|
# 4. 构建并启动
|
||||||
echo "构建镜像..."
|
echo "构建镜像..."
|
||||||
docker compose build
|
docker compose build
|
||||||
|
|
||||||
echo "启动服务..."
|
echo "启动服务..."
|
||||||
docker compose up -d
|
docker compose up -d
|
||||||
|
|
||||||
# 4. 等待 MySQL 就绪
|
|
||||||
echo "等待 MySQL 就绪..."
|
|
||||||
sleep 10
|
|
||||||
# 5. 数据库迁移
|
# 5. 数据库迁移
|
||||||
echo "执行数据库迁移..."
|
echo "执行数据库迁移..."
|
||||||
|
sleep 3
|
||||||
docker compose exec -T backend alembic upgrade head
|
docker compose exec -T backend alembic upgrade head
|
||||||
# 6. 创建内部管理员账号(如果不存在)
|
|
||||||
|
# 6. 创建管理员
|
||||||
echo "检查管理员账号..."
|
echo "检查管理员账号..."
|
||||||
docker compose exec -T backend python -c "
|
docker compose exec -T backend python -c "
|
||||||
from app.core.db import get_session_factory
|
from app.core.db import get_session_factory
|
||||||
@@ -70,29 +63,26 @@ with factory() as session:
|
|||||||
session.add(plan)
|
session.add(plan)
|
||||||
session.flush()
|
session.flush()
|
||||||
admin = User(
|
admin = User(
|
||||||
username='admin',
|
username='admin', email='admin@company.com',
|
||||||
email='admin@company.com',
|
|
||||||
password_hash=hash_password('Lzcc6-01'),
|
password_hash=hash_password('Lzcc6-01'),
|
||||||
status='active',
|
status='active', role='internal', plan_id=plan.id,
|
||||||
role='internal',
|
|
||||||
plan_id=plan.id,
|
|
||||||
)
|
)
|
||||||
session.add(admin)
|
session.add(admin)
|
||||||
session.commit()
|
session.commit()
|
||||||
print('管理员账号已创建: admin / Lzcc6-01')
|
print('管理员已创建: admin / Lzcc6-01')
|
||||||
else:
|
else:
|
||||||
print('管理员账号已存在,跳过')
|
print('管理员已存在')
|
||||||
"
|
"
|
||||||
# 7. 完成
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "=========================================="
|
echo "=========================================="
|
||||||
echo " 部署完成!"
|
echo " 部署完成!"
|
||||||
echo ""
|
echo ""
|
||||||
echo " 访问地址: http://$(curl -s ifconfig.me 2>/dev/null || echo '你的服务器IP')"
|
echo " 后端: http://$(curl -s ifconfig.me 2>/dev/null):8000/api/healthz"
|
||||||
echo " 内部登录: http://$(curl -s ifconfig.me 2>/dev/null || echo '你的服务器IP')/internal-login"
|
echo " 前端: http://$(curl -s ifconfig.me 2>/dev/null):5173"
|
||||||
echo ""
|
echo ""
|
||||||
echo " 管理员: admin"
|
echo " 宝塔 Nginx 反代配置:"
|
||||||
echo " 密码: Lzcc6-01"
|
echo " /api/ → http://127.0.0.1:8000"
|
||||||
echo ""
|
echo " /k/ → http://127.0.0.1:8000"
|
||||||
echo " 更新部署: bash update.sh"
|
echo " / → http://127.0.0.1:5173"
|
||||||
echo "=========================================="
|
echo "=========================================="
|
||||||
+7
-32
@@ -1,38 +1,22 @@
|
|||||||
# AI Knowledge Link — Docker Compose (生产)
|
# AI Knowledge Link — Docker Compose (生产)
|
||||||
#
|
#
|
||||||
# 用宝塔 Nginx 反代,不启动容器内 Nginx
|
# 使用服务器本机 MySQL(端口 33306),宝塔 Nginx 反代
|
||||||
#
|
#
|
||||||
|
# 部署:bash deploy.sh
|
||||||
# 更新:git pull && bash update.sh
|
# 更新:git pull && bash update.sh
|
||||||
|
|
||||||
services:
|
services:
|
||||||
# ---------- MySQL ----------
|
# ---------- 后端 ----------
|
||||||
mysql:
|
|
||||||
image: mysql:8.0
|
|
||||||
restart: unless-stopped
|
|
||||||
environment:
|
|
||||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-Lzcc6-01}
|
|
||||||
MYSQL_DATABASE: amb_rag
|
|
||||||
MYSQL_USER: admin
|
|
||||||
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-Lzcc6-01}
|
|
||||||
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
|
||||||
volumes:
|
|
||||||
- mysql_data:/var/lib/mysql
|
|
||||||
dns:
|
|
||||||
- 223.5.5.5
|
|
||||||
- 223.6.6.6
|
|
||||||
|
|
||||||
# ---------- 后端(暴露 8000 给宝塔 Nginx 反代)----------
|
|
||||||
backend:
|
backend:
|
||||||
build:
|
build:
|
||||||
context: ./backend
|
context: ./backend
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
dns:
|
extra_hosts:
|
||||||
- 223.5.5.5
|
- "host.docker.internal:host-gateway"
|
||||||
- 223.6.6.6
|
|
||||||
environment:
|
environment:
|
||||||
ENVIRONMENT: production
|
ENVIRONMENT: production
|
||||||
SECRET_KEY: ${SECRET_KEY:-change-me-to-a-real-secret-key}
|
SECRET_KEY: ${SECRET_KEY:-change-me-to-a-real-secret-key}
|
||||||
DATABASE_URL: mysql+pymysql://amb:${MYSQL_PASSWORD:-Lzcc6-01}@mysql:3306/amb_rag?charset=utf8mb4
|
DATABASE_URL: mysql+pymysql://admin:${MYSQL_PASSWORD:-Lzcc6-01}@host.docker.internal:33306/amb_rag?charset=utf8mb4
|
||||||
STORAGE_ROOT: /app/data
|
STORAGE_ROOT: /app/data
|
||||||
DEFAULT_STORAGE_QUOTA: "104857600"
|
DEFAULT_STORAGE_QUOTA: "104857600"
|
||||||
DEFAULT_MAX_FILE_SIZE: "20971520"
|
DEFAULT_MAX_FILE_SIZE: "20971520"
|
||||||
@@ -43,28 +27,19 @@ services:
|
|||||||
- app_data:/app/data
|
- app_data:/app/data
|
||||||
ports:
|
ports:
|
||||||
- "8000:8000"
|
- "8000:8000"
|
||||||
depends_on:
|
|
||||||
mysql:
|
|
||||||
condition: service_healthy
|
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/api/healthz')"]
|
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/api/healthz')"]
|
||||||
interval: 10s
|
interval: 10s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
# ---------- 前端(构建后由宝塔 Nginx 直接 serve 静态文件)----------
|
# ---------- 前端 ----------
|
||||||
# 不需要运行容器,构建完把 dist 目录复制到服务器即可
|
|
||||||
# 或者用下面的容器暴露 5173 端口
|
|
||||||
frontend:
|
frontend:
|
||||||
build:
|
build:
|
||||||
context: ./frontend
|
context: ./frontend
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
dns:
|
|
||||||
- 223.5.5.5
|
|
||||||
- 223.6.6.6
|
|
||||||
ports:
|
ports:
|
||||||
- "5173:80"
|
- "5173:80"
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
mysql_data:
|
|
||||||
app_data:
|
app_data:
|
||||||
@@ -1,13 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# AI Knowledge Link — 一键更新脚本
|
# AI Knowledge Link — 一键更新脚本
|
||||||
# 在服务器项目目录执行:bash update.sh
|
|
||||||
#
|
|
||||||
# 功能:
|
|
||||||
# 1. 拉取最新代码
|
|
||||||
# 2. 重新构建镜像
|
|
||||||
# 3. 重启服务(数据库不丢失)
|
|
||||||
# 4. 执行数据库迁移(如有新迁移)
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
@@ -29,11 +22,9 @@ docker compose up -d
|
|||||||
|
|
||||||
# 4. 数据库迁移
|
# 4. 数据库迁移
|
||||||
echo "[4/4] 执行数据库迁移..."
|
echo "[4/4] 执行数据库迁移..."
|
||||||
sleep 5
|
sleep 3
|
||||||
docker compose exec -T backend alembic upgrade head
|
docker compose exec -T backend alembic upgrade head
|
||||||
|
|
||||||
# 5. 完成
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "更新完成!$(date '+%H:%M:%S')"
|
echo "更新完成!$(date '+%H:%M:%S')"
|
||||||
echo "服务状态:"
|
docker compose ps
|
||||||
docker compose ps --format "table {{.Name}}\t{{.Status}}\t{{.Ports}}"
|
|
||||||
Reference in New Issue
Block a user