Files
CamTalk/deploy.sh

92 lines
1.7 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
set -euo pipefail
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$PROJECT_DIR"
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
info() { echo -e "${GREEN}[INFO]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
error() { echo -e "${RED}[ERROR]${NC} $*" >&2; }
# 确保 .env 存在
ensure_env() {
if [ ! -f .env ]; then
if [ -f .env.example ]; then
warn ".env 文件不存在,从 .env.example 复制模板"
cp .env.example .env
warn "请编辑 .env 填入实际的 API Key然后重新运行"
exit 1
else
error ".env.example 也不存在,请手动创建 .env"
exit 1
fi
fi
}
cmd_build() {
info "构建 Docker 镜像..."
docker compose build
info "构建完成"
}
cmd_up() {
ensure_env
info "启动服务..."
docker compose up -d
info "服务已启动"
info "前端: http://localhost"
info "健康检查: http://localhost/api/health"
}
cmd_down() {
info "停止服务..."
docker compose down
info "服务已停止"
}
cmd_restart() {
info "重启服务..."
cmd_down
cmd_up
}
cmd_logs() {
docker compose logs -f "${@}"
}
cmd_status() {
docker compose ps
}
usage() {
cat <<EOF
CamTalk 部署脚本
用法: $0 <命令>
命令:
build 构建 Docker 镜像
up 启动服务(后台运行)
down 停止服务
restart 重启服务
logs 查看日志(可加服务名,如: $0 logs backend
status 查看服务状态
EOF
}
case "${1:-}" in
build) cmd_build ;;
up) cmd_up ;;
down) cmd_down ;;
restart) cmd_restart ;;
logs) shift; cmd_logs "$@" ;;
status) cmd_status ;;
*) usage; exit 1 ;;
esac