<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>JanMeckelholt.de</title>
        <link>https://janmeckelholt.de/</link>
        <description>JanMeckelholt.de</description>
        <generator>Hugo -- gohugo.io</generator><language>de</language><lastBuildDate>Sat, 10 Jun 2023 11:00:36 &#43;0200</lastBuildDate>
            <atom:link href="https://janmeckelholt.de/index.xml" rel="self" type="application/rss+xml" />
        <item>
    <title>CKA</title>
    <link>https://janmeckelholt.de/cka/</link>
    <pubDate>Sat, 10 Jun 2023 11:00:36 &#43;0200</pubDate>
    <author>Autor</author>
    <guid>https://janmeckelholt.de/cka/</guid>
    <description><![CDATA[<p>Ich habe den Brückentag dazu genutzt, die Kubernetes-Zertifizierung anzugehen.
Im beruflichen Kontext habe ich viel mit einem Kubernetes Cluster in der Azure Cloud zu tun. Daher hat sich eine Fortbildung in dem Bereich angeboten.</p>
<p>Zur Vorbereitung habe ich den udemy-Kurs <a href="https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/" target="_blank" rel="noopener noreffer">Certified Kubernetes Administrator (CKA) with Practice Tests</a> genutzt. Großes Lob an Mumshad Mannambeth und das KodeKloud-Team. Der Kurs ist gut strukturiert und bietet vor allen Dingen jede Menge Praxis-Übungen. Das ist essenziell, da die Zertifizierungs-Prüfung ausschließlich aus Praxis-Tests besteht. Theoretisches Wissen wird also nur implizit abgefragt.</p>]]></description>
</item><item>
    <title>Adventofcode2021</title>
    <link>https://janmeckelholt.de/adventofcode2021/</link>
    <pubDate>Mon, 17 Jan 2022 10:45:09 &#43;0100</pubDate>
    <author>Autor</author>
    <guid>https://janmeckelholt.de/adventofcode2021/</guid>
    <description><![CDATA[<p><figure class="about-left">
</figure>

Ich weiß, ich bin etwas spät dran, aber ich habe nach(!) Weihnachten 2021 mit dem Advent-of-Code-Adventskalender begonnen.
Advent-of-Code (<a href="https://adventofcode.com/" target="_blank" rel="noopener noreffer">https://adventofcode.com/</a>) schaltet vom 01.12 bis zum 25.12 jeden Tag eine Programmieraufgabe frei.
Die Aufgabe kann mit der Progammiersprache deiner Wahl gelöst werden. Entscheidend ist nur die Lösung (in der Regel eine Zahl), nicht der Lösungsweg / das Programm.
Die Tagesaufgabe ist jeweils in zwei Teile unterteilt. Die Lösung von Teil eins schaltet den zweiten Aufgabenteil frei.
Da ich zum Januar meine eine komplett neue Arbeitsstelle als Go-Entwickler begonnen habe, habe ich die Chance genutzt um meine Go-Kenntnisse ein bisschen herauszufordern.
Meinen Fortschritt habe ich hier <a href="https://github.com/JanMeckelholt/advent_of_code_2021_golang" target="_blank" rel="noopener noreffer">https://github.com/JanMeckelholt/advent_of_code_2021_golang</a> dokumentiert. Sicherlich ist das nicht immer die eleganteste Lösung - aber immerhin spuckt sie das richtige Ergebnis aus. ;-)
Über Anmerkungen oder Verbesserungsvorschläge würde ich mich sehr freuen.
Happy Coding!</p>]]></description>
</item><item>
    <title>Setting Up This Site</title>
    <link>https://janmeckelholt.de/setting-up-this-site/</link>
    <pubDate>Thu, 10 Jun 2021 11:39:33 &#43;0200</pubDate>
    <author>Autor</author>
    <guid>https://janmeckelholt.de/setting-up-this-site/</guid>
    <description><![CDATA[<figure class="about-left">
</figure>

<p>Meine Webseite kommt zu dir von meinem RaspberryPi.
Auf diesem läuft Nginx als Reverse-Proxy.
Die Webseite habe ich mit Hugo erstellt.
Das https-Zertifikat kommt von Letsencrypt über einen certbot-Container.</p>
<p>Hier - eher für mich selbst - die notwendigen Schritte bis zum golive der Websiete</p>
<ol>
<li>Raspberrypi einrichten
<ul>
<li>Image auf die SD-Karte flashen (Ich nutze Ubuntu Server 64)</li>
<li>optional: WLAN-Credentials in network-config eintragen</li>
<li>Über ssh einloggen
<ul>
<li>adduser jan</li>
<li>useradd jan sudo</li>
<li>/etc/hostname -&gt; homepage-server</li>
<li>/etc/hosts -&gt; 127.0.1.1 homepage server</li>
<li>reboot</li>
</ul>
</li>
<li>In Router feste IP zuweisen</li>
<li>In Workstation
<ul>
<li>/etc/host -&gt; feste-IP homepage-server</li>
<li>ssh-copy-id -i ~/.ssh/id_rsa.pub jan@homepage-server</li>
</ul>
</li>
</ul>
</li>
<li>Docker, Docker-Compose, git installieren</li>
<li>Cronjob anlegen um IP-Adresse beim Webseiten-Hoster zu aktualisieren</li>
<li>Nginx und Certbot im Container starten.
Schritte 2-4 übernimmt das folgende Playbook</li>
</ol>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nn">---</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Reset homepage-server</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">hosts</span><span class="p">:</span><span class="w"> </span><span class="l">homepage-server</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">become</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">tasks</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Update and upgrade apt packages</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">apt</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">upgrade</span><span class="p">:</span><span class="w"> </span><span class="kc">yes</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">update_cache</span><span class="p">:</span><span class="w"> </span><span class="kc">yes</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">cache_valid_time</span><span class="p">:</span><span class="w"> </span><span class="m">86400</span><span class="w"> </span><span class="c">#One day</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Check if reboot required</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">stat</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">path</span><span class="p">:</span><span class="w"> </span><span class="l">/var/run/reboot-required</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">register</span><span class="p">:</span><span class="w"> </span><span class="l">reboot_required_file</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Reboot host and wait for it to restart</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">reboot</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">msg</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;Reboot initiated by Ansible&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">connect_timeout</span><span class="p">:</span><span class="w"> </span><span class="m">5</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">reboot_timeout</span><span class="p">:</span><span class="w"> </span><span class="m">600</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">pre_reboot_delay</span><span class="p">:</span><span class="w"> </span><span class="m">0</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">post_reboot_delay</span><span class="p">:</span><span class="w"> </span><span class="m">30</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">test_command</span><span class="p">:</span><span class="w"> </span><span class="l">whoami</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">when</span><span class="p">:</span><span class="w"> </span><span class="l">reboot_required_file.stat.exists == true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Check if docker Exists</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">stat</span><span class="p">:</span><span class="w"> </span><span class="l">path=/etc/init.d/docker</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">register</span><span class="p">:</span><span class="w"> </span><span class="l">docker_exists_file</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">install docker</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">command</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;{{ item }}&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">with_items</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span>- <span class="l">curl -fsSL https://get.docker.com -o get-docker.sh</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span>- <span class="l">sh get-docker.sh</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">when</span><span class="p">:</span><span class="w"> </span><span class="l">docker_exists_file.stat.exists == false</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Install apache2-utils python3-pip</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">apt</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">pkg</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">apache2-utils</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">git</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">python3-pip</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Install docker-compose with pip3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">pip</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">docker-compose</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Add jan to docker </span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="l">name=jan</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="l">groups=docker</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="l">append=yes</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">copy netcup dns files</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">ansible.builtin.copy</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">force</span><span class="p">:</span><span class="w"> </span><span class="kc">yes</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">src</span><span class="p">:</span><span class="w"> </span><span class="l">./filesToCopy/dynamic-dns-netcup-api/</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">dest</span><span class="p">:</span><span class="w"> </span><span class="l">/home/{{ lookup(&#39;env&#39;,&#39;USER&#39;) }}/dynamic-dns-netcup-api</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">owner</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;{{ ansible_effective_user_id }}&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">group</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;{{ ansible_effective_group_id }}&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">mode</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;0700&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">estabish cronjob for netcup-dns @ every 10 minutes</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">ansible.builtin.cron</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;update janmeckelholt.de&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">minute</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;*/10&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">job</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;/usr/bin/php /home/{{ lookup(&#39;env&#39;,&#39;USER&#39;) }}/dynamic-dns-netcup-api/update.php&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">copy nginx-letsencrpyt files</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">ansible.builtin.copy</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">force</span><span class="p">:</span><span class="w"> </span><span class="kc">yes</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">src</span><span class="p">:</span><span class="w"> </span><span class="l">./filesToCopy/nginx-certbot/</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">dest</span><span class="p">:</span><span class="w"> </span><span class="l">/home/{{ lookup(&#39;env&#39;,&#39;USER&#39;) }}/</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">owner</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;{{ ansible_effective_user_id }}&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">group</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;{{ ansible_effective_group_id }}&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">mode</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;0777&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">init-letsencrypt.sh</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">ansible.builtin.command</span><span class="p">:</span><span class="w"> </span><span class="l">./init-letsencrypt.sh</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">args</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">chdir</span><span class="p">:</span><span class="w"> </span><span class="l">/home/{{ lookup(&#39;env&#39;,&#39;USER&#39;) }}/</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">remove and restart nginx and certbot</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">ansible.builtin.shell</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;{{ item }}&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">with_items</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span>- <span class="l">docker-compose down</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span>- <span class="l">docker system prune -f</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span>- <span class="l">docker-compose up -d</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">args</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">chdir</span><span class="p">:</span><span class="w"> </span><span class="l">/home/{{ lookup(&#39;env&#39;,&#39;USER&#39;) }}/</span><span class="w">
</span></span></span></code></pre></div>]]></description>
</item><item>
    <title>Nothing There Yet</title>
    <link>https://janmeckelholt.de/nothing-there-yet/</link>
    <pubDate>Wed, 09 Jun 2021 13:11:05 &#43;0000</pubDate>
    <author>Autor</author>
    <guid>https://janmeckelholt.de/nothing-there-yet/</guid>
    <description><![CDATA[]]></description>
</item></channel>
</rss>
