88 lines
3.2 KiB
Plaintext
88 lines
3.2 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "ac87c554",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Środowisko wykorzystywane na zajęciach"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "167416f3",
|
|
"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": "60970c71",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"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.9.1"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|