====== Установка Cockpit в 20.04 через Backports ======
===== Постановка задачи =====
Запустить Cockpit подкаталоге, например https://foobar.com/cp/
Система Ubuntu 20.04, веб-сервер Apache.
Сразу оставлю ссылки по проксированию через apache и nginx
* [[https://github.com/cockpit-project/cockpit/wiki/Proxying-Cockpit-over-Apache-with-LetsEncrypt|Proxying Cockpit over Apache with LetsEncrypt]]
* [[https://github.com/cockpit-project/cockpit/wiki/Proxying-Cockpit-over-nginx|Proxying Cockpit over 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, которая позволяет при необходимости подключаться к удаленным хостам.
Описание опций [[https://cockpit-project.org/guide/latest/cockpit.conf.5.html|доступно здесь]].
===== Проксируем через 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
{{:linux:ubuntu:ubuntu_cockpit_login.png?nolink|}}
EOM
{{tag>ubuntu apache cockpit control_panel панель_управления}}