BASH - Install-netbox-on-ubuntu-24-4.sh

From IT-Arts.net


Return to Wiki Index

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 "=================================================="


Return to Wiki Index