Das Ziel dieser Anleitung ist hoch gestellt. Das hier ist nicht unbedingt etwas für totale Anfänger. Aber trotzdem versuche ich dieses Thema so anfängerfreundlich wie möglich aufzubereiten. Es geht darum, sich bei dem Internetprovider Hetzner zu registrieren, einen virtuellen Server zu erstellen, diesen mit SSH vorzubereiten, mit Ansible die Programme zu installieren und mit Docker und Portainer beliebige (Server-)Programme laufen zu lassen. Gleichzeitig sollten keine Sicherheitslücken entstehen, die es Hackern ermöglichen könnten in unseren Computer einzudringen.
Dieses Whitepaper wird mit Videos begleitet, die ich zu Youtube hochgeladen habe.
In diesem Whitepaper stelle ich viele kleine Skripte (so genannte Playbooks) vor, mit denen einzelne Aufgaben erfüllt werden. Später spricht nichts dagegen, alle diese kleinen Playbooks zu einem oder zwei großen Playbooks zusammenzufassen. Wenn wir fertig sind, kann mit einem oder zwei Skripten der komplette Server installiert und konfiguriert werden.
Inhalt
Idealerweise registrierst du dich bei Hetzner über den hier gezeigten Link und sicherst dir dafür 20 Euro Guthaben für die Hetzner Cloud.
Klicke auf diesen Link und sichere dir den 20 Euro Gutschein für Hetzner Cloud Neukunden.
https://hetzner.cloud/?ref=tma3oMnpByWp
Du bekommst als Hetzner Cloud Neukunde den 20 Euro Gutschein und ich bekomme später vielleicht auch ein paar Euro dafür. Vielen Dank :-)
Und wenn du das nicht tun möchtest, dann gibt es noch die übliche Vorgehensweise: Suche auf der Hetzner-Website - zum Beispiel in der Cloud Server Übersichtsseite nach einer "Registrieren"-Schaltfläche. Falls du zur Login-Seite umgeleitet wirst, kannst du dort auf "Jetzt registrieren" klicken.
Gehe einfach die Schritte durch, gib deine Adresse ein und hinterlege eine Kreditkarte für die Abrechnung.
Nach der Registrierung findest du dich eventuell schon in der Cloud-Console wieder. Die Hetzner Cloud-Console sieht in etwa so aus:
Falls du nicht angemeldet bist, gehe auf die Hetzner-Homepage. Rechts oben findest du das Login-Menü. Dort klickst du auf den Menüeintrag "Cloud" und meldest dich mit deinen Zugangsdaten an.
Hetzner bietet die Möglichkeit, Server in Projekten zusammenzufassen. Ein Projekt wurde bereits erstellt. Klickt man dort auf den dunklen Bereich, öffnet sich die Serverübersicht. Ich erstelle hier ein neues Projekt mit dem Namen Demo. Du brauchst das nicht machen. Öffne einfach das vorhandene Projekt.
SSH steht für Secure Shell und ist eine der beliebtesten Möglichkeiten, sich mit Linux-Servern zu verbinden und dort Befehle einzugeben.
Bevor wir einen neuen Server konfigurieren, sollten wir einen SSH-Schlüssel erstellen, mit dem wir uns später beim Server authentifizieren. Das kann man auch mit Benutzername und Passwort machen, aber das wird auf Dauer ziemlich lästig. Mit einem SSH-Schlüssel kann man sich ohne Passworteingabe mit dem Server verbinden.
Unter Windows und Linux verwende ich dafür das Programmpaket PuTTY, mit dem ich mich später auch zum Server verbinde. Installiert man PuTTY per MSI (Windows Installer), dann bekommt man nicht nur PuTTY, sondern auch das Programm Puttygen mit zur Hand, mit dem man diese SSH-Schlüssel erstellen kann. Auch unter Linux kann man puttygen.exe verwenden, in dem man es mit Wine startet.
Bevor ich erkläre, wie man dieses Programm verwendet, möchte ich darauf hinweisen, dass die damit erstellten Schlüssel wie Passwörter sind. Schütze deine Schlüssel wie deine Passwörter.
Theorie (etwas vereinfacht): Es werden zwei Strings (Texte, Dateien) erstellt. Einer davon ist der "Private Schlüssel" und einer davon der "Öffentliche Schlüssel". Der "Öffentliche Schlüssel" wird auf deinem Server hinterlegt. Mit dem "Privaten Schlüssel" verbindest du dich zum Server. Der Server prüft dann, ob er den "Öffentlichen Schlüssel" kennt. Und wenn beide Schlüssel zusammenpassen, dann lässt dich der Server hinein.
Klickt man dann auf die Generate-Schaltfläche, wird man aufgefordert, die Maus über dem großen grauen Feld zu bewegen. Diese Mausbewegungen sind für die Zufallszahlen zuständig, die für die Erstellung benötigt werden.
In das Feld Key comment solltest du etwas eingeben, was deinen erstellten Schlüssel kennzeichnet, damit du ihn später wiedererkennst. Ich schreibe hier einfach mal "demokey" rein.
Aufgepasst. Wir speichern jetzt drei Dateien ab. Einmal den "Public Key", einmal den "Private Key" als PPK-Datei und einmal den "Private Key" im OpenSSH-Format.
Klicke auf die Save public key-Schaltfläche. Es gibt noch eine Warnung, dass kein Passwort hinterlegt wurde. Aber das ist OK so. Ich gebe hier demokey_rsa.pub
als Name ein. Dir sollte klar sein, dass du einen besseren Dateinamen verwenden solltest. :-)
Klicke auf die Save private key-Schaltfläche. Und wieder gibt es eine Warnung, die wir übergehen können. Ich gebe hier demokey_rsa.ppk
ein.
Oben, im Conversions-Menü gibt es den Menüeintrag Export OpenSSH-Key auf den ich klicke. Nach einer Warnung, die ich wieder übergehe, gebe ich als Dateiname demokey_rsa
(ohne Dateiendung) ein. Es gibt unter bestimmten Umständen Probleme, wenn diese Datei mit einer Dateiendung versehen wird.
Jetzt solltest du drei Dateien haben:
demokey_rsa
(wird von dem Kommandozeilenprogramm SSH verwendet)demokey_rsa.ppk
(wird von PuTTY verwendet)demokey_rsa.pub
(wird auf dem Server hinterlegt)Es fehlt nur noch der "Öffentliche Schlüssel", den wir beim Installieren des Servers an Hetzner übergeben können. Diesen sieht man im Feld mit der Beschreibung Public key for pasting into OpenSSH authorized_keys file. Kopiere den String, erstelle eine neue Datei (demokey_rsa_public.txt
), öffne sie und füge dort den kopierten Text ein. Es handelt sich hier um eine einzelne lange Textzeile die mit "ssh-rsa beginnt und mit deinem Kommentar aus dem "Key comment"-Feld endet.
Jetzt sind wir bereit, um den Server bei Hetzner zu erstellen.
Falls du nicht angemeldet bist, melde dich an und öffne die Hetzner Cloud Console. Wähle dort dein Projekt aus. Dann befindest du dich wieder in dieser Seite:
Ein Klick auf die Server Hinzufügen-Schaltfläche bringt dich in das Server anlegen-Fenster.
An diesem Standort wird der virtuelle Server erstellt.
Wenn du meinem Beispiel folgen möchtest, dann musst du hier Ubuntu auswählen.
Es gibt einen Hauptunterschied zwischen den Typen "Standard" und "Dedicated". Dedicated kostet mehr, dafür werden die Ressourcen fix für dich reserviert. Standard kostet weniger, dafür teilst du dir die Ressourcen mit mehr Kunden. Ich bleibe bei Standard.
Hier kannst du dir auswählen, wie viele virtuelle CPU-Kerne, wie viel RAM du haben möchtest und wie viel Festplattenspeicher du brauchst. Wähle am Anfang lieber kleine Festplattengrößen. Größer werden kannst du immer noch. Kleiner werden ist schwierig.
Je weniger virtuelle CPU-Kerne dein Server hat, desto weniger kann dieser gleichzeitig erledigen. Deshalb wähle ich normalerweise einen Typ mit mindestens zwei oder mehr VCPUS aus.
Um dir im Video zeigen zu können, wie man einen Server konfigurieren kann, nehme ich nicht den langsamsten Server. In diesem Fall wähle ich den CX21 aus.
Das brauchen wir erst einmal nicht. Damit könntest du dir ein Netzlaufwerk erstellen, auf das mehrere Server gleichzeitig zugreifen können.
Hier kannst du auswählen, welche Netzwerke dir zur Verfügung stehen. Lasse die Einstellung auf Öffentliche IPv4 und Öffentliche IPv6. Damit bekommt dein Server automatisch je eine IPv4- und eine IPv6-Adresse zugewiesen.
Wie der Name schon sagt, könntest du hier einstellen, auf welche Programme/Ports zugegriffen werden kann. Hier musst du nichts machen.
Du könntest hier eine eigene Konfiguration für den Initialisierungs-Prozess des Servers einstellen.
Das ist ein wichtiger Punkt. Du bist selbst für deine Datensicherung zuständig. Wenn du zumindest ein Notfall-Backup haben möchtest, mit dem du deinen kompletten Server sieben Tage lang wieder herstellen kannst, dann solltest du hier den Punkt Backup aktivieren. Dadurch wird der Server um 20% teurer - aber das ist es in den meisten Fällen wert.
Ich habe bei den meisten, von mir verwalteten Server, das Backup aktiviert und kopiere die Daten zusätzlich zu einem anderen Server. Falls ich einfach nur ein paar Dateien wiederherstellen möchte, kann ich die vom Backup-Server nehmen. Sollte es ein größeres Problem geben, dann kann ich den Server mit Hilfe der Server-Snapshots von Hetzner zumindest auf den Stand vom Vortag zurücksetzen. Das dauert nur wenige Minuten und alles läuft wieder.
Wähle diesen Punkt aus, wenn du deinen Server einer Platzierungsgruppe zuordnen möchtest.
Dieser Punkt wird nur angezeigt, wenn vorher Platzierungsgruppen ausgewählt wurden.
Damit kann man mehrere virtuelle Server zum Beispiel auf verschiedene Hardware-Server (Hosts) aufteilen. Zwei virtuelle Server einer Platzierungsgruppe werden nicht auf dem selben Computer gehostet. Damit kann sichergestellt werden, dass ein Problem mit einem Computer nicht gleichzeitig mehrere deiner virtuellen Server lahm legt.
Hier kannst du deinen öffentlichen OpenSSH-Schlüssel eingeben. Dieser wird beim Erstellen des Servers in die authenticated_keys-Datei geschrieben. Damit brauchst du kein Passwort um dich am Server anzumelden.
Das ist der lokale Servername. Dieser Name identifiziert deinen Server bei der Fernwartung. Halte ihn kurz, da dieser Name im Terminal beim Fernwarten in jeder Zeile steht. Zum Beispiel web01
, mail01
, backup01
, ...
Hat man alle Angaben gemacht, muss man nur noch auf die Kostenpflichtig Erstellen-Schaltfläche klicken. Wenige Minuten danach steht der Server zur Verfügung und kann verwendet werden.
Klicke auf diesen Link und sichere dir den 20 Euro Gutschein für Hetzner Cloud Neukunden.
https://hetzner.cloud/?ref=tma3oMnpByWp
Du bekommst als Hetzner Cloud Neukunde den 20 Euro Gutschein und ich bekomme später vielleicht auch ein paar Euro dafür. Vielen Dank :-)
Wir benötigen dafür die öffentliche IP-Adresse des Servers. Diese kannst du von der Hetzner Cloud Console kopieren und in Putty einfügen.
Den SSH-Key für den Zugang zum Server stellt man in der Kategorie "Connection / SSH / Auth" ein.
Den Benutzernamen für den Zugang stellt man unter "Connection / Data" ein.
Um diese Einstellungen zu speichern kehrt man zur Kategorie "Session" zurück, gibt dort in das Saved Sessions-Feld den Namen der Verbindung ein und klickt auf die Save-Schaltfläche.
Mit einem Doppelklick auf die gespeicherte Session öffnet man die Verbindung zum Server. Beim ersten Mal wird eine Warnung angezeigt, in der man gefragt wird, ob man sich wirklich zum Server verbinden möchte. Hat man diese bestätigt, wird man kein weiteres mal danach gefragt.
Was man jetzt sieht ist ein Terminal mir direkter Verbindung zum Server. Mit dem Befehl exit
verlässt man das Terminal wieder.
PuTTY ist ein kleiner Alleskönner was Terminal-Verbindungen betrifft. Man kann damit auch serielle Verbindungen oder Telnet-Verbindungen aufbauen. Man kann PuTTY detailliert einstellen. Aber nur ein paar Punkte sind wichtig für uns und die möchte ich hier aufzeigen.
Falls der Nummernblock auf der Tastatur Probleme macht und dort eingegebene Zahlen nicht auf dem Terminal erscheinen, kann man versuchen, die Einstellung Disable application keypad mode zu setzen.
Wenn dich die anfängliche Fenstergröße stört, dann kannst du sie mit den Feldern Columns und Rows anpassen.
Falls dir die Schrift nicht passt die im Terminal-Fenster verwendet wird, kannst du sie im Feld Font used for ordinary text einstellen.
Der erste Befehl der sofort nach dem Anmelden an den Computer übermittelt wird, kann im Feld Remote command eingegeben werden. Ich verwende dieses Feld oft für das Wechseln des Benutzers mit sudo su -
. Damit werde ich sofort nach dem Anmelden zu root
.
PuTTY lässt sich auch über die Kommandozeile aufrufen. Der Befehl dafür lautet putty
. Die Hilfe zu den Kommandozeilenparametern von PuTTY findest du unter https://the.earth.li/~sgtatham/putty/latest/htmldoc/Chapter3.html#using-cmdline
Möchte man PuTTY automatisch mit einer Verbindung zum Server starten, ohne vorher das PuTTY-Fenster öffnen zu müssen, kann man den -load
Parameter angeben. Das sieht zum Beispiel so aus:
putty -load "demo01"
Unter Linux könnte man das nutzen und eine ".desktop"-Datei für diesen Befehl erstellen.
Der Inhalt dieser ".desktop"-Datei könnte zum Beispiel so aussehen:
[Desktop Entry]
Type=Application
Name=PuTTY-Verbindung
Exec=putty -load "demo01"
Icon=/usr/share/pixmaps/putty.png
Die ".desktop"-Datei muss ausführbar gemacht werden, damit es funktioniert.
Noch ist kein Passwort für den root
-Benutzer hinterlegt. Wir melden uns automatisiert mit SSH-Schlüssel an. Es könnten aber auch Fälle auftauchen, unter denen wir nicht die Möglichkeit haben, uns mit SSH-Schlüssel am Server anzumelden. Und für diesen Zweck hinterlege ich auch ein Passwort für den root
-Benutzer.
Das root
-Passwort kann geändert werden, wenn man als root
am Server angemeldet ist. Der Befehl dazu lautet passwd
. Danach gibt man das neue Passwort ein. Nicht verwirren lassen. Das Passwort wird während der Eingabe nicht angezeigt.
Ansible ist interessant, wenn man mehrere Computer automatisiert installieren und konfigurieren möchte. Das ist zum Beispiel der Fall, wenn man die Wartung mehrerer Internetserver für Kunden, Kollegen oder sich selbst übernimmt.
Die Dokumentation zu Ansible findest du unter: https://docs.ansible.com/ansible/latest/index.html
Die Installationsanleitung ist hier zu finden: https://docs.ansible.com/ansible/latest/installation_guide/index.html
So installiere ich Ansible unter Linux Mint 21:
sudo su -
apt install software-properties-common
add-apt-repository --yes ppa:ansible/ansible
apt update
apt install ansible
Ordnerstruktur:
~/Computer
/demo01
ansible.cfg
inventory
inventory
-DateiIn der inventory
-Datei steht die IP-Adresse oder die Domain des Computers der mit Ansible ferngewartet werden soll. In dieser Datei können mehrere Computer hinterlegt werden, aber wir befinden uns im Ordner demo01. Dieser Ordner ist nur für diesen einen Computer vorgesehen.
135.181.44.197
ansible.cfg
-DateiAnsible sucht zuerst im aktuellen Ordner nach den Einstellungen. Das nutzen wir aus, um im Ordner demo01 die Einstellungen zu hinterlegen, die für die Verbindung zum demo01-Computer notwendig sind. Man könnte bei jedem Aufruf von Ansible diese Einstellungen an den Befehl übergeben. Wenn man die Einstellungen in der Konfigurationsdatei hinterlegt hat man weniger Schreibarbeit.
Im [defaults]
-Abschnitt befinden sich die Einstellungen die jetzt für uns wichtig sind. Das ist erst mal der Pfad zur inventory
-Datei.
Mit private_key_file
gibt man an, welcher private Schlüssel für SSH verwendet werden soll.
Mit remote_user
gibt man an, welcher Benutzer zum Anmelden am Computer verwendet werden soll.
[defaults]
inventory = inventory
private_key_file = ~/ssh/demokey_rsa
remote_user = root
ansible -m ping all
Verbindet man sich zum Server und würde das manuell machen, wären das nur ein paar Befehle. Je mehr Computer du hast, desto mehr Zeit musst du aber dafür einplanen.
sudo su -
apt update
apt upgrade
apt autoclean
Einmal ein "Playbook" für Ansible erstellt, ist es nur mehr ein Befehl um eine ganze Flotte von Computern auf den aktuellen Stand zu bringen.
Man braucht dafür das "APT"-Modul.
Die dafür zu erstellende Playbook-Datei nenne ich apt_upgrade.yaml. Das Playbook kann all diese Aufgaben in einem Task erledigen, oder die Aufgaben in drei Tasks aufteilen.
Zusammengefasst würde die apt_upgrade.yaml-Datei so aussehen:
- hosts: "all"
tasks:
- name: "upgrade"
apt:
update_cache: "yes"
upgrade: "safe"
autoclean: "yes"
Die Aufgaben in einzelne Tasks aufgeteilt, würde die apt_upgrade.yaml-Datei so aussehen:
- hosts: "all"
tasks:
- name: "apt update"
apt:
update_cache: "yes"
- name: "apt upgrade"
apt:
upgrade: "safe"
- name: "apt autoclean"
apt:
autoclean: "yes"
Ich persönlich teile die Aufgaben lieber in mehrere Teile auf. Das hat den Zweck, dass ich besser nachverfolgen kann, was Ansible macht und ein Gefühl dafür bekomme, welcher Task wie lange braucht. Das soll dich aber nicht daran hindern, deine Aufgaben in einen einzelnen Task zusammenzufassen.
Das Playbook kann mit diesem Befehl ausgeführt werden:
ansible-playbook apt_upgrade.yaml
Wie man sieht, muss man hier nicht all
angeben, da im Playbook selbst steht, für welche Computer das Playbook gilt.
SSH läuft standardmäßig auf Port 22. Das ist ein weit sichtbares, großes Tor in das jeder einzudringen versucht. Deshalb bekommt jeder Server einen zufällig gewählten Port für den SSH-Dienst zugewiesen. Allein um den SSH-Port herauszufinden, muss also ein Portscan über 10-tausende Ports durchgeführt werden.
Der Port des SSH-Dienstes (SSHD), steht in der Datei /etc/ssh/sshd_config. Es handelt sich um die Port
-Einstellung. Ist diese nicht vorhanden oder mit #
auskommentiert, wird der Standard-Port 22 verwendet.
Um eine bestimmte Zeile in einer Textdatei zu ändern, kann man das lineinfile-Modul verwenden. Damit wird in der Datei nach der Zeile mit der Port
-Einstellung gesucht. Wird sie gefunden, wird die Zeile ersetzt. Wird die Port
-Einstellung nicht gefunden, wird an das Ende der Datei eine Zeile mit der neuen Port
-Einstellung hinzugefügt.
Um den SSHD-Dienst, nach dem Ändern der Einstellung, neu zu starten, kann man das service-Modul verwenden.
Playbook: change_ssh_port.yaml:
- hosts: "all"
tasks:
- name: "SSH-Port ändern"
lineinfile:
dest: "/etc/ssh/sshd_config"
regexp: "Port 22"
line: "Port 15684"
- name: "SSHD neu starten"
service:
name: "sshd"
state: "restarted"
Das Playbook kann mit diesem Befehl ausgeführt werden:
ansible-playbook change_ssh_port.yaml
Danach muss der neue Port in die inventory-Datei eingetragen werden.
135.181.44.197:15684
In der Webseite Install Docker Engine on Ubuntu wird erklärt wie man die neueste Version von Docker installiert. Aber ich möchte nicht die neueste Version.
Obwohl ich begrüße, dass in das neue Docker der Befehl compose
eingebaut wurde, möchte ich auf einem Webserver, der vor allem jahrelang stabil laufen soll, nicht die neueste Version von Docker, sondern die für Ubuntu momentan stabilste Version verwenden. Und die lässt sich am Einfachsten mit Apt installieren.
Docker-Compose ist in der Paketverwaltung von Ubuntu allerdings dann doch etwas zu alt. Deshalb verwende ich zum Installieren von Docker-Compose die Python-Paketverwaltung. Ich gehe aber auch davon aus, dass in den nächsten Jahren Docker-Compose, als eigenständiges Programm, an Bedeutung verlieren wird.
Playbook: install_docker.yaml:
- hosts: "all"
tasks:
- name: "Docker.io installieren"
apt:
name: "docker.io"
- name: "Pip3 installieren"
apt:
name: "python3-pip"
- name: "Docker-Compose installieren"
pip:
name: "docker-compose"
Das Playbook kann mit diesem Befehl ausgeführt werden:
ansible-playbook install_docker.yaml
DNS steht für Domain Name System und ist das Adressverzeichnis des Internets. Wenn man nicht mit der IP-Adresse auf eine Website zugreifen möchte, dann muss man in das DNS eine Adresse eintragen. Solche Adressen sind das was wir allgemein als Domain (Domäne) bezeichnen.
Diese Adresseinträge muss man kaufen. Fast alle Internetprovider bieten diesen Dienst an. Bei Hetzner kann man in der KonsoleH Adressregistrierungen durchführen.
Es gibt mehrere Vorgehensweisen wie man die Adresse(n) eines Servers eintragen kann. Eine gängige Art ist einen A-Eintrag mit der IPv4-Adresse des Servers und einen AAAA-Eintrag mit der IPv6-Adresse des Servers zu erstellen. Danach kann man mit Hilfe von CNAME-Einträgen neue Domains erstellen, die auf diese vorher erstellten Adresseinträge verweisen.
Auf einem Linux-Computer kann man mit dem host
-Befehl prüfen ob der Domaineintrag schon bis zum eigenen Computer durchgedrungen ist.
Ausschnitt einer Zone-Datei:
demo01 IN A 135.181.44.197
demo01 IN AAAA 2a01:4f9:c010:72c4::1
portainer.demo01 IN CNAME demo01
pt.demo01 IN CNAME demo01
Mit dem Ansible-Modul docker_network kann man neue Docker-Netzwerke erstellen.
Mit Hilfe des proxynet
-Netzwerks steuert man, welche Container mit dem HTTPS-Portal-Container zusammengeschlossen sind.
Das Erstellen des internen Docker-Netzwerks proxynet
ist mit dem Playbook docker_create_proxynet.yaml schnell erledigt:
- hosts: "all"
tasks:
- name: "Create Proxynet"
docker_network:
name: "proxynet"
internal: "yes"
Dieses Playbook führt man einmalig mit diesem Befehl aus:
ansible-playbook docker_create_proxynet.yaml
Das Programm HTTPS-Portal von steveltn
dient als HTTPS-Proxy. Als HTTPS-Proxy kümmert sich dieses Programm um die verschlüsselte Datenübertragung zwischen Browser und den Serverprogrammen. Ich habe zwei mögliche Konfigurationen als Playbooks zusammengestellt. Eines zeigt auf wie man das HTTPS-Portal installieren könnte. Das zweite Playbook zeigt, wie es bei mir persönlich eingestellt ist.
docker_https_portal.yaml:
- 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"
volumes:
- "/home/docker/data/https_portal/data:/var/lib/https-portal"
- "/home/docker/data/https_portal/log:/var/log/nginx"
docker_https_portal.yaml:
- hosts: "all"
tasks:
- name: "Init HTTPS-Portal"
docker_container:
name: "https_portal"
image: "steveltn/https-portal:1.21"
log_driver: "journald"
log_options:
tag: "{{ '{{.Name}} ' }}"
restart_policy: "unless-stopped"
restart: "yes"
networks:
- name: "bridge"
- name: "proxynet"
ports:
- "80:80"
- "443:443"
env:
TZ: "Europe/Vienna"
STAGE: "production"
WORKER_CONNECTIONS: 4096
RESOLVER: "127.0.0.11 ipv6=off valid=30s"
DYNAMIC_UPSTREAM: "true"
GZIP: "on"
CLIENT_MAX_BODY_SIZE: "1000M"
PROXY_READ_TIMEOUT: "3600"
PROXY_SEND_TIMEOUT: "3600"
WEBSOCKET: "true"
HSTS_MAX_AGE: "31536000"
DOMAINS: >
portainer.demo01.halvar.at -> portainer:9000,
volumes:
- "/etc/timezone:/etc/timezone:ro"
- "/etc/localtime:/etc/localtime:ro"
- "/home/docker/data/https_portal/data:/var/lib/https-portal"
- "/home/docker/data/https_portal/log:/var/log/nginx"
Info:
docker_portainer.yaml:
- hosts: "all"
tasks:
- name: "Init Portainer"
docker_container:
name: "portainer"
image: "portainer/portainer-ce"
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_portainer_extended.yaml:
- hosts: "all"
tasks:
- name: "Init Portainer"
docker_container:
name: "portainer"
image: "portainer/portainer-ce"
log_driver: "journald"
log_options:
tag: "{{ '{{.Name}} ' }}"
restart_policy: "unless-stopped"
restart: "yes"
networks:
- name: "proxynet"
aliases:
- "portainer"
- name: "bridge"
env:
TZ: "Europe/Vienna"
volumes:
- "/etc/timezone:/etc/timezone:ro"
- "/etc/localtime:/etc/localtime:ro"
- "/var/run/docker.sock:/var/run/docker.sock"
- "/home/docker/data/portainer/data:/data"
.
.
Hier kommt noch mehr. Bin noch beim Filmen und Schreiben.
.
.
Mein neues Zeiterfassungsprogramm kann jetzt kostenlos verwendet werden!
Bitte ausprobieren und weitererzählen. :-)
Seit mehr als 20 Jahren bin ich in den Bereichen Informationstechnologie, EDV-Schulung und Programmierung tätig. Und jetzt kann man mich auch als selbständigen Softwaretechniker und IT-Berater buchen.
Ich mag es gerne unkompliziert. Schreiben Sie mir einfach ein E-Mail. :-)
gerold@gp-softwaretechnik.at