BASH - Install-netbox-on-ubuntu-24-4.sh
From IT-Arts.net
Install-netbox-on-ubuntu-24-4.sh
#!/usr/bin/env bash
set -euo pipefail
echo ""
echo "=================================================="
echo "NETBOX 4.6.1 INSTALL"
echo "=================================================="
echo "Host: $(hostname)"
echo "Date: $(date)"
echo "=================================================="
echo ""
########################################
# CONFIG
########################################
NETBOX_VERSION="v4.6.1"
NETBOX_HOST="netboxlab.example.com"
DB_NAME="netbox"
DB_USER="netbox"
DB_PASS="YOUR_PASSWORD_TO_CHANGE"
ADMIN_USER="admin"
ADMIN_EMAIL="admin@example.com"
ADMIN_PASS="YOUR_PASSWORD_TO_CHANGE"
SECRET_KEY="$(openssl rand -base64 64 | tr -d '\n')"
PEPPER_1="$(openssl rand -base64 48 | tr -d '\n')"
########################################
# STEP 1 - SYSTEM PACKAGES
########################################
echo "STEP 1: Installing dependencies..."
apt update
apt install -y \
git curl wget nginx \
postgresql postgresql-contrib \
redis-server \
python3 python3-venv python3-dev \
build-essential \
libpq-dev libxml2-dev libxslt1-dev \
libffi-dev libssl-dev zlib1g-dev
systemctl enable --now postgresql
systemctl enable --now redis-server
echo "✔ Packages installed"
echo ""
########################################
# STEP 2 - USER
########################################
echo "STEP 2: Creating netbox user..."
id netbox >/dev/null 2>&1 || \
useradd --system --home /opt/netbox --shell /bin/bash netbox
echo "✔ User ready"
echo ""
########################################
# STEP 3 - POSTGRESQL (SAFE)
########################################
echo "STEP 3: PostgreSQL setup..."
sudo -u postgres psql -tc "SELECT 1 FROM pg_roles WHERE rolname='${DB_USER}'" | grep -q 1 || \
sudo -u postgres psql -c "CREATE USER ${DB_USER} WITH PASSWORD '${DB_PASS}';"
sudo -u postgres psql -tc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'" | grep -q 1 || \
sudo -u postgres psql -c "CREATE DATABASE ${DB_NAME} OWNER ${DB_USER};"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE ${DB_NAME} TO ${DB_USER};"
echo "✔ PostgreSQL ready"
echo ""
########################################
# STEP 4 - DOWNLOAD NETBOX
########################################
echo "STEP 4: Downloading NetBox..."
cd /opt
rm -rf netbox netbox.tar.gz
wget -q --show-progress \
"https://github.com/netbox-community/netbox/archive/refs/tags/${NETBOX_VERSION}.tar.gz" \
-O netbox.tar.gz
tar -xzf netbox.tar.gz
mv "netbox-${NETBOX_VERSION#v}" netbox
chown -R netbox:netbox /opt/netbox
echo "✔ NetBox downloaded"
echo ""
########################################
# STEP 5 - CONFIGURATION (FIXED PEPPERS)
########################################
echo "STEP 5: Writing configuration..."
CONFIG="/opt/netbox/netbox/netbox/configuration.py"
cp /opt/netbox/netbox/netbox/configuration_example.py "$CONFIG"
cat >> "$CONFIG" <<EOF
ALLOWED_HOSTS = ['${NETBOX_HOST}']
DATABASES = {
'default': {
'NAME': '${DB_NAME}',
'USER': '${DB_USER}',
'PASSWORD': '${DB_PASS}',
'HOST': 'localhost',
'PORT': '',
'CONN_MAX_AGE': 300,
'ENGINE': 'django.db.backends.postgresql',
}
}
REDIS = {
'tasks': {'HOST': 'localhost', 'PORT': 6379, 'DATABASE': 0},
'caching': {'HOST': 'localhost', 'PORT': 6379, 'DATABASE': 1},
}
SECRET_KEY = '${SECRET_KEY}'
# FIXED: NetBox 4.6 requires integer keys only
API_TOKEN_PEPPERS = {
1: "${PEPPER_1}"
}
EOF
echo "✔ Config written (correct API_TOKEN_PEPPERS format)"
echo ""
########################################
# STEP 6 - INSTALL NETBOX
########################################
echo "STEP 6: Running upgrade.sh..."
cd /opt/netbox
sudo -u netbox /opt/netbox/upgrade.sh
echo "✔ NetBox installed"
echo ""
########################################
# STEP 7 - ADMIN USER
########################################
echo "STEP 7: Creating admin user..."
sudo -u netbox bash -c "
source /opt/netbox/venv/bin/activate
cd /opt/netbox/netbox
DJANGO_SUPERUSER_USERNAME='${ADMIN_USER}' \
DJANGO_SUPERUSER_EMAIL='${ADMIN_EMAIL}' \
DJANGO_SUPERUSER_PASSWORD='${ADMIN_PASS}' \
python3 manage.py createsuperuser --noinput || true
"
echo "✔ Admin ready"
echo ""
########################################
# STEP 8 - SYSTEMD
########################################
echo "STEP 8: systemd services..."
cp /opt/netbox/contrib/*.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable netbox netbox-rq
systemctl restart netbox netbox-rq
echo "✔ Services running"
echo ""
########################################
# STEP 9 - NGINX
########################################
echo "STEP 9: Nginx..."
cat >/etc/nginx/sites-available/netbox <<EOF
server {
listen 80;
server_name ${NETBOX_HOST};
client_max_body_size 25m;
location /static/ {
alias /opt/netbox/netbox/static/;
}
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
}
}
EOF
ln -sf /etc/nginx/sites-available/netbox /etc/nginx/sites-enabled/netbox
rm -f /etc/nginx/sites-enabled/default
nginx -t
systemctl restart nginx
echo "✔ Nginx ready"
echo ""
########################################
# DONE
########################################
echo "=================================================="
echo "INSTALL COMPLETE"
echo "=================================================="
echo "URL: http://${NETBOX_HOST}"
echo "Admin: ${ADMIN_USER}"
echo "=================================================="
