RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

Инструменты пользователя

Инструменты сайта


linux:ubuntu:cockpit

Установка 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

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
 
linux/ubuntu/cockpit.txt · Последнее изменение: 2022/07/10 18:01 — dx