====== Установка 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 панель_управления}}