drone is a free and open-source container-native continuous integration platform. Drone provides automated software build and test pipelines using Docker containers, serving as an alternative to Jenkins, CircleCI, or GitHub Actions
1. Prerequisites
2. Supported Operating Systems
This guide supports installation on:
3. Installation
RHEL/CentOS/Rocky Linux/AlmaLinux
# Install EPEL repository if needed
sudo dnf install -y epel-release
# Install drone
sudo dnf install -y drone
# Enable and start service
sudo systemctl enable --now drone
# Configure firewall
sudo firewall-cmd --permanent --add-port=80/443/tcp
sudo firewall-cmd --reload
# Verify installation
drone --version
Debian/Ubuntu
# Update package index
sudo apt update
# Install drone
sudo apt install -y drone
# Enable and start service
sudo systemctl enable --now drone
# Configure firewall
sudo ufw allow 80/443
# Verify installation
drone --version
Arch Linux
# Install drone
sudo pacman -S drone
# Enable and start service
sudo systemctl enable --now drone
# Verify installation
drone --version
Alpine Linux
# Install drone
apk add --no-cache drone
# Enable and start service
rc-update add drone default
rc-service drone start
# Verify installation
drone --version
openSUSE/SLES
# Install drone
sudo zypper install -y drone
# Enable and start service
sudo systemctl enable --now drone
# Configure firewall
sudo firewall-cmd --permanent --add-port=80/443/tcp
sudo firewall-cmd --reload
# Verify installation
drone --version
macOS
# Using Homebrew
brew install drone
# Start service
brew services start drone
# Verify installation
drone --version
FreeBSD
# Using pkg
pkg install drone
# Enable in rc.conf
echo 'drone_enable="YES"' >> /etc/rc.conf
# Start service
service drone start
# Verify installation
drone --version
Windows
# Using Chocolatey
choco install drone
# Or using Scoop
scoop install drone
# Verify installation
drone --version
Initial Configuration
Basic Configuration
# Create configuration directory
sudo mkdir -p /etc/drone
# Set up basic configuration
# See official documentation for detailed configuration options
# Test configuration
drone --version
5. Service Management
systemd (RHEL, Debian, Ubuntu, Arch, openSUSE)
# Enable service
sudo systemctl enable drone
# Start service
sudo systemctl start drone
# Stop service
sudo systemctl stop drone
# Restart service
sudo systemctl restart drone
# Check status
sudo systemctl status drone
# View logs
sudo journalctl -u drone -f
OpenRC (Alpine Linux)
# Enable service
rc-update add drone default
# Start service
rc-service drone start
# Stop service
rc-service drone stop
# Restart service
rc-service drone restart
# Check status
rc-service drone status
rc.d (FreeBSD)
# Enable in /etc/rc.conf
echo 'drone_enable="YES"' >> /etc/rc.conf
# Start service
service drone start
# Stop service
service drone stop
# Restart service
service drone restart
# Check status
service drone status
launchd (macOS)
# Using Homebrew services
brew services start drone
brew services stop drone
brew services restart drone
# Check status
brew services list | grep drone
Windows Service Manager
# Start service
net start drone
# Stop service
net stop drone
# Using PowerShell
Start-Service drone
Stop-Service drone
Restart-Service drone
# Check status
Get-Service drone
Advanced Configuration
See the official documentation for advanced configuration options.
Reverse Proxy Setup
nginx Configuration
upstream drone_backend {
server 127.0.0.1:80/443;
}
server {
listen 80;
server_name drone.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name drone.example.com;
ssl_certificate /etc/ssl/certs/drone.example.com.crt;
ssl_certificate_key /etc/ssl/private/drone.example.com.key;
location / {
proxy_pass http://drone_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Apache Configuration
<VirtualHost *:80>
ServerName drone.example.com
Redirect permanent / https://drone.example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName drone.example.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/drone.example.com.crt
SSLCertificateKeyFile /etc/ssl/private/drone.example.com.key
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:80/443/
ProxyPassReverse / http://127.0.0.1:80/443/
</VirtualHost>
HAProxy Configuration
frontend drone_frontend
bind *:80
bind *:443 ssl crt /etc/ssl/certs/drone.pem
redirect scheme https if !{ ssl_fc }
default_backend drone_backend
backend drone_backend
balance roundrobin
server drone1 127.0.0.1:80/443 check
Security Configuration
Basic Security Setup
# Set appropriate permissions
sudo chown -R drone:drone /etc/drone
sudo chmod 750 /etc/drone
# Configure firewall
sudo firewall-cmd --permanent --add-port=80/443/tcp
sudo firewall-cmd --reload
# Enable SELinux policies (if applicable)
sudo setsebool -P httpd_can_network_connect on
Database Setup
See official documentation for database configuration requirements.
Performance Optimization
System Tuning
# Basic system tuning
echo 'net.core.somaxconn = 65535' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv4.tcp_max_syn_backlog = 65535' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Monitoring
Basic Monitoring
# Check service status
sudo systemctl status drone
# View logs
sudo journalctl -u drone -f
# Monitor resource usage
top -p $(pgrep drone)
9. Backup and Restore
Backup Script
#!/bin/bash
# Basic backup script
BACKUP_DIR="/backup/drone"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/drone-backup-$DATE.tar.gz" /etc/drone /var/lib/drone
echo "Backup completed: $BACKUP_DIR/drone-backup-$DATE.tar.gz"
Restore Procedure
# Stop service
sudo systemctl stop drone
# Restore from backup
tar -xzf /backup/drone/drone-backup-*.tar.gz -C /
# Start service
sudo systemctl start drone
6. Troubleshooting
Common Issues
1. Service won't start:
# Check logs
sudo journalctl -u drone -n 100
sudo tail -f /var/log/drone/drone.log
# Check configuration
drone --version
# Check permissions
ls -la /etc/drone
2. Connection issues:
# Check if service is listening
sudo ss -tlnp | grep 80/443
# Test connectivity
telnet localhost 80/443
# Check firewall
sudo firewall-cmd --list-all
3. Performance issues:
# Check resource usage
top -p $(pgrep drone)
# Check disk I/O
iotop -p $(pgrep drone)
# Check connections
ss -an | grep 80/443
Integration Examples
Docker Compose Example
version: '3.8'
services:
drone:
image: drone:latest
ports:
- "80/443:80/443"
volumes:
- ./config:/etc/drone
- ./data:/var/lib/drone
restart: unless-stopped
Maintenance
Update Procedures
# RHEL/CentOS/Rocky/AlmaLinux
sudo dnf update drone
# Debian/Ubuntu
sudo apt update && sudo apt upgrade drone
# Arch Linux
sudo pacman -Syu drone
# Alpine Linux
apk update && apk upgrade drone
# openSUSE
sudo zypper update drone
# FreeBSD
pkg update && pkg upgrade drone
# Always backup before updates
tar -czf /backup/drone-pre-update-$(date +%Y%m%d).tar.gz /etc/drone
# Restart after updates
sudo systemctl restart drone
Regular Maintenance
# Log rotation
sudo logrotate -f /etc/logrotate.d/drone
# Clean old logs
find /var/log/drone -name "*.log" -mtime +30 -delete
# Check disk usage
du -sh /var/lib/drone
Additional Resources
---
Note: This guide is part of the HowToMgr collection. Always refer to official documentation for the most up-to-date information.