🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
56 lines
1.5 KiB
Desktop File
56 lines
1.5 KiB
Desktop File
[Unit]
|
|
Description=Dangerous Pi Backend Service
|
|
Documentation=https://github.com/yourusername/dangerous-pi
|
|
After=network.target
|
|
Wants=network-online.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=__DANGEROUS_PI_USER__
|
|
Group=__DANGEROUS_PI_USER__
|
|
WorkingDirectory=/opt/dangerous-pi
|
|
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/usr/bin:/bin"
|
|
Environment="PYTHONUNBUFFERED=1"
|
|
Environment="PYTHONPATH=/home/__DANGEROUS_PI_USER__/.pm3/proxmark3/client/pyscripts:/home/__DANGEROUS_PI_USER__/.pm3/proxmark3/client/experimental_lib/build"
|
|
EnvironmentFile=-/opt/dangerous-pi/.env
|
|
|
|
# Main service command
|
|
ExecStart=/usr/bin/python3 -m uvicorn app.backend.main:app \
|
|
--host 0.0.0.0 \
|
|
--port 8000 \
|
|
--log-level info
|
|
|
|
# Restart policy
|
|
Restart=always
|
|
RestartSec=10
|
|
StartLimitBurst=5
|
|
StartLimitInterval=60
|
|
|
|
# Resource limits
|
|
LimitNOFILE=65536
|
|
MemoryMax=512M
|
|
CPUQuota=80%
|
|
|
|
# Security hardening
|
|
NoNewPrivileges=true
|
|
PrivateTmp=true
|
|
ProtectSystem=full
|
|
ProtectHome=read-only
|
|
ReadWritePaths=/opt/dangerous-pi/data /opt/dangerous-pi/logs /etc/NetworkManager/conf.d
|
|
ReadOnlyPaths=/opt/dangerous-pi /home/__DANGEROUS_PI_USER__/.pm3 /usr/local/bin
|
|
|
|
# Allow I2C and Bluetooth access
|
|
SupplementaryGroups=i2c bluetooth gpio dialout netdev
|
|
|
|
# Network management capabilities (for WiFi scanning/configuration without sudo)
|
|
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW
|
|
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW
|
|
|
|
# Graceful shutdown
|
|
TimeoutStopSec=30
|
|
KillMode=mixed
|
|
KillSignal=SIGTERM
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|