Cómo instalar Kbin, el agregador de contenidos Fediverse similar a Reddit, en Ubuntu 22.04

Kbin es un agregador de contenidos de código abierto similar a Reddit y una plataforma de microblogging para el fediverso. Te permite crear y moderar comunidades y puede comunicarse con otros servicios de ActivityPub, como Mastodon, Pleroma y Peertube.

Aunque existen instancias populares de Kbin a las que puedes unirte y utilizar, también puedes gestionar tu propia instancia de Kbin para tus amigos y familiares. En este tutorial, aprenderás a instalar Kbin en un servidor Ubuntu 22.04.

Requisitos previos

  • Un servidor con Ubuntu 22.04.
  • Un usuario sudo no root.
  • Un nombre de dominio completo (FQDN) como example.com.
  • Asegúrate de que todo está actualizado.
    $ sudo apt update
    $ sudo apt upgrade
    
  • Pocos paquetes que necesite tu sistema.
    $ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
    

    Puede que algunos de estos paquetes ya estén instalados en tu sistema.

  • Nuestra instalación también necesita la Lista de Control de Acceso (ACL) para funcionar. Instálala.
    $ sudo apt install acl
    

Paso 1 – Configurar el Cortafuegos

El primer paso es configurar el cortafuegos. Ubuntu viene con ufw (Uncomplicated Firewall) por defecto.

Comprueba si el cortafuegos está funcionando.

$ sudo ufw status

Obtendrás la siguiente salida.

Status: inactive

Permite el puerto SSH para que el cortafuegos no rompa la conexión actual al activarlo.

$ sudo ufw allow OpenSSH

Permite también los puertos HTTP y HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Habilita el cortafuegos

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Comprueba de nuevo el estado del cortafuegos.

$ sudo ufw status

Deberías ver una salida similar.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Paso 2 – Instalar Git

Normalmente Git se instala con el servidor Ubuntu, pero si no es así, debes instalarlo utilizando el siguiente comando.

$ sudo apt install git

Verifica la instalación.

$ git --version
git version 2.34.1

Configura Git con la información básica.

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

Paso 3 – Instalar Nginx

Ubuntu viene con una versión antigua de Nginx. Para instalar la última versión, necesitas descargar el repositorio oficial de Nginx.

Importa la clave de firma de Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
	| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Añadir el repositorio de la versión estable de Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Actualiza los repositorios del sistema.

$ sudo apt update

Instala Nginx.

$ sudo apt install nginx

Verifica la instalación.

$ nginx -v
nginx version: nginx/1.24.0

Iniciar el servidor Nginx.

$ sudo systemctl start nginx

Paso 4 – Instalar PHP y configurar PHP

Ubuntu 22.04 viene con la versión PHP 8.1.2, que está un poco anticuada. Instalaremos la última versión PHP 8.2 utilizando el repositorio PHP de Ondrej.

$ sudo add-apt-repository ppa:ondrej/php

A continuación, instala PHP y sus extensiones requeridas por Kbin.

$ sudo apt install php8.2-common php8.2-fpm php8.2-cli php8.2-amqp php8.2-pgsql php8.2-gd php8.2-curl php8.2-simplexml php8.2-dom php8.2-xml php8.2-redis php8.2-mbstring php8.2-intl unzip

Verifica la instalación.

$ php --version
PHP 8.2.7 (cli) (built: Jun  8 2023 15:27:40) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.7, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.7, Copyright (c), by Zend Technologies

Abre el archivo /etc/php/8.2/fpm/pool.d/www.conf.

$ sudo nano /etc/php/8.2/fpm/pool.d/www.conf

Necesitamos establecer el usuario/grupo Unix de los procesos PHP a nginx. Busca las líneas user=www-data y group=www-data en el archivo y cámbialas por nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

Busca las líneas listen.owner = www-data y listen.group = www-data en el archivo y cámbialas por nginx.

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions. The owner
; and group can be specified either by name or by their numeric IDs.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = nginx
listen.group = nginx

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Aumenta el límite de memoria para PHP-FPM de 128 MB a 512 MB.

$ sudo sed -i 's/memory_limit = 128M/memory_limit = 512M/' /etc/php/8.2/fpm/php.ini

Aumenta el tamaño de subida de archivos a 8 MB.

$ sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 8M/' /etc/php/8.2/fpm/php.ini

Reinicia el servicio PHP-FPM.

$ sudo systemctl restart php8.2-fpm

Cambia el grupo del directorio de sesiones PHP a Nginx.

$ sudo chgrp -R nginx /var/lib/php/sessions

Paso 5 – Instala Composer

Composer es una herramienta de gestión de dependencias para PHP y es necesaria para la instalación de Kbin. Coge el archivo de instalación de Composer.

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

Ejecuta el instalador para generar el binario de Composer.

$ php composer-setup.php

Elimina el archivo de instalación.

$ php -r "unlink('composer-setup.php');"

Mueve el binario composer.phar al directorio /usr/local/bin.

$ sudo mv composer.phar /usr/local/bin/composer

Verifica la instalación de Composer.

$ composer --version
Composer version 2.5.8 2023-06-09 17:13:21

Paso 6 – Instalar y configurar PostgreSQL

Ubuntu 22.04 incluye PostgreSQL 14 por defecto. Nosotros utilizaremos PostgreSQL 15 en su lugar.

Ejecuta el siguiente comando para añadir la clave GPG de PostgreSQL.

$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql-key.gpg >/dev/null

Añade el repositorio APT a tu lista de fuentes.

$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/postgresql-key.gpg arch=amd64] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

Actualiza el repositorio del sistema.

$ sudo apt update

Ahora, puedes instalar PostgreSQL utilizando el comando siguiente.

$ sudo apt install postgresql postgresql-contrib

El paquete postgresql-contrib contiene algunas utilidades adicionales.

Comprueba el estado del servicio PostgreSQL.

$ sudo systemctl status postgresql
? postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (exited) since Sat 2023-06-17 09:15:50 UTC; 3h 40min ago
   Main PID: 26989 (code=exited, status=0/SUCCESS)
        CPU: 1ms

Jun 17 09:15:50 nspeaks systemd[1]: Starting PostgreSQL RDBMS...
Jun 17 09:15:50 nspeaks systemd[1]: Finished PostgreSQL RDBMS.

Verás que el servicio está activado y en ejecución por defecto.

Inicia el intérprete de comandos PostgreSQL.

$ sudo -i -u postgres psql

Crea la base de datos Kbin.

postgres=# CREATE DATABASE kbin;

Crea el usuario Kbin y elige una contraseña segura.

postgres-# CREATE USER kbinuser WITH PASSWORD 'Your_Password';

Cambia el propietario de la base de datos por el usuario Kbin.

postgres-# ALTER DATABASE kbin OWNER TO kbinuser;

Sal del intérprete de comandos.

postgres-# \q

Comprueba que tus credenciales funcionan.

$ psql --username kbinuser --password --host localhost kbin
Password:
psql (15.3 (Ubuntu 15.3-1.pgdg22.04+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

kbin=>

Sal del intérprete de comandos escribiendo \q.

Paso 7 – Instalar Nodejs y Yarn

Ubuntu 22.04 incluye Node v12, que está obsoleto. Instalaremos la última versión LTS de Node, que es la v18 en el momento de escribir este tutorial.

Coge el instalador de Node v18 de NodeSource.

$ curl -sL https://deb.nodesource.com/setup_lts.x -o nodesource_setup.sh

Ejecuta el script de instalación.

$ sudo bash nodesource_setup.sh

Instala Node.js.

$ sudo apt install nodejs

Comprueba la versión de Node.js.

$ node -v
v18.16.1

Elimina el archivo de instalación.

$ rm nodesource_setup.sh

Paso 8 – Instala Yarn

Importa la clave GPG para Yarn.

$ curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null

Añade la fuente de Yarn a la lista de repositorios del sistema.

$ echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list

Actualiza la lista de repositorios del sistema.

$ sudo apt update

Instala Yarn

$ sudo apt install yarn

Verifica la instalación.

$ yarn --version
1.22.19

Paso 8 – Instalar Redis

Magento utiliza Redis para el almacenamiento de sesiones y caché. Es totalmente opcional y puedes utilizar la base de datos para el almacenamiento de sesiones. Pero Redis hace un mejor trabajo. La última versión de Magento funciona con Redis 7.0. Ubuntu viene con Redis 6.0, así que utilizaremos el repositorio de Redis para la instalación.

Importa la clave GPG oficial de Redis.

$ curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg

Añade el repositorio APT a tu lista de fuentes.

$ echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list

Actualiza la lista de repositorios del sistema.

$ sudo apt update

Ejecuta el siguiente comando para instalar el servidor Redis.

$ sudo apt install redis

Confirma la versión de Redis.

$ redis-server -v
Redis server v=7.0.11 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=3af367a78d5e21e9

Verifiquemos la conexión al servicio mediante el siguiente comando.

$ redis-cli

Pasarás a la shell de Redis.

El primer paso es establecer la contraseña para el usuario Redis por defecto. Sustituye Your_Redis_Password por una contraseña segura de tu elección. Asegúrate de anteponer a la contraseña el carácter >.

127.0.0.1:6379> acl setuser default >Your_Redis_Password

Prueba la autenticación de Redis.

127.0.0.1:6379> AUTH Your_Redis_Password
OK

Haz ping al servicio.

127.0.0.1:6379> ping
PONG

Sal del servicio escribiendo exit.

Si quieres, puedes utilizar el siguiente comando para generar la contraseña de Redis.

$ openssl rand 60 | openssl base64 -A
OaYOuq6J9HhxMV0sGCeZbaGecphCl4GBfVkCOPkNjkQE1FX9DKpGSCJcDb8UV+AuFKA8tR1PgjGequn1

Paso 9 – Instalar y configurar RabbitMQ

Kbin necesita RabbitMQ para la cola de mensajes. Lo instalaremos desde el repositorio de Ubuntu.

$ sudo apt install rabbitmq-server

Crea un usuario Rabbit. Elige una contraseña segura.

$ sudo rabbitmqctl add_user kbin StrongPassword

Haz que el usuario sea administrador.

$ sudo rabbitmqctl set_user_tags kbin administrator

Paso 10 – Descargar Kbin

Antes de descargar Kbin, necesitamos crear una cuenta de usuario Kbin.

$ adduser kbin

Añade el usuario kbin al grupo sudo.

$ sudo usermod -aG sudo kbin

Inicia sesión como el usuario kbin.

$ su - kbin

Crea el directorio /var/www/html/kbin.

$ sudo mkdir /var/wwww/html/kbin -p

Cambia al directorio.

$ cd /var/www/html/kbin

Da los permisos adecuados a la carpeta para que el usuario que ha iniciado sesión pueda realizar las tareas.

$ sudo chown $USER:$USER kbin

Clona el repositorio Kbin Git en la carpeta actual. Asegúrate de añadir el punto(.) al final del comando para hacer referencia a la carpeta actual.

$ git clone https://codeberg.org/Kbin/kbin-core.git .

Crea el directorio public/media.

$ mkdir public/media

Dale permiso total.

$ chmod 777 public/media

Paso 11 – Configurar el archivo de entorno

Genera la clave secreta JWT de Mercure.

$ node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

Genera el secreto de la App utilizando de nuevo el mismo comando.

$ node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

Crea y abre el archivo .env para editarlo en el directorio Kbin.

$ nano .env

Pega en él el siguiente código. Utiliza las claves generadas anteriormente en el siguiente archivo.

# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2).
# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration

# kbin variables
SERVER_NAME="nspeaks.xyz" # production
KBIN_DOMAIN=nspeaks.xyz
KBIN_TITLE=Howtoforge
KBIN_DEFAULT_LANG=en
KBIN_FEDERATION_ENABLED=true
[email protected]
[email protected]
KBIN_JS_ENABLED=true
KBIN_REGISTRATIONS_ENABLED=true
KBIN_API_ITEMS_PER_PAGE=25
#KBIN_STORAGE_URL=/media
KBIN_META_TITLE="Kbin Lab"
KBIN_META_DESCRIPTION="content aggregator and micro-blogging platform for the fediverse"
KBIN_META_KEYWORDS="kbin, content agregator, open source, fediverse"
KBIN_HEADER_LOGO=false
KBIN_CAPTCHA_ENABLED=false

# Redis
REDIS_PASSWORD=YourRedisPassword
REDIS_DNS=redis://default:${REDIS_PASSWORD}@localhost:6379

###> symfony/framework-bundle ###
APP_ENV=prod
APP_SECRET=427f5e2940e5b2472c1b44b2d06e0525
###< symfony/framework-bundle ###

###> doctrine/doctrine-bundle ###
# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml
#
POSTGRES_DB=kbin
POSTGRES_USER=kbin
POSTGRES_PASSWORD=Your_Password
POSTGRES_VERSION=15
DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@127.0.0.1:5432/${POSTGRES_DB}?serverVersion=${POSTGRES_VERSION}&charset=utf8"
###< doctrine/doctrine-bundle ###

###> symfony/messenger ###
# Choose one of the transports below
RABBITMQ_PASSWORD=RabbitMQPassword
MESSENGER_TRANSPORT_DSN=amqp://kbin:${RABBITMQ_PASSWORD}@rabbitmq:5672/%2f/messages
#MESSENGER_TRANSPORT_DSN=doctrine://default
#MESSENGER_TRANSPORT_DSN=redis://${REDIS_PASSWORD}@redis:6379/messages
###< symfony/messenger ###

###> symfony/mailgun-mailer ###
#MAILER_DSN=mailgun+smtp://[email protected]:key@default?region=us
MAILER_DSN=smtp://AKIA3FIG4NVFH4TXXEXY:BJQvNI9U6JqSuUFQ9Ffd22Dvom/8KNwk7EIrFTRai02/@email-smtp.us-west-2.amazonaws.com:465
###< symfony/mailgun-mailer ###

###> symfony/mercure-bundle ###
# See https://symfony.com/doc/current/mercure.html#configuration
# The URL of the Mercure hub, used by the app to publish updates (can be a local URL)
MERCURE_URL=https://example.com/.well-known/mercure
# The public URL of the Mercure hub, used by the browser to connect
MERCURE_PUBLIC_URL=https://example.com/.well-known/mercure
# The secret used to sign the JWTs
MERCURE_JWT_SECRET="!ChangeThisMercureHubJWTSecretKey!"
###< symfony/mercure-bundle ###

###> symfony/lock ###
LOCK_DSN=flock
###< symfony/lock ###

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Paso 12 – Instalar Kbin

Instala los paquetes necesarios para Kbin utilizando Composer.

$ composer install --prefer-dist --no-dev
$ composer dump-env prod

Borra la caché.

$ APP_ENV=prod APP_DEBUG=0 php bin/console cache:clear
$ composer clear-cache

Da los permisos adecuados a la carpeta multimedia.

$ sudo chown kbin:nginx public/media

Establece los permisos adecuados para los archivos y directorios utilizando el comando setfacl. El siguiente comando detecta el servidor web actual en uso (Nginx) y establece los permisos para los archivos y carpetas existentes y futuros.

$ HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1)
$ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var
$ sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var

Crea y migra la base de datos PostgreSQL.

$ php bin/console doctrine:database:create
$ php bin/console doctrine:migrations:migrate

Se te preguntará si deseas continuar con la migración de datos. Escribe yes para continuar.

WARNING! You are about to execute a migration in database "kbin" that could result in schema changes and data loss. Are you sure you wish to continue? (yes/no) [yes]:
 > yes

[notice] Migrating up to DoctrineMigrations\Version20230615203020
[notice] finished in 1373.9ms, used 24M memory, 79 migrations executed, 667 sql queries

[OK] Successfully migrated to version : DoctrineMigrations\Version20230615203020

Instala y construye el front-end público para el sitio Kbin.

$ yarn install
$ yarn build

Crea un nuevo usuario administrador para Kbin.

$ php bin/console kbin:user:create username [email protected] password

Concede privilegios administrativos al usuario.

$ php bin/console kbin:user:admin username

Actualiza las claves.

$ php bin/console kbin:ap:keys:update

Paso 13 – Instalar SSL

Necesitamos instalar Certbot para generar el certificado SSL. Puedes instalar Certbot utilizando el repositorio de Ubuntu o descargar la última versión utilizando la herramienta Snapd. Nosotros utilizaremos la versión Snapd.

Ubuntu 22.04 viene con Snapd instalado por defecto. Ejecuta los siguientes comandos para asegurarte de que tu versión de Snapd está actualizada.

$ sudo snap install core && sudo snap refresh core

Instala Certbot.

$ sudo snap install --classic certbot

Utiliza el siguiente comando para asegurarte de que se puede ejecutar el comando Certbot creando un enlace simbólico al directorio /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Ejecuta el siguiente comando para generar un certificado SSL.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d example.com

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/example.com de tu servidor.

Genera un certificado de grupo Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Comprueba el servicio programador de renovaciones de Certbot.

$ sudo systemctl list-timers

Encontrarás snap.certbot.renew.service como uno de los servicios programados para ejecutarse.

NEXT                        LEFT          LAST                        PASSED       UNIT                       ACTIVATES
Wed 2023-06-28 10:09:00 UTC 20min left    Wed 2023-06-28 09:39:00 UTC 9min ago     phpsessionclean.timer      phpsessionclean.service
Wed 2023-06-28 11:13:02 UTC 1h 24min left Wed 2023-06-28 04:41:28 UTC 5h 7min ago  ua-timer.timer             ua-timer.service
Wed 2023-06-28 12:11:00 UTC 2h 22min left n/a                         n/a          snap.certbot.renew.timer   snap.certbot.renew.service

Realiza una ejecución en seco del proceso para comprobar si la renovación SSL funciona correctamente.

$ sudo certbot renew --dry-run

Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.

Paso 14 – Configurar Nginx

Crea y abre el archivo /etc/nginx/conf.d/kbin.conf para editarlo.

$ sudo nano /etc/nginx/conf.d/kbin.conf

Pega en él el siguiente código.

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  example.com;

    access_log  /var/log/nginx/kbin.access.log;
    error_log   /var/log/nginx/kbin.error.log;

    # SSL
    ssl_certificate         /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    ssl_session_timeout  1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    # use https://blog.cloudflare.com/announcing-1111 Cloudfare+Apnic labs, It is free and secure
    resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] valid=300s;

    root /var/www/html/kbin/public;

    index index.php;

    location / {
        try_files $uri $uri/ /index.php;
    }

    # Pass PHP Scripts To FastCGI Server
    location ~* \.php$ {
        try_files $uri =404;
        fastcgi_index  index.php;
        fastcgi_pass unix:/run/php-fpm/www.sock; # Depends On The PHP Version
        fastcgi_param SCRIPT_FILENAME  $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        include fastcgi_params;
    }

    # deny access to writable files/directories
    location ~* ^/sites/*/(documents|edi|era) {
        deny all;
        return 404;
    }

    # deny access to certain directories
    location ~* ^/(contrib|tests) {
	    deny all;
        return 404;
    }

    # Alternatively all access to these files can be denied
    location ~* ^/(admin|setup|acl_setup|acl_upgrade|sl_convert|sql_upgrade|gacl/setup|ippf_upgrade|sql_patch)\.php {
        deny all;
        return 404;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt  {
        log_not_found off;
        access_log off;
    }

    location ~ /\. {
        deny all;
    }
}

# enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  example.com;
    return 301   https://$host$request_uri;
}

Observa que el directorio raíz que se utilizará en la configuración de Nginx es /var/www/html/kbin/public/.

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida una vez hayas terminado.

Abre el archivo /etc/nginx/nginx.conf para editarlo.

$ sudo nano /etc/nginx/nginx.conf

Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Verifica la sintaxis del archivo de configuración de Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Reinicia el servicio Nginx.

$ sudo systemctl restart nginx

Paso 15 – Instalar y configurar Supervisor

Supervisor es un gestor de procesos y lo utilizaremos como monitor de procesos para el trabajador de mensajes (RabbitMQ) de Kbin. El primer paso es instalar Supervisor.

$ sudo apt install supervisor

Crea el archivo /etc/supervisor/conf.d/messenger-worker.conf y ábrelo para editarlo.

$ sudo nano /etc/supervisor/conf.d/messenger-worker.conf

Pega en él el siguiente código.

[program:messenger-kbin]
command=php /var/www/html/kbin/bin/console messenger:consume async --time-limit=3600
user=kbin
numprocs=2
startsecs=0
autostart=true
autorestart=true
startretries=10
process_name=%(program_name)s_%(process_num)02d
stderr_logfile=/var/log/supervisor/%(program_name)s_stderr.log
stderr_logfile_maxbytes=10MB
stdout_logfile=/var/log/supervisor/%(program_name)s_stdout.log
stdout_logfile_maxbytes=10MB

[program:messenger-ap]
command=php /var/www/html/kbin/bin/console messenger:consume async_ap --time-limit=3600
user=kbin
numprocs=2
startsecs=0
autostart=true
autorestart=true
startretries=10
process_name=%(program_name)s_%(process_num)02d
stderr_logfile=/var/log/supervisor/%(program_name)s_stderr.log
stderr_logfile_maxbytes=10MB
stdout_logfile=/var/log/supervisor/%(program_name)s_stdout.log
stdout_logfile_maxbytes=10MB

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.

Ejecuta los siguientes comandos para releer y actualizar el nuevo archivo de configuración.

$ sudo supervisorctl reread
$ sudo supervisorctl update

Inicia todos los servicios del Supervisor.

$ sudo supervisorctl start all

Paso 16 – Accede a la Kbin

Abre la URL https://example.com y obtendrás la siguiente página de inicio de la Kbin.

Página de inicio de Kbin

Haz clic en el enlace Iniciar sesión de la parte superior para que aparezca la página de inicio de sesión.

Página de inicio de sesión de Kbin

Introduce las credenciales creadas en el paso 12 y haz clic en el botón Iniciar sesión para continuar. Volverás a la página principal de Kbin. A partir de aquí puedes empezar a utilizar Kbin.

Conclusión

Con esto concluye nuestro tutorial sobre la instalación del Agregador de Contenidos tipo Reddit, Kbin, en un servidor Ubuntu 22.04. Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...