Содержание
Установка Cockpit в 20.04 через Backports
Постановка задачи
Запустить Cockpit подкаталоге, например https://foobar.com/cp/
Система Ubuntu 20.04, веб-сервер Apache.
Сразу оставлю ссылки по проксированию через apache и nginx
В документации Cockpit указано, что нельзя использовать /cockpit/
или /cockpit+
в качестве подкаталога, поскольку они зарезервированы. Поэтому в моём примере будет использоваться /cp/
Установка
Backports репозиторий должен быть включен по-умолчанию
# apt-cache policy | grep http | awk '{print $2" "$3}' | sort -u | grep backport https://mirror.hetzner.com/ubuntu/packages focal-backports/main https://mirror.hetzner.com/ubuntu/packages focal-backports/universe
Если нету, то добавляем в /etc/apt/sources.list
deb http://archive.ubuntu.com/ubuntu focal-backports main restricted universe multiverse
Устанавливаем Cockpit
apt-get update apt-get install -t focal-backports cockpit
Лучше с –no-install-recommends, а то слишком много лишнего.
Файл настроек
Создаём файл /etc/cockpit/cockpit.conf
[WebService] Origins = https://foobar.com http://127.0.0.1:9090 ProtocolHeader = X-Forwarded-Proto AllowUnencrypted = true UrlRoot = /cp/ RequireHost = false LoginTo = false
- RequireHost - если установлено значение false, то не потребуется указывать хост для входа.
- LoginTo - если установлено значение false, то на экране входа не будет выводиться опция Connect to, которая позволяет при необходимости подключаться к удаленным хостам.
Описание опций доступно здесь.
Проксируем через Apache
Важный момент. Не забудьте активировать proxy_wstunnel. Не везде об этом пишут.
a2enmod proxy proxy_wstunnel proxy_http ssl rewrite
Настройки для Apache
ProxyPreserveHost On ProxyRequests Off SSLProxyVerify None SSLProxyCheckPeerCN Off SSLProxyCheckPeerName Off SSLProxyCheckPeerExpire Off # allow for upgrading to websockets RewriteEngine On RewriteCond %{HTTP:Upgrade} =websocket [NC] RewriteRule /cp/(.*) ws://127.0.0.1:9090/cp/$1 [P,L] RewriteCond %{HTTP:Upgrade} !=websocket [NC] RewriteRule /cp/(.*) http://127.0.0.1:9090/cp/$1 [P,L] # Proxy to your local cockpit instance ProxyPass /cp/ http://127.0.0.1:9090/cp/ ProxyPassReverse /cp/ http://127.0.0.1:9090/cp/
Если вы хотите использовать TLS за обратным прокси, то нужно заменить http на https, а ws на wss. Кроме того, необходимо удалить директивы SSLProxy.
Также необходимо скопировать сертификат и ключ в /etc/cockpit/ws-certs.d
.
cp /etc/letsencrypt/live/foobar.com/fullchain.pem /etc/cockpit/ws-certs.d/foobar.com.crt cp /etc/letsencrypt/live/foobar.com/privkey.pem /etc/cockpit/ws-certs.d/foobar.com.key chown cockpit-ws:cockpit-ws /etc/cockpit/ws-certs.d/foobar.com.crt /etc/cockpit/ws-certs.d/foobar.com.key
Вроде бы есть специальная команда remotectl для проверки какой сертификат использует Cockpit, но это же Ubuntu :) У меня не сработало.
Вывод должен быть такой
# remotectl certificate certificate: /etc/cockpit/ws-certs.d/foobar.crt
systemctl restart cockpit
При обновлении сертификата LE нам также необходимо обновить их в Cockpit. Для этого добавим hook в /etc/letsencrypt/renewal-hooks/post/restart-cockpit.sh
#!/usr/bin/env bash echo "SSL certificate update" cp /etc/letsencrypt/live/foobar.com/fullchain.pem /etc/cockpit/ws-certs.d/foobar.com.crt cp /etc/letsencrypt/live/foobar.com/privkey.pem /etc/cockpit/ws-certs.d/foobar.com.key chown cockpit-ws:cockpit-ws /etc/cockpit/ws-certs.d/foobar.com.crt /etc/cockpit/ws-certs.d/foobar.com.key echo "Restarting Cockpit" systemctl restart cockpit
EOM
Обсуждение