# Calypso Systemd Service Setup
**Tanggal:** 2025-01-09  
**Service:** `calypso-api.service`  
**Status:** ✅ **ACTIVE & RUNNING**

## Service File

**Location:** `/etc/systemd/system/calypso-api.service`

### Configuration

```ini
[Unit]
Description=AtlasOS - Calypso API Service
Documentation=https://github.com/atlasos/calypso
After=network.target postgresql.service
Wants=postgresql.service

[Service]
Type=simple
User=calypso
Group=calypso
WorkingDirectory=/opt/calypso
ExecStart=/opt/calypso/bin/calypso-api -config /opt/calypso/conf/config.yaml
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
SyslogIdentifier=calypso-api

# Environment
EnvironmentFile=/opt/calypso/conf/secrets.env
Environment="CALYPSO_DB_HOST=localhost"
Environment="CALYPSO_DB_PORT=5432"
Environment="CALYPSO_DB_USER=calypso"
Environment="CALYPSO_DB_NAME=calypso"

# Security
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/calypso/data /opt/calypso/conf /var/log/calypso /var/lib/calypso /run/calypso
ReadOnlyPaths=/opt/calypso/bin /opt/calypso/web /opt/calypso/releases

# Resource limits
LimitNOFILE=65536
LimitNPROC=4096

[Install]
WantedBy=multi-user.target
```

## Service Status

✅ **Status:** Active (running)  
✅ **Enabled:** Yes (auto-start on boot)  
✅ **PID:** Running  
✅ **Memory:** ~12.4M  
✅ **Port:** 8080

## Service Management

### Start Service
```bash
sudo systemctl start calypso-api
```

### Stop Service
```bash
sudo systemctl stop calypso-api
```

### Restart Service
```bash
sudo systemctl restart calypso-api
```

### Reload Configuration (without restart)
```bash
sudo systemctl reload calypso-api
```

### Check Status
```bash
sudo systemctl status calypso-api
```

### Enable/Disable Auto-start
```bash
# Enable auto-start on boot
sudo systemctl enable calypso-api

# Disable auto-start
sudo systemctl disable calypso-api

# Check if enabled
sudo systemctl is-enabled calypso-api
```

## Viewing Logs

### Real-time Logs (Follow Mode)
```bash
sudo journalctl -u calypso-api -f
```

### Last 50 Lines
```bash
sudo journalctl -u calypso-api -n 50
```

### Logs Since Today
```bash
sudo journalctl -u calypso-api --since today
```

### Logs with Timestamps
```bash
sudo journalctl -u calypso-api --no-pager
```

## Service Configuration Details

### Working Directory
- **Path:** `/opt/calypso`
- **Purpose:** Base directory for application

### Binary Location
- **Path:** `/opt/calypso/bin/calypso-api`
- **Config:** `/opt/calypso/conf/config.yaml`

### Environment Variables
- **Secrets File:** `/opt/calypso/conf/secrets.env`
  - `CALYPSO_DB_PASSWORD` - Database password
  - `CALYPSO_JWT_SECRET` - JWT secret key
- **Database Config:**
  - `CALYPSO_DB_HOST=localhost`
  - `CALYPSO_DB_PORT=5432`
  - `CALYPSO_DB_USER=calypso`
  - `CALYPSO_DB_NAME=calypso`

### Security Settings
- ✅ **NoNewPrivileges:** Prevents privilege escalation
- ✅ **PrivateTmp:** Isolated temporary directory
- ✅ **ProtectSystem:** Read-only system directories
- ✅ **ProtectHome:** Read-only home directories
- ✅ **ReadWritePaths:** Only specific paths writable
- ✅ **ReadOnlyPaths:** Application binaries read-only

### Resource Limits
- **Max Open Files:** 65536
- **Max Processes:** 4096

## Runtime Directories

- **Logs:** `/var/log/calypso/` (calypso:calypso)
- **Data:** `/var/lib/calypso/` (calypso:calypso)
- **Runtime:** `/run/calypso/` (calypso:calypso)

## Service Verification

### Check Service Status
```bash
sudo systemctl is-active calypso-api
# Output: active
```

### Check HTTP Endpoint
```bash
curl http://localhost:8080/api/v1/health
```

### Check Process
```bash
ps aux | grep calypso-api
```

### Check Port
```bash
sudo netstat -tlnp | grep 8080
# or
sudo ss -tlnp | grep 8080
```

## Startup Logs Analysis

From initial startup logs:
- ✅ Database connection successful
- ✅ Connected to Bacula database
- ✅ HTTP server started on port 8080
- ✅ MHVTL configuration sync completed
- ✅ Disk discovery completed (5 disks)
- ✅ Alert rules registered
- ✅ Monitoring services started
- ⚠️ Warning: RRD tool not found (network monitoring optional)

## Troubleshooting

### Service Won't Start
1. Check logs: `sudo journalctl -u calypso-api -n 50`
2. Check config file: `cat /opt/calypso/conf/config.yaml`
3. Check secrets file permissions: `ls -la /opt/calypso/conf/secrets.env`
4. Check database connection: `sudo -u postgres psql -U calypso -d calypso`

### Service Crashes/Restarts
1. Check logs for errors: `sudo journalctl -u calypso-api --since "10 minutes ago"`
2. Check system resources: `free -h` and `df -h`
3. Check database status: `sudo systemctl status postgresql`

### Permission Issues
1. Check ownership: `ls -la /opt/calypso/bin/calypso-api`
2. Check user exists: `id calypso`
3. Check directory permissions: `ls -la /opt/calypso/`

## Next Steps

1. ✅ Service installed and running
2. ⏭️ Setup reverse proxy (Caddy/Nginx) for frontend
3. ⏭️ Configure firewall rules (if needed)
4. ⏭️ Setup SSL/TLS certificates
5. ⏭️ Configure monitoring/alerting

---

**Service Status:** ✅ **OPERATIONAL**  
**API Endpoint:** `http://localhost:8080`  
**Health Check:** `http://localhost:8080/api/v1/health`
