Un uso comune di un server virtuale Vultr è l'hosting di siti Web Wordpress. Questa guida mostra come automatizzare da zero la configurazione di un server virtuale (usando Ansible) e distribuire più siti Web Wordpress indipendenti (usando Webmin / Virtualmin). Virtualmin / Webmin è un'interfaccia utente grafica che consente di gestire la distribuzione di più account di server virtuali sullo stesso computer (completo di stack LAMP / LEMP). Virtualmin è molto simile a cPanel e Plesk e in questo tutorial utilizzeremo l'edizione GPL gratuita. Dopo la configurazione iniziale del server Vultr e l'installazione di Virtualmin, è possibile configurare molto rapidamente più server virtuali dall'interfaccia di Virtualmin e installare direttamente Wordpress su quel server virtuale completo con il proprio nome di dominio.
In questo tutorial, invece di inserire manualmente un lungo elenco di comandi, utilizzeremo invece Ansible. Ansible è uno strumento di automazione basato su Python che consente di automatizzare in modo affidabile e ripetuto le attività del server. Ciò significa che dopo aver seguito questo tutorial, sarai in grado di distribuire un altro server allo stesso modo con solo un paio di comandi.
Prerequisiti
- Almeno un nome di dominio completo e accesso ai record DNS
- Un account Vultr
Passaggio 1: installazione di Ansible sul computer locale
Installa Ansible sul tuo computer locale o su un altro server.
mkdir ansible
cd ansible
virtualenv env
source env/bin/activate
pip install ansible
Passaggio 2: generare le chiavi SSH e distribuire il server
Ansible funziona accedendo al server tramite SSH. L'accesso a SSH è più sicuro se utilizziamo le chiavi anziché una password. Generiamo prima una coppia di chiavi pubblica e privata.
mkdir ssh_keys
ssh-keygen -t rsa -b 2048 -f ./ssh_keys
Nella ssh_keys
directory ora ci saranno due file ssh_keys
e ssh_keys.pub
. ssh_keys
è il tuo file di chiave privata e dovrebbe essere tenuto al sicuro. Ora puoi aprire il ssh_keys.pub
, che contiene la chiave pubblica.
Accedi alla dashboard web Vultr e fai clic Deploy New Server
.
Seleziona una regione, il tipo di server (Ubuntu 16.04), le dimensioni del server e quindi nella parte 6 ( SSH keys
), fai clic su Add New
. Nella pagina successiva incolla la tua chiave pubblica, assegnagli un nome e fai clic Add SSH key
. Assicurati infine che la chiave sia selezionata e fai clic Deploy now
.
Una volta terminata la distribuzione del server, ti verrà mostrato il suo indirizzo IP. Dovrai accedere al server DNS del tuo nome di dominio e puntarlo a questo indirizzo.
Passaggio 3: creare una configurazione Ansible di base
Vengono chiamati i file di automazione di Ansible roles
. Prima imposteremo la struttura della directory (all'interno della ansible
directory appena creata nel passaggio 1) e i file di base.
mkdir -p group_vars roles/common/tasks/ roles/common/handlers
touch hosts group_vars/all deploy.yml roles/common/handlers/main.yml
Modifica il hosts
file per contenere quanto segue, sostituendo il ip address
per il server appena creato. Ansible usa python 2, che Ubuntu 16.04 non ha installato di default. Nel hosts
file diciamo ad Ansible di usare Python 3.
[common]
192.0.2.1 ansible_python_interpreter=/usr/bin/python3
Modifica il deploy.yml
file per contenere quanto segue. Utilizzeremo l' root
utente.
- name: apply common configuration to server
hosts: all
user: root
roles:
- common
Modifica il /group_vars/all
file per contenere quanto segue. Queste variabili indicano ad Ansible l'ubicazione delle chiavi SSH, i parametri del file di scambio, il nome di dominio completo e la password di root. Ricorda di non includere il file nel controllo del codice sorgente poiché contiene la password in chiaro.
ssh_dir: ./ssh_keys
swap_file_path: /swapfile
swap_file_size: 1G
swappiness: 1
hostname: example.com
new_password: YOUR_PASSWORD_HERE
Modifica il common/handlers/main.yml
file per contenere quanto segue.
- name: restart sshd
service: name=ssh state=restarted
Passaggio 4: creare attività Ansible per la configurazione di base del server
L'automazione sensibile è più facile da capire se la suddividiamo in attività. Creiamo file per ciascuna delle nostre attività nel processo.
cd roles/common/tasks
touch hosts main.yml setup.yml users.yml ufw.yml swap.yml virtualmin.yml
main.yml
dovrebbe puntare a ciascun file contenente i comandi Ansible, quindi modificalo per contenere quanto segue.
- include: setup.yml
- include: users.yml
- include: ufw.yml
- include: swap.yml
- include: virtualmin.yml
Il primo passo per configurare un nuovo server è aggiornare la cache dei repository e impostare il fuso orario. Modifica il common/handlers/setup.yml
file per contenere quanto segue.
- apt: update_cache=yes
sudo: yes
- name: set timezone to Europe/London
timezone:
name: Europe/London
Ora forniremo all'utente root una password (di cui avremo bisogno per accedere all'interfaccia web di virtualmin), ma disabiliteremo gli accessi password tramite SSH (poiché stiamo utilizzando il metodo di autenticazione con chiavi più sicure). Modifica users.yml
per contenere quanto segue.
- 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
Per sicurezza, abbiamo bisogno di un firewall. Utilizzeremo il firewall semplice per consentire l'accesso SSH sulla porta 22
, l'accesso Web sulla porta 80
e l'accesso Web sicuro sulla porta 443
. Modifica il ufw.yml
file per contenere quanto segue.
- 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
Facoltativamente, è possibile includere un file di scambio. Questo è essenziale se il tuo server ha meno di 2 GB di RAM per evitare arresti anomali della memoria. Modifica swap.yml
per contenere quanto segue.
- 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
Passaggio 5: aggiungere l'attività Ansible per l'installazione di virtualmin
Virtualmin ha il suo file di installazione che può essere scaricato ed eseguito da Ansible. Qui stiamo usando l'installazione minima ( LINK
). Gli elementi aggiuntivi sono la configurazione della password del server MySQL che non è impostata quando installata da Virtualmin. È necessario arrestare temporaneamente MySQL e aggiungere la directory di autenticazione prima di modificare la password. Modifica virtualmin.yml
per contenere quanto segue.
- 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
Il ruolo Ansible è ora terminato e siamo pronti per la distribuzione.
Dalla cartella ansible, ora possiamo semplicemente eseguire il seguente comando e Ansible eseguirà tutte le attività che abbiamo creato automaticamente. La prima volta che ti connetti riceverai un avviso chiave SSH, basta digitare " yes
" al prompt.
ansible-playbook deploy.yml --private-key=ssh_keys/ssh_keys -i hosts
Se desideriamo utilizzare un altro server, possiamo semplicemente cambiare l'indirizzo IP nel file hosts ed eseguire nuovamente quel comando per completare esattamente la stessa configurazione.
Passaggio 7: procedura guidata di post-installazione di Virtualmin
L'installazione è completa e ora possiamo andare a https://192.0.2.1:10000
(usare l'indirizzo IP del tuo server). Il tuo browser emetterà un avviso di sicurezza perché il certificato è autofirmato, quindi fai clic su advanced
e aggiungi un'eccezione. Ti verrà presentata una pagina di accesso. Il nome utente è root
e la password è quella immessa nel group_vars/all
file al passaggio 3. La prima volta che si accede a Virtualmin, verrà visualizzata la procedura guidata di post-installazione. È possibile passare manualmente attraverso queste impostazioni o fare clic cancel
per accettare le impostazioni predefinite.
Passaggio 8: creare un server e installare WordPress
Per avviare e far funzionare il tuo primo server Wordpress, dalla dashboard di Virtualmin fai clic su Create Virtual Server
. Devi inserire un nome di dominio, una descrizione e una password dell'amministratore. Il nome di dominio dovrebbe essere diverso dal nome di dominio completo di Virtualmin e dovrai indirizzare il record DNS all'indirizzo IP del tuo server.
Fare clic Create Server
. Una volta che Virtualmin ha terminato di creare il tuo server, fai clic Install Scripts
sul menu a sinistra. Seleziona Wordpress
, fai clic Show install options
e nella pagina seguente scegli la posizione dell'installazione di Wordpress. Basta scegliere At top level
e fare clic Install Now
.
Questo è tutto ciò che devi fare: puoi completare l'installazione di Wordpress visitando il tuo http://example.net/wp-admin/install.php
(dove si example.net
trova questo nome di dominio dei server virtuali). Se i tuoi record DNS non si sono ancora propagati, puoi andare Services > Preview Website
dal menu Virtualmin.
Puoi ripetere questo passaggio più volte per creare più siti Wordpress tutti sullo stesso server Vultr.