CKA

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.

Zur Vorbereitung habe ich den udemy-Kurs Certified Kubernetes Administrator (CKA) with Practice Tests 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.

Adventofcode2021

computer
Ich weiß, ich bin etwas spät dran, aber ich habe nach(!) Weihnachten 2021 mit dem Advent-of-Code-Adventskalender begonnen. Advent-of-Code (https://adventofcode.com/) 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 https://github.com/JanMeckelholt/advent_of_code_2021_golang 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!

computer

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.

Hier - eher für mich selbst - die notwendigen Schritte bis zum golive der Websiete

  1. Raspberrypi einrichten
    • Image auf die SD-Karte flashen (Ich nutze Ubuntu Server 64)
    • optional: WLAN-Credentials in network-config eintragen
    • Über ssh einloggen
      • adduser jan
      • useradd jan sudo
      • /etc/hostname -> homepage-server
      • /etc/hosts -> 127.0.1.1 homepage server
      • reboot
    • In Router feste IP zuweisen
    • In Workstation
      • /etc/host -> feste-IP homepage-server
      • ssh-copy-id -i ~/.ssh/id_rsa.pub jan@homepage-server
  2. Docker, Docker-Compose, git installieren
  3. Cronjob anlegen um IP-Adresse beim Webseiten-Hoster zu aktualisieren
  4. Nginx und Certbot im Container starten. Schritte 2-4 übernimmt das folgende Playbook
---
- name: Reset homepage-server
  hosts: homepage-server
  become: true
  tasks:
    - name: Update and upgrade apt packages
      apt:
      upgrade: yes
      update_cache: yes
      cache_valid_time: 86400 #One day
    - name: Check if reboot required
      stat:
      path: /var/run/reboot-required
      register: reboot_required_file

    - name: Reboot host and wait for it to restart
      reboot:
      msg: "Reboot initiated by Ansible"
      connect_timeout: 5
      reboot_timeout: 600
      pre_reboot_delay: 0
      post_reboot_delay: 30
      test_command: whoami
      when: reboot_required_file.stat.exists == true

    - name: Check if docker Exists
      stat: path=/etc/init.d/docker
      register: docker_exists_file

    - name: install docker
      command: "{{ item }}"
      with_items:
        - curl -fsSL https://get.docker.com -o get-docker.sh
        - sh get-docker.sh
          when: docker_exists_file.stat.exists == false

    - name: Install apache2-utils python3-pip
      apt:
      pkg:
      - apache2-utils
      - git
      - python3-pip

    - name: Install docker-compose with pip3
      pip:
      name: docker-compose

    - name: Add jan to docker 
      user: name=jan
            groups=docker
            append=yes

    - name: copy netcup dns files
      ansible.builtin.copy:
        force: yes
        src: ./filesToCopy/dynamic-dns-netcup-api/
        dest: /home/{{ lookup('env','USER') }}/dynamic-dns-netcup-api
        owner: "{{ ansible_effective_user_id }}"
        group: "{{ ansible_effective_group_id }}"
        mode: '0700'

    - name: estabish cronjob for netcup-dns @ every 10 minutes
      ansible.builtin.cron:
        name: "update janmeckelholt.de"
        minute: "*/10"
        job: "/usr/bin/php /home/{{ lookup('env','USER') }}/dynamic-dns-netcup-api/update.php"
    
    - name: copy nginx-letsencrpyt files
      ansible.builtin.copy:
        force: yes
        src: ./filesToCopy/nginx-certbot/
        dest: /home/{{ lookup('env','USER') }}/
        owner: "{{ ansible_effective_user_id }}"
        group: "{{ ansible_effective_group_id }}"
        mode: '0777'
    
    - name: init-letsencrypt.sh
      ansible.builtin.command: ./init-letsencrypt.sh
      args:
        chdir: /home/{{ lookup('env','USER') }}/

    - name: remove and restart nginx and certbot
      ansible.builtin.shell: "{{ item }}"
      with_items:
        - docker-compose down
        - docker system prune -f
        - docker-compose up -d
      args:
        chdir: /home/{{ lookup('env','USER') }}/