Setting Up This Site

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') }}/