netbox-ansible/README.md
2025-09-25 19:24:11 -04:00

231 lines
No EOL
6.2 KiB
Markdown

# 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
1. **Configure Inventory**
```bash
# Edit inventory/hosts.yml
vim inventory/hosts.yml
```
Add your server(s):
```yaml
[netbox]
netbox-server ansible_host=192.168.1.100 ansible_user=ubuntu
```
2. **Configure Variables**
```bash
# Edit group variables
vim group_vars/netbox.yml
# Encrypt sensitive variables
ansible-vault encrypt group_vars/netbox/vault.yml
```
3. **Deploy NetBox**
```bash
# 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 NetBox
- `netbox_superuser_*`: Superuser configuration
- `netbox_db_*`: Database configuration
- `netbox_redis_*`: Redis configuration
### Vault Variables (`group_vars/netbox/vault.yml`)
Sensitive data should be encrypted:
```bash
# 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`:
```yaml
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
```bash
ansible-playbook -i inventory/hosts.yml playbooks/deploy-netbox.yml
```
### Update NetBox
```bash
ansible-playbook -i inventory/hosts.yml playbooks/update-netbox.yml
```
### Backup NetBox
```bash
ansible-playbook -i inventory/hosts.yml playbooks/backup-netbox.yml
```
### Run with Vault
```bash
ansible-playbook -i inventory/hosts.yml playbooks/deploy-netbox.yml --ask-vault-pass
```
### Run Specific Tags
```bash
ansible-playbook -i inventory/hosts.yml playbooks/deploy-netbox.yml --tags "docker-install"
```
## Security Considerations
1. **Encrypt Sensitive Data**: Use `ansible-vault` for passwords and secrets
2. **SSH Key Authentication**: Use SSH keys instead of passwords
3. **Firewall Rules**: Configure appropriate firewall rules
4. **Regular Updates**: Keep NetBox and dependencies updated
5. **Backup Strategy**: Implement regular backup procedures
## Troubleshooting
### Common Issues
1. **Permission Denied**: Ensure user has sudo privileges
2. **Docker Not Found**: Check Docker installation and user group membership
3. **Port Conflicts**: Verify port 8000 is available
4. **Database Connection**: Check database configuration and connectivity
### Logs and Debugging
```bash
# 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
1. Follow Ansible best practices
2. Ensure idempotency
3. Add appropriate tags
4. Update documentation
5. 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