mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-26 18:38:38 -06:00
fixed the typos and issues
This commit is contained in:
parent
48418cf538
commit
f550ec2333
@ -0,0 +1,291 @@
|
||||
<h1>Como Empesar</h1>
|
||||
|
||||
Esta guía document el proceso de instalar NetBox en servidor con Ubuntu 14.04 usando [nginx](https://www.nginx.com/) y [gunicorn](http://gunicorn.org/).
|
||||
|
||||
[TOC]
|
||||
|
||||
# PostgreSQL
|
||||
|
||||
## Instalación
|
||||
|
||||
Estos paquetes son necesarios para poder instalar PostgreSQL:
|
||||
|
||||
* postgresql
|
||||
* libpq-dev
|
||||
* python-psycopg2
|
||||
|
||||
```
|
||||
# apt-get install postgresql libpq-dev python-psycopg2
|
||||
```
|
||||
|
||||
## Configuración
|
||||
|
||||
a el mínimo necesitamos crear una base de datos y asignar un nombre para el usuario y una contraseña para autenticación. Esto es echo con estos comandos.
|
||||
|
||||
No uses la contraseña de este ejemplo.
|
||||
|
||||
```
|
||||
# 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
|
||||
```
|
||||
|
||||
Puedes verificar que la autenticación funciono haciendo estos comandos:
|
||||
|
||||
```
|
||||
# psql -U netbox -h localhost -W
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# NetBox
|
||||
|
||||
## Dependencias
|
||||
|
||||
* python2.7
|
||||
* python-dev
|
||||
* git
|
||||
* python-pip
|
||||
* libxml2-dev
|
||||
* libxslt1-dev
|
||||
* libffi-dev
|
||||
* graphviz*
|
||||
|
||||
```
|
||||
# apt-get install python2.7 python-dev git python-pip libxml2-dev libxslt1-dev libffi-dev graphviz
|
||||
```
|
||||
|
||||
*graphviz es necesario para poder representar los mapas con topología. Si no necesita este requisito entonces graphviz no es necesario.
|
||||
|
||||
## Copiar el deposito de git.
|
||||
|
||||
Crear la base y el directorio donde NetBox va ser instalado. Para esta guía vamos a usar `/opt/netbox`.
|
||||
|
||||
```
|
||||
# mkdir -p /opt/netbox/
|
||||
# cd /opt/netbox/
|
||||
```
|
||||
|
||||
Entonces copie el deposito de git en esta misma directorio:
|
||||
|
||||
```
|
||||
# git clone https://github.com/digitalocean/netbox.git .
|
||||
Cloning into '.'...
|
||||
remote: Counting objects: 1994, done.
|
||||
remote: Compressing objects: 100% (150/150), done.
|
||||
remote: Total 1994 (delta 80), reused 0 (delta 0), pack-reused 1842
|
||||
Receiving objects: 100% (1994/1994), 472.36 KiB | 0 bytes/s, done.
|
||||
Resolving deltas: 100% (1495/1495), done.
|
||||
Checking connectivity... done.
|
||||
```
|
||||
|
||||
Instala los paquetes necesario de Python usand pip.( Si encuentas algun error compilando en este paso, asegurate que tienes todas las dependencias necesarias.)
|
||||
|
||||
```
|
||||
# pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Configuración
|
||||
|
||||
Mueve en el directorio de la configuración y alte una copia de el `configuration.example.py` llamado `configuration.py`.
|
||||
|
||||
```
|
||||
# cd netbox/netbox/
|
||||
# cp configuration.example.py configuration.py
|
||||
```
|
||||
|
||||
Abre `configuration.py` con tu preferido editor y pon entos valores:
|
||||
* ALLOWED_HOSTS
|
||||
* DATABASE
|
||||
* SECRET_KEY
|
||||
|
||||
### ALLOWED_HOSTS
|
||||
|
||||
Esta es una lista de los aparatos que el servidor puede comunicarse. Tienes que especificar el nombre de el aparato o el IP address.
|
||||
|
||||
Ejemplo:
|
||||
|
||||
```
|
||||
ALLOWED_HOSTS = ['netbox.example.com', '192.0.2.123']
|
||||
```
|
||||
|
||||
### Base de Datos
|
||||
|
||||
Este parámetro tiene los detalles y la configuración de la base de datos. Tienes que definir un nombre para el usuario y una contraseña cuando configuras PostgreSQL. Si el servicio
|
||||
esta en un servidor remoto cambia `localhost` con su dirección.
|
||||
|
||||
Ejemplo:
|
||||
|
||||
```
|
||||
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
|
||||
|
||||
Genera una llave secreta algarete con polo menos 50 letras alfanuméricas. Esta llave tiene que ser la unica en esta instalación y no puede ser compartida fuera de este sistema.
|
||||
|
||||
Puedes usar este script en`netbox/generate_secret_key.py` para generar una llave.
|
||||
|
||||
## Hacer migraciónes de el sistema
|
||||
|
||||
Antes que NetBox pueda correr necesitamos instalar la schema para la base de datos. Esto es echo corriendo `./manage.py migrate` de el `netbox` directorio (`/opt/netbox/netbox/` en nuestro ejemplo):
|
||||
|
||||
```
|
||||
# ./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
|
||||
...
|
||||
```
|
||||
|
||||
Si en este paso resulta con errores de autenticación en PostgreSQL , asegura que el nombre de el usuario y la contraseña creada en la base de datos es igual a lo que fue especificado en `configuration.py`
|
||||
|
||||
## Crear un super usuario
|
||||
|
||||
NetBox no viene con ninguna cuentas basica.Vas a necesitar crear un super usuario para poder entrar a NetBox:
|
||||
|
||||
```
|
||||
# ./manage.py createsuperuser
|
||||
Username: admin
|
||||
Email address: admin@example.com
|
||||
Password:
|
||||
Password (again):
|
||||
Superuser created successfully.
|
||||
```
|
||||
|
||||
## Colecionar archivos estaticos
|
||||
|
||||
```
|
||||
# ./manage.py collectstatic
|
||||
|
||||
You have requested to collect static files at the destination
|
||||
location as specified in your settings:
|
||||
|
||||
/opt/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
|
||||
```
|
||||
|
||||
## Testiar la aplicación
|
||||
|
||||
En este punto ya NetBox puede correr. Podemos verificar empesando la aplicación:
|
||||
|
||||
```
|
||||
# ./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.
|
||||
```
|
||||
|
||||
Ahora si vamos a el nombre de el aparato o IP de el servidor (como definido en `ALLOWED_HOSTS`) Nos encontramos con la página de NetBox. Nota que este servicio de web es para testiar o desarrollo namas y no se deveria ser usada para nada en producción.
|
||||
|
||||
Si el servicio no corre or no te sale la página de NetBox entonces algo paso. No sigas con el resto de esta guía hasta que el problema a sido resuelto.
|
||||
|
||||
# nginx and gunicorn
|
||||
|
||||
## Instalación
|
||||
|
||||
Vamos a setiar un simple HTTP front end suando [nginx](https://www.nginx.com/resources/wiki/) y [gunicorn](http://gunicorn.org/) como ejemplos en esta guía . (Tu puedes usar cualquier combinación que quieras de HTTP and WSGI .) Tambien vamos a usar [supervisord](http://supervisord.org/).
|
||||
|
||||
```
|
||||
# apt-get install nginx gunicorn supervisor
|
||||
```
|
||||
|
||||
## nginx Configuración
|
||||
|
||||
Esto servira para correr lo minimo de nginx. Acuerdate cambiar el nombre de el servidor y el directorio de la instalación.
|
||||
|
||||
```
|
||||
server {
|
||||
listen 80;
|
||||
|
||||
server_name netbox.example.com;
|
||||
|
||||
access_log off;
|
||||
|
||||
location /static/ {
|
||||
alias /opt/netbox/netbox/static/;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:8001;
|
||||
proxy_set_header X-Forwarded-Host $server_name;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Graba esta configuración a `/etc/nginx/sites-available/netbox`. entonces borra `/etc/nginx/sites-enabled/default` y crea un symlink en `sites-enabled` directorio para la configuración de el archivo que creaste.
|
||||
|
||||
```
|
||||
# cd /etc/nginx/sites-enabled/
|
||||
# rm default
|
||||
# ln -s /etc/nginx/sites-available/netbox
|
||||
```
|
||||
|
||||
Vuelve a empezar el servicio de nginx para usar la nueva configuración.
|
||||
|
||||
```
|
||||
# service nginx restart
|
||||
* Restarting nginx nginx
|
||||
```
|
||||
|
||||
## gunicorn Configuración
|
||||
|
||||
Save the following configuración file in the root netbox installation path (in this example, `/opt/netbox/`.) as `gunicorn_config.py`. Be sure to verify the location of the gunicorn executable (e.g. `which gunicorn`) and to update the `pythonpath` variable if needed.
|
||||
|
||||
```
|
||||
command = '/usr/bin/gunicorn'
|
||||
pythonpath = '/opt/netbox/netbox'
|
||||
bind = '127.0.0.1:8001'
|
||||
workers = 3
|
||||
user = 'www-data'
|
||||
```
|
||||
|
||||
## supervisord Configuración
|
||||
|
||||
Save the following as `/etc/supervisor/conf.d/netbox.conf`. Update the `command` and `directory` paths as needed.
|
||||
|
||||
```
|
||||
[program:netbox]
|
||||
command = gunicorn -c /opt/netbox/gunicorn_config.py netbox.wsgi
|
||||
directory = /opt/netbox/netbox/
|
||||
user = www-data
|
||||
```
|
||||
|
||||
Finally, restart the supervisor service to detect and run the gunicorn service:
|
||||
|
||||
```
|
||||
# service supervisor restart
|
||||
```
|
||||
|
||||
A este punto deverias poder conectarte a nginx con el nombre de el servidor o el que pusistes. Si no te pudes conectar chequea que el servicio de nginx esta corriendo y tiene la configuración correcta. Si recibes un 502 (bad gateway) error esto indica que gunicorn no tiene la configuración correcta o no esta prendido.
|
||||
|
||||
Please keep in mind that the configurations provided here are a bare minimum to get NetBox up and running. You will almost certainly want to make some changes to better suit your production environment.
|
@ -1,291 +0,0 @@
|
||||
<h1>Como Empesar</h1>
|
||||
|
||||
Esta guía document el proceso de instalar NetBox en servidor con Ubuntu 14.04 usando [nginx](https://www.nginx.com/) y [gunicorn](http://gunicorn.org/).
|
||||
|
||||
[TOC]
|
||||
|
||||
# PostgreSQL
|
||||
|
||||
## Instalación
|
||||
|
||||
Estos paquetes son necesarios para poder instalar PostgreSQL:
|
||||
|
||||
* postgresql
|
||||
* libpq-dev
|
||||
* python-psycopg2
|
||||
|
||||
```
|
||||
# apt-get install postgresql libpq-dev python-psycopg2
|
||||
```
|
||||
|
||||
## Configuración
|
||||
|
||||
a el mínimo necesitamos crear una base de datos y asignar un nombre para el usuario y una contraseña para autenticación. Esto es echo con estos comandos.
|
||||
|
||||
No uses la contraseña de este ejemplo.
|
||||
|
||||
```
|
||||
# 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
|
||||
```
|
||||
|
||||
Puedes verificar que la autenticación funciono haciendo estos comandos:
|
||||
|
||||
```
|
||||
# psql -U netbox -h localhost -W
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# NetBox
|
||||
|
||||
## Dependencias
|
||||
|
||||
* python2.7
|
||||
* python-dev
|
||||
* git
|
||||
* python-pip
|
||||
* libxml2-dev
|
||||
* libxslt1-dev
|
||||
* libffi-dev
|
||||
* graphviz*
|
||||
|
||||
```
|
||||
# apt-get install python2.7 python-dev git python-pip libxml2-dev libxslt1-dev libffi-dev graphviz
|
||||
```
|
||||
|
||||
*graphviz es necesario para poder representar los mapas con topología. Si no necesita este requisito entonces graphviz no es necesario.
|
||||
|
||||
## Copiar el deposito de git.
|
||||
|
||||
Crear la base y el directorio donde NetBox va ser instalado. Para esta guía vamos a usar `/opt/netbox`.
|
||||
|
||||
```
|
||||
# mkdir -p /opt/netbox/
|
||||
# cd /opt/netbox/
|
||||
```
|
||||
|
||||
Entonces copie el deposito de git en esta misma directorio:
|
||||
|
||||
```
|
||||
# git clone https://github.com/digitalocean/netbox.git .
|
||||
Cloning into '.'...
|
||||
remote: Counting objects: 1994, done.
|
||||
remote: Compressing objects: 100% (150/150), done.
|
||||
remote: Total 1994 (delta 80), reused 0 (delta 0), pack-reused 1842
|
||||
Receiving objects: 100% (1994/1994), 472.36 KiB | 0 bytes/s, done.
|
||||
Resolving deltas: 100% (1495/1495), done.
|
||||
Checking connectivity... done.
|
||||
```
|
||||
|
||||
Instala los paquetes necesario de Python usand pip.( Si encuentas algun error compilando en este paso, asegurate que tienes todas las dependencias necesarias.)
|
||||
|
||||
```
|
||||
# pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Configuración
|
||||
|
||||
Mueve en el directorio de la configuración y alte una copia de el `configuration.example.py` llamado `configuration.py`.
|
||||
|
||||
```
|
||||
# cd netbox/netbox/
|
||||
# cp configuration.example.py configuration.py
|
||||
```
|
||||
|
||||
Abre `configuration.py` con tu preferido editor y pon entos valores:
|
||||
* ALLOWED_HOSTS
|
||||
* DATABASE
|
||||
* SECRET_KEY
|
||||
|
||||
### ALLOWED_HOSTS
|
||||
|
||||
Esta es una lista de los aparatos que el servidor puede comunicarse. Tienes que especificar el nombre de el aparato o el IP address.
|
||||
|
||||
Ejemplo:
|
||||
|
||||
```
|
||||
ALLOWED_HOSTS = ['netbox.example.com', '192.0.2.123']
|
||||
```
|
||||
|
||||
### Base de Datos
|
||||
|
||||
Este parámetro tiene los detalles y la configuración de la base de datos. Tienes que definir un nombre para el usuario y una contraseña cuando configuras PostgreSQL. Si el servicio
|
||||
esta en un servidor remoto cambia `localhost` con su dirección.
|
||||
|
||||
Ejemplo:
|
||||
|
||||
```
|
||||
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
|
||||
|
||||
Genera una llave secreta algarete con polo menos 50 letras alfanuméricas. Esta llave tiene que ser la unica en esta instalación y no puede ser compartida fuera de este sistema.
|
||||
|
||||
Puedes usar este script en`netbox/generate_secret_key.py` para generar una llave.
|
||||
|
||||
## Hacer migraciónes de el sistema
|
||||
|
||||
Antes que NetBox pueda correr necesitamos instalar la schema para la base de datos. Esto es echo corriendo `./manage.py migrate` de el `netbox` directorio (`/opt/netbox/netbox/` en nuestro ejemplo):
|
||||
|
||||
```
|
||||
# ./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
|
||||
...
|
||||
```
|
||||
|
||||
Si en este paso resulta con errores de autenticación en PostgreSQL , asegura que el nombre de el usuario y la contraseña creada en la base de datos es igual a lo que fue especificado en `configuration.py`
|
||||
|
||||
## Crear un super usuario
|
||||
|
||||
NetBox no viene con ninguna cuentas basica.Vas a necesitar crear un super usuario para poder entrar a NetBox:
|
||||
|
||||
```
|
||||
# ./manage.py createsuperuser
|
||||
Username: admin
|
||||
Email address: admin@example.com
|
||||
Password:
|
||||
Password (again):
|
||||
Superuser created successfully.
|
||||
```
|
||||
|
||||
## Colecionar archivos estaticos
|
||||
|
||||
```
|
||||
# ./manage.py collectstatic
|
||||
|
||||
You have requested to collect static files at the destination
|
||||
location as specified in your settings:
|
||||
|
||||
/opt/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
|
||||
```
|
||||
|
||||
## Testiar la aplicación
|
||||
|
||||
En este punto ya NetBox puede correr. Podemos verificar empesando la aplicación:
|
||||
|
||||
```
|
||||
# ./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.
|
||||
```
|
||||
|
||||
Ahora si vamos a el nombre de el aparato o IP de el servidor (como definido en `ALLOWED_HOSTS`) Nos encontramos con la página de NetBox. Nota que este servicio de web es para testiar o desarrollo namas y no se deveria ser usada para nada en producción.
|
||||
|
||||
Si el servicio no corre or no te sale la página de NetBox entonces algo paso. No sigas con el resto de esta guía hasta que el problema a sido resuelto.
|
||||
|
||||
# nginx and gunicorn
|
||||
|
||||
## Instalación
|
||||
|
||||
Vamos a setiar un simple HTTP front end suando [nginx](https://www.nginx.com/resources/wiki/) y [gunicorn](http://gunicorn.org/) como ejemplos en esta guía . (Tu puedes usar cualquier combinación que quieras de HTTP and WSGI .) Tambien vamos a usar [supervisord](http://supervisord.org/).
|
||||
|
||||
```
|
||||
# apt-get install nginx gunicorn supervisor
|
||||
```
|
||||
|
||||
## nginx Configuración
|
||||
|
||||
Esto servira para correr lo minimo de nginx. Acuerdate cambiar el nombre de el servidor y el directorio de la instalación.
|
||||
|
||||
```
|
||||
server {
|
||||
listen 80;
|
||||
|
||||
server_name netbox.example.com;
|
||||
|
||||
access_log off;
|
||||
|
||||
location /static/ {
|
||||
alias /opt/netbox/netbox/static/;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:8001;
|
||||
proxy_set_header X-Forwarded-Host $server_name;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Graba esta configuración a `/etc/nginx/sites-available/netbox`. entonces borra `/etc/nginx/sites-enabled/default` y crea un symlink en `sites-enabled` directorio para la configuración de el archivo que creaste.
|
||||
|
||||
```
|
||||
# cd /etc/nginx/sites-enabled/
|
||||
# rm default
|
||||
# ln -s /etc/nginx/sites-available/netbox
|
||||
```
|
||||
|
||||
Vuelve a empezar el servicio de nginx para usar la nueva configuración.
|
||||
|
||||
```
|
||||
# service nginx restart
|
||||
* Restarting nginx nginx
|
||||
```
|
||||
|
||||
## gunicorn Configuración
|
||||
|
||||
Save the following configuración file in the root netbox installation path (in this example, `/opt/netbox/`.) as `gunicorn_config.py`. Be sure to verify the location of the gunicorn executable (e.g. `which gunicorn`) and to update the `pythonpath` variable if needed.
|
||||
|
||||
```
|
||||
command = '/usr/bin/gunicorn'
|
||||
pythonpath = '/opt/netbox/netbox'
|
||||
bind = '127.0.0.1:8001'
|
||||
workers = 3
|
||||
user = 'www-data'
|
||||
```
|
||||
|
||||
## supervisord Configuración
|
||||
|
||||
Save the following as `/etc/supervisor/conf.d/netbox.conf`. Update the `command` and `directory` paths as needed.
|
||||
|
||||
```
|
||||
[program:netbox]
|
||||
command = gunicorn -c /opt/netbox/gunicorn_config.py netbox.wsgi
|
||||
directory = /opt/netbox/netbox/
|
||||
user = www-data
|
||||
```
|
||||
|
||||
Finally, restart the supervisor service to detect and run the gunicorn service:
|
||||
|
||||
```
|
||||
# service supervisor restart
|
||||
```
|
||||
|
||||
A este punto deverias poder conectarte a nginx con el nombre de el servidor o el que pusistes. Si no te pudes conectar chequea que el servicio de nginx esta corriendo y tiene la configuración correcta. Si recibes un 502 (bad gateway) error esto indica que gunicorn no tiene la configuración correcta o no esta prendido.
|
||||
|
||||
Please keep in mind that the configurations provided here are a bare minimum to get NetBox up and running. You will almost certainly want to make some changes to better suit your production environment.
|
Loading…
Reference in New Issue
Block a user