Files
CamTalk/deploy.sh

111 lines
2.5 KiB
Bash
Executable File
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.
#!/usr/bin/env bash
set -euo pipefail
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$PROJECT_DIR"
# .env 存放于项目目录,供 docker compose env_file 读取
#act_runner 容器内无法访问 /opt/camtalk需放在项目目录下
ENV_FILE="$PROJECT_DIR/.env"
# 颜色输出
GREEN='\033[0;32m'
NC='\033[0m'
info() { echo -e "${GREEN}[INFO]${NC} $*"; }
# .env 检查:首次部署时从 .env.example 复制模板,提示用户填写
check_env() {
if [ -f "$ENV_FILE" ]; then
return 0
fi
# 如果项目目录没有 .env尝试从 /opt/camtalk/.env 复制(兼容旧部署)
local legacy_env="/opt/camtalk/.env"
if [ -f "$legacy_env" ]; then
cp "$legacy_env" "$ENV_FILE"
info "已从 $legacy_env 复制环境变量文件"
return 0
fi
echo "=============================================="
echo " 错误: 未找到环境变量文件"
echo ""
echo " 请在以下任一位置创建 .env 文件:"
echo " 1. $ENV_FILE"
echo " 2. $legacy_env(运行本脚本时会自动复制)"
echo ""
echo " 模板参考: backend/.env.example"
echo "=============================================="
exit 1
}
check_env
# 所有 docker compose 命令统一使用 --env-file用于解析 ${POSTGRES_USER} 等变量
DC="docker compose --env-file $ENV_FILE"
cmd_build() {
info "构建 Docker 镜像..."
DOCKER_BUILDKIT=1 $DC build --parallel
info "构建完成"
}
cmd_up() {
info "启动服务..."
$DC up -d
info "服务已启动"
PUBLIC_IP=$(curl -s --connect-timeout 3 https://ifconfig.me 2>/dev/null || \
curl -s --connect-timeout 3 https://api.ipify.org 2>/dev/null || \
echo "YOUR_SERVER_IP")
info "前端: http://$PUBLIC_IP:9000"
info "健康检查: http://$PUBLIC_IP:9000/api/health"
}
cmd_down() {
info "停止服务..."
$DC down
info "服务已停止"
}
cmd_restart() {
info "重启服务..."
cmd_down
cmd_up
}
cmd_logs() {
$DC logs -f "${@}"
}
cmd_status() {
$DC ps
}
usage() {
cat <<EOF
CamTalk 部署脚本
用法: $0 <命令>
命令:
build 构建 Docker 镜像
up 启动服务(后台运行)
down 停止服务
restart 重启服务
logs 查看日志(可加服务名,如: $0 logs backend
status 查看服务状态
.env 路径: $ENV_FILE
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