mirror of
https://github.com/yyhuni/xingrin.git
synced 2026-01-31 11:46:16 +08:00
优化:取消暴漏8888端口
This commit is contained in:
@@ -241,8 +241,9 @@ class WorkerDeployConsumer(AsyncWebsocketConsumer):
|
||||
}))
|
||||
return
|
||||
|
||||
django_host = f"{public_host}:{server_port}" # Django / 心跳上报使用
|
||||
heartbeat_api_url = f"http://{django_host}" # 基础 URL,agent 会加 /api/...
|
||||
# 远程 Worker 通过 nginx HTTPS 访问(nginx 反代到后端 8888)
|
||||
# 使用 https://{PUBLIC_HOST} 而不是直连 8888 端口
|
||||
heartbeat_api_url = f"https://{public_host}" # 基础 URL,agent 会加 /api/...
|
||||
|
||||
session_name = f'xingrin_deploy_{self.worker_id}'
|
||||
remote_script_path = '/tmp/xingrin_deploy.sh'
|
||||
|
||||
@@ -81,8 +81,8 @@ def ensure_wordlist_local(wordlist_name: str) -> str:
|
||||
raise RuntimeError(
|
||||
"无法确定 Django API 地址:请配置 SERVER_URL 或 PUBLIC_HOST 环境变量"
|
||||
)
|
||||
server_port = getattr(settings, 'SERVER_PORT', '8888')
|
||||
api_base = f"http://{public_host}:{server_port}/api"
|
||||
# 远程 Worker 通过 nginx HTTPS 访问,不再直连 8888
|
||||
api_base = f"https://{public_host}/api"
|
||||
query = urllib_parse.urlencode({'wordlist': wordlist_name})
|
||||
download_url = f"{api_base.rstrip('/')}/wordlists/download/?{query}"
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ if [ "$RUN_MODE" = "remote" ] && [ -f "$ENV_FILE" ]; then
|
||||
fi
|
||||
|
||||
# 获取配置
|
||||
# SERVER_URL: 后端 API 地址(容器内用 http://server:8888,远程用公网地址)
|
||||
# SERVER_URL: 后端 API 地址(容器内用 http://server:8888,远程用 https://{PUBLIC_HOST})
|
||||
API_URL="${HEARTBEAT_API_URL:-${SERVER_URL:-}}"
|
||||
WORKER_NAME="${WORKER_NAME:-}"
|
||||
IS_LOCAL="${IS_LOCAL:-false}"
|
||||
@@ -113,7 +113,7 @@ if [ -z "$WORKER_ID" ]; then
|
||||
# 等待 Server 就绪
|
||||
log "等待 Server 就绪..."
|
||||
for i in $(seq 1 30); do
|
||||
if curl -s "${API_URL}/api/" > /dev/null 2>&1; then
|
||||
if curl -k -s "${API_URL}/api/" > /dev/null 2>&1; then
|
||||
log "${GREEN}Server 已就绪${NC}"
|
||||
break
|
||||
fi
|
||||
@@ -181,7 +181,7 @@ EOF
|
||||
)
|
||||
|
||||
# 发送心跳
|
||||
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" -X POST \
|
||||
RESPONSE=$(curl -k -s -o /dev/null -w "%{http_code}" -X POST \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$JSON_DATA" \
|
||||
"${API_URL}/api/workers/${WORKER_ID}/heartbeat/" 2>/dev/null || echo "000")
|
||||
|
||||
@@ -15,14 +15,14 @@ REDIS_PORT=6379
|
||||
REDIS_DB=0
|
||||
|
||||
# ==================== 服务端口配置 ====================
|
||||
# SERVER_PORT 为 Django / uvicorn 对外端口
|
||||
# SERVER_PORT 为 Django / uvicorn 容器内部端口(由 nginx 反代,对公网不直接暴露)
|
||||
SERVER_PORT=8888
|
||||
|
||||
# ==================== 远程 Worker 配置 ====================
|
||||
# 供远程 Worker 访问主服务器的地址:
|
||||
# - 仅本地部署:server(Docker 内部服务名)
|
||||
# - 有远程 Worker:改为主服务器外网 IP(如 192.168.1.100)
|
||||
# 注意:远程 Worker 访问数据库/Redis 也会使用此地址(除非配置了远程 PostgreSQL)
|
||||
# - 有远程 Worker:改为主服务器外网 IP 或域名(如 192.168.1.100 或 xingrin.example.com)
|
||||
# 注意:远程 Worker 会通过 https://{PUBLIC_HOST} 访问(nginx 反代到后端 8888)
|
||||
PUBLIC_HOST=server
|
||||
|
||||
# ==================== Django 核心配置 ====================
|
||||
|
||||
@@ -37,8 +37,6 @@ services:
|
||||
context: ..
|
||||
dockerfile: docker/server/Dockerfile
|
||||
restart: always
|
||||
ports:
|
||||
- "${SERVER_PORT}:8888"
|
||||
env_file:
|
||||
- .env
|
||||
depends_on:
|
||||
|
||||
@@ -41,8 +41,6 @@ services:
|
||||
server:
|
||||
image: ${DOCKER_USER:-yyhuni}/xingrin-server:${IMAGE_TAG:?IMAGE_TAG is required}
|
||||
restart: always
|
||||
ports:
|
||||
- "${SERVER_PORT}:8888"
|
||||
env_file:
|
||||
- .env
|
||||
depends_on:
|
||||
|
||||
@@ -173,7 +173,7 @@ if [ "$WITH_FRONTEND" = true ]; then
|
||||
echo -e " XingRin: ${CYAN}https://${ACCESS_HOST}/${NC}"
|
||||
echo -e " ${YELLOW}(HTTP 会自动跳转到 HTTPS)${NC}"
|
||||
else
|
||||
echo -e " API: ${CYAN}http://${ACCESS_HOST}:8888${NC}"
|
||||
echo -e " API: ${CYAN}通过前端或 nginx 访问(后端未暴露 8888)${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}[TIP]${NC} 前端未启动,请手动运行:"
|
||||
echo " cd frontend && pnpm dev"
|
||||
|
||||
@@ -14,10 +14,9 @@
|
||||
- **端口要求**: 需要开放以下端口
|
||||
- `80` - HTTP 访问(自动跳转到 HTTPS)
|
||||
- `443` - HTTPS 访问(主要访问端口)
|
||||
- `3000` - 前端开发服务(开发模式)
|
||||
- `8888` - 后端 API 服务
|
||||
- `5432` - PostgreSQL 数据库(如使用本地数据库)
|
||||
- `6379` - Redis 缓存服务
|
||||
- 后端 API 仅容器内监听 8888,由 nginx 反代到 80/443,对公网无需放行 8888
|
||||
|
||||
## 一键安装
|
||||
|
||||
@@ -64,10 +63,10 @@ sudo ./install.sh --no-frontend
|
||||
80 - HTTP 访问
|
||||
443 - HTTPS 访问
|
||||
3000 - 前端服务(开发模式)
|
||||
8888 - 后端 API
|
||||
5432 - PostgreSQL(如使用本地数据库)
|
||||
6379 - Redis 缓存
|
||||
```
|
||||
> 后端 API 默认仅在容器内 8888 监听,由 nginx 反代到 80/443,对公网无需放行 8888。
|
||||
|
||||
#### 推荐方案
|
||||
- **国外 VPS**:如 Vultr、DigitalOcean、Linode 等,默认开放所有端口,无需额外配置
|
||||
@@ -157,8 +156,8 @@ DB_USER=postgres # 数据库用户
|
||||
DB_PASSWORD=随机生成 # 数据库密码
|
||||
|
||||
# 服务配置
|
||||
SERVER_PORT=8888 # 后端服务端口
|
||||
PUBLIC_HOST=server # 对外访问地址
|
||||
SERVER_PORT=8888 # 后端容器内部端口(仅 Docker 内网监听)
|
||||
PUBLIC_HOST=server # 对外访问地址(远程 Worker 用,配置外网 IP 或域名)
|
||||
DEBUG=False # 调试模式
|
||||
|
||||
# 版本配置
|
||||
|
||||
@@ -231,8 +231,8 @@ sequenceDiagram
|
||||
WORDLISTS_PATH=/opt/xingrin/wordlists
|
||||
|
||||
# Server 地址(Worker 用于下载文件)
|
||||
PUBLIC_HOST=your-server-ip
|
||||
SERVER_PORT=8888
|
||||
PUBLIC_HOST=your-server-ip # 远程 Worker 会通过 https://{PUBLIC_HOST}/api 访问
|
||||
SERVER_PORT=8888 # 后端容器内部端口,仅 Docker 内网监听
|
||||
```
|
||||
|
||||
## 八、常见问题
|
||||
@@ -244,8 +244,8 @@ A: 更新字典内容后会重新计算 hash,Worker 下次使用时会检测
|
||||
### Q: 远程 Worker 下载文件失败?
|
||||
|
||||
A: 检查:
|
||||
1. `PUBLIC_HOST` 是否配置为 Server 的外网 IP
|
||||
2. Server 端口(默认 8888)是否开放
|
||||
1. `PUBLIC_HOST` 是否配置为 Server 的外网 IP 或域名
|
||||
2. Nginx 443 (HTTPS) 是否可达(远程 Worker 通过 nginx 访问后端)
|
||||
3. Worker 到 Server 的网络是否通畅
|
||||
|
||||
### Q: 如何批量导入字典?
|
||||
|
||||
@@ -233,7 +233,7 @@ show_summary() {
|
||||
|
||||
echo -e "${YELLOW}[!] 云服务器某些厂商默认开启了安全策略(阿里云/腾讯云/华为云等):${RESET}"
|
||||
echo -e " 端口未放行可能导致无法访问或无法扫描,强烈推荐用国外vps,或者在云控制台放行:"
|
||||
echo -e " ${RESET}80, 443, 3000,8888, 5432, 6379"
|
||||
echo -e " ${RESET}80, 443, 5432, 6379"
|
||||
echo
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user