# OpenAaaS Server
中文 | English
The HTTP server for OpenAaaS, responsible for receiving client tasks, dispatching them to agents for execution, and managing the task lifecycle.
## Build & Install
Requires the Rust toolchain (1.85+):
```bash
cd server
cargo build --release
```
The compiled binary is located at `target/release/open-aaas-server`.
## Command Usage
```bash
open-aaas-server [OPTIONS]
```
### Global Options
| Option | Description |
|--------|-------------|
| `--config ` | Specify the configuration file path; defaults to `config.toml` in the current directory |
### Subcommands
| Command | Description |
|---------|-------------|
| `run` | Run the server in the foreground |
| `run-detached` | Run the server in the background |
| `stop` | Stop the background server |
| `status` | Check the server status |
## First Launch
When running `run` for the first time, if no `config.toml` exists in the current directory, an interactive configuration will start:
```bash
$ ./open-aaas-server run
Data directory [./data]: # Press Enter to confirm or enter a new path
Admin API Key []: # Press Enter to generate randomly, or enter a custom value
```
The server will automatically perform the following initialization steps:
1. Create the data directory (default: `./data`)
2. Set the SQLite database path: `{data_dir}/app.db`
3. Set the file storage path: `{data_dir}/files`
4. Generate a random `secret_key` (if not configured)
5. Create the `admin_api_key` (either the value you entered or a randomly generated one)
6. Write the final configuration to `config.toml`
The service will then start normally.
## Foreground Run
```bash
./open-aaas-server run
```
After starting, it listens on the default address `0.0.0.0:8080`. Press `Ctrl+C` or send `SIGTERM` for a graceful shutdown.
If `config.toml` already exists in the current directory, it will load the configuration and start directly without prompting.
## Background Run
```bash
./open-aaas-server run-detached
```
- Linux/macOS: Runs in the background via `nohup`, with logs output to `{data_dir}/server.log`
- Windows: Runs in the background via `cmd /C start /B`
After starting in the background, a pidfile will be written for subsequent management and status queries.
## Check Status
```bash
./open-aaas-server status
```
Example output:
```
Config file: /path/to/config.toml
Data directory: /path/to/data
Listen address: 0.0.0.0:8080
Status: Running (PID: 12345)
```
## Stop Service
```bash
./open-aaas-server stop
```
Sends `SIGTERM` to the background process, waiting up to 5 seconds for a graceful exit; if timed out, sends `SIGKILL` to force termination and cleans up the pidfile.
## Environment Variables
The server automatically loads the `.env` file in the current directory (if it exists) on startup.
The following environment variables can override the corresponding items in the configuration file, with the prefix `APP__` and levels separated by double underscores:
| Environment Variable | Corresponding Config Item |
|----------------------|---------------------------|
| `APP__SECRET_KEY` | `secret_key` |
| `APP__ADMIN_API_KEY` | `admin_api_key` |
| `APP__LOG_LEVEL` | `log_level` |
| `APP__SERVER__ADDR` | `server.addr` |
| `APP__DATABASE__URL` | `database.url` |
| `APP__AGENT__HEARTBEAT_TIMEOUT_SECS` | `agent.heartbeat_timeout_secs` |
| `APP__TASK__RESULT_RETENTION_DAYS` | `task.result_retention_days` |
| `APP__TASK__FILE_STORAGE_PATH` | `task.file_storage_path` |
| `APP__TASK__MAX_FILE_SIZE_MB` | `task.max_file_size_mb` |
Example:
```bash
APP__SERVER__ADDR="0.0.0.0:3000" APP__LOG_LEVEL=debug ./open-aaas-server run
```
The `ADMIN_API_KEY` environment variable (without prefix) can also directly override the admin API key, taking precedence over the configuration file.
## Configuration File
Complete `config.toml` example:
```toml
secret_key = "xxx" # HMAC key, auto-generated on first launch
admin_api_key = "xxx" # Admin API key
log_level = "info" # trace / debug / info / warn / error
[server]
addr = "0.0.0.0:8080" # Listen address
timeout_secs = 30 # HTTP request timeout (seconds)
max_body_size = 10485760 # Maximum request body size (10MB)
[database]
url = "sqlite:./data/app.db" # SQLite database path
[agent]
heartbeat_timeout_secs = 60 # Agent heartbeat timeout (seconds)
[task]
result_retention_days = 7 # Task result retention days
file_storage_path = "./data/files" # File storage path
max_file_size_mb = 50 # Single file size limit (MB)
```
No manual modification is needed after the first launch. If adjustments are required, simply edit `config.toml` and restart.
## Admin API Key
The Admin API Key is used to call admin interfaces (creating services, viewing all tasks, etc.). Ways to obtain it:
1. **Auto-generated on first launch**: The console will print `Admin API Key: ak_admin_xxx`, and it will also be written to `config.toml`
2. **Environment variable override**: Set `ADMIN_API_KEY` or `APP__ADMIN_API_KEY` before starting
3. **Check config file**: Read the `admin_api_key` field from `config.toml`
Please keep it safe and avoid leakage.