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.
Dieser Artikel ist Teil einer ganzen Serie über die Installation eines Cloud-Servers mit Ansible, Docker und Portainer.
- Start der Cloud Server Serie - Installation eines Cloud Servers
- Registrierung bei Hetzner
- SSH-Schlüssel erstellen
- Server erstellen - in der Hetzner Cloud-Console
- Mit PuTTY am Server anmelden
- Mehr Details zu PuTTY
- PuTTY Kommandozeilenprogramm Starter-Datei
- Root-Passwort ändern
- Ansible installieren und vorbereiten
- Mit Ansible das Betriebssystem updaten
- SSH-Port mit Ansible ändern
- Docker und Docker-Compose mit Ansible installieren
- DNS-Einträge für den Server
- Internes Docker-Netzwerk mit Ansible erstellen
- Docker HTTPS-Portal mit Ansible installieren
- Docker Portainer mit Ansible installieren
- Baserow - No-Code Datenbank - Docker-Compose mit Portainer installieren
- Ghost - Blog und CMS-System - mit Ansible und eingebettetem Docker-Compose installieren
- WordPress mit Ansible und externem Docker-Compose-File installieren
- Hetzner Cloud Server mit nur einem Ansible-Playbook installieren
- Ansible Umgebung für mehrere Computer einrichten
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
Siehe: Preise und Leistungen