{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Środowisko wykorzystywane na zajęciach"
   ]
  },
  {
   "cell_type": "markdown",
   "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,
   "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.6.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}