File size: 3,055 Bytes
d842c73
 
 
 
445a946
d842c73
 
 
 
 
 
 
 
 
 
 
 
445a946
 
d842c73
 
 
 
 
 
 
 
576e042
c0eeb39
165bd05
 
 
 
 
 
576e042
165bd05
 
 
 
d842c73
1252cad
 
 
 
 
 
4a6722f
 
 
 
 
 
 
1252cad
 
4a6722f
 
1252cad
 
 
 
4a6722f
 
 
 
 
1252cad
4a6722f
 
 
 
 
 
 
 
 
 
1252cad
 
 
 
 
 
d842c73
 
 
 
1252cad
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# 使用编译后的二进制文件运行
# 这个镜像更小,启动更快,内存占用更低
#
# 构建方式:
# 1. 先运行 npm run build:linux 或 npm run build:linux-arm64 生成 dist 目录
# 2. 然后运行 docker build -f Dockerfile.binary -t antigravity .

FROM debian:bookworm-slim

WORKDIR /app

# 安装必要的运行时依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
    ca-certificates \
    && rm -rf /var/lib/apt/lists/*

# 复制编译后的文件(由 CI 工作流预先编译)
# 使用通配符匹配不同架构的二进制文件
COPY dist/antigravity-linux-* /app/antigravity
COPY dist/public /app/public
COPY dist/bin /app/bin
COPY dist/config.json /app/config.json

# 设置执行权限
RUN chmod +x /app/antigravity && \
    (chmod +x /app/bin/* 2>/dev/null || true)

# 创建数据和图片目录,以及带默认配置的 .env 文件
RUN mkdir -p /app/data /app/public/images && \
    echo "# 敏感配置(只在 .env 中配置)" > /app/.env && \
    echo "# 如果不配置以下三项,系统会自动生成随机凭据并在启动时显示" >> /app/.env && \
    echo "# API_KEY=your-api-key" >> /app/.env && \
    echo "# ADMIN_USERNAME=your-username" >> /app/.env && \
    echo "# ADMIN_PASSWORD=your-password" >> /app/.env && \
    echo "# JWT_SECRET=your-jwt-secret" >> /app/.env && \
    echo "" >> /app/.env && \
    echo "# 可选配置" >> /app/.env && \
    echo "# PROXY=http://127.0.0.1:7890" >> /app/.env && \
    echo "SYSTEM_INSTRUCTION=你是聊天机器人,名字叫萌萌,如同名字这般,你的性格是软软糯糯萌萌哒的,专门为用户提供聊天和情绪价值,协助进行小说创作或者角色扮演" >> /app/.env && \
    echo "# IMAGE_BASE_URL=http://your-domain.com" >> /app/.env

# 创建启动脚本:同步环境变量到 .env 文件
RUN cat > /app/entrypoint.sh << 'EOF'
#!/bin/sh
# 同步环境变量到 .env 文件
ENV_FILE="/app/.env"

# 同步单个环境变量的函数
# 使用 ${var+x} 语法检测变量是否被设置(包括空值)
sync_env() {
  key=$1
  # 检查环境变量是否被设置(包括空值)
  if eval "[ \"\${${key}+x}\" ]"; then
    value=$(eval echo \"\$$key\")
    # 检查是否已存在该配置
    if grep -q "^${key}=" "$ENV_FILE" 2>/dev/null; then
      # 替换现有配置(使用 # 作为分隔符避免值中的特殊字符问题)
      sed -i "s#^${key}=.*#${key}=${value}#" "$ENV_FILE"
    else
      # 添加新配置
      echo "${key}=${value}" >> "$ENV_FILE"
    fi
    if [ -n "$value" ]; then
      echo "✓ 已同步环境变量: ${key}=${value}"
    else
      echo "✓ 已同步环境变量: ${key}=(空值)"
    fi
  fi
}

# 同步所有支持的环境变量
sync_env "API_KEY"
sync_env "ADMIN_USERNAME"
sync_env "ADMIN_PASSWORD"
sync_env "JWT_SECRET"
sync_env "PROXY"
sync_env "SYSTEM_INSTRUCTION"
sync_env "IMAGE_BASE_URL"

# 启动应用
exec /app/antigravity
EOF
RUN chmod +x /app/entrypoint.sh

# 暴露端口
EXPOSE 8045

# 启动应用
CMD ["/app/entrypoint.sh"]