Jump toSuggest an edit

Project management for technical teams with Focalboard on Ubuntu Instances

Reviewed on 21 February 2024Published on 22 February 2023
  • compute
  • instance
  • focalboard
  • ubuntu
  • project-management
  • open-source

Developed by Mattermost, Focalboard emerges as an open-source and multilingual project management solution that readily accommodates self-hosting. Its central objective revolves around equipping organizations with a unified reference point, fostering team alignment and dedication to task completion, milestones, and objectives.

Focalboard boasts a comprehensive array of functionalities as one of its standout features. These include versatile views like Kanban, tables, galleries, and calendars, along with filtering mechanisms to maintain attention on top-priority tasks. Beyond its capabilities, Focalboard serves as a privacy-centric alternative to renowned project management tools like Trello, Notion, and Asana, and it effortlessly installs on Scaleway Instances.

In short, if you are seeking a robust and budget-friendly project management solution, Focalboard unquestionably merits exploration. Its impressive feature set coupled with a commitment to privacy positions it as a tool capable of fostering team organization and goal attainment.


We recommend you follow this tutorial using a Production-Optimized Instance.

Security & Identity (IAM)

To perform certain actions described below, you must either be the Owner of the Organization in which the actions will be performed or an IAM user with the necessary permissions.

  • You have an account and are logged into the Scaleway console
  • You have configured your SSH key
  • You have created an Instance that runs Ubuntu Jammy Jellyfish (22.04 LTS)
  • You have a (sub)domain pointed to the IP address of your Instance (A-record)

Installation of the required software

In the following steps, we will make sure that the software and the required packages installed on your Instance are up-to-date, and that you have downloaded and unpacked the Focalboard application.

  1. Log into your Instance using SSH:
    ssh root@<your_scaleway_instance_ip>
  2. Update the apt package manager and upgrade the installed software on your Instance to the latest version.
    apt update && apt upgrade -y
  3. Install the required software packages using the apt package manager.
    apt install nginx python3-certbot-nginx mariadb-server ufw
  4. Download and unpack Focalboard. In this tutorial, we use v7.11.3 of Focalboard, but you can find the latest release in the project’s GitHub repository.
    tar -xvzf focalboard-server-linux-amd64.tar.gz
    mv focalboard /opt

Nginx configuration

We use Nginx as a proxy in front of the application to prevent it from direct access and by providing an additional layer of security through TLS encryption.

  1. Create an Nginx server configuration for Focalboard.
    nano /etc/nginx/sites-available/

    In this tutorial, we use the subdomain Remember to change it to your own (sub)domain where applicable.

    Copy and paste the following configuration into the file, edit it, and save it.
    upstream focalboard {
    server localhost:8000;
    keepalive 32;
    server {
    listen 80;
    listen [::]:80;
    access_log /var/log/nginx/focalboard-access.log;
    error_log /var/log/nginx/focalboard-error.log;
    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;
  2. Test the new configuration, enable the site, and reload Nginx to activate the Focalboard site.
    nginx -t
    ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/
    service nginx reload
  3. Run certbot to obtain a TLS certificate for your domain name and let the application configure Nginx automatically.

    For more details on using Certbot, refer to our dedicated documentation.

MariaDB configuration

Focalboard uses a MariaDB database to store its data. Initialize the database engine, and create a table and user for Focalboard.

  1. Run the following command to initialize the MariaDB database server.
    Follow the steps in the wizard:
    • Enter current password for root: Press Enter to continue.
    • Set root password? Y
    • Create and confirm a new password
    • Remove anonymous users? Y
    • Disallow root login remotely? Y
    • Remove test database and access to it? Y
    • Reload privilege tables now? `Y
  2. Log into the MariaDB shell using the MySQL user root and the password created in the previous step.
    mysql -u root -p
  3. Create a table for Focalboard and grant permission to a MariaDB user. Change the values for focalboarduser and focalboardpassword to your own user/password combination.
    CREATE DATABASE focalboard;
    GRANT ALL on focalboard.* to 'focalboarduser'@'localhost' identified by 'focalboardpassword';
    Then leave the MariaDB shell by typing exit;.
  4. Open the Focalboard configuration file in a text editor.
    nano /opt/focalboard/config.json
    Edit the database configuration as shown below:
    "dbtype": "mysql",
    "dbconfig": "focalboarduser:focalboardpassword@tcp(",

Configure a Focalboard service

We are now configuring a service that will keep the Focalboard server running across reboots.

  1. Create a service description.
    nano /lib/systemd/system/focalboard.service
    Copy the following content into the file, save it and exit the text editor.
  2. Reload the systemd configuration, enable and start the Focalboard service.
    systemctl daemon-reload
    systemctl start focalboard.service
    systemctl enable focalboard.service

Firewall configuration

To avoid the Focalboard application being directly reachable via plain HTTP on port 8000, we will configure a firewall to block all incoming ports, except HTTP, HTTPS, and SSH.

  1. Refuse any traffic by default.
    ufw default deny
  2. Enable outgoing traffic.
    ufw default allow outgoing
  3. Authorize SSH, HTTP and HTTPS connections to the Focalboard Instance.
    ufw allow 22/tcp
    ufw allow 80/tcp
    ufw allow 443/tcp
  4. Enable the new firewall configuration.
    ufw enable

Your Focalboard Instance is now ready. You can open a web browser on your local computer and point it to your Focalboard domain — the Login screen displays. Click Create an account to create your first account and start using your Instance.

For more information about using your new Focalboard Instance, follow the official Focalboard documentation.

Cloud Products & Resources
  • Scaleway Console
  • Compute
  • Storage
  • Network
  • IoT
  • AI
Dedicated Products & Resources
  • Dedibox Console
  • Dedibox Servers
  • Network
  • Web Hosting
  • Blog
  • Careers
  • Scaleway Learning
Follow us
ContractsLegal NoticePrivacy PolicyCookie PolicyDocumentation license
© 1999-2024 – Scaleway SAS