¶ Что такое Focalboard
Focalboard - open-source альтернатива Trello и других kanban досок задач. Один из официальных способ развертывания приложения - Docker-образ, использующий по умолчанию sqlite в качестве базы данных. Это руководство поможет развернуть Focalboard с использованием БД PostgreSQL при помощи Docker Compose.
Источник: 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
¶ Развертывание
- Скопируйте файлы
config.json
иdocker-compose.yml
- Выполните команду
docker compose [--project-name focalboard] up -d
для запуска сервисов. Флаг--project-name
пригодится, если ваша директория не имеет уникального имени и может пересекаться с другими развертываниями Docker Compose - Сервис будет доступен по порту 8000. Данные сервиса будут сохранены в директорию
postgres
в рабочей директории - Для остановки, выполните команду
docker compose [--project-name focalboard] down
¶ Конфигурация 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
на свое доменное имя.