Установка Focalboard с использованием Docker Compose

19.12.2024

Илья Замарацких

Focalboard

Docker Compose

Содержание

Что такое Focalboard

Focalboard - open-source альтернатива Trello и других kanban досок задач. Один из официальных способ развертывания приложения - Docker-образ, использующий по умолчанию sqlite в качестве базы данных. Это руководство поможет развернуть Focalboard с использованием БД PostgreSQL при помощи Docker Compose.

Focalboard UI Источник: focalboard.com

Предварительные шаги

Установка Docker

Для развертывания потребуется Docker и установленный Docker Compose плагин. Самый простой способ выполнить установку - запустить скрипт с get.docker.com. Он поддерживает большинство операционных систем.

wget -O docker.sh get.docker.com
sudo bash docker.sh

Конфигурация сервиса

Focalboard конфигурируется при помощи файла config.json, расположенном в каталоге /opt/focalboard Docker-образа. Расшифровку всех параметров можно изучить на странице руководства администратора. Стандартный файл можно вывести в терминал при помощи команды

docker run --rm mattermost/focalboard cat /opt/focalboard/config.json

Для подключения к PostgreSQL требуется заменить поля dbtype и dbconfig. Для использования с контейнером потребуется следующий конфиг-файл:

{
  "serverRoot": "http://localhost:8000",
  "port": 8000,
  "dbtype": "postgres",
  "dbconfig": "postgres://focal:focal@db/focal?sslmode=disable&connect_timeout=10",
  "postgres_dbconfig": "dbname=focal sslmode=disable",
  "useSSL": false,
  "webpath": "./pack",
  "filespath": "./data/files",
  "telemetry": true,
  "session_expire_time": 2592000,
  "session_refresh_time": 18000,
  "localOnly": false,
  "enableLocalMode": true,
  "localModeSocketLocation": "/var/tmp/focalboard_local.socket"
}

Файл docker-compose.yml

services:
  focalboard:
    ports:
      - 8000:8000
    restart: always
    image: mattermost/focalboard
    container_name: focalboard
    volumes:
      - ./config.json:/opt/focalboard/config.json:ro
  postgres:
    hostname: db
    image: postgres:16
    container_name: focalboard-postgres
    restart: unless-stopped
    volumes:
      - ./postgres:/var/lib/postgresql/data
    healthcheck:
      test: ['CMD-SHELL', 'pg_isready -U focal']
      interval: 10s
      timeout: 5s
      retries: 5
    environment:
      POSTGRES_USER: focal
      POSTGRES_PASSWORD: focal
      POSTGRES_DB: focal
      PGDATA: /var/lib/postgresql/data/pgdata

В данную конфигурацию включена healthcheck-проверка PostgreSQL, а Focalboard доступен по 8000 порту. Для замены порта, который будет доступен с машины, замените первый порт, например - 30000:8000

Развертывание

Конфигурация nginx

Если требуется пропустить трафик Focalboard через nginx, также потребуется специальная конфигурация, поскольку Focalboard использует Websocket. Если nginx и Focalboard находятся на одном сервере, подойдет следующая конфигурация:

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

server {
   listen 80 default_server;

   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;
   }
}

Если на сервере находится не только Focalboard, потребуется удалить опцию default_server, а также заменить focalboard.example.com на свое доменное имя.