commit a36a5feb6abb132121e8a6647ddc2d31d5a9c030 Author: xboard Date: Mon Mar 23 23:56:11 2026 +0800 init diff --git a/README.md b/README.md new file mode 100644 index 0000000..b6ee1ff --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +# xboard-node — Docker Compose + +## Quick start + +```bash +git clone -b compose --depth 1 https://github.com/cedar2025/xboard-node.git +cd xboard-node +# Edit config/config.yml: panel.url, panel.token, panel.node_id +docker compose up -d +``` + +## Update / logs / stop + +```bash +cd compose +docker compose pull && docker compose up -d +docker compose logs -f +docker compose down +``` + +## Layout + +| Path | Purpose | +|------|---------| +| `compose.yml` | Service definition | +| `config/config.yml.example` | Template (safe to commit) | +| `config/config.yml` | Your secrets (**do not commit**; add to `.gitignore` upstream) | +| `.env.example` | Optional env overrides | + +## Host network + +`network_mode: host` is set so the node uses the host network stack (same as `docker run --network host`). Free the ports your protocols need. + +## Image + +Default: `ghcr.io/cedar2025/xboard-node:latest`. diff --git a/compose.yml b/compose.yml new file mode 100644 index 0000000..3330f8d --- /dev/null +++ b/compose.yml @@ -0,0 +1,24 @@ +# XrayR-style: ./config on the host is mounted to /etc/xboard-node in the container. +# Run all commands from this directory: cd compose && docker compose up -d +# See README.md in this folder. + +services: + xboard-node: + image: ghcr.io/cedar2025/xboard-node:latest + container_name: xboard-node + network_mode: host + restart: unless-stopped + volumes: + - ./config:/etc/xboard-node + command: ["-c", "/etc/xboard-node/config.yml"] + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + # Optional: override panel settings without editing config.yml (still need a valid config file to load). + # environment: + # API_HOST: https://panel.example.com + # API_KEY: your-server-token + # NODE_ID: "1" + # KERNEL_TYPE: singbox diff --git a/config/config.yml b/config/config.yml new file mode 100644 index 0000000..b1cc63d --- /dev/null +++ b/config/config.yml @@ -0,0 +1,82 @@ +# Xboard Node Configuration +# Copy this file to config.yml and modify as needed + +# ══════════════════════════════════════════════════════════════════════════════ +# MINIMAL CONFIGURATION (Recommended) +# Most settings (Node ID, Kernel, TLS, Rules) can be managed via the Panel. +# ══════════════════════════════════════════════════════════════════════════════ + +# Panel connection settings +panel: + # Xboard panel URL (required) + url: "https://panel.example.com" + # Server communication token (required, must match panel settings) + token: "your-server-token" + # Node ID as configured in the panel + node_id: 1 + +# Kernel settings (optional defaults) +kernel: + # Kernel type: "singbox" (default) or "xray" + type: "singbox" + # Directory to store generated configs (default: /etc/xboard-node) + config_dir: "/etc/xboard-node" + # Kernel log level: debug/info/warn/error (default: warn, can be overridden by panel) + log_level: "warn" + +# TLS certificate settings (optional, can be managed by panel) +# cert_mode: "http" | "dns" | "self" | "file" | "none" +# http - ACME HTTP-01 challenge (requires port 80 open to internet) +# dns - ACME DNS-01 challenge (supports wildcard certs, requires dns_provider) +# self - self-signed certificate (valid 10 years, no external dependency) +# file - manually specify cert_file / key_file +# none - no TLS (default) +cert: + cert_mode: "none" + # Domain for ACME or self-signed cert + # domain: "node.example.com" + # Email for ACME registration + # email: "admin@example.com" + + # ── HTTP-01 mode ── + # http_port: 80 # local port for ACME challenge (default: 80) + + # ── DNS-01 mode ── + # dns_provider: "cloudflare" # supported: cloudflare, alidns + # dns_env: # provider-specific credentials + # CF_API_TOKEN: "your-cloudflare-api-token" + + # ── File mode ── + # cert_file: "/etc/ssl/certs/cert.pem" + # key_file: "/etc/ssl/private/key.pem" + + # Storage directory for auto certs (default: {config_dir}/certs) + # cert_dir: "/etc/xboard-node/certs" + +# Logging settings +log: + # Node log level: debug/info/warn/error (default: info) + level: "info" + # Log output: stdout/stderr or file path (default: stdout) + output: "stdout" + +# ══════════════════════════════════════════════════════════════════════════════ +# ADVANCED / MULTI-NODE MODE +# Run multiple nodes with one configuration file. +# Each node gets its own isolated working directory. +# ══════════════════════════════════════════════════════════════════════════════ +# When `nodes:` is present, the top-level `panel.node_id` is ignored. +# +# nodes: +# - node_id: 1 +# +# - node_id: 2 +# # Optional overrides per node +# kernel_type: "xray" +# cert: +# auto_tls: true +# domain: "node2.example.com" +# +# - node_id: 3 +# kernel: +# config_dir: "/etc/xboard-node/custom-node-3" \ No newline at end of file