Cómo instalar Askbot con Nginx y asegurarlo con Let’s Encrypt en CentOS 8

Askbot es un software de foro de preguntas y respuestas gratuito, de código abierto y altamente personalizable, escrito en Python y Django. Es sencillo, ligero y muy similar a otros programas de foros como StackOverflow y YahooAnswers. Askbot proporciona un montón de características, incluyendo, etiquetas y categorías, notificaciones por correo electrónico, sistema basado en el karma, la votación, la moderación de contenidos y muchos más.

En este tutorial, te mostraremos cómo instalar el software de foros Askbot en CentOS 8 con Let’s Encrypt SSL.

Requisitos previos

  • Un servidor con CentOS 8.
  • Una contraseña de root configurada en tu servidor.

Instalar las dependencias necesarias

Antes de empezar, necesitarás instalar algunas dependencias necesarias en tu sistema.

Primero, instala las «Herramientas de Desarrollo» con el siguiente comando:

dnf group install 'Development Tools'

A continuación, instala el repositorio EPEL y otras dependencias de Python con el siguiente comando:

dnf install epel-release -y
dnf install python2-pip python2-devel python2-six -y

Una vez instalados todos los paquetes necesarios, puedes pasar al siguiente paso.

Instalar y configurar PostgreSQL

Askbot utiliza PostgreSQL para almacenar sus datos. Por tanto, necesitarás instalarlo en tu sistema. Puedes instalarlo con el siguiente comando:

dnf install postgresql-server postgresql-devel postgresql-contrib -y

Una vez instalado, inicializa la base de datos con el siguiente comando:

postgresql-setup initdb

Deberías obtener la siguiente salida:

WARNING: using obsoleted argument syntax, try --help
WARNING: arguments transformed to: postgresql-setup --initdb --unit postgresql
 * Initializing database in '/var/lib/pgsql/data'
 * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log

A continuación, inicia el servicio PostgreSQL y permite que se inicie tras el reinicio del sistema con el siguiente comando:

systemctl start postgresql
systemctl enable postgresql

A continuación, entra en el shell de PostgreSQL con el siguiente comando:

su - postgres
[[email protected] ~]$ psql

Salida:

psql (10.6)
Type "help" for help.
postgres=# 

A continuación, crea una base de datos y un usuario para Askbot con el siguiente comando

postgres=# create database askbot;
postgres=# create user askbot with password 'password';

A continuación, concede todos los privilegios a Askbot con el siguiente comando

postgres=# grant all privileges on database askbot to askbot;

Por último, sal del shell PostgreSQL con el siguiente comando:

postgres=# \q

A continuación, tendrás que configurar la autenticación local del usuario para PostgreSQL. Puedes hacerlo editando el archivo pg_hba.conf:

nano /var/lib/pgsql/data/pg_hba.conf

Sustituye peer por md5 en las siguientes líneas:

local   all             all                                    md5  
host    all             all             127.0.0.1/32           md5  
host    all             all             ::1/128                md5  

Guarda y cierra el archivo cuando hayas terminado. A continuación, reinicia el servicio PostgreSQL para aplicar los cambios:

systemctl restart postgresql

Instalar y configurar Askbot

Antes de instalar Askbot, tendrás que crear un usuario para Askbot. Puedes crear un nuevo usuario de Askbot y establecer una contraseña con el siguiente comando:

useradd -m -s /bin/bash askbot
passwd askbot

A continuación, añade el usuario Askbot al grupo wheel para tener acceso al comando sudo:

usermod -a -G wheel askbot

A continuación, instala el paquete python virtualenv con el siguiente comando:

pip2 install virtualenv six

Una vez instalado, cambia el usuario a askbot y crea un nuevo entorno virtual para Askbot con el siguiente comando:

su - askbot
virtualenv askbot

Deberías ver la siguiente salida:

created virtual environment CPython2.7.16.final.0-64 in 663ms
  creator CPython2Posix(dest=/home/askbot/askbot, clear=False, global=False)
  seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=/tmp/tmp9YFr7B/seed-app-data/v1)
  activators PythonActivator,CShellActivator,FishActivator,PowerShellActivator,BashActivator

A continuación, cambia el directorio a askbot y activa el entorno virtual con el siguiente comando

cd askbot
source bin/activate

Salida:

(askbot) [[email protected] askbot]$

A continuación, instala Askbot y otras dependencias necesarias con el siguiente comando:

pip2 install six==1.10.0
pip2 install askbot psycopg2

A continuación, crea un nuevo directorio para tu aplicación, cambia el directorio a tu aplicación y configura el Askbot con el siguiente comando:

mkdir myapp
cd myapp
askbot-setup

Deberías ver la siguiente salida:

Deploying Askbot - Django Q&A forum application
Problems installing? -> please email [email protected]

To CANCEL - hit Ctr-C at any time

Enter directory path (absolute or relative) to deploy
askbot. To choose current directory - enter "."
> .

Escribe «.» y pulsa Intro para continuar. Deberías ver la siguiente salida:

Please select database engine:
1 - for postgresql, 2 - for sqlite, 3 - for mysql, 4 - oracle
type 1/2/3/4: 1

Escribe 1 para seleccionar un motor de base de datos postgresql y pulsa Intro para continuar. Deberías ver la siguiente salida:

Please enter database name (required)
> askbot

Please enter database user (required)
> askbot

Please enter database password (required)
> password

Proporciona los detalles de tu base de datos Askbot y pulsa Intro. Una vez terminada la instalación, deberías ver la siguiente salida:

Copying files: 
* __init__.py 
* manage.py 
* urls.py 
* django.wsgi 
Creating settings file
settings file created

copying directories:  * doc
* cron
* upfiles

Done. Please find further instructions at http://askbot.org/doc/

A continuación, genera los archivos estáticos de Askbot Django y la base de datos con el siguiente comando:

python manage.py collectstatic
python manage.py syncdb

Proporciona el nombre de usuario, el correo electrónico y la contraseña de administrador que desees, como se muestra a continuación:

You have installed Django's auth system, and don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'askbot'): askbotadmin
Email address: [email protected]
Password: 
Password (again): 
Superuser created successfully.

Instalar y configurar uWSGI

A continuación, tendrás que instalar uWSGI en tu sistema. uWSGI es una herramienta de software utilizada para ejecutar aplicaciones web basadas en Python. Puedes instalarlo con el siguiente comando:

pip2 install uwsgi

Después de instalar uWSGI, crea un nuevo directorio para uWSGI con el siguiente comando:

mkdir -p /etc/uwsgi/sites

A continuación, crea un nuevo archivo de configuración de uWSGI como se muestra a continuación:

nano /etc/uwsgi/sites/askbot.ini

Añade las siguientes líneas:

[uwsgi]

chdir = /home/askbot/askbot/myapp
home = /home/askbot/askbot
static-map = /m=/home/askbot/askbot/myapp/static
wsgi-file = /home/askbot/askbot/myapp/django.wsgi
master = true
processes = 5
# Askbot will running under the sock file
socket = /run/uwsgi/askbot.sock
chmod-socket = 664
uid = askbot
gid = nginx
vacuum = true
# uWSGI Log file
ogto = /var/log/uwsgi.log

Crear un archivo de servicio Systemd para uWSGI

A continuación, tendrás que crear un archivo de servicio systemd para gestionar el servicio uWSGI. Puedes crearlo con el siguiente comando:

nano /etc/systemd/system/uwsgi.service

Añade las siguientes líneas:

[Unit]
Description=uWSGI service

[Service]
ExecStartPre=/bin/bash -c 'mkdir -p /run/uwsgi; chown askbot:nginx /run/uwsgi'
ExecStart=/bin/uwsgi --emperor /etc/uwsgi/sites
Restart=always
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all

[Install]
WantedBy=multi-user.target

Guarda y cierra el archivo cuando hayas terminado. A continuación, recarga el demonio systemd con el siguiente comando:

systemctl daemon-reload

Instalar y configurar Nginx

A continuación, tendrás que instalar y configurar Nginx para servir a tu aplicación Askbot.

Primero, instala el servidor web Nginx con el siguiente comando:

dnf install nginx -y

Una vez instalado, crea un nuevo archivo de configuración de host virtual para Askbot:

nano /etc/nginx/conf.d/askbot.conf

Añade las siguientes líneas:

server {
         listen 80;
         server_name askbot.linuxbuz.com;
         location / {
         include         uwsgi_params;
         uwsgi_pass	 unix:/run/uwsgi/askbot.sock;
    }
 }

Guarda y cierra el archivo. A continuación, inicia el servicio Nginx y uWSGI y permite que se inicien tras el reinicio del sistema con el siguiente comando:

systemctl start nginx
systemctl enable nginx
systemctl start uwsgi
systemctl enable uwsgi

Asegura Askbot con Let’s Encrypt SSL

A continuación, tendrás que instalar la utilidad Certbot en tu sistema para descargar e instalar Let’s Encrypt SSL para el dominio de Askbot.

Puedes instalar el cliente Certbot con el siguiente comando:

wget https://dl.eff.org/certbot-auto
mv certbot-auto /usr/local/bin/certbot-auto
chown root /usr/local/bin/certbot-auto
chmod 0755 /usr/local/bin/certbot-auto

A continuación, obtén e instala un certificado SSL para tu dominio Askbot con el siguiente comando:

certbot-auto --nginx -d askbot.linuxbuz.com

El comando anterior instalará primero todas las dependencias necesarias en tu servidor. Una vez instalado, se te pedirá que proporciones una dirección de correo electrónico y que aceptes las condiciones del servicio, como se muestra a continuación:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected]

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for askbot.linuxbuz.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/conf.d/askbot.conf

A continuación, selecciona si quieres redirigir el tráfico HTTP a HTTPS, como se muestra a continuación:

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Escribe 2 y pulsa Enter para continuar. Una vez finalizada la instalación, deberías ver la siguiente salida:

Redirecting all traffic on port 80 to ssl in /etc/nginx/conf.d/askbot.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://askbot.linuxbuz.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=askbot.linuxbuz.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/askbot.linuxbuz.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/askbot.linuxbuz.com/privkey.pem
   Your cert will expire on 2020-06-11. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again with the "certonly" option. To non-interactively renew *all*
   of your certificates, run "certbot-auto renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Configurar el cortafuegos y SELinux

A continuación, tendrás que crear una regla de cortafuegos para permitir el servicio HTTP y HTTPS desde redes externas. Puedes permitirlo con el siguiente comando:

firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

Por defecto, SELinux está activado en CentOS 8. Se recomienda desactivarlo para que Askbot funcione correctamente. Puedes desactivarlo editando el archivo /etc/selinux/config:

nano /etc/selinux/config

Busca la siguiente línea:

SELINUX=enforcing

Y, sustitúyela por la siguiente línea:

SELINUX=disabled

Guarda y cierra el archivo. Luego, reinicia tu sistema para aplicar los cambios:

Accede a Askbot

Ahora, abre tu navegador web y escribe la URL https://askbot.linuxbuz.com. Serás redirigido a la siguiente pantalla:

Interfaz web de Askbot

Haz clic en el botón de inicio de sesión. Deberías ver la página de inicio de sesión de Askbot en la siguiente pantalla:

Registro de Askbot

Proporciona tu nombre de usuario y contraseña de administrador de Askbot y haz clic en el botón Iniciar sesión. Deberías ver el panel de control de Askbot en la siguiente pantalla:

Haz preguntas en Askbot

Conclusión

Enhorabuena! has instalado y configurado con éxito el foro de Askbot en CentOS 8 y lo has asegurado con Let’s Encrypt SSL. Ahora puedes empezar a crear preguntas y respuestas con Askbot.

También te podría gustar...