Manual Deployment¶
Install and run BigBrotr services directly on a Linux host without Docker.
Prerequisites¶
- Ubuntu 22.04+ or Debian 12+ (other Linux distributions work with equivalent packages)
- Python 3.11+
- PostgreSQL 16+
- PGBouncer (recommended)
1. Set Up PostgreSQL¶
Install and start PostgreSQL¶
sudo apt update && sudo apt install postgresql-16 postgresql-contrib-16
sudo systemctl start postgresql && sudo systemctl enable postgresql
Create the database¶
sudo -u postgres psql -c "CREATE USER admin WITH PASSWORD 'your_admin_password';"
sudo -u postgres psql -c "CREATE DATABASE bigbrotr OWNER admin;"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE bigbrotr TO admin;"
Create application roles¶
sudo -u postgres psql -d bigbrotr -c "CREATE ROLE bigbrotr_writer LOGIN PASSWORD 'your_writer_password';"
sudo -u postgres psql -d bigbrotr -c "CREATE ROLE bigbrotr_reader LOGIN PASSWORD 'your_reader_password';"
Apply the schema¶
The init directory contains SQL files and shell scripts (for roles and grants). Apply SQL files first, then run the shell scripts:
cd deployments/bigbrotr
# Apply SQL schema files
for f in postgres/init/*.sql; do
psql -U admin -d bigbrotr -f "$f"
done
# Apply grants (run the shell script manually or apply the SQL equivalent)
psql -U admin -d bigbrotr -c "
GRANT USAGE ON SCHEMA public TO bigbrotr_writer;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO bigbrotr_writer;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO bigbrotr_writer;
GRANT USAGE ON SCHEMA public TO bigbrotr_reader;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO bigbrotr_reader;
"
Tip
The SQL files in postgres/init/ are numbered and must be applied in order. The for loop handles this automatically. Shell scripts (01_roles.sh, 98_grants.sh) are designed for Docker init and can be adapted for manual deployment as shown above.
2. Configure PGBouncer (Recommended)¶
Install PGBouncer¶
Configure /etc/pgbouncer/pgbouncer.ini¶
[databases]
bigbrotr = host=localhost port=5432 dbname=bigbrotr pool_size=10
bigbrotr_readonly = host=localhost port=5432 dbname=bigbrotr pool_size=8
[pgbouncer]
listen_addr = 127.0.0.1
listen_port = 6432
auth_type = scram-sha-256
auth_user = admin
auth_query = SELECT usename, passwd FROM pg_shadow WHERE usename=$1
pool_mode = transaction
max_client_conn = 200
default_pool_size = 5
reserve_pool_size = 2
Start PGBouncer¶
3. Set Up the Python Environment¶
Set environment variables¶
4. Run Services¶
cd /opt/bigbrotr/deployments/bigbrotr
# Run seeder (one-shot)
python -m bigbrotr seeder --once
# Run long-lived services
python -m bigbrotr finder &
python -m bigbrotr validator &
python -m bigbrotr monitor &
python -m bigbrotr synchronizer &
Note
For production use, run services via systemd instead of background shell processes. See the next section.
5. Create Systemd Service Files¶
Create /etc/systemd/system/bigbrotr-finder.service:
[Unit]
Description=BigBrotr Finder Service
After=network.target postgresql.service pgbouncer.service
[Service]
Type=simple
User=bigbrotr
Group=bigbrotr
WorkingDirectory=/opt/bigbrotr/deployments/bigbrotr
Environment="PATH=/opt/bigbrotr/venv/bin"
Environment="DB_WRITER_PASSWORD=your_writer_password"
Environment="PRIVATE_KEY=your_hex_key"
ExecStart=/opt/bigbrotr/venv/bin/python -m bigbrotr finder
Restart=always
RestartSec=10
# Security hardening
ProtectSystem=strict
ProtectHome=yes
PrivateTmp=yes
NoNewPrivileges=yes
PrivateDevices=yes
[Install]
WantedBy=multi-user.target
Create similar files for validator, monitor, and synchronizer, changing the Description and the service name in the ExecStart line.
Enable and start all services¶
sudo systemctl daemon-reload
sudo systemctl enable bigbrotr-finder bigbrotr-validator bigbrotr-monitor bigbrotr-synchronizer
sudo systemctl start bigbrotr-finder bigbrotr-validator bigbrotr-monitor bigbrotr-synchronizer
Check service status¶
Warning
Store secrets in a systemd credential file or environment file (EnvironmentFile=) rather than inline Environment= directives for production deployments.
Related Documentation¶
- Docker Compose Deployment -- deploy with Docker instead
- Monitoring Setup -- add Prometheus and Grafana
- Backup and Restore -- automate database backups
- Troubleshooting -- resolve common deployment issues