Cómo instalar Focalboard Project Management en Ubuntu 20.04

Focalboard es una aplicación de gestión de proyectos gratuita, de código abierto y autoalojada que se utiliza para organizar, seguir y gestionar el trabajo de los equipos. Es una alternativa autoalojada y muy buena a otras aplicaciones de gestión de proyectos como Trello, Notion y Asana. Nos permite gestionar proyectos en varios sistemas como Windows, Mac o Linux.

Focalboard ofrece las siguientes características

  • Arrastrar y soltar tarjetas
  • Proporciona un control total sobre las tarjetas
  • Importar y exportar el tablero
  • Soporta múltiples idiomas
  • Filtrar el tablero y las tareas por estado, fecha de vencimiento, etc.

En este post, te mostraremos cómo instalar Focalboard con Nginx como proxy inverso en Ubuntu 20.04.

Requisitos previos

  • Un servidor con Ubuntu 20.04.
  • Un nombre de dominio válido apuntado con la IP de tu servidor.
  • Una contraseña de root configurada en el servidor.

Instalar y configurar PostgreSQL

Focalboard utiliza PostgreSQL como base de datos. Así que tendrás que instalar el servidor de bases de datos PostgreSQL en tu sistema.

Puedes instalarlo con otros paquetes utilizando el siguiente comando:

apt-get install curl wget gnupg2 -y
apt-get install postgresql postgresql-contrib -y

Una vez instalado PostgreSQL, inicia sesión en PostgreSQL con el siguiente comando:

su - postgres
psql

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

CREATE DATABASE focalboards;
CREATE USER focaluser WITH PASSWORD 'password';

A continuación, sal del shell de PostgreSQL con el siguiente comando:

\q
exit

Una vez que hayas terminado, puedes pasar al siguiente paso.

Instalar y configurar Focalboard

Primero, descarga la última versión de Focalboard con el siguiente comando:

VER=$(curl -s https://api.github.com/repos/mattermost/focalboard/releases/latest|grep tag_name | cut -d '"' -f 4)
wget https://github.com/mattermost/focalboard/releases/download/${VER}/focalboard-server-linux-amd64.tar.gz

A continuación, extrae el archivo descargado con el siguiente comando:

tar -xvzf focalboard-server-linux-amd64.tar.gz

A continuación, mueve el Focalboard al directorio /opt con el siguiente comando:

mv focalboard /opt

A continuación, edita el archivo de configuración de Focalboard:

nano /opt/focalboard/config.json

Define tu base de datos como se muestra a continuación:

"dbtype": "postgres",
"dbconfig": "postgres://focaluser:password@localhost/focalboards?sslmode=disable&connect_timeout=10",

Guarda y cierra el archivo cuando hayas terminado.

Crear un archivo de servicio Systemd para Focalboard

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

nano /lib/systemd/system/focalboard.service

Añade las siguientes líneas:

[Unit]
Description=Focalboard server

[Service]
Type=simple
Restart=always
RestartSec=5s
ExecStart=/opt/focalboard/bin/focalboard-server
WorkingDirectory=/opt/focalboard

[Install]
WantedBy=multi-user.target

Guarda y cierra el archivo y vuelve a cargar el demonio systemd para aplicar los cambios:

systemctl daemon-reload

A continuación, inicia y activa el servicio Focalboard con el siguiente comando:

systemctl start focalboard
systemctl enable focalboard

Ahora puedes comprobar el estado del Focalboard con el siguiente comando:

systemctl status focalboard

Obtendrás la siguiente salida:

? focalboard.service - Focalboard server
     Loaded: loaded (/lib/systemd/system/focalboard.service; disabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-02-27 09:54:03 UTC; 6s ago
   Main PID: 9608 (focalboard-serv)
      Tasks: 4 (limit: 2348)
     Memory: 15.7M
     CGroup: /system.slice/focalboard.service
             ??9608 /opt/focalboard/bin/focalboard-server

Feb 27 09:54:06 ubuntupc focalboard-server[9608]: debug [2022-02-27 09:54:06.035 Z] listener(s) for blockID                  caller="ws/serve>
Feb 27 09:54:06 ubuntupc focalboard-server[9608]: debug [2022-02-27 09:54:06.035 Z] listener(s) for blockID                  caller="ws/serve>
Feb 27 09:54:06 ubuntupc focalboard-server[9608]: debug [2022-02-27 09:54:06.038 Z] listener(s) for workspaceID              caller="ws/serve>
Feb 27 09:54:06 ubuntupc focalboard-server[9608]: debug [2022-02-27 09:54:06.038 Z] listener(s) for blockID                  caller="ws/serve>
Feb 27 09:54:06 ubuntupc focalboard-server[9608]: debug [2022-02-27 09:54:06.038 Z] listener(s) for blockID                  caller="ws/serve>
Feb 27 09:54:06 ubuntupc focalboard-server[9608]: debug [2022-02-27 09:54:06.038 Z] import archive - done                    caller="app/impo>
Feb 27 09:54:06 ubuntupc focalboard-server[9608]: info  [2022-02-27 09:54:06.041 Z] initialized workspace                    caller="app/work>
Feb 27 09:54:06 ubuntupc focalboard-server[9608]: info  [2022-02-27 09:54:06.047 Z] Server.Start                             caller="server/s>
Feb 27 09:54:06 ubuntupc focalboard-server[9608]: info  [2022-02-27 09:54:06.047 Z] http server started                      caller="web/webs>
Feb 27 09:54:06 ubuntupc focalboard-server[9608]: info  [2022-02-27 09:54:06.053 Z] Starting unix socket server              caller="server/s>

En este punto, Focalboard está iniciado y en funcionamiento. Puedes comprobar sus puertos de escucha con el siguiente comando:

ss -antpl | grep focalboard

Obtendrás la siguiente salida:

LISTEN    0         4096                     *:8000                   *:*        users:(("focalboard-serv",pid=9608,fd=8))                                      
LISTEN    0         4096                     *:9092                   *:*        users:(("focalboard-serv",pid=9608,fd=9)) 

Una vez que hayas terminado, puedes pasar al siguiente paso.

Configurar Nginx como proxy inverso

A continuación, tendrás que instalar y configurar Nginx como proxy inverso para acceder al Focalboard a través del puerto 80. Primero, instala el servidor Nginx con el siguiente comando:

apt-get install nginx -y

Una vez instalado el servidor Nginx, crea un archivo de configuración del host virtual Nginx:

nano /etc/nginx/conf.d/focalboard.conf

Añade las siguientes líneas:

upstream focalboard {
   server localhost:8000;
   keepalive 32;
}

server {
   listen 80;

   server_name focalboard.example.com;

   location ~ /ws/* {
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
       client_max_body_size 50M;
       proxy_set_header Host $http_host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-Frame-Options SAMEORIGIN;
       proxy_buffers 256 16k;
       proxy_buffer_size 16k;
       client_body_timeout 60;
       send_timeout 300;
       lingering_timeout 5;
       proxy_connect_timeout 1d;
       proxy_send_timeout 1d;
       proxy_read_timeout 1d;
       proxy_pass http://focalboard;
   }

   location / {
       client_max_body_size 50M;
       proxy_set_header Connection "";
       proxy_set_header Host $http_host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-Frame-Options SAMEORIGIN;
       proxy_buffers 256 16k;
       proxy_buffer_size 16k;
       proxy_read_timeout 600s;
       proxy_cache_revalidate on;
       proxy_cache_min_uses 2;
       proxy_cache_use_stale timeout;
       proxy_cache_lock on;
       proxy_http_version 1.1;
       proxy_pass http://focalboard;
   }
}

Guarda y cierra el archivo cuando hayas terminado y luego verifica que el Nginx no tenga ningún error de configuración de sintaxis con el siguiente comando:

nginx -t

Obtendrás la siguiente salida:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

A continuación, reinicia el servicio Nginx para aplicar los cambios de configuración:

systemctl restart nginx

También puedes comprobar el estado de Nginx con el siguiente comando:

systemctl status nginx

Deberías ver la siguiente salida:

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-02-27 09:56:12 UTC; 4s ago
       Docs: man:nginx(8)
    Process: 10110 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 10121 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 10127 (nginx)
      Tasks: 2 (limit: 2348)
     Memory: 2.6M
     CGroup: /system.slice/nginx.service
             ??10127 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??10128 nginx: worker process

Feb 27 09:56:11 ubuntupc systemd[1]: Starting A high performance web server and a reverse proxy server...
Feb 27 09:56:12 ubuntupc systemd[1]: Started A high performance web server and a reverse proxy server.

Accede a la interfaz web de Focalboard

Ahora, abre tu navegador web y accede a la interfaz web de Focalboard utilizando la URL http://focalboard.example.com. Serás redirigido a la página de inicio de sesión de Focalboard:

Haz clic en el botón de crear una cuenta. Deberías ver la página de creación de cuentas de Focalboard:

Proporciona tu dirección de correo electrónico, el nombre de usuario de administrador, la contraseña, y haz clic en el botón Registrar. Deberías ver el panel de control de Focalboard en la siguiente página:

Asegura Focalboard con Let’s Encrypt SSL

A continuación, tendrás que instalar el paquete cliente Certbot para instalar y gestionar el SSL de Let’s Encrypt. Primero, instala el Certbot con el siguiente comando:

apt-get install python3-certbot-nginx -y

Una vez terminada la instalación, ejecuta el siguiente comando para instalar el SSL de Let’s Encrypt en tu sitio web:

certbot --nginx -d focalboard.example.com

Se te pedirá que proporciones una dirección de correo electrónico válida 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 focalboard.example.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/conf.d/focalboard.conf

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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 Intro para finalizar la instalación. Deberías ver la siguiente salida:

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://focalboard.example.com

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

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/focalboard.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/focalboard.example.com/privkey.pem
   Your cert will expire on 2022-05-27. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - 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

 - We were unable to subscribe you the EFF mailing list because your
   e-mail address appears to be invalid. You can try again later by
   visiting https://act.eff.org.

Conclusión

Enhorabuena! has instalado con éxito Focalboard con Nginx como proxy inverso en Ubuntu 20.04. Ahora puedes utilizar Focalboard para gestionar y seguir tus proyectos fácilmente desde el navegador web. No dudes en preguntarme si tienes alguna duda.

También te podría gustar...