Systemd Service
Run NullBore as a systemd service for automatic startup and restarts.
Service file
Create /etc/systemd/system/nullbore-server.service:
[Unit]
Description=NullBore Tunnel Server
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/nullbore-server \
--host 0.0.0.0 \
--port 443 \
--api-keys nbk_your_key_here \
--db /etc/nullbore/nullbore.db \
--tls-domain tunnel.yourdomain.com \
--tls-email admin@yourdomain.com \
--tls-cache /etc/nullbore/certs \
--base-domain tunnel.yourdomain.com \
--dash-password "your-dashboard-password"
Restart=always
RestartSec=5
WorkingDirectory=/etc/nullbore
[Install]
WantedBy=multi-user.target
Setup
# Create data directory
mkdir -p /etc/nullbore
# Copy binary
cp nullbore-server /usr/local/bin/
chmod +x /usr/local/bin/nullbore-server
# Enable and start
systemctl daemon-reload
systemctl enable nullbore-server
systemctl start nullbore-server
# Check status
systemctl status nullbore-server
Logs
# Follow logs
journalctl -u nullbore-server -f
# Last 100 lines
journalctl -u nullbore-server -n 100
Graceful shutdown
NullBore handles SIGINT and SIGTERM gracefully — it stops accepting new connections and drains active ones (15-second timeout). Systemd sends SIGTERM on systemctl stop, so active tunnels get a clean shutdown.
Updates
# Stop, replace binary, restart
systemctl stop nullbore-server
cp nullbore-server-new /usr/local/bin/nullbore-server
systemctl start nullbore-server
The SQLite database and TLS certificate cache persist across restarts.