Radicle Task Service
Overview
The Radicle task service provides a complete installation and configuration of Radicle, a peer-to-peer code collaboration stack built on Git. Radicle enables developers to collaborate on code without relying on centralized platforms, using cryptographic identities and peer-to-peer networking.
Features
Core Capabilities
- Peer-to-Peer Git Hosting - Decentralized code repositories without central servers
- Cryptographic Identities - Secure, verifiable developer identities
- Web Interface - Optional HTTP daemon for browser-based access
- Automatic Discovery - No manual registry or complex setup required
- Git Integration - Works seamlessly with existing Git workflows
Network Configuration
- Configurable Ports - Node, peer, and web interface ports
- External Addresses - Support for public IP announcement
- Seed Nodes - Connect to existing Radicle network
- Timeout Configuration - Customizable connection timeouts
Security & Management
- User Isolation - Dedicated system user for Radicle services
- Systemd Integration - Full service management and auto-start
- Configurable Logging - Trace to error level logging
- Storage Management - Dedicated storage paths and permissions
Configuration
Basic Configuration
radicle: RadicleNode = {
name: "my-radicle-node"
version: "1.0.0"
run_user: {
name: "radicle"
home: "/home/radicle"
}
bind_addr: "0.0.0.0"
bind_port: 8776
peer_port: 8777
web_ui_port: 8080
announce: true
}
Advanced Configuration
radicle: RadicleNode = {
name: "enterprise-radicle"
version: "1.0.0"
run_user: {
name: "radicle"
group: "radicle"
home: "/opt/radicle"
}
work_path: "/var/lib/radicle"
storage_path: "/data/radicle/storage"
bind_addr: "0.0.0.0"
bind_port: 8776
peer_port: 8777
web_ui_port: 8080
seeds: [
"seed.radicle.garden:8776",
"maple.radicle.garden:8776"
]
external_addresses: [
"203.0.113.1:8776"
]
connect_timeout: 30
announce: true
log_level: "info"
}
httpd: RadicleHttpd = {
enabled: true
bind_addr: "0.0.0.0"
bind_port: 8080
assets_path: "/usr/share/radicle/assets"
}
Usage
Deploy Radicle Node
./core/nulib/provisioning taskserv create radicle --infra <infrastructure-name>
List Available Task Services
./core/nulib/provisioning taskserv list
SSH to Radicle Server
./core/nulib/provisioning server ssh <radicle-server>
Service Management
# Check Radicle node status
systemctl status radicle-node
# Start/stop Radicle node
systemctl start radicle-node
systemctl stop radicle-node
# Check Radicle HTTP daemon status
systemctl status radicle-httpd
# View Radicle logs
journalctl -u radicle-node -f
journalctl -u radicle-httpd -f
Access Web Interface
- Open browser to
http://<server-ip>:8080 - Create identity if first time using Radicle
- Initialize repositories and start collaborating
Command Line Usage
# Switch to radicle user
sudo -u radicle -i
# Initialize a new project
rad init
# Clone a project
rad clone <project-urn>
# Push to Radicle network
rad push
# List local projects
rad project list
# Show node information
rad node info
# Show connected peers
rad node peers
Architecture
Network Topology
- Node Port (8776) - Main Radicle node communication
- Peer Port (8777) - Peer-to-peer synchronization
- Web UI Port (8080) - HTTP daemon for web interface
File Structure
/var/lib/radicle/ # Main working directory
├── storage/ # Repository storage
├── keys/ # Node identity keys
└── config.json # Node configuration
/etc/radicle/ # Configuration directory
├── node.conf # Node settings
└── httpd.conf # HTTP daemon settings
/home/radicle/ # User home directory
├── .radicle/ # User Radicle configuration
└── projects/ # Local project checkouts
Supported Operating Systems
- Ubuntu 20.04+ / Debian 11+
- CentOS 8+ / RHEL 8+ / Fedora 35+
System Requirements
Minimum Requirements
- RAM: 1GB (2GB recommended)
- Storage: 10GB (varies with repository size)
- CPU: 1 core (2 cores recommended)
- Network: Internet access for peer discovery
Network Requirements
- Outbound: TCP ports 8776, 8777 for peer communication
- Inbound: TCP ports 8776, 8777, 8080 (configurable)
- Firewall: Allow configured ports through firewall
Troubleshooting
Service Issues
# Check Radicle node status
systemctl status radicle-node
# Restart Radicle services
systemctl restart radicle-node radicle-httpd
# Check for configuration errors
rad node config --check
# View detailed logs
journalctl -u radicle-node -n 100
Network Connectivity
# Test peer connectivity
rad node peers
# Check if ports are listening
netstat -tlnp | grep :8776
netstat -tlnp | grep :8777
# Test external connectivity
telnet <external-ip> 8776
Storage Issues
# Check storage permissions
ls -la /var/lib/radicle/storage/
# Check disk space
df -h /var/lib/radicle/
# Verify storage integrity
rad storage check
Identity Issues
# Show node identity
rad node identity
# Regenerate identity (destructive!)
rad node identity --regenerate
# Export identity for backup
rad node identity --export > identity-backup.json
Security Considerations
Network Security
- Firewall Rules - Limit access to necessary ports only
- Private Networks - Consider VPN for internal-only deployment
- DDoS Protection - Implement rate limiting for public nodes
Identity Management
- Key Backup - Backup node identity keys securely
- Access Control - Limit shell/SSH access to radicle user
- Regular Updates - Keep Radicle software updated
Data Protection
- Storage Encryption - Consider filesystem-level encryption
- Backup Strategy - Regular backup of repository storage
- Network Monitoring - Monitor for unusual network activity
Integration Examples
CI/CD Integration
# In CI/CD pipeline
rad clone <project-urn>
cd <project-name>
# Run tests, builds, etc.
rad push # Push results back to network
Git Integration
# Add Radicle as Git remote
git remote add radicle <project-urn>
# Push to both origins
git push origin main
git push radicle main
# Fetch from Radicle network
git fetch radicle
Development Workflow
# Developer workflow
rad init my-project
cd my-project
git add . && git commit -m "Initial commit"
rad push
# Share project URN with collaborators
rad project show
Performance Optimization
For High-Traffic Nodes
- Increase file descriptor limits in systemd service
- Use SSD storage for better I/O performance
- Configure higher connection timeouts for slow networks
- Monitor resource usage and scale accordingly
For Low-Resource Systems
- Reduce logging verbosity to 'warn' or 'error'
- Limit concurrent connections
- Use smaller timeout values
- Consider disabling HTTP daemon if not needed
Migration and Backup
Backup Procedure
# Stop services
systemctl stop radicle-node radicle-httpd
# Backup storage and keys
tar -czf radicle-backup-$(date +%Y%m%d).tar.gz \
/var/lib/radicle/storage \
/var/lib/radicle/keys \
/etc/radicle/
# Restart services
systemctl start radicle-node radicle-httpd
Migration Steps
- Stop services on old server
- Backup data using procedure above
- Deploy new server with same configuration
- Restore data to new server
- Update DNS/firewall rules as needed
- Verify connectivity and peer discovery
Resources
- Official Documentation: docs.radicle.xyz
- GitHub Repository: radicle-dev/radicle-node
- Community: radicle.community
- Seeds: Default seed nodes for network bootstrapping