Установка SeaTable на сервер с другими веб-службами

Установите SeaTable Enterprise на собственном сервере за веб-сервером

В статье Установка 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.yml

Инструкции по стандартной установке объясняют структуру и функции файла 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. Через некоторое время деятельность замирает. Последнее сообщение: "Это холостой скрипт (бесконечный цикл) для поддержания работы контейнера". Остановите процесс на этом этапе с помощью комбинации клавиш CTRL + C.

Настройка доступа по протоколу HTTP

Чтобы гарантировать, что обращения к 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

Теперь 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

Процедура настройки доступа 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!

Ральф Диллик-Бренцингер
Ральф Диллик-Бренцингер является основателем и управляющим директором компании SeaTable. Он - стратегический вдохновитель SeaTable и мастер цифр. Он любит печенье своей невесты и хорошую прогулку на велосипеде.