# Quick Start You will learn how to start OpenFlare Server with Docker Compose, sign in for the first time, connect the first Agent, and verify that a configuration was published to a node. The minimal OpenFlare setup contains: | Component | Responsibility | | --- | --- | | Server | Management UI, management API, Agent API, configuration rendering, release publishing, and state storage | | Agent | Runs on proxy nodes, pulls configuration, writes OpenResty files, validates, and reloads | | OpenResty | Receives traffic and proxies requests to origins | Agent controls OpenResty through the OpenResty binary. Local installs need an `openresty` executable on the node; Docker installs can run the Agent image that already includes OpenResty. ## Requirements | Item | Requirement | | --- | --- | | Docker / Docker Compose | Used to start Server and PostgreSQL; also used if you run the Agent Docker image | | OpenResty | Required for local Agent installs unless `--openresty-path` points to a custom binary | | Reachable ports | Server listens on `3000` by default. Agent nodes must reach the Server URL. | | Browser | Used to open the management UI | [Needs confirmation: minimum recommended Docker and Docker Compose versions] ## 1. Start Server Create `docker-compose.yml` in an empty directory: ```yaml services: postgres: image: postgres:17-alpine restart: unless-stopped environment: POSTGRES_DB: openflare POSTGRES_USER: openflare POSTGRES_PASSWORD: replace-with-strong-password volumes: - postgres-data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U openflare -d openflare"] interval: 10s timeout: 5s retries: 5 openflare: image: ghcr.io/rain-kl/openflare:latest restart: unless-stopped depends_on: postgres: condition: service_healthy ports: - "3000:3000" environment: SESSION_SECRET: replace-with-a-long-random-string DSN: postgres://openflare:replace-with-strong-password@postgres:5432/openflare?sslmode=disable GIN_MODE: release LOG_LEVEL: info volumes: postgres-data: ``` Start: ```bash docker compose up -d ``` Verify: ```bash docker compose ps docker compose logs -f openflare ``` When the `openflare` container is running and logs show `server listening`, open: ```text http://localhost:3000 ``` Default account: | Username | Password | | --- | --- | | `root` | `123456` | Change the default password immediately after first login. ## 2. Prepare an Agent Token Agents can connect with either: | Credential | Use Case | | --- | --- | | `discovery_token` | First-time automatic node registration. Server exchanges it for a node-specific token. | | `agent_token` | A node-specific token created or assigned in the management UI. | Prepare one of them in the management UI before continuing. [Needs confirmation: exact UI menu path for creating or viewing `discovery_token` and node `agent_token`] ## 3. Install/Run Agent The recommended deployment method for the Agent is Docker deployment (i.e., running the Agent image that already includes OpenResty); it also supports shell-script installation on the local host. ### Option A: Run Agent in Docker (Recommended) Run the Agent Docker image on the proxy node: ```bash docker pull ghcr.io/rain-kl/openflare-agent:latest docker rm -f openflare-agent 2>/dev/null || true docker run -d --name openflare-agent --restart unless-stopped \ -p 80:80 -p 443:443 \ -v openflare-agent-data:/data \ -e OPENFLARE_SERVER_URL=http://your-server:3000 \ -e OPENFLARE_AGENT_TOKEN=YOUR_AGENT_TOKEN \ ghcr.io/rain-kl/openflare-agent:latest ``` ### Option B: Run the Installation Script (Local Host) Run the install script on the proxy node. With `discovery_token`: ```bash curl -fsSL https://raw.githubusercontent.com/Rain-kl/OpenFlare/main/scripts/install-agent.sh | bash -s -- \ --server-url http://your-server:3000 \ --discovery-token YOUR_DISCOVERY_TOKEN ``` With node-specific `agent_token`: ```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 ``` The script defaults to: | Item | Default | | --- | --- | | Install directory | `/opt/openflare-agent` | | Config file | `/opt/openflare-agent/agent.json` | | systemd service | `openflare-agent.service` | | OpenResty path | Auto-detects `openresty` unless `--openresty-path` is provided | Check status: ```bash systemctl status openflare-agent journalctl -u openflare-agent -f ``` If systemd is unavailable, the script prints a manual start command. ## 4. Publish the First Configuration In the management UI: 1. Create a site configuration with a site name, domain, and origin URL. 2. Ensure the site is enabled. 3. Preview the rendered configuration or review the diff. 4. Publish and activate a new version. 5. Wait for the Agent to discover and apply the version through heartbeat. Version numbers use `YYYYMMDD-NNN`. Historical versions are immutable; rollback reactivates an old version. ## 5. Verify Success In the UI: | Location | Expected Result | | --- | --- | | Node list | Agent node is online | | Node detail | Current version matches the active version | | Apply logs | Latest apply succeeded | | Versions page | New version is active | On the Agent node: ```bash journalctl -u openflare-agent -n 100 --no-pager ``` ## Common Failures | Symptom | What to Check | | --- | --- | | Cannot open the UI | Confirm `docker compose ps` shows Server running and host port `3000` is free | | Login works but data cannot be saved | Check PostgreSQL health and the username/password/database in `DSN` | | Agent cannot register | Confirm the Agent node can reach `--server-url`, and check whether the token is wrong or expired | | Agent is online but does not apply | Confirm the site is enabled and a version was published and activated | | OpenResty apply fails | Check apply logs and `journalctl -u openflare-agent`, especially domains, certificates, upstream URLs, and port conflicts | See [Troubleshooting](./troubleshooting.md) for deeper diagnostics.