В статье Установка SeaTable Enterprise Edition под Ubuntu Server 20.04 LTS мы рассказали о стандартной установке SeaTable Enterprise на сервер с Ubuntu Linux. При стандартной установке SeaTable устанавливается на сервер, на котором не запущены другие веб-приложения. Но что делать, если порты 80 и 443 уже заняты другой службой, например, веб-сервером nginx или Apache? Мы ответим на этот вопрос в данной статье. Как вы увидите, ответ восхитительно прост.

Требования для установки SeaTable за существующим веб-сервером идентичны требованиям для стандартной установки:

  • VServer / Выделенный сервер с не менее чем 4 ядрами, 8GB RAM и 10GB памяти
  • Корневой доступ к серверу (через SSH или консоль)
  • Поддомен, который ссылается на IP-адрес сервера через A-запись (IPv4) или AAAA-запись (IPv6).
  • Сервер, доступный через порт 80 и 443 через поддомен

Не только предварительные условия, но и первые шаги идентичны шагам стандартной установки: сначала установка docker-compose, затем извлечение образа SeaTable из Docker Hub и, наконец, сохранение файла docker-compose в формате YAML в каталоге /opt/seatable.

С помощью этих команд вы выполняете следующие действия:
apt update apt upgrade -y apt install docker-compose -y docker pull seatable/seatable-ee:latest mkdir /opt/seatable cd /opt/seatable wget -O "docker-compose.yml" "https://manual.seatable.io/docker/Enterprise-Edition/docker-compose.yml"

SeaTable также может быть создана в месте, отличном от каталога /opt/seatable. Однако, если вы хотите сделать это, вам также следует хранить все остальные файлы SeaTable в этом другом месте из соображений согласованности. Поскольку это может легко привести к ошибкам, мы не рекомендуем этого делать.

Инструкции по стандартной установке объясняют структуру и функции файла docker-compose. Не стоит повторять это здесь. Используйте эту ссылку для перехода непосредственно к соответствующей части статьи о стандартной установке.

В файле YAML теперь необходимо сделать несколько настроек, с одной стороны, чтобы учесть ваши собственные требования, а с другой - чтобы обеспечить работу за веб-сервером.

Необходимые настройки включают, в частности, пароль базы данных, который должен быть изменен в контейнере db (MYSQL_ROOT_PASSWORD) и в контейнере seatable (DB_ROOT_PASSWD). Также необходимо изменить URL-адрес, под которым будет доступен SeaTable. Для этого используется значение SEATABLE_SERVER_HOSTNAME. Введите домен без http:// или https://.

В дополнение к этим изменениям, которые также должны быть сделаны для стандартной установки, порт HTTP и HTTPS также должны быть адаптированы. Конфигурацию портов сидячего контейнера можно найти в одноименном разделе. Значения по умолчанию в файле SeaTables docker-compose.yml следующие:
 - "80:80" #HTTP port - "443:443" #HTTPS port
Значение перед двоеточием - это порт контейнера на хосте Docker , т.е. порт, который прослушивает прокси-сервер Docker и который перенаправляется в контейнер. Второе значение после двоеточия - это порт в контейнере Docker , на который перенаправляются запросы. Эти два порта не обязательно должны быть идентичными, и мы используем это свойство.

Поскольку порты 80 и 443 уже заняты на сервере, порты на хосте Docker должны быть изменены. Однако порты в контейнере могут и должны оставаться неизменными. Это позволяет избежать ненужных изменений в конфигурационных файлах SeaTable. Альтернативная конфигурация портов может выглядеть следующим образом:

 - "880:80" #HTTP port - "4443:443" #HTTPS port

Выбранные здесь порты 880 и 4443 являются популярными альтернативными портами для портов 80 и 443. Вместо них можно использовать и другие номера портов. Затем их необходимо учесть при настройке веб-сервера на хосте (см. ниже).

Оставьте значение SEATABLE_SERVER_LETSENCRYPT равным False. Эту функцию можно использовать только при стандартной установке.

С помощью адаптированного docker-compose.yml теперь можно инициализировать базу данных SeaTable. Шаги - как может быть иначе - это шаги стандартной установки:

cd /opt/seatable docker-compose up

Теперь вы можете наблюдать на экране, как Docker обрабатывает инструкции в YAML-файле. Через некоторое время все действия прекращаются. Последним сообщением будет “This is an idle script (infinite loop) to keep container running”. Остановите процесс в этот момент комбинацией клавиш CTRL + C.

Чтобы гарантировать, что обращения к URL SeaTable также попадают в контейнер SeaTable, необходимо адаптировать конфигурационный файл веб-сервера на хосте. В частности, запросы, поступающие через URL SeaTable и порт 80, должны быть перенаправлены на прокси-сервер Docker . Он прослушивает - как определено в docker-compose - порт 880.

Например, директива, которая делает это для nginx, выглядит следующим образом:

server { listen 80; listen [::]:80; server_name seatable.example.com;

location / {
proxy_pass http://127.0.0.1:880;
}
}

(В свое время мы предоставим блок кода для Apache).

После настройки конфигурации веб-сервера перезапустите веб-сервер, чтобы изменения вступили в силу.

Поскольку взаимодействие внутри контейнера Docker seatable не изменилось, не нужно вносить изменения в различные конфигурационные файлы в папке /opt/seatable/seatable-data/seatable/conf.

Теперь SeaTable готов к запуску. Сначала снова запустите все контейнеры Docker , выполнив команду docker-compose.yml, на этот раз в так называемом “отсоединенном” режиме, затем вызовите SH-скрипт для запуска SeaTable в контейнере seatable и, наконец, создайте первого пользователя-администратора.

docker-compose up -d docker exec -d seatable /shared/seatable/scripts/seatable.sh start docker exec -it seatable /shared/seatable/scripts/seatable.sh superuser

Теперь вы уже можете связаться с Seatable через порт 80. Обратившись к домену SeaTable (здесь в примере seatable.example.com), вы попадете на страницу входа в систему вашего сервера SeaTable.

Вызов https://seatable.example.com пока не работает. В качестве последнего шага необходимо настроить зашифрованный доступ.

Процедура настройки доступа HTTPS зависит от используемого сертификата SSL/TLS. Если у вас уже есть соответствующий сертификат, следуйте инструкциям центра сертификации, у которого вы приобрели SSL-сертификат.

Если вы относитесь к большинству и хотите управлять своим сертификатом HTTPS с помощью Let’s Encrypt, просто следуйте инструкциям на сайте Certbot Фонда электронных рубежей .

генератор инструкций certbot

В случае с nginx на Ubuntu 20.04 для запроса и включения SSL-сертификата Let’s Encrypt необходимо выполнить всего четыре команды:
sudo snap install core; sudo snap refresh core sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/bin/certbot sudo certbot --nginx

После вызова последней команды вызывается интерактивное меню Certbot. Следуйте инструкциям и принимайте необходимые решения. Если требования Let’s Encrypt удовлетворяются, сертификат запрашивается и интегрируется. При следующем вызове URL-адреса SeaTable соединение устанавливается через порт 443 и HTTPS.

Если вы поручите Certbot автоматически изменить конфигурацию веб-сервера для включения запрашиваемого SSL-сертификата, то в случае с nginx это будет выглядеть следующим образом (или аналогично):

server { listen 443 ssl; # managed by Certbot listen [::]:443 ssl; # managed by Certbot server_name seatable.example.com;

ssl_certificate /etc/letsencrypt/live/seatable.example.com/fullchain.pem; # управляется Certbot
ssl_certificate_key /etc/letsencrypt/live/seatable.example.com/privkey.pem; # управляется Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # управляется Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # управляется Certbot

location / {
proxy_pass http://127.0.0.1:880;
}
}

Если вы решили не изменять конфигурацию веб-сервера с помощью Let’s Encrypt, вам придется выполнить эту модификацию вручную. Важно: Не забудьте об обязательной перезагрузке веб-сервера после этого.

Наконец, переход на HTTPS также должен быть учтен в двух конфигурационных файлах SeaTable. В частности, эти два конфигурационных файла находятся в папке /opt/seatable/seatable-data/seatable/conf:

  • ccnet.conf
  • dtable_web_settings.py

В файле ccnet.conf параметр SERVICE_URL должен быть изменен с “http://” на “https://”.

В файле dtable_web_settings.py все URL-адреса должны быть адаптированы. Добавьте букву “s” после “http” в DTABLE_SERVER_URL, DTABLE_SOCKET_URL, DTABLE_WEB_SERVICE_URL и FILE_SERVER_ROOT, чтобы все URL начинались с “https”.

Перезапустите SeaTable сейчас и получайте удовольствие от работы с SeaTable!

TAGS: