Ansible playbook for managing the netbox server
| group_vars | ||
| host_vars | ||
| inventory | ||
| playbooks | ||
| roles | ||
| .gitignore | ||
| ansible.cfg | ||
| Makefile | ||
| README.md | ||
| requirements.yml | ||
NetBox Ansible Deployment
This Ansible project deploys NetBox using Docker Compose on Ubuntu servers. It follows Ansible best practices with modular roles, idempotent operations, and comprehensive configuration management.
Features
- Modular Design: Separate roles for system updates, Docker installation, and NetBox deployment
- Idempotent: Safe to run multiple times without side effects
- Ubuntu Only: Specifically designed for Ubuntu distributions (Focal, Jammy, Noble)
- Docker Compose: Uses the official NetBox Docker repository
- Configuration Management: Templated environment files with Ansible variables
- Security: Support for Ansible Vault for sensitive data
- Backup Support: Built-in backup playbook for data protection
Project Structure
netbox-ansible/
├── ansible.cfg # Ansible configuration
├── inventory/
│ └── hosts.yml # Inventory file
├── group_vars/
│ ├── netbox.yml # Group variables
│ └── netbox/
│ └── vault.yml # Encrypted sensitive variables
├── playbooks/
│ ├── deploy-netbox.yml # Main deployment playbook
│ ├── update-netbox.yml # Update NetBox playbook
│ └── backup-netbox.yml # Backup NetBox playbook
├── roles/
│ ├── system-update/ # System package updates
│ ├── docker-install/ # Docker and Docker Compose installation
│ └── netbox-deploy/ # NetBox deployment and configuration
└── templates/ # Additional templates if needed
Prerequisites
- Ansible 2.9 or later
- Target servers running Ubuntu (Focal, Jammy, or Noble)
- SSH access to target servers with sudo privileges
- Python 3 on target servers
Quick Start
-
Configure Inventory
# Edit inventory/hosts.yml vim inventory/hosts.ymlAdd your server(s):
[netbox] netbox-server ansible_host=192.168.1.100 ansible_user=ubuntu -
Configure Variables
# Edit group variables vim group_vars/netbox.yml # Encrypt sensitive variables ansible-vault encrypt group_vars/netbox/vault.yml -
Deploy NetBox
# Run the deployment playbook ansible-playbook -i inventory/hosts.yml playbooks/deploy-netbox.yml
Configuration
Group Variables (group_vars/netbox.yml)
Key configuration options:
netbox_install_dir: Directory for NetBox installation (default:/opt/netbox-docker)netbox_data_dir: Directory for persistent data (default:/opt/netbox-data)netbox_backup_dir: Directory for backups (default:/opt/netbox-backups)netbox_allowed_hosts: Allowed hosts for NetBoxnetbox_superuser_*: Superuser configurationnetbox_db_*: Database configurationnetbox_redis_*: Redis configuration
Vault Variables (group_vars/netbox/vault.yml)
Sensitive data should be encrypted:
# Encrypt vault file
ansible-vault encrypt group_vars/netbox/vault.yml
# Edit encrypted vault file
ansible-vault edit group_vars/netbox/vault.yml
Docker Compose Overrides
Customize Docker Compose configuration via netbox_docker_compose_overrides:
netbox_docker_compose_overrides:
services:
netbox:
ports:
- "8000:8080"
db:
volumes:
- "/opt/netbox-data/postgres:/var/lib/postgresql/data"
Playbooks
Main Deployment (deploy-netbox.yml)
Deploys NetBox from scratch:
- Updates system packages
- Installs Docker and Docker Compose
- Clones NetBox Docker repository
- Configures environment files
- Starts NetBox services
- Creates superuser account
Update NetBox (update-netbox.yml)
Updates existing NetBox installation:
- Updates repository
- Pulls latest Docker images
- Restarts services
Backup NetBox (backup-netbox.yml)
Creates comprehensive backup:
- Database dump
- Media files
- Configuration files
Roles
system-update
- Updates apt package cache
- Upgrades all packages
- Installs required packages
- Optional reboot if needed
docker-install
- Adds Docker GPG key and repository
- Installs Docker CE and Docker Compose
- Configures Docker daemon
- Adds users to docker group
netbox-deploy
- Creates necessary directories
- Clones NetBox Docker repository
- Generates configuration files
- Starts NetBox services
- Creates superuser account
Usage Examples
Deploy NetBox
ansible-playbook -i inventory/hosts.yml playbooks/deploy-netbox.yml
Update NetBox
ansible-playbook -i inventory/hosts.yml playbooks/update-netbox.yml
Backup NetBox
ansible-playbook -i inventory/hosts.yml playbooks/backup-netbox.yml
Run with Vault
ansible-playbook -i inventory/hosts.yml playbooks/deploy-netbox.yml --ask-vault-pass
Run Specific Tags
ansible-playbook -i inventory/hosts.yml playbooks/deploy-netbox.yml --tags "docker-install"
Security Considerations
- Encrypt Sensitive Data: Use
ansible-vaultfor passwords and secrets - SSH Key Authentication: Use SSH keys instead of passwords
- Firewall Rules: Configure appropriate firewall rules
- Regular Updates: Keep NetBox and dependencies updated
- Backup Strategy: Implement regular backup procedures
Troubleshooting
Common Issues
- Permission Denied: Ensure user has sudo privileges
- Docker Not Found: Check Docker installation and user group membership
- Port Conflicts: Verify port 8000 is available
- Database Connection: Check database configuration and connectivity
Logs and Debugging
# Enable verbose output
ansible-playbook -i inventory/hosts.yml playbooks/deploy-netbox.yml -vvv
# Check Docker Compose logs
ansible netbox -i inventory/hosts.yml -m shell -a "cd /opt/netbox-docker && docker compose logs"
Contributing
- Follow Ansible best practices
- Ensure idempotency
- Add appropriate tags
- Update documentation
- Test on multiple Ubuntu versions
License
MIT License - see LICENSE file for details.
Support
For issues and questions:
- Check NetBox documentation: https://docs.netbox.dev/
- NetBox Community: https://github.com/netbox-community/netbox
- NetBox Docker: https://github.com/netbox-community/netbox-docker