Eine übliche Verwendung eines virtuellen Vultr-Servers ist das Hosten von Wordpress-Websites. In diesem Handbuch erfahren Sie, wie Sie die Konfiguration eines virtuellen Servers von Grund auf automatisieren (mithilfe von Ansible) und mehrere unabhängige Wordpress-Websites bereitstellen (mithilfe von Webmin / Virtualmin). Virtualmin / Webmin ist eine grafische Benutzeroberfläche, mit der Sie die Bereitstellung mehrerer virtueller Serverkonten auf demselben Computer verwalten können (einschließlich LAMP / LEMP-Stack). Virtualmin ist cPanel und Plesk sehr ähnlich. In diesem Tutorial verwenden wir die kostenlose GPL-Edition. Nach der Ersteinrichtung des Vultr-Servers und der Installation von Virtualmin können Sie sehr schnell mehrere virtuelle Server über die Virtualmin-Oberfläche einrichten und Wordpress mit seinem eigenen Domänennamen direkt auf diesem virtuellen Server installieren. 
In diesem Tutorial verwenden wir stattdessen Ansible, anstatt manuell eine lange Liste von Befehlen einzugeben. Ansible ist ein Python-basiertes Automatisierungstool, mit dem Sie Serveraufgaben zuverlässig und wiederholt automatisieren können. Sobald Sie dieses Tutorial befolgt haben, können Sie mit nur wenigen Befehlen auf die gleiche Weise einen anderen Server bereitstellen.
Voraussetzungen
	- Mindestens ein vollqualifizierter Domainname und Zugriff auf die DNS-Einträge
- Ein Vultr-Konto
Schritt 1 - Installieren von Ansible auf Ihrem lokalen Computer
Installieren Sie Ansible auf Ihrem lokalen Computer oder einem anderen Server. 
mkdir ansible
cd ansible
virtualenv env
source env/bin/activate
pip install ansible
Schritt 2 - Generieren Sie SSH-Schlüssel und stellen Sie den Server bereit
Ansible meldet sich über SSH bei Ihrem Server an. Der SSH-Zugriff ist am sichersten, wenn wir Schlüssel anstelle eines Passworts verwenden. Lassen Sie uns zunächst ein öffentliches und ein privates Schlüsselpaar generieren.
mkdir ssh_keys
ssh-keygen -t rsa -b 2048 -f ./ssh_keys
Im ssh_keysVerzeichnis befinden sich nun zwei Dateien ssh_keysund ssh_keys.pub. ssh_keysist Ihre private Schlüsseldatei und sollte sicher aufbewahrt werden. Sie können jetzt das öffnen ssh_keys.pub, das den öffentlichen Schlüssel enthält.
Melden Sie sich beim Vultr-Web-Dashboard an und klicken Sie auf Deploy New Server.
Wählen Sie eine Region, einen Servertyp (Ubuntu 16.04) und eine Servergröße aus und SSH keysklicken Sie dann in Teil 6 ( ) auf Add New. Fügen Sie auf der nächsten Seite Ihren öffentlichen Schlüssel ein, geben Sie ihm einen Namen und klicken Sie auf Add SSH key. Stellen Sie schließlich sicher, dass der Schlüssel ausgewählt ist, und klicken Sie auf Deploy now. 
Sobald die Bereitstellung des Servers abgeschlossen ist, wird seine IP-Adresse angezeigt. Sie müssen sich beim DNS-Server Ihres Domainnamens anmelden und auf diese Adresse verweisen. 
Schritt 3 - Erstellen Sie eine grundlegende Ansible-Konfiguration
Die Automatisierungsdateien von Ansible werden aufgerufen roles. Wir richten zuerst die Verzeichnisstruktur (innerhalb des ansibleVerzeichnisses, das Sie gerade in Schritt 1 erstellt haben) und die Basisdateien ein.
mkdir -p group_vars roles/common/tasks/ roles/common/handlers
touch hosts group_vars/all deploy.yml roles/common/handlers/main.yml
Bearbeiten Sie die hostsDatei so, dass sie Folgendes enthält, und ersetzen ip addressSie den soeben erstellten Server durch den. Ansible verwendet Python 2, das Ubuntu 16.04 standardmäßig nicht installiert hat. In der hostsDatei weisen wir Ansible an, Python 3 zu verwenden. 
[common]  
192.0.2.1 ansible_python_interpreter=/usr/bin/python3
Bearbeiten Sie die deploy.ymlDatei so, dass sie Folgendes enthält. Wir werden den rootBenutzer verwenden.
- name: apply common configuration to server
  hosts: all
  user: root
  roles:
    - common
Bearbeiten Sie die /group_vars/allDatei so, dass sie Folgendes enthält. Diese Variablen teilen Ansible den Speicherort Ihrer SSH-Schlüssel, die Auslagerungsdateiparameter, Ihren vollqualifizierten Domänennamen und das Root-Passwort mit. Bitte denken Sie daran nicht die Datei in Quellcodeverwaltung zu schließen , wie es Ihr Passwort im Klartext enthält.
ssh_dir: ./ssh_keys
swap_file_path: /swapfile
swap_file_size: 1G
swappiness: 1
hostname: example.com
new_password: YOUR_PASSWORD_HERE
Bearbeiten Sie die common/handlers/main.ymlDatei so, dass sie Folgendes enthält.
- name: restart sshd
  service: name=ssh state=restarted
Schritt 4 - Erstellen Sie Ansible-Aufgaben für die grundlegende Servereinrichtung
Ansible Automatisierung ist leichter zu verstehen, wenn wir sie in Aufgaben aufteilen. Lassen Sie uns dabei Dateien für jede unserer Aufgaben erstellen. 
cd roles/common/tasks
touch hosts main.yml setup.yml users.yml ufw.yml swap.yml virtualmin.yml
main.yml sollte auf jede Datei verweisen, die die Ansible-Befehle enthält. Bearbeiten Sie sie daher so, dass sie Folgendes enthält. 
- include: setup.yml
- include: users.yml
- include: ufw.yml
- include: swap.yml
- include: virtualmin.yml
Der erste Schritt beim Einrichten eines neuen Servers besteht darin, den Repo-Cache zu aktualisieren und die Zeitzone festzulegen. Bearbeiten Sie die common/handlers/setup.ymlDatei so, dass sie Folgendes enthält.
- apt: update_cache=yes
  sudo: yes
- name: set timezone to Europe/London
  timezone:
    name: Europe/London
Jetzt geben wir dem Root-Benutzer ein Kennwort (das wir für den Zugriff auf die virtualmin-Weboberfläche benötigen), deaktivieren jedoch die Kennwortanmeldungen über SSH (da wir die Authentifizierungsmethode mit sichereren Schlüsseln verwenden). Bearbeiten users.yml, um Folgendes zu enthalten.
- name: Change passwd
  user: name=root password={{ new_password | password_hash('sha512') }} update_password=always
- name: Disable SSH password login
  lineinfile: dest=/etc/ssh/sshd_config regexp="^#?PasswordAuthentication" line="PasswordAuthentication no"
  notify: restart sshd
Aus Sicherheitsgründen benötigen wir eine Firewall. Wir werden die unkomplizierte Firewall verwenden, um SSH-Zugriff auf Port 22, Webzugriff auf Port 80und sicheren Webzugriff auf Port zu ermöglichen 443. Bearbeiten Sie die ufw.ymlDatei so, dass sie Folgendes enthält.
- name: Set default firewall policy to deny all
  become: True
  ufw: state=enabled direction=incoming policy=deny
  tags: firewall
- name: enable SSH in firewall
  ufw: rule=allow port=22
  sudo: yes
- name: enable HTTP connections for web server
  ufw: rule=allow port=80
  sudo: yes
- name: enable HTTPS connections for web server
  ufw: rule=allow port=443
  sudo: yes
- name: enable firewall
  ufw: state=enabled
  sudo: yes
Optional können Sie eine Auslagerungsdatei einfügen. Dies ist wichtig, wenn Ihr Server weniger als 2 GB RAM hat, um Abstürze aufgrund von Speichermangel zu vermeiden. Bearbeiten swap.yml, um Folgendes zu enthalten.
- name: Set swap_file variable
  set_fact:
    swap_file: "{{swap_file_path}}"
  tags:
    - swap.set.file.path
- name: Check if swap file exists
  stat:
    path: "{{swap_file}}"
  register: swap_file_check
  tags:
    - swap.file.check
- name: Create swap file
  command: fallocate -l {{swap_file_size}} {{swap_file}}
  when: not swap_file_check.stat.exists
  tags:
    - swap.file.create
- name: Change swap file permissions
  file: path="{{swap_file}}"
        owner=root
        group=root
        mode=0600
  tags:
    - swap.file.permissions
- name: Format swap file
  sudo: yes
  command: "mkswap {{swap_file}}"
  when: not swap_file_check.stat.exists
  tags:
    - swap.file.mkswap
- name: Write swap entry in fstab
  mount: name=none
         src={{swap_file}}
         fstype=swap
         opts=sw
         passno=0
         dump=0
         state=present
  tags:
    - swap.fstab
- name: Turn on swap
  sudo: yes
  command: swapon -a
  when: not swap_file_check.stat.exists
  tags:
    - swap.turn.on
- name: Set swappiness
  sudo: yes
  sysctl:
    name: vm.swappiness
    value: "{{swappiness}}"
  tags:
    - swap.set.swappiness
Schritt 5 - Hinzufügen einer Ansible-Aufgabe für die Einrichtung von virtualmin
Virtualmin verfügt über eine eigene Installationsdatei, die von Ansible heruntergeladen und ausgeführt werden kann. Hier verwenden wir die minimale Installation ( LINK). Die zusätzlichen Elemente dienen zum Konfigurieren des MySQL-Serverkennworts, das bei der Installation durch Virtualmin nicht festgelegt wird. Wir müssen MySQL vorübergehend stoppen und das Authentifizierungsverzeichnis hinzufügen, bevor wir das Kennwort ändern. Bearbeiten virtualmin.yml, um Folgendes zu enthalten.
- name: download virtualmin install script
  get_url: >
    url=http://software.virtualmin.com/gpl/scripts/install.sh
    dest=/root/install.sh
    mode=0755
- name: virtualmin install (takes around 10 mins) you can see progress using $ sudo tail -f /root/virtualmin-install.log
  tags: non-idem
  shell: ~/install.sh --force --hostname {{ hostname }} --minimal --yes
  args:
    chdir: /root
- name: temp stop mysql
  service:
    name: mysql
    state: stopped
- name: change owner (and group) of mysqld dir
  file:
    path: "/var/run/mysqld"
    state: directory
    owner: mysql
    group: mysql
- name: virtualmin set mysql password
  shell: virtualmin set-mysql-pass --user root --pass {{ new_password }}
- name: restart mysql
  service:
    name: mysql
    state: started
Die Ansible-Rolle ist jetzt beendet und wir können sie bereitstellen.
Im Ordner ansible können wir jetzt einfach den folgenden Befehl ausführen, und Ansible führt alle von uns automatisch erstellten Aufgaben aus. Wenn Sie zum ersten Mal eine Verbindung herstellen, wird eine SSH-Schlüsselwarnung yesangezeigt. Geben Sie einfach " " an der Eingabeaufforderung ein. 
ansible-playbook deploy.yml --private-key=ssh_keys/ssh_keys -i hosts
Wenn Sie einen anderen Server verwenden möchten, können Sie einfach die IP-Adresse in der Hosts-Datei ändern und diesen Befehl erneut ausführen, um genau das gleiche Setup durchzuführen.
Schritt 7 - Virtualmin-Assistent nach der Installation
Die Installation ist abgeschlossen und wir können jetzt zu gehen https://192.0.2.1:10000(verwenden Sie die IP-Adresse Ihres Servers). Ihr Browser gibt eine Sicherheitswarnung aus, da das Zertifikat selbst signiert ist. Klicken Sie also auf advancedund fügen Sie eine Ausnahme hinzu. Sie erhalten eine Anmeldeseite. Der Benutzername lautet rootund das Kennwort ist das, das Sie group_vars/allin Schritt 3 in die Datei eingegeben haben. Wenn Sie Virtualmin zum ersten Mal eingeben, wird der Assistent nach der Installation angezeigt. Sie können diese Einstellungen entweder manuell durchgehen oder auf klicken cancel, um die Standardeinstellungen zu übernehmen.
Schritt 8 - Erstellen Sie einen Server und installieren Sie WordPress
Klicken Sie im Virtualmin-Dashboard auf, um Ihren ersten Wordpress-Server zum Laufen zu bringen Create Virtual Server. Sie müssen einen Domainnamen, eine Beschreibung und ein Administratorkennwort eingeben. Der Domänenname sollte sich vom vollständig qualifizierten Virtualmin-Domänennamen unterscheiden, und Sie müssen den DNS-Eintrag auf die IP-Adresse Ihres Servers verweisen.
Klicken Sie auf Create Server. Wenn Virtualmin die Erstellung Ihres Servers abgeschlossen hat, klicken Sie Install Scriptsauf das Menü auf der linken Seite. Wählen Sie Wordpress, klicken Sie Show install optionsund wählen Sie auf der folgenden Seite den Speicherort der Wordpress-Installation. Einfach auswählen At top levelund klicken Install Now. 
Das ist alles, was Sie tun müssen - Sie können die Wordpress-Installation abschließen, indem Sie Ihren http://example.net/wp-admin/install.php(wo example.netbefindet sich dieser Domainname des virtuellen Servers) besuchen . Wenn Ihre DNS-Einträge noch nicht weitergegeben wurden, können Sie über Services > Preview Websitedas Virtualmin-Menü aufrufen. 
Sie können diesen Schritt mehrmals wiederholen, um mehrere Wordpress-Sites auf demselben Vultr-Server zu erstellen.