feat: 添加 frpc sidecar 容器(内网穿透,随项目自动启动)
- docker-compose.dev.yml: 新增 frpc 服务,通过 .env 环境变量配置 - deploy/frpc.Dockerfile: 基于 Alpine 构建,下载 frp 0.68.1 二进制 - deploy/frpc-entrypoint.sh: 由环境变量生成 frpc.toml 配置文件 - .env.example: 环境变量说明(占位值,不含真实凭证) - .gitignore: 忽略 .env 文件,防止敏感信息提交
This commit is contained in:
20
ai_knowledge_base_v2/.env.example
Normal file
20
ai_knowledge_base_v2/.env.example
Normal file
@@ -0,0 +1,20 @@
|
||||
# ============================================
|
||||
# 飞书知识库配置
|
||||
# ============================================
|
||||
FEISHU_APP_ID=
|
||||
FEISHU_APP_SECRET=
|
||||
FEISHU_SEARCH_URL=
|
||||
|
||||
# ============================================
|
||||
# 内网穿透(frpc sidecar)
|
||||
# 启动 docker compose 前,拷贝本文件为 .env 并填写
|
||||
# 或直接在 shell 中 export 这些变量
|
||||
# ============================================
|
||||
FRP_SERVER_ADDR=your-server-ip
|
||||
FRP_SERVER_PORT=7000
|
||||
FRP_AUTH_TOKEN=your-auth-token
|
||||
FRP_PROXY_NAME=qa-backend
|
||||
# 映射到后端端口 8100
|
||||
FRP_LOCAL_PORT=8100
|
||||
# 自定义域名,逗号分隔,如:qa.yourdomain.com,your-server-ip
|
||||
FRP_CUSTOM_DOMAINS=qa.yourdomain.com,your-server-ip
|
||||
1
ai_knowledge_base_v2/.gitignore
vendored
Normal file
1
ai_knowledge_base_v2/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.env
|
||||
36
ai_knowledge_base_v2/deploy/frpc-entrypoint.sh
Executable file
36
ai_knowledge_base_v2/deploy/frpc-entrypoint.sh
Executable file
@@ -0,0 +1,36 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
# 由环境变量生成 frpc.toml 配置
|
||||
mkdir -p /etc/frp
|
||||
# FRP_CUSTOM_DOMAINS 格式:逗号分隔的域名,如 "domain1.com,domain2.com"
|
||||
# 脚本自动加引号
|
||||
_domains=""
|
||||
IFS=","
|
||||
for _d in ${FRP_CUSTOM_DOMAINS}; do
|
||||
_d=$(echo "$_d" | xargs)
|
||||
if [ -n "$_domains" ]; then
|
||||
_domains="$_domains, "
|
||||
fi
|
||||
_domains="$_domains\"$_d\""
|
||||
done
|
||||
unset IFS
|
||||
|
||||
cat > /etc/frp/frpc.toml <<EOF
|
||||
serverAddr = "${FRP_SERVER_ADDR}"
|
||||
serverPort = ${FRP_SERVER_PORT:-7000}
|
||||
|
||||
auth.token = "${FRP_AUTH_TOKEN}"
|
||||
|
||||
[[proxies]]
|
||||
name = "${FRP_PROXY_NAME:-qa-backend}"
|
||||
type = "http"
|
||||
localIP = "${FRP_LOCAL_IP:-backend}"
|
||||
localPort = ${FRP_LOCAL_PORT:-8100}
|
||||
customDomains = [${_domains}]
|
||||
EOF
|
||||
|
||||
echo "=== frpc config generated ==="
|
||||
cat /etc/frp/frpc.toml
|
||||
|
||||
exec frpc -c /etc/frp/frpc.toml
|
||||
17
ai_knowledge_base_v2/deploy/frpc.Dockerfile
Normal file
17
ai_knowledge_base_v2/deploy/frpc.Dockerfile
Normal file
@@ -0,0 +1,17 @@
|
||||
FROM docker.m.daocloud.io/library/alpine:3.19
|
||||
|
||||
ARG FRP_VERSION=0.68.1
|
||||
|
||||
RUN apk add --no-cache curl \
|
||||
&& curl -sL "https://github.com/fatedier/frp/releases/download/v${FRP_VERSION}/frp_${FRP_VERSION}_linux_amd64.tar.gz" \
|
||||
-o /tmp/frp.tar.gz \
|
||||
&& tar xzf /tmp/frp.tar.gz -C /tmp \
|
||||
&& cp /tmp/frp_${FRP_VERSION}_linux_amd64/frpc /usr/local/bin/frpc \
|
||||
&& chmod +x /usr/local/bin/frpc \
|
||||
&& rm -rf /tmp/frp_* /tmp/frp.tar.gz \
|
||||
&& apk del curl
|
||||
|
||||
COPY deploy/frpc-entrypoint.sh /entrypoint.sh
|
||||
RUN chmod +x /entrypoint.sh
|
||||
|
||||
ENTRYPOINT ["/bin/sh", "/entrypoint.sh"]
|
||||
@@ -89,6 +89,23 @@ services:
|
||||
depends_on:
|
||||
- backend
|
||||
|
||||
frpc:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: deploy/frpc.Dockerfile
|
||||
container_name: ai_kb_v2_frpc
|
||||
environment:
|
||||
FRP_SERVER_ADDR: ${FRP_SERVER_ADDR}
|
||||
FRP_SERVER_PORT: ${FRP_SERVER_PORT:-7000}
|
||||
FRP_AUTH_TOKEN: ${FRP_AUTH_TOKEN}
|
||||
FRP_PROXY_NAME: ${FRP_PROXY_NAME:-qa-backend}
|
||||
FRP_LOCAL_IP: ${FRP_LOCAL_IP:-backend}
|
||||
FRP_LOCAL_PORT: ${FRP_LOCAL_PORT:-8100}
|
||||
FRP_CUSTOM_DOMAINS: ${FRP_CUSTOM_DOMAINS}
|
||||
depends_on:
|
||||
- backend
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
ai_kb_v2_mysql_data:
|
||||
ai_kb_v2_redis_data:
|
||||
|
||||
Reference in New Issue
Block a user