mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-27 10:58:37 -06:00
Create centos_with_apache.md
Guide to install Netbox on Centos 7 with Apache and mod_wsgi running in a Python's virtualenv.
This commit is contained in:
parent
8ee083f7c1
commit
86434b79b9
321
docs/installation/centos_with_apache.md
Normal file
321
docs/installation/centos_with_apache.md
Normal file
@ -0,0 +1,321 @@
|
||||
# Install Netbox on CentOS 7 with Apache as a Web Server and Python Virtualenv
|
||||
|
||||
|
||||
|
||||
This guide installs NetBox on CentOS 7 system.
|
||||
|
||||
This guide assumes that you have configured selinux and firewall to allow apache access to /opt/netbox and webaccess to the server.
|
||||
|
||||
|
||||
|
||||
# Enable EPEL
|
||||
|
||||
```
|
||||
# yum install epel-release -y
|
||||
```
|
||||
|
||||
# Install required packages for Netbox
|
||||
|
||||
```
|
||||
# yum install -y python-devel git python-pip libxml2-devel libxslt-devel libffi-devel graphviz libpqxx-devel python-psycopg2 gcc openssl-devel libyaml-devel python-lxml git
|
||||
```
|
||||
|
||||
# Install PostreSQL
|
||||
|
||||
Install, enable and start PostgreSQL and enable password login with notes from this <a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-centos-7">guide</a>:
|
||||
|
||||
```
|
||||
# install postgresql-server
|
||||
```
|
||||
|
||||
Now that our software is installed, we have to perform a few steps before we can use it.
|
||||
|
||||
Create a new PostgreSQL database cluster:
|
||||
|
||||
```
|
||||
# postgresql-setup initdb
|
||||
```
|
||||
|
||||
By default, PostgreSQL does not allow password authentication. We will change that by editing its host-based authentication (HBA) configuration.
|
||||
|
||||
Open the HBA configuration with your favorite text editor. We will use vi:
|
||||
|
||||
```
|
||||
# vi /var/lib/pgsql/data/pg_hba.conf
|
||||
```
|
||||
|
||||
Find the lines that looks like this, near the bottom of the file:
|
||||
pg_hba.conf excerpt (original)
|
||||
|
||||
```
|
||||
host all all 127.0.0.1/32 ident
|
||||
host all all ::1/128 ident
|
||||
```
|
||||
|
||||
Then replace "ident" with "md5", so they look like this:
|
||||
pg_hba.conf excerpt (updated)
|
||||
|
||||
```
|
||||
host all all 127.0.0.1/32 md5
|
||||
host all all ::1/128 md5
|
||||
```
|
||||
|
||||
Save and exit. PostgreSQL is now configured to allow password authentication.
|
||||
|
||||
Now start and enable PostgreSQL:
|
||||
|
||||
```
|
||||
# systemctl start postgresql
|
||||
# systemctl enable postgresql
|
||||
```
|
||||
|
||||
# Configure Database
|
||||
|
||||
At a minimum, we need to create a database for NetBox and assign it a username and password for authentication. This is done with the following commands.
|
||||
|
||||
!!! danger
|
||||
DO NOT USE THE PASSWORD FROM THE EXAMPLE.
|
||||
|
||||
```
|
||||
# sudo -u postgres psql
|
||||
psql (9.3.13)
|
||||
Type "help" for help.
|
||||
|
||||
postgres=# CREATE DATABASE netbox;
|
||||
CREATE DATABASE
|
||||
postgres=# CREATE USER netbox WITH PASSWORD 'J5brHrAXFLQSif0K';
|
||||
CREATE ROLE
|
||||
postgres=# GRANT ALL PRIVILEGES ON DATABASE netbox TO netbox;
|
||||
GRANT
|
||||
postgres=# \q
|
||||
```
|
||||
|
||||
You can verify that authentication works issuing the following command and providing the configured password:
|
||||
|
||||
```
|
||||
# psql -U netbox -h localhost -W
|
||||
```
|
||||
|
||||
If successful, you will enter a `postgres` prompt. Type `\q` to exit.
|
||||
|
||||
|
||||
# Use Python's Virtualenv
|
||||
|
||||
To use netbox on a Python virtualenv and get latest pip version:
|
||||
|
||||
```
|
||||
# pip install --upgrade pip
|
||||
# yum install python-virtualenvwrapper
|
||||
# source /usr/bin/virtualenvwrapper.sh
|
||||
```
|
||||
|
||||
# Add netbox User
|
||||
|
||||
To make Apache serve netbox application as netbox user, add netbox user to system:
|
||||
|
||||
```
|
||||
# adduser --home /opt/netbox netbox
|
||||
# su - netbox
|
||||
$ pwd
|
||||
/opt/netbox
|
||||
$ mkvirtualenv netbox
|
||||
(netbox)[netbox@netbox-vm-1 ~]$
|
||||
```
|
||||
|
||||
# Install Netbox
|
||||
|
||||
For this guide, we'll be using git method:
|
||||
|
||||
```
|
||||
$ git clone -b master https://github.com/digitalocean/netbox.git
|
||||
```
|
||||
|
||||
Then install Python's requirements, make sure you do this inside the virtualenv
|
||||
|
||||
```
|
||||
(netbox)[netbox@netbox-vm-1 netbox]$ pwd
|
||||
/opt/netbox/netbox
|
||||
(netbox)[netbox@netbox-vm-1 netbox]$ pip install -r requirements.txt
|
||||
```
|
||||
|
||||
# Configuration
|
||||
|
||||
Move into the NetBox configuration directory and make a copy of `configuration.example.py` named `configuration.py`.
|
||||
|
||||
```
|
||||
$ cd netbox/netbox/
|
||||
$ cp configuration.example.py configuration.py
|
||||
```
|
||||
|
||||
Open `configuration.py` with your preferred editor and set the following variables:
|
||||
|
||||
* ALLOWED_HOSTS
|
||||
* DATABASE
|
||||
* SECRET_KEY
|
||||
|
||||
## ALLOWED_HOSTS
|
||||
|
||||
This is a list of the valid hostnames by which this server can be reached. You must specify at least one name or IP address.
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
ALLOWED_HOSTS = ['netbox.example.com', '192.0.2.123']
|
||||
```
|
||||
|
||||
## DATABASE
|
||||
|
||||
This parameter holds the database configuration details. You must define the username and password used when you configured PostgreSQL. If the service is running on a remote host, replace `localhost` with its address.
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
DATABASE = {
|
||||
'NAME': 'netbox', # Database name
|
||||
'USER': 'netbox', # PostgreSQL username
|
||||
'PASSWORD': 'J5brHrAXFLQSif0K', # PostgreSQL password
|
||||
'HOST': 'localhost', # Database server
|
||||
'PORT': '', # Database port (leave blank for default)
|
||||
}
|
||||
```
|
||||
|
||||
## SECRET_KEY
|
||||
|
||||
Generate a random secret key of at least 50 alphanumeric characters. This key must be unique to this installation and must not be shared outside the local system.
|
||||
|
||||
You may use the script located at `netbox/generate_secret_key.py` to generate a suitable key.
|
||||
|
||||
!!! note
|
||||
In the case of a highly available installation with multiple web servers, `SECRET_KEY` must be identical among all servers in order to maintain a persistent user session state.
|
||||
|
||||
# Run Database Migrations
|
||||
|
||||
Before NetBox can run, we need to install the database schema. This is done by running `./manage.py migrate` from the `netbox` directory (`/opt/netbox/netbox/` in our example):
|
||||
|
||||
```
|
||||
$ cd /opt/netbox/netbox/netbox
|
||||
$ ./manage.py migrate
|
||||
Operations to perform:
|
||||
Apply all migrations: dcim, sessions, admin, ipam, utilities, auth, circuits, contenttypes, extras, secrets, users
|
||||
Running migrations:
|
||||
Rendering model states... DONE
|
||||
Applying contenttypes.0001_initial... OK
|
||||
Applying auth.0001_initial... OK
|
||||
Applying admin.0001_initial... OK
|
||||
...
|
||||
```
|
||||
|
||||
If this step results in a PostgreSQL authentication error, ensure that the username and password created in the database match what has been specified in `configuration.py`
|
||||
|
||||
# Create a Super User
|
||||
|
||||
NetBox does not come with any predefined user accounts. You'll need to create a super user to be able to log into NetBox:
|
||||
|
||||
```
|
||||
$ ./manage.py createsuperuser
|
||||
Username: admin
|
||||
Email address: admin@example.com
|
||||
Password:
|
||||
Password (again):
|
||||
Superuser created successfully.
|
||||
```
|
||||
|
||||
$ Collect Static Files
|
||||
|
||||
```
|
||||
$ ./manage.py collectstatic
|
||||
|
||||
You have requested to collect static files at the destination
|
||||
location as specified in your settings:
|
||||
|
||||
/opt/netbox/netbox/netbox/static
|
||||
|
||||
This will overwrite existing files!
|
||||
Are you sure you want to do this?
|
||||
|
||||
Type 'yes' to continue, or 'no' to cancel: yes
|
||||
```
|
||||
|
||||
# Test the Application
|
||||
|
||||
At this point, NetBox should be able to run. We can verify this by starting a development instance:
|
||||
|
||||
```
|
||||
# ./manage.py runserver 0.0.0.0:8000 --insecure
|
||||
Performing system checks...
|
||||
|
||||
System check identified no issues (0 silenced).
|
||||
June 17, 2016 - 16:17:36
|
||||
Django version 1.9.7, using settings 'netbox.settings'
|
||||
Starting development server at http://0.0.0.0:8000/
|
||||
Quit the server with CONTROL-C.
|
||||
```
|
||||
|
||||
Now if we navigate to the name or IP of the server (as defined in `ALLOWED_HOSTS`) we should be greeted with the NetBox home page. Note that this built-in web service is for development and testing purposes only. It is not suited for production use.
|
||||
|
||||
|
||||
|
||||
When you finish, if the test server ran OK, proceed to next step. Otherwise check the steps above.
|
||||
|
||||
|
||||
# Install and Configure Apache to run Netbox
|
||||
|
||||
To use Apache to run Netbox, we'll need to install mod_wsgi to connect to wsgi.py script:
|
||||
|
||||
```
|
||||
# yum install httpd mod_wsgi
|
||||
```
|
||||
|
||||
Add Netbox to virtualhosts
|
||||
|
||||
```
|
||||
# vim /etc/httpd/conf.d/netbox.conf
|
||||
```
|
||||
|
||||
Example netbox.conf contents :
|
||||
|
||||
```
|
||||
# Netbox
|
||||
|
||||
<VirtualHost *:80>
|
||||
ServerName YOURDOMAIN # Make sure to add this domain into configuration.py ALLOWED_HOSTS
|
||||
ServerAdmin YOUREMAIL
|
||||
|
||||
|
||||
DocumentRoot /opt/netbox/netbox/
|
||||
CustomLog /var/log/wsgi/netbox_log combined
|
||||
LogLevel info
|
||||
|
||||
WSGIDaemonProcess netbox user=netbox group=netbox python-path=/opt/netbox/netbox/netbox:/opt/netbox/.virtualenvs/netbox/lib/python2.7/site-packages
|
||||
WSGIProcessGroup netbox
|
||||
WSGIScriptAlias / /opt/netbox/netbox/netbox/netbox/wsgi.py
|
||||
|
||||
<Directory /opt/netbox/netbox/netbox/netbox/>
|
||||
<Files wsgi.py>
|
||||
WSGIApplicationGroup %{GLOBAL}
|
||||
Require all granted
|
||||
</Files>
|
||||
</Directory>
|
||||
|
||||
Alias /static /opt/netbox/netbox/netbox/static
|
||||
<Directory /opt/netbox/netbox/netbox/static/>
|
||||
WSGIApplicationGroup %{GLOBAL}
|
||||
Require all granted
|
||||
</Directory>
|
||||
</VirtualHost>
|
||||
```
|
||||
|
||||
Make sure you have the log file in the directory above or remove the log line if you want to use httpd's main logging.
|
||||
|
||||
# Final step
|
||||
|
||||
Last step is to make /opt/netbox executable so Apache can run
|
||||
|
||||
```
|
||||
# chmod +x /opt/netbox
|
||||
```
|
||||
Restart apache and you should be good to go.
|
||||
|
||||
```
|
||||
# systemctl restart httpd
|
||||
```
|
Loading…
Reference in New Issue
Block a user