Hetzner Cloud Server mit nur einem Ansible-Playbook installieren - Cloud Server Serie

Mithilfe eines Ansible-Playbooks, dem Bootstrap-Skript, wird ein "Cloud Server" von Hetzner in einem Rutsch installiert.

Hetzner Cloud Server mit nur einem Ansible-Playbook installieren - Cloud Server Serie
Photo by Marc-Olivier Jodoin / Unsplash
Hetzner Cloud Server mit Ansible-Playbook installieren - 18 Hetzner Cloud Server Installation

Es ist so weit. Ein neuer Hetzner Cloud Server wird eingerichtet. Die DNS-Einstellungen werden vorgenommen. Und alles, was bis jetzt an einzelnen Playbooks erstellt wurde, wird zu einem "Bootstrap"-Playbook für den neuen Server zusammengefasst. Mit nur einem Ansible-Playbook wird der neue Server upgedatet, neu gestartet, die Programme werden installiert, HTTPS-Portal und Portainer werden eingerichtet und der SSH-Port wird angepasst.

Ordnerstruktur für den neuen Server:

~/Computer
    /demo02
        ansible.cfg
        bootstrap.yaml
        docker_https_portal.yaml
        docker_portainer.yaml
        inventory
        putty.desktop

ansible.cfg:

[defaults]
inventory = inventory
private_key_file = ~/ssh/demokey_rsa
remote_user = root

bootstrap.yaml-Playbook:

- hosts: "all"
  tasks:

    - name: "apt update"
      apt:
        update_cache: "yes"

    - name: "apt upgrade"
      apt:
        upgrade: "safe"

    - name: "apt autoclean"
      apt:
        autoclean: "yes"

    - name: "reboot"
      reboot:

    - name: "Docker.io installieren"
      apt:
        name: "docker.io"

    - name: "Pip3 installieren"
      apt:
        name: "python3-pip"
    
    - name: "Docker-Compose installieren"
      pip:
        name: "docker-compose"

    - name: "Create Proxynet"
      docker_network:
        name: "proxynet"
        internal: "yes"

    - name: "Init Portainer"
      docker_container:
        name: "portainer"
        image: "portainer/portainer-ce"
        pull: "yes"
        restart_policy: "unless-stopped"
        restart: "yes"
        networks:
          - name: "proxynet"
            aliases:
              - "portainer"
          - name: "bridge"
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock"
          - "/home/docker/data/portainer/data:/data"

    - name: "Init HTTPS-Portal"
      docker_container:
        name: "https_portal"
        image: "steveltn/https-portal:1.21"
        restart_policy: "unless-stopped"
        restart: "yes"
        networks:
          - name: "bridge"
          - name: "proxynet"
        ports:
          - "80:80"
          - "443:443"
        env:
          STAGE: "production"
          WEBSOCKET: "true"
          DOMAINS: >
            portainer.demo02.halvar.at -> portainer:9000,
        volumes:
          - "/home/docker/data/https_portal/data:/var/lib/https-portal"
          - "/home/docker/data/https_portal/log:/var/log/nginx"

    - name: "SSH-Port ändern"
      lineinfile:
        dest: "/etc/ssh/sshd_config"
        regexp: "Port 22"
        line: "Port 15685"
    
    - name: "SSHD neu starten"
      service:
        name: "sshd"
        state: "restarted"

docker_portainer.yaml-Playbook:

- hosts: "all"
  tasks:

    - name: "Init Portainer"
      docker_container:
        name: "portainer"
        image: "portainer/portainer-ce"
        pull: "yes"
        restart_policy: "unless-stopped"
        restart: "yes"
        networks:
          - name: "proxynet"
            aliases:
              - "portainer"
          - name: "bridge"
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock"
          - "/home/docker/data/portainer/data:/data"

docker_https_portal.yaml-Playbook:

- hosts: "all"
  tasks:

    - name: "Init HTTPS-Portal"
      docker_container:
        name: "https_portal"
        image: "steveltn/https-portal:1.21"
        restart_policy: "unless-stopped"
        restart: "yes"
        networks:
          - name: "bridge"
          - name: "proxynet"
        ports:
          - "80:80"
          - "443:443"
        env:
          STAGE: "production"
          WEBSOCKET: "true"
          DOMAINS: >
            portainer.demo02.halvar.at -> portainer:9000,
        volumes:
          - "/home/docker/data/https_portal/data:/var/lib/https-portal"
          - "/home/docker/data/https_portal/log:/var/log/nginx"

inventory:

# Vor dem Ausführen des Bootstrap-Playbooks
# 78.47.193.129

# Nach dem Ausführen des Bootstrap-Playbooks
demo02.halvar.at:15685

putty.desktop:

[Desktop Entry]
Type=Application
Name=PuTTY-Verbindung
Exec=putty -load "demo02"
Icon=/usr/share/pixmaps/putty.png

Ansible Umgebung für mehrere Computer einrichten - Cloud Server Serie
Es ist an der Zeit, den Computer-Ordner mit Ansible für mehrere Computer vorzubereiten. Updates aller Computer in einem Rutsch sind dann kein Problem mehr.
Nächste Seite