mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-01 14:46:36 +08:00
文档更新
This commit is contained in:
@@ -1,155 +0,0 @@
|
||||
# API Conventions
|
||||
|
||||
You will learn: The response structure, path conventions, authentication methods, and Swagger entrance for the OpenFlare Admin API and Agent API.
|
||||
|
||||
Both the OpenFlare Admin API and Agent API communicate using JSON.
|
||||
|
||||
## Response Structure
|
||||
|
||||
Both successful and failed API responses must return a clear `message`:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"message": "",
|
||||
"data": {}
|
||||
}
|
||||
```
|
||||
|
||||
## Path Conventions
|
||||
|
||||
| Category | Convention |
|
||||
| --- | --- |
|
||||
| Admin API | Authenticated via the Admin Session |
|
||||
| Agent API | Located strictly under `/api/agent/*` |
|
||||
| Relay API | Located strictly under `/api/relay/*`, authenticated via `X-Agent-Token` (reusing the Agent's token) |
|
||||
| OpenFlared API | Located strictly under `/api/flared/*`, authenticated via `X-Tunnel-Token` (dedicated tunnel_token) |
|
||||
| Read-only APIs | Use the `GET` method |
|
||||
| Mutating APIs | Use the `POST` method |
|
||||
|
||||
## WAF IP Group APIs
|
||||
|
||||
The Admin WAF IP Group APIs require Admin Session authentication:
|
||||
|
||||
| Method | Path | Description |
|
||||
| --- | --- | --- |
|
||||
| `GET` | `/api/waf/ip-groups` | Query IP groups list |
|
||||
| `GET` | `/api/waf/ip-groups/:id` | Query a single IP group |
|
||||
| `POST` | `/api/waf/ip-groups` | Create a new IP group |
|
||||
| `POST` | `/api/waf/ip-groups/test` | Test automatic IP group Expr rules; returns matching IPs in the lookback window without persisting the config |
|
||||
| `POST` | `/api/waf/ip-groups/:id/update` | Update an existing IP group |
|
||||
| `POST` | `/api/waf/ip-groups/:id/delete` | Delete an IP group; denied if currently referenced by any rule group |
|
||||
| `POST` | `/api/waf/ip-groups/:id/sync` | Manually sync subscription IP groups or execute automatic IP group aggregation |
|
||||
|
||||
The IP group `type` supports `manual`, `automatic`, and `subscription`. The `auto_config` parameter for automatic IP groups is a JSON object:
|
||||
|
||||
```json
|
||||
{
|
||||
"lookback_minutes": 60,
|
||||
"rules": [
|
||||
{
|
||||
"name": "Single IP High-Frequency 404 Scanning",
|
||||
"expr": "request_count > 100 && status_404_ratio >= 0.8"
|
||||
},
|
||||
{
|
||||
"name": "Single IP Direct IP Access Mismatch",
|
||||
"expr": "ip_host_count > 50 && ip_host_ratio > 0.5"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Automatic rules evaluate Expr boolean expressions against metrics aggregated on a per-client-IP basis. The available metrics include `ip`, `request_count`, `status_404_count`, `status_404_ratio`, `ip_host_count`, `ip_host_ratio`, `client_error_count`, `server_error_count`, and `last_seen_unix`. The full syntax is detailed in [WAF Auto IP Group Expressions](../guide/waf-ip-group-expr.md).
|
||||
|
||||
Subscription formats support `text` and `json`: plain text parsing resolves one IP or CIDR per line, ignoring empty lines and comments starting with `#`; JSON parsing decodes arrays, reading the root array by default.
|
||||
|
||||
## Authentication
|
||||
|
||||
The Admin panel continues to reuse the existing login, role, and Session validation.
|
||||
|
||||
Agent requests must carry the node-specific `agent_token` (except for first-time registration, which can use the global `discovery_token`). The header is formatted as:
|
||||
|
||||
```http
|
||||
X-Agent-Token: <token>
|
||||
```
|
||||
|
||||
### Agent WAF IP Group Synchronization
|
||||
|
||||
The Agent heartbeat payload can carry local WAF IP group checksums:
|
||||
|
||||
```json
|
||||
{
|
||||
"waf_ip_group_checksums": {
|
||||
"1": "sha256..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The Server evaluates the checksums against active configurations, returning mismatched IP groups in the heartbeat response:
|
||||
|
||||
```json
|
||||
{
|
||||
"waf_ip_groups": [
|
||||
{
|
||||
"id": 1,
|
||||
"name": "Auto Blacklist",
|
||||
"type": "automatic",
|
||||
"enabled": true,
|
||||
"ip_list": ["203.0.113.10"],
|
||||
"checksum": "sha256..."
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Alternatively, the Agent can proactively request differential updates upon applying a new configuration version:
|
||||
|
||||
| Method | Path | Description |
|
||||
| --- | --- | --- |
|
||||
| `POST` | `/api/agent/waf/ip-groups/sync` | Returns mismatched WAF IP groups based on Agent-supplied `ids` and `checksums` |
|
||||
|
||||
When an IP group is updated on the Server, connected Agents receive a WebSocket push containing `type = "waf_ip_groups"` with the changed IP groups array as payload. The Agent updates only the changed groups incrementally.
|
||||
|
||||
## OpenFlared API
|
||||
|
||||
The OpenFlared client communicates with the Server via a dedicated `tunnel_token`, completely decoupled from the Agent authentication system. All endpoints require `X-Tunnel-Token` authentication; requests are denied with `403` if the token is invalid.
|
||||
|
||||
| Method | Path | Description |
|
||||
| --- | --- | --- |
|
||||
| `POST` | `/api/flared/heartbeat` | Client heartbeat, updates online status and retrieves active tunnel config version summaries |
|
||||
| `GET` | `/api/flared/config/active` | Pulls the complete tunnel routing configuration (relay list + frpc proxy definitions) |
|
||||
| `POST` | `/api/flared/apply-log` | Reports configuration application results (success / warning / failed) |
|
||||
| `GET` | `/api/flared/ws` | Upgrades to a WebSocket connection for real-time `active_config` pushes |
|
||||
|
||||
Heartbeat request example:
|
||||
|
||||
```http
|
||||
POST /api/flared/heartbeat
|
||||
X-Tunnel-Token: <tunnel_token>
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"client_version": "v0.2.0",
|
||||
"frp_version": "0.61.0",
|
||||
"tunnel_status": "running",
|
||||
"connected_relays": [
|
||||
{ "relay_node_id": "node-relay-1", "status": "healthy", "proxy_count": 3 }
|
||||
],
|
||||
"current_version": "v1",
|
||||
"current_checksum": "sha256..."
|
||||
}
|
||||
```
|
||||
|
||||
The heartbeat response returns the `active_config` summary and `tunnel_settings` (containing runtime settings like heartbeat intervals and WebSocket upgrade switches). When a new configuration version is published, the Server broadcasts a message `type = "active_config"` with the version summary as payload to all connected Clients over WebSockets, prompting them to fetch and apply the config immediately.
|
||||
|
||||
Full tokens must never be logged.
|
||||
|
||||
## Swagger
|
||||
|
||||
Once logged into the management console, the Swagger page is accessible at:
|
||||
|
||||
```text
|
||||
/swagger/index.html
|
||||
```
|
||||
|
||||
The Swagger definition file is stored in `openflare-server/docs`, generated by `swag init`.
|
||||
@@ -1,149 +0,0 @@
|
||||
# CLI Commands
|
||||
|
||||
You will learn: Common commands for starting, building, testing, installing, and uninstalling the OpenFlare Server, Admin Frontend, Agent, Swagger, and Documentation site.
|
||||
|
||||
## Server
|
||||
|
||||
Start from source:
|
||||
|
||||
```bash
|
||||
cd openflare-server
|
||||
export SESSION_SECRET='replace-with-random-string'
|
||||
export SQLITE_PATH='./openflare.db'
|
||||
export LOG_LEVEL='info'
|
||||
go run .
|
||||
```
|
||||
|
||||
Specify listening port and logging directory:
|
||||
|
||||
```bash
|
||||
go run . --port 3000 --log-dir ./logs
|
||||
```
|
||||
|
||||
Run tests:
|
||||
|
||||
```bash
|
||||
cd openflare-server
|
||||
GOCACHE=/tmp/openflare-go-cache go test ./...
|
||||
```
|
||||
|
||||
## Frontend
|
||||
|
||||
Development:
|
||||
|
||||
```bash
|
||||
cd openflare-server/web
|
||||
pnpm install
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
Build static assets:
|
||||
|
||||
```bash
|
||||
cd openflare-server/web
|
||||
pnpm build
|
||||
```
|
||||
|
||||
Linting and testing checks:
|
||||
|
||||
```bash
|
||||
cd openflare-server/web
|
||||
pnpm lint
|
||||
pnpm typecheck
|
||||
pnpm test
|
||||
```
|
||||
|
||||
## Agent
|
||||
|
||||
Run from source:
|
||||
|
||||
```bash
|
||||
cd openflare-agent
|
||||
go run ./cmd/agent -config /path/to/agent.json
|
||||
```
|
||||
|
||||
Compile:
|
||||
|
||||
```bash
|
||||
cd openflare-agent
|
||||
go build -o openflare-agent ./cmd/agent
|
||||
```
|
||||
|
||||
Run tests:
|
||||
|
||||
```bash
|
||||
cd openflare-agent
|
||||
GOCACHE=/tmp/openflare-go-cache go test ./...
|
||||
```
|
||||
|
||||
## Relay (Server-side)
|
||||
|
||||
Run from source:
|
||||
|
||||
```bash
|
||||
cd openflare-relay
|
||||
go run ./cmd -config /path/to/relay.json
|
||||
```
|
||||
|
||||
Compile:
|
||||
|
||||
```bash
|
||||
cd openflare-relay
|
||||
go build -o openflare-relay ./cmd
|
||||
```
|
||||
|
||||
## OpenFlared (Client-side)
|
||||
|
||||
Run from source:
|
||||
|
||||
```bash
|
||||
cd openflared
|
||||
go run ./cmd -config /path/to/flared.json
|
||||
```
|
||||
|
||||
Compile:
|
||||
|
||||
```bash
|
||||
cd openflared
|
||||
go build -o openflared ./cmd
|
||||
```
|
||||
|
||||
## Install Agent
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/Rain-kl/OpenFlare/main/scripts/install-agent.sh | bash -s -- \
|
||||
--server-url http://your-server:3000 \
|
||||
--agent-token YOUR_AGENT_TOKEN
|
||||
```
|
||||
|
||||
## Uninstall Agent
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/Rain-kl/OpenFlare/main/scripts/uninstall-agent.sh | bash
|
||||
```
|
||||
|
||||
## Swagger
|
||||
|
||||
Regenerate Swagger documentation:
|
||||
|
||||
```bash
|
||||
go install github.com/swaggo/swag/cmd/swag@v1.16.4
|
||||
cd openflare-server
|
||||
swag init -g main.go -o docs
|
||||
```
|
||||
|
||||
## Docs
|
||||
|
||||
Local preview:
|
||||
|
||||
```bash
|
||||
cd docs
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
Build:
|
||||
|
||||
```bash
|
||||
cd docs
|
||||
pnpm build
|
||||
```
|
||||
@@ -1,370 +0,0 @@
|
||||
# Configuration Options
|
||||
|
||||
You will learn: What configuration sources are supported by OpenFlare Server, frontend builds, and Agents; what the default configuration values are; and how to configure common deployment combinations.
|
||||
|
||||
This document aggregates the currently supported configuration options for OpenFlare Server and Agent in version `1.0.0`, keeping only running parameters that are currently active.
|
||||
|
||||
## Configuration Sources
|
||||
|
||||
The Server supports three types of configuration sources:
|
||||
|
||||
1. CLI arguments.
|
||||
2. Environment variables.
|
||||
3. Runtime configurations in the database `options` table.
|
||||
|
||||
The Agent supports:
|
||||
|
||||
1. The `-config` CLI argument.
|
||||
2. The `agent.json` configuration file.
|
||||
3. A small set of environment variables for overriding logs and settings.
|
||||
|
||||
The Relay (Server-side) supports:
|
||||
|
||||
1. The `-config` CLI argument.
|
||||
2. The `relay.json` configuration file.
|
||||
3. Persistent environment variables for overriding runtime flags.
|
||||
|
||||
The Client (Intranet Client) supports:
|
||||
|
||||
1. The `-config` CLI argument.
|
||||
2. The `flared.json` configuration file.
|
||||
3. Startup overrides and logging environment variables.
|
||||
|
||||
## Configuration File Locations
|
||||
|
||||
| Component | Default Location | Description |
|
||||
| --- | --- | --- |
|
||||
| Server SQLite | `openflare.db` | Can be customized via `SQLITE_PATH` |
|
||||
| Agent Config | `./agent.json` | Can be specified via `-config` |
|
||||
| One-Click Agent | `/opt/openflare-agent/agent.json` | Generated by the installation script by default |
|
||||
| Agent Data Dir | `data` in the config folder | Can be customized via `data_dir` |
|
||||
| Relay Config | `./relay.json` | Can be specified via `-config` |
|
||||
| One-Click Relay | `/opt/openflare-relay/relay.json` | Generated by the installation script by default |
|
||||
| Client Config | `./flared.json` | Can be specified via `-config` |
|
||||
| One-Click Client | `/opt/openflared/flared.json` | Generated by the installation script by default |
|
||||
|
||||
## Server CLI Arguments
|
||||
|
||||
```bash
|
||||
cd openflare-server
|
||||
go run . --port 3000 --log-dir ./logs
|
||||
```
|
||||
|
||||
| Argument | Description | Default Value |
|
||||
| --- | --- | --- |
|
||||
| `--port` | Port the Server listens on | `3000` |
|
||||
| `--log-dir` | Directory to output logs | Empty (stdout) |
|
||||
| `--version` | Outputs current version and exits | `false` |
|
||||
| `--help` | Outputs help information and exits | `false` |
|
||||
|
||||
## Server Environment Variables
|
||||
|
||||
| Environment Variable | Description | Default Value |
|
||||
| --- | --- | --- |
|
||||
| `PORT` | Port the Server listens on | `3000` |
|
||||
| `GIN_MODE` | Gin framework running mode | Defaults to release unless `debug` |
|
||||
| `LOG_LEVEL` | Logging level | `info` |
|
||||
| `SESSION_SECRET` | Session signing key | Randomly generated on startup |
|
||||
| `SQLITE_PATH` | SQLite database file path | `openflare.db` |
|
||||
| `DSN` | PostgreSQL DSN (takes precedence over SQLite) | Empty |
|
||||
| `SQL_DSN` | Legacy PostgreSQL DSN (lower priority than `DSN`) | Empty |
|
||||
| `REDIS_CONN_STRING` | Redis connection string | Empty |
|
||||
| `AGENT_TOKEN` | Legacy global Agent Token | Empty |
|
||||
|
||||
Notes:
|
||||
|
||||
* If both `DSN` and `SQL_DSN` exist, `DSN` is prioritized.
|
||||
* If either `DSN` or `SQL_DSN` coexist with `SQLITE_PATH`, PostgreSQL is prioritized.
|
||||
* If the target PostgreSQL database is empty and a local SQLite file exists at `SQLITE_PATH`, the Server automatically migrates SQLite data table-by-table on startup.
|
||||
* `SESSION_SECRET` must be explicitly configured in production.
|
||||
* If `REDIS_CONN_STRING` is unconfigured, co-located features fall back to in-memory implementations.
|
||||
|
||||
## Runtime Options
|
||||
|
||||
The following options are maintained in the admin settings page and support hot reloading:
|
||||
|
||||
| Parameter | Description | Default Value |
|
||||
| --- | --- | --- |
|
||||
| `AgentHeartbeatInterval` | Heartbeat interval for Agents (ms) | `10000` |
|
||||
| `AgentWebsocketUpgradeEnabled` | Toggles WebSocket upgrades after successful HTTP heartbeat | `true` |
|
||||
| `NodeOfflineThreshold` | Threshold duration to mark a node offline (ms) | `120000` |
|
||||
| `AgentUpdateRepo` | GitHub repository for Agent self-updates | `Rain-kl/OpenFlare` |
|
||||
| `GeoIPProvider` | Geolocation resolution provider | `ipinfo` |
|
||||
| `DatabaseAutoCleanupEnabled` | Toggles daily automatic cleanup of observability logs | `false` |
|
||||
| `DatabaseAutoCleanupRetentionDays` | Data retention duration in days, minimum 1 day | `30` |
|
||||
| `GlobalApiRateLimitNum` / `GlobalApiRateLimitDuration` | Global API rate limit count / window | `300` / `180` |
|
||||
| `GlobalWebRateLimitNum` / `GlobalWebRateLimitDuration` | Global Web rate limit count / window | `300` / `180` |
|
||||
| `CriticalRateLimitNum` / `CriticalRateLimitDuration` | Sensitive API rate limit count / window | `100` / `1200` |
|
||||
|
||||
Notes:
|
||||
|
||||
* When `DatabaseAutoCleanupEnabled` is enabled, the Server deletes `node_access_logs`, `node_metric_snapshots`, and `node_request_reports` daily at 3:00 AM.
|
||||
* `DatabaseAutoCleanupRetentionDays` must be greater than or equal to 1.
|
||||
* Leaving retention days blank during a manual trigger in the console deletes all historic logs instantly.
|
||||
* The GitHub Release in `AgentUpdateRepo` must contain a matching `.sha256` checksum file for every Agent binary (e.g., `openflare-agent-linux-amd64.sha256`); the Agent validates this checksum before replacing the local executable.
|
||||
* Third-party logins no longer use `GitHubOAuthEnabled`, `GitHubClientId`, and `GitHubClientSecret` as main configuration entrypoints; these legacy options are used only for migrating default GitHub credentials during upgrades.
|
||||
* The legacy WeChat login options are kept for backward compatibility, but the option page no longer edits them.
|
||||
* Legacy Cloudflare Turnstile options and validation logic are retained and will work normally.
|
||||
|
||||
## OpenResty Parameters
|
||||
|
||||
OpenResty performance and caching parameters are managed in the `options` table, including:
|
||||
|
||||
* `OpenRestyWorkerProcesses`
|
||||
* `OpenRestyWorkerConnections`
|
||||
* `OpenRestyWorkerRlimitNofile`
|
||||
* `OpenRestyKeepaliveTimeout`
|
||||
* `OpenRestyProxyConnectTimeout`
|
||||
* `OpenRestyProxySendTimeout`
|
||||
* `OpenRestyProxyReadTimeout`
|
||||
* `OpenRestyProxyBufferingEnabled`
|
||||
* `OpenRestyGzipEnabled`
|
||||
* `OpenRestyCacheEnabled`
|
||||
* `OpenRestyCachePath`
|
||||
* `OpenRestyCacheMaxSize`
|
||||
|
||||
These parameters must be validated, saved, and rendered structurally.
|
||||
|
||||
Constraints:
|
||||
|
||||
* The console no longer exposes `resolver` settings.
|
||||
* Upstreams are rendered uniformly as named `upstream` blocks with keepalive enabled.
|
||||
* Single upstreams carrying a base path or query have their URI correctly appended in `proxy_pass`.
|
||||
* Multi-upstreams must be pure `scheme://host[:port]` using the same protocol within a single rule.
|
||||
* `OpenRestyCacheEnabled` enables cache infrastructure and global defaults; the actual caching matching policies (by URL, suffix, or path) are configured per `proxy_routes`.
|
||||
* The default cache key is `$scheme$host$request_uri`.
|
||||
* Default `keepalive_timeout` is `20` seconds; default `proxy_connect_timeout` is `3` seconds.
|
||||
* The default event model is `epoll` with `multi_accept` enabled.
|
||||
* HTTPS listeners use the independent `http2 on;` directive to avoid deprecation warnings for `listen ... http2` in newer Nginx/OpenResty versions.
|
||||
|
||||
## Frontend Build Environment Variables
|
||||
|
||||
| Environment Variable | Description | Default Value |
|
||||
| --- | --- | --- |
|
||||
| `NEXT_PUBLIC_API_BASE_URL` | Base path for frontend API calls | `/api` |
|
||||
| `NEXT_PUBLIC_APP_VERSION` | Application version shown in the UI | `dev` |
|
||||
| `NEXT_DEV_BACKEND_URL` | Target backend proxied by the local dev server | `http://127.0.0.1:3000` |
|
||||
|
||||
## Agent Environment Variables
|
||||
|
||||
| Environment Variable | Description | Default Value |
|
||||
| --- | --- | --- |
|
||||
| `LOG_LEVEL` | Logging level for the Agent | `info` |
|
||||
| `OPENFLARE_SERVER_URL` | Server URL; overrides `agent.json` | Empty |
|
||||
| `OPENFLARE_AGENT_TOKEN` | Node-specific Token; overrides `agent.json` | Empty |
|
||||
| `OPENFLARE_DISCOVERY_TOKEN` | Auto-registration Token; overrides `agent.json` | Empty |
|
||||
| `OPENFLARE_NODE_NAME` | Node name; overrides `agent.json` | Empty |
|
||||
| `OPENFLARE_NODE_IP` | Node IP; overrides `agent.json` | Empty |
|
||||
| `OPENFLARE_DATA_DIR` | Agent data directory; overrides `agent.json` | Empty |
|
||||
| `OPENFLARE_OPENRESTY_PATH` | Path to OpenResty binary; overrides `agent.json` | Empty |
|
||||
| `OPENFLARE_HEARTBEAT_INTERVAL` | Heartbeat interval; overrides `agent.json` | Empty |
|
||||
| `OPENFLARE_REQUEST_TIMEOUT` | Request timeout; overrides `agent.json` | Empty |
|
||||
| `OPENFLARE_OPENRESTY_OBSERVABILITY_PORT` | Local observability port; overrides `agent.json` | Empty |
|
||||
| `OPENFLARE_MMDB_PATH` | WAF GeoIP mmdb path; overrides `agent.json` | Empty |
|
||||
| `OPENFLARE_MMDB_UPDATE_INTERVAL` | GeoIP mmdb update interval; overrides `agent.json` | Empty |
|
||||
| `OPENFLARE_MMDB_DOWNLOAD_URL` | GeoIP mmdb download link; overrides `agent.json` | Empty |
|
||||
|
||||
## Agent CLI Arguments
|
||||
|
||||
| Argument | Description | Default Value |
|
||||
| --- | --- | --- |
|
||||
| `-config` | Path to the Agent configuration file | `./agent.json` |
|
||||
|
||||
## Agent Configurations Fields
|
||||
|
||||
| Field | Description | Required | Default Value / Behavior |
|
||||
| --- | --- | --- | --- |
|
||||
| `server_url` | Control plane URL | Yes | None |
|
||||
| `agent_token` | Node-specific access Token | Mutually exclusive with discovery_token | Empty |
|
||||
| `discovery_token` | Global auto-registration Token | Mutually exclusive with agent_token | Empty |
|
||||
| `node_name` | Node name | No | Hostname |
|
||||
| `node_ip` | Node IP | No | Auto-detect, resolves outbound public IP via realip.cc first, falls back to local adapters |
|
||||
| `openresty_path` | Path to the OpenResty binary | No | `"openresty"` |
|
||||
| `openresty_observability_port` | Observability port for health checks | No | `18081` |
|
||||
| `data_dir` | Agent data directory | No | `data` in the config folder |
|
||||
| `main_config_path` | Write path for Nginx main configuration | No | `data_dir/etc/nginx/nginx.conf` |
|
||||
| `route_config_path` | Write path for route configurations | No | `data_dir/etc/nginx/conf.d/openflare_routes.conf` |
|
||||
| `access_log_path` | Write path for OpenResty access logs | No | `data_dir/var/log/openflare/access.log` |
|
||||
| `cert_dir` | Write directory for SSL certificates | No | `data_dir/etc/nginx/certs` |
|
||||
| `openresty_cert_dir` | Read directory for certificates in Nginx | No | Same as `cert_dir` |
|
||||
| `lua_dir` | Write directory for Lua scripts and assets | No | `data_dir/etc/nginx/lua` |
|
||||
| `openresty_lua_dir` | Read directory for Lua scripts in Nginx | No | Same as `lua_dir` |
|
||||
| `runtime_config_dir` | Write directory for Agent runtime configs | No | `data_dir/etc/openflare` |
|
||||
| `mmdb_path` | WAF GeoIP database file path | No | `data_dir/etc/openflare/GeoLite2-Country.mmdb` |
|
||||
| `mmdb_update_interval` | WAF GeoIP database check interval | No | `86400000` milliseconds |
|
||||
| `mmdb_download_url` | WAF GeoIP database download URL | No | Built-in GeoLite2 Country URL |
|
||||
| `observability_buffer_path` | Buffer path for retry metrics logs | No | `data_dir/var/lib/openflare/observability-buffer.json` |
|
||||
| `observability_replay_minutes` | Lookback window for metric retries | No | `15` |
|
||||
| `state_path` | Path to store local state JSON file | No | `data_dir/var/lib/openflare/agent-state.json` |
|
||||
| `heartbeat_interval` | Heartbeat polling interval | No | `10000` milliseconds |
|
||||
| `request_timeout` | HTTP request timeout duration | No | `10000` milliseconds |
|
||||
|
||||
Notes:
|
||||
|
||||
* `agent_token` and `discovery_token` cannot both be empty.
|
||||
* `heartbeat_interval` and `request_timeout` support integer milliseconds or Go duration strings.
|
||||
* If `AgentWebsocketUpgradeEnabled` is enabled on the Server, the Agent upgrades the HTTP heartbeat to WebSocket; it automatically falls back to HTTP heartbeats if it fails or disconnects.
|
||||
* If `openresty_path` is left blank, the Agent calls `openresty` on the host.
|
||||
* Periodic health checks query `http://127.0.0.1:<openresty_observability_port>/openflare/stub_status` instead of executing `openresty -t`; validation prior to reloads, starts, or rollbacks still runs `openresty -t -c <main_config_path>`.
|
||||
* The Agent initializes and periodically updates `mmdb_path` to support GeoIP region checks; failures to update write warnings and do not disrupt configuration synchronizations.
|
||||
* The Agent boots normally if `agent.json` is missing but environment variables (`OPENFLARE_SERVER_URL` and a Token) are available; environment variables override JSON settings.
|
||||
* If `node_ip` is left blank, the Agent resolves its outbound IP via `https://realip.cc` first, which is suitable for Docker/NAT networks.
|
||||
* If the Agent registers a private `node_ip`, the Server prioritizes saving the public TCP connection IP, preventing NAT adapters from registering internal IPs.
|
||||
* Enabling "Lock Node IP" in the console retains the manual IP; subsequent Agent registration or heartbeats do not overwrite it.
|
||||
|
||||
## Relay Environment Variables
|
||||
|
||||
| Environment Variable | Description | Default Value |
|
||||
| --- | --- | --- |
|
||||
| `LOG_LEVEL` | Logging level for the Relay | `info` |
|
||||
| `OPENFLARE_SERVER_URL` | Server URL; overrides `relay.json` | Empty |
|
||||
| `OPENFLARE_AGENT_TOKEN` | Node-specific Token; overrides `relay.json` | Empty |
|
||||
| `OPENFLARE_DISCOVERY_TOKEN` | Auto-registration Token; overrides `relay.json` | Empty |
|
||||
| `OPENFLARE_NODE_NAME` | Node name; overrides `relay.json` | Empty |
|
||||
| `OPENFLARE_NODE_IP` | Node IP; overrides `relay.json` | Empty |
|
||||
| `OPENFLARE_DATA_DIR` | Relay data directory; overrides `relay.json` | Empty |
|
||||
| `OPENFLARE_FRPS_PATH` | frps binary path; overrides `relay.json` | Empty |
|
||||
|
||||
## Relay CLI Arguments
|
||||
|
||||
| Argument | Description | Default Value |
|
||||
| --- | --- | --- |
|
||||
| `-config` | Path to the Relay configuration file | `./relay.json` |
|
||||
|
||||
## Relay Configuration Fields
|
||||
|
||||
| Field | Description | Required | Default Value / Behavior |
|
||||
| --- | --- | --- | --- |
|
||||
| `server_url` | Control plane URL | Yes | None |
|
||||
| `agent_token` | Node-specific access Token | Mutually exclusive with discovery_token | Empty |
|
||||
| `discovery_token` | Global auto-registration Token | Mutually exclusive with agent_token | Empty |
|
||||
| `node_name` | Node name | No | Hostname |
|
||||
| `node_ip` | Relay listening IP for tunnel traffic | No | Auto-detect, prioritizes outbound public IP |
|
||||
| `frps_path` | Path to the `frps` binary | No | `frps` (system PATH) |
|
||||
| `data_dir` | Relay runtime data directory | No | `data` in the config folder |
|
||||
| `state_path` | Path to store local state JSON file | No | `data_dir/relay-state.json` |
|
||||
| `heartbeat_interval` | Heartbeat polling interval | No | `10000` milliseconds, supports Go duration strings |
|
||||
| `request_timeout` | HTTP request timeout duration | No | `10000` milliseconds, supports Go duration strings |
|
||||
|
||||
## OpenFlared (Client) Environment Variables
|
||||
|
||||
| Environment Variable | Description | Default Value |
|
||||
| --- | --- | --- |
|
||||
| `LOG_LEVEL` | Logging level for the client | `info` |
|
||||
| `OPENFLARE_SERVER_URL` | Server URL; overrides `flared.json` | Empty |
|
||||
| `OPENFLARE_TUNNEL_TOKEN` | Tunnel access Token; overrides `flared.json` | Empty |
|
||||
| `OPENFLARE_DATA_DIR` | Client data directory; overrides `flared.json` | Empty |
|
||||
| `OPENFLARE_FRPC_PATH` | frpc binary path; overrides `flared.json` | Empty |
|
||||
|
||||
## OpenFlared (Client) CLI Arguments
|
||||
|
||||
| Argument | Description | Default Value |
|
||||
| --- | --- | --- |
|
||||
| `-config` | Path to the client configuration file | `./flared.json` |
|
||||
|
||||
## OpenFlared (Client) Configuration Fields
|
||||
|
||||
| Field | Description | Required | Default Value / Behavior |
|
||||
| --- | --- | --- | --- |
|
||||
| `server_url` | Control plane URL | Yes | None |
|
||||
| `tunnel_token` | Tunnel dedicated access Token | Yes | None |
|
||||
| `frpc_path` | Path to the `frpc` binary | No | `frpc` (system PATH) |
|
||||
| `data_dir` | Client runtime data directory | No | `data` in the config folder |
|
||||
| `state_path` | Path to store local state JSON file | No | `data_dir/flared-state.json` |
|
||||
| `heartbeat_interval` | Heartbeat polling interval | No | `10000` milliseconds, supports Go duration strings |
|
||||
| `sync_interval` | Configuration sync interval | No | `30000` milliseconds, supports Go duration strings |
|
||||
| `request_timeout` | HTTP request timeout duration | No | `10000` milliseconds, supports Go duration strings |
|
||||
|
||||
## Common Configuration Combos
|
||||
|
||||
### Production Server + PostgreSQL
|
||||
|
||||
```bash
|
||||
export SESSION_SECRET='replace-with-a-long-random-string'
|
||||
export DSN='postgres://openflare:replace-with-strong-password@postgres:5432/openflare?sslmode=disable'
|
||||
export GIN_MODE='release'
|
||||
export LOG_LEVEL='info'
|
||||
```
|
||||
|
||||
### Local Server + SQLite
|
||||
|
||||
```bash
|
||||
export SESSION_SECRET='dev-session-secret'
|
||||
export SQLITE_PATH='./openflare-dev.db'
|
||||
export LOG_LEVEL='debug'
|
||||
go run .
|
||||
```
|
||||
|
||||
### Agent + Default OpenResty
|
||||
|
||||
```json
|
||||
{
|
||||
"server_url": "http://your-server:3000",
|
||||
"agent_token": "replace-with-node-auth-token",
|
||||
"data_dir": "/opt/openflare-agent/data",
|
||||
"openresty_path": "openresty",
|
||||
"heartbeat_interval": 10000,
|
||||
"request_timeout": 10000
|
||||
}
|
||||
```
|
||||
|
||||
### Agent + Customized OpenResty Paths
|
||||
|
||||
```json
|
||||
{
|
||||
"server_url": "http://your-server:3000",
|
||||
"agent_token": "replace-with-node-auth-token",
|
||||
"data_dir": "/var/lib/openflare-agent",
|
||||
"openresty_path": "/usr/local/openresty/nginx/sbin/openresty",
|
||||
"main_config_path": "/var/lib/openflare-agent/etc/nginx/nginx.conf",
|
||||
"route_config_path": "/var/lib/openflare-agent/etc/nginx/conf.d/openflare_routes.conf",
|
||||
"access_log_path": "/var/lib/openflare-agent/var/log/openflare/access.log",
|
||||
"cert_dir": "/var/lib/openflare-agent/etc/nginx/certs",
|
||||
"lua_dir": "/var/lib/openflare-agent/etc/nginx/lua",
|
||||
"runtime_config_dir": "/var/lib/openflare-agent/etc/openflare",
|
||||
"heartbeat_interval": 10000,
|
||||
"request_timeout": 10000
|
||||
}
|
||||
```
|
||||
|
||||
### Relay (Server-side) Default Configuration
|
||||
|
||||
`relay.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"server_url": "http://your-server:3000",
|
||||
"agent_token": "replace-with-relay-auth-token",
|
||||
"frps_path": "frps",
|
||||
"data_dir": "/opt/openflare-relay/data",
|
||||
"heartbeat_interval": 10000,
|
||||
"request_timeout": 10000
|
||||
}
|
||||
```
|
||||
|
||||
### OpenFlared (Client-side) Default Configuration
|
||||
|
||||
`flared.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"server_url": "http://your-server:3000",
|
||||
"tunnel_token": "replace-with-tunnel-token",
|
||||
"frpc_path": "frpc",
|
||||
"data_dir": "/opt/openflared/data",
|
||||
"heartbeat_interval": 10000,
|
||||
"sync_interval": 30000,
|
||||
"request_timeout": 10000
|
||||
}
|
||||
```
|
||||
|
||||
## Maintenance Rules
|
||||
|
||||
This document must be updated in sync when any of the following change:
|
||||
|
||||
* Server CLI arguments.
|
||||
* Server environment variables.
|
||||
* Agent CLI arguments and configuration parameters.
|
||||
* Relay CLI arguments and configuration parameters.
|
||||
* Client CLI arguments and configuration parameters.
|
||||
* Default values, scopes, or examples of any configuration items.
|
||||
@@ -1,13 +0,0 @@
|
||||
# Reference Manuals
|
||||
|
||||
You will learn: Which information belongs to stable reference manuals, and where to look up configurations, commands, APIs, and repository structures.
|
||||
|
||||
This section collects stable information at the runtime, API, and repository layers, suitable for rapid lookup during deployment, integration, and troubleshooting.
|
||||
|
||||
| Page | Content |
|
||||
| --- | --- |
|
||||
| [Configuration Options](./configuration.md) | Server environment variables, CLI arguments, runtime Options, and Agent configuration parameters |
|
||||
| [CLI Commands](./cli.md) | Common CLI commands for starting, building, testing, installing, and uninstalling |
|
||||
| [API Conventions](./api.md) | Response structures, authentication, and routing paths for Admin and Agent APIs |
|
||||
| [Repository Structure](../design/repository.md) | Scope of responsibilities and folder layering of the Server, Agent, Relay, and Client |
|
||||
| [Deployment & Upgrade](../deployment/) | Server and Agent deployment, configuration, and upgrade guides (dedicated section) |
|
||||
Reference in New Issue
Block a user