{ "cells": [ { "cell_type": "markdown", "id": "3ae03d8e", "metadata": {}, "source": [ "# Środowisko wykorzystywane na zajęciach" ] }, { "cell_type": "markdown", "id": "dc65cc30", "metadata": {}, "source": [ "Certificat SSL dla strony: https://letsencrypt.org/\n", "Instrukcja instalacji: https://certbot.eff.org/lets-encrypt/ubuntufocal-other\n", "\n", "Instalacja certyfikatu w Jenkins: https://www.vhinandrich.com/jenkins-standalone-ssl-lets-encrypt\n", "\n", "Ścieżka do certyfikatu, którego ma używać Jenkins może być podana w dwóch miejscach (na Ubuntu 20.04):\n", "`/etc/default/jenkins` lub `/etc/init.d/jenkins`\n", "Ważne, aby w końcu w zmiennej `JENKINS_ARGS` znalazły się następujące parametry:\n", "```\n", "--httpPort=-1\n", "--httpsPort=8080\n", "--httpsKeyStore=/var/lib/jenkins/jenkins.jks\n", "--httpsKeyStorePassword=TUTAJ_HASŁO_PODANE_PRZY_KONWERSJI\"\n", "```\n", "albo:\n", "```\n", "--httpPort=-1\n", "--httpsPort=8080\n", "--httpsCertificate=/var/lib/jenkins/fullchain.pem\n", "--httpsPrivateKey=/var/lib/jenkins/privkey-rsa.pem\n", "```\n", "W zależności od tego, do jakiego formatu przekonwertowaliśmy nasz certyfikat\n", "\n", "\n", "\n", "\n", "Po 3 miesiącach certyfikat wygasa. Jeśli narzędzie certbot zostało poprawnie skonfigurowane,to powinno automatycznie odświeżać certyfikat. Niestety nie jest to certyfikat bezpośrednio używany przez Jenkins (ten wymaga konwersji do formatu `*.pem` albo `*.jks`). Dlatego przed wygaśnięciem certyfikatu musimy ręcznie dokonać konwersji (patrz https://www.vhinandrich.com/jenkins-standalone-ssl-lets-encrypt) albo dodać konwersję do post-hook w /etc/letsencrypt/renewal-hooks/post/ \n", "\n", "Przykładowy skrypt post (przy okazji restartuje działający na porcie 80 serwer nginx strzegący dostępu do MlFlow:\n", "```\n", "cd /home/tzietkiewicz/docker_mlflow_db && docker-compose start\n", "\n", "cd /etc/letsencrypt/live/tzietkiewicz.vm.wmi.amu.edu.pl/ && \\ \n", "openssl pkcs12 -inkey privkey.pem -in fullchain.pem -export -out keys.pkcs12 -password HASLO_CERTYFIKATU && \\\n", "keytool -importkeystore -srckeystore keys.pkcs12 -srcstoretype pkcs12 -destkeystore /var/lib/jenkins/jenkins.jks.new -srcstorepass HASLO_CERTYFIKATU -deststorepass HASLO_CERTYFIKATU && \\\n", "mv /var/lib/jenkins/jenkins.jks.new /var/lib/jenkins/jenkins.jks && \\\n", "service jenkins restart\n", "```\n", "`HASLO_CERTYFIKATU` może być dowolne - tutaj je generujemy, ale to samo musimy podać Jenkinsowi w `/etc/default/jenkins` lub `/etc/init.d/jenkins`" ] }, { "cell_type": "code", "execution_count": null, "id": "71e2cecc", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.4" } }, "nbformat": 4, "nbformat_minor": 5 }