mirror of
https://github.com/CloudNebulaProject/barycenter.git
synced 2026-04-10 21:20:41 +00:00
179 lines
4.5 KiB
Markdown
179 lines
4.5 KiB
Markdown
|
|
# Linux systemd
|
||
|
|
|
||
|
|
This guide covers deploying Barycenter as a systemd service on Linux distributions such as Debian, Ubuntu, Fedora, RHEL, and Arch Linux. A systemd unit file is provided in the repository at `deploy/systemd/barycenter.service`.
|
||
|
|
|
||
|
|
## Prerequisites
|
||
|
|
|
||
|
|
- A Linux system with systemd
|
||
|
|
- The Rust toolchain (to build from source) or a pre-built binary
|
||
|
|
- SQLite development libraries (if using SQLite) or a reachable PostgreSQL instance
|
||
|
|
|
||
|
|
## Step 1: Build the Binary
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cargo build --release
|
||
|
|
```
|
||
|
|
|
||
|
|
The release binary is located at `target/release/barycenter`.
|
||
|
|
|
||
|
|
## Step 2: Create a Service User
|
||
|
|
|
||
|
|
Create a dedicated system user with no login shell and a home directory for data:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
sudo useradd -r -s /bin/false -d /var/lib/barycenter barycenter
|
||
|
|
```
|
||
|
|
|
||
|
|
## Step 3: Install the Binary
|
||
|
|
|
||
|
|
```bash
|
||
|
|
sudo cp target/release/barycenter /usr/local/bin/barycenter
|
||
|
|
sudo chmod 755 /usr/local/bin/barycenter
|
||
|
|
```
|
||
|
|
|
||
|
|
## Step 4: Create Directories
|
||
|
|
|
||
|
|
```bash
|
||
|
|
sudo mkdir -p /etc/barycenter
|
||
|
|
sudo mkdir -p /var/lib/barycenter/data
|
||
|
|
sudo chown -R barycenter:barycenter /var/lib/barycenter
|
||
|
|
```
|
||
|
|
|
||
|
|
| Directory | Purpose |
|
||
|
|
|-----------|---------|
|
||
|
|
| `/etc/barycenter/` | Configuration file |
|
||
|
|
| `/var/lib/barycenter/data/` | Database (SQLite), RSA private key, JWKS |
|
||
|
|
|
||
|
|
## Step 5: Install the Configuration File
|
||
|
|
|
||
|
|
Copy and edit the configuration file:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
sudo cp config.toml /etc/barycenter/config.toml
|
||
|
|
sudo chmod 640 /etc/barycenter/config.toml
|
||
|
|
sudo chown root:barycenter /etc/barycenter/config.toml
|
||
|
|
```
|
||
|
|
|
||
|
|
Edit `/etc/barycenter/config.toml` to set the correct values for your deployment. At a minimum, configure the `public_base_url` and database path:
|
||
|
|
|
||
|
|
```toml
|
||
|
|
[server]
|
||
|
|
public_base_url = "https://idp.example.com"
|
||
|
|
|
||
|
|
[database]
|
||
|
|
url = "sqlite:///var/lib/barycenter/data/barycenter.db?mode=rwc"
|
||
|
|
|
||
|
|
[keys]
|
||
|
|
jwks_path = "/var/lib/barycenter/data/jwks.json"
|
||
|
|
private_key_path = "/var/lib/barycenter/data/private_key.pem"
|
||
|
|
```
|
||
|
|
|
||
|
|
## Step 6: Install the systemd Unit
|
||
|
|
|
||
|
|
```bash
|
||
|
|
sudo cp deploy/systemd/barycenter.service /etc/systemd/system/barycenter.service
|
||
|
|
sudo systemctl daemon-reload
|
||
|
|
```
|
||
|
|
|
||
|
|
The unit file runs Barycenter as the `barycenter` user, reads the configuration from `/etc/barycenter/config.toml`, and restarts the service on failure.
|
||
|
|
|
||
|
|
## Step 7: Enable and Start
|
||
|
|
|
||
|
|
```bash
|
||
|
|
sudo systemctl enable --now barycenter
|
||
|
|
```
|
||
|
|
|
||
|
|
This enables Barycenter to start automatically on boot and starts it immediately.
|
||
|
|
|
||
|
|
## Managing the Service
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Check status
|
||
|
|
sudo systemctl status barycenter
|
||
|
|
|
||
|
|
# View logs
|
||
|
|
sudo journalctl -u barycenter
|
||
|
|
|
||
|
|
# Follow logs in real time
|
||
|
|
sudo journalctl -u barycenter -f
|
||
|
|
|
||
|
|
# Restart after a configuration change
|
||
|
|
sudo systemctl restart barycenter
|
||
|
|
|
||
|
|
# Stop the service
|
||
|
|
sudo systemctl stop barycenter
|
||
|
|
|
||
|
|
# Disable automatic start on boot
|
||
|
|
sudo systemctl disable barycenter
|
||
|
|
```
|
||
|
|
|
||
|
|
## Log Level
|
||
|
|
|
||
|
|
Set the log level through the `RUST_LOG` environment variable. You can override it in the unit file by creating a drop-in:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
sudo systemctl edit barycenter
|
||
|
|
```
|
||
|
|
|
||
|
|
Add the following content:
|
||
|
|
|
||
|
|
```ini
|
||
|
|
[Service]
|
||
|
|
Environment=RUST_LOG=info
|
||
|
|
```
|
||
|
|
|
||
|
|
Save and restart:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
sudo systemctl restart barycenter
|
||
|
|
```
|
||
|
|
|
||
|
|
Common log level values:
|
||
|
|
|
||
|
|
| Value | Description |
|
||
|
|
|-------|-------------|
|
||
|
|
| `error` | Only errors |
|
||
|
|
| `warn` | Warnings and errors |
|
||
|
|
| `info` | Informational messages (recommended for production) |
|
||
|
|
| `debug` | Detailed debugging output |
|
||
|
|
| `barycenter=debug` | Debug output for Barycenter only, info for dependencies |
|
||
|
|
|
||
|
|
## File Permissions Summary
|
||
|
|
|
||
|
|
| Path | Owner | Mode | Purpose |
|
||
|
|
|------|-------|------|---------|
|
||
|
|
| `/usr/local/bin/barycenter` | `root:root` | `755` | Application binary |
|
||
|
|
| `/etc/barycenter/config.toml` | `root:barycenter` | `640` | Configuration file |
|
||
|
|
| `/var/lib/barycenter/data/` | `barycenter:barycenter` | `750` | Data directory |
|
||
|
|
| `/var/lib/barycenter/data/private_key.pem` | `barycenter:barycenter` | `600` | RSA private key (created at first run) |
|
||
|
|
|
||
|
|
## Upgrading
|
||
|
|
|
||
|
|
To upgrade Barycenter to a new version:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Build the new version
|
||
|
|
cargo build --release
|
||
|
|
|
||
|
|
# Stop the service
|
||
|
|
sudo systemctl stop barycenter
|
||
|
|
|
||
|
|
# Replace the binary
|
||
|
|
sudo cp target/release/barycenter /usr/local/bin/barycenter
|
||
|
|
|
||
|
|
# Start the service
|
||
|
|
sudo systemctl start barycenter
|
||
|
|
|
||
|
|
# Verify
|
||
|
|
sudo systemctl status barycenter
|
||
|
|
sudo journalctl -u barycenter --since "1 minute ago"
|
||
|
|
```
|
||
|
|
|
||
|
|
Database migrations run automatically on startup.
|
||
|
|
|
||
|
|
## Further Reading
|
||
|
|
|
||
|
|
- [Production Checklist](./production-checklist.md) -- steps to verify before going live
|
||
|
|
- [Reverse Proxy and TLS](./reverse-proxy-tls.md) -- placing Barycenter behind nginx
|
||
|
|
- [Backup and Recovery](./backup-recovery.md) -- backing up the data directory
|