Introduzione
Con l’espansione della tua applicazione o del tuo sito web, potrebbe arrivare un momento in cui hai superato la tua configurazione server attuale. Se stai ospitando il tuo server web e il backend del database sulla stessa macchina, potrebbe essere una buona idea separare queste due funzioni in modo che ciascuna possa operare sul proprio hardware e condividere il carico di risposta alle richieste dei visitatori.
In questa guida, configurerai un server di database MySQL remoto a cui può connettersi la tua applicazione web. WordPress viene utilizzato come esempio per avere qualcosa con cui lavorare, ma la tecnica è ampiamente applicabile a qualsiasi applicazione supportata da MySQL.
Prerequisiti
Prima di iniziare questo tutorial, avrai bisogno di:
- Due server Ubuntu 20.04. Ciascuno dovrebbe avere un utente non root con privilegi sudo e il firewall UFW abilitato, come descritto nel nostro tutorial Configurazione Iniziale del Server con Ubuntu 20.04. Uno di questi server ospiterà il backend MySQL e sarà chiamato il server di database durante questa guida. L’altro si connetterà al tuo server di database in remoto e agirà come server web; allo stesso modo, sarà chiamato il server web nel corso di questa guida.
- Sul tuo server di database: MySQL installato. Segui Come Installare MySQL su Ubuntu 20.04 per configurarlo.
- Sul tuo server web: Nginx e PHP installati. Il nostro tutorial Come Installare Linux, Nginx, MySQL, PHP (stack LEMP) in Ubuntu 20.04 ti guiderà attraverso il processo, ma nota che dovresti saltare il Passo 2 di questo tutorial, che si concentra sull’installazione di MySQL, poiché installerai MySQL sul tuo server di database.
- Facoltativamente (ma fortemente consigliato), certificati TLS/SSL da Let’s Encrypt installati sul tuo server web. Avrai bisogno di acquistare un nome di dominio e avere record DNS configurati per il tuo server, ma i certificati stessi sono gratuiti. La nostra guida Come Sicurare Nginx con Let’s Encrypt su Ubuntu 20.04 ti mostrerà come ottenere questi certificati.
Passo 1 — Configurare MySQL per Ascoltare Connessioni Remote sul Server del Database
Avere i propri dati memorizzati su un server separato è un buon modo per espandersi gradualmente dopo aver raggiunto il limite di prestazioni di una configurazione su una singola macchina. Fornisce anche la struttura di base necessaria per bilanciare il carico e espandere ulteriormente l’infrastruttura in un secondo momento. Dopo aver installato MySQL seguendo il tutorial preliminare, sarà necessario modificare alcuni valori di configurazione per consentire le connessioni da altri computer.
La maggior parte delle modifiche alla configurazione del server MySQL possono essere apportate nel file mysqld.cnf
, che di default è memorizzato nella directory /etc/mysql/mysql.conf.d/
. Apri questo file sul tuo server del database con privilegi di root nel tuo editor preferito. Questo esempio utilizza nano
:
Questo file è diviso in sezioni indicate da etichette tra parentesi quadre ([
e ]
). Trova la sezione denominata mysqld
:
. . .
[mysqld]
. . .
All’interno di questa sezione, cerca un parametro chiamato bind-address
. Questo indica al software del database su quale indirizzo di rete ascoltare le connessioni.
Per impostazione predefinita, questo è impostato su 127.0.0.1
, il che significa che MySQL è configurato per cercare solo connessioni locali. È necessario modificare questo per fare riferimento a un indirizzo IP esterno dove il tuo server può essere raggiunto.
Se entrambi i tuoi server si trovano in un datacenter con capacità di rete privata, utilizza l’indirizzo IP della rete privata del server del database. In caso contrario, puoi utilizzare il suo indirizzo IP pubblico:
[mysqld]
. . .
bind-address = db_server_ip
Poiché ti connetterai al tuo database su Internet, è consigliabile richiedere connessioni criptate per mantenere sicuri i tuoi dati. Se non crittografi la connessione MySQL, chiunque sulla rete potrebbe intercettare informazioni sensibili tra i tuoi server web e database. Per criptare le connessioni MySQL, aggiungi la seguente riga dopo la riga bind-address
appena aggiornata:
[mysqld]
. . .
require_secure_transport = on
. . .
Salva e chiudi il file quando hai finito. Se stai usando nano
, fallo premendo CTRL + X
, Y
, e poi ENTER
.
Perché le connessioni SSL funzionino, dovrai creare alcune chiavi e certificati. MySQL viene fornito con un comando che li imposterà automaticamente. Esegui il seguente comando, che crea i file necessari. Li rende anche leggibili dal server MySQL specificando l’UID dell’utente mysql:
Per forzare MySQL a aggiornare la sua configurazione e leggere le nuove informazioni SSL, riavvia il database:
Per confermare che il server ora sta ascoltando sull’interfaccia esterna, esegui il seguente comando ss
:
Outputtcp LISTEN 0 70 127.0.0.1:33060 0.0.0.0:* users:(("mysqld",pid=4053,fd=22))
tcp LISTEN 0 151 db_server_ip:3306 0.0.0.0:* users:(("mysqld",pid=4053,fd=24))
Il comando ss
stampa le statistiche sul sistema di rete del tuo server. Questo output mostra che un processo chiamato mysqld
è collegato all’indirizzo IP del server db_server_ip
sulla porta 3306
, la porta MySQL standard, confermando che il server è in ascolto sull’interfaccia appropriata.
Successivamente, apri quella porta sul firewall per consentire il passaggio del traffico:
Questi sono tutti i cambiamenti di configurazione che devi apportare a MySQL. Successivamente, configurerai un database e alcuni profili utente, uno dei quali verrà utilizzato per accedere al server in remoto.
Passaggio 2 — Configurazione di un Database WordPress e Credenziali Remote sul Server del Database
Anche se MySQL stesso è ora in ascolto su un indirizzo IP esterno, attualmente non sono configurati utenti o database abilitati per l’accesso remoto. Crea un database per WordPress e una coppia di utenti che possono accedervi.
Comincia connettendoti a MySQL come utente root di MySQL:
Nota: Se hai abilitato l’autenticazione della password, come descritto nel Passaggio 3 del tutorial MySQL preliminare, dovrai invece utilizzare il seguente comando per accedere alla shell MySQL:
Dopo aver eseguito questo comando, ti verrà chiesto la password root di MySQL e, dopo averla inserita, ti verrà fornito un nuovo prompt mysql>
.
Dal prompt di MySQL, crea un database che WordPress utilizzerà. Potrebbe essere utile dare a questo database un nome riconoscibile in modo da poterlo identificare facilmente in seguito. Qui è chiamato wordpress
:
Ora che hai creato il database, devi creare una coppia di utenti. Crea un utente solo locale e un utente remoto legato all’indirizzo IP del server web.
Per prima cosa, crea il tuo utente locale, local_db_user, e rendi questo account compatibile solo con tentativi di connessione locali utilizzando localhost nella dichiarazione:
Quindi concede a questo account pieno accesso al database wordpress
:
Questo utente può ora eseguire qualsiasi operazione sul database per WordPress, ma questo account non può essere utilizzato in remoto, poiché corrisponde solo alle connessioni dalla macchina locale. Con questo in mente, crea un account compagno che corrisponderà esclusivamente alle connessioni dal tuo server web. Per fare ciò, avrai bisogno dell’indirizzo IP del tuo server web.
Si noti che è necessario utilizzare un indirizzo IP che utilizzi la stessa rete che hai configurato nel tuo file mysqld.cnf
. Ciò significa che se hai specificato un indirizzo IP di rete privato nel file mysqld.cnf
, dovrai includere l’IP privato del tuo server web nei seguenti due comandi. Se hai configurato MySQL per utilizzare Internet pubblico, dovresti abbinarlo con l’indirizzo IP pubblico del server web.
Dopo aver creato il tuo account remoto, assegnagli gli stessi privilegi del tuo utente locale:
Infine, aggiorna i privilegi in modo che MySQL inizi a utilizzarli:
Quindi esci dal prompt di MySQL digitando:
Ora che hai configurato un nuovo database e un utente abilitato per la connessione remota, puoi passare al test per verificare se sei in grado di connetterti al database dal tuo server web.
Passaggio 3 — Test delle Connessioni Remote e Locali
Prima di continuare, è meglio verificare di poterti connettere al database sia dalla macchina locale — il tuo server di database — che dal tuo server web.
Per prima cosa, testa la connessione locale dal tuo server di database cercando di accedere con il tuo nuovo account:
Quando richiesto, inserisci la password che hai impostato per questo account.
Se ti viene fornito un prompt di MySQL, allora la connessione locale è stata effettuata con successo. Puoi uscire di nuovo digitando:
Successivamente, accedi al tuo server web per testare le connessioni remote:
Dovrai installare alcuni strumenti client per MySQL sul tuo server web per poter accedere al database remoto. Innanzitutto, aggiorna la cache dei pacchetti locali se non l’hai fatto di recente:
Quindi installa le utility client di MySQL:
A seguire, connettiti al tuo server di database utilizzando la seguente sintassi:
Ancora, assicurati di utilizzare l’indirizzo IP corretto per il server del database. Se hai configurato MySQL per ascoltare sulla rete privata, inserisci l’indirizzo IP della rete privata del tuo database. Altrimenti, inserisci l’indirizzo IP pubblico del server del database.
Ti verrà chiesta la password per il tuo account remote_user. Dopo averla inserita, e se tutto funziona come previsto, verrai portato al prompt di MySQL. Verifica che la connessione stia utilizzando SSL con il seguente comando:
Se la connessione sta effettivamente utilizzando SSL, la linea SSL:
lo indicherà, come mostrato qui:
Output--------------
mysql Ver 8.0.29-0ubuntu0.20.04.2 for Linux on x86_64 ((Ubuntu))
Connection id: 14
Current database:
Current user: remote_user@web_server_ip
SSL: Cipher in use is TLS_AES_256_GCM_SHA384
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.0.29-0ubuntu0.20.04.2 (Ubuntu)
Protocol version: 10
Connection: db_server_ip via TCP/IP
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
TCP port: 3306
Binary data as: Hexadecimal
Uptime: 1 hour 8 min 28 sec
Threads: 2 Questions: 69 Slow queries: 0 Opens: 206 Flush tables: 3 Open tables: 125 Queries per second avg: 0.016
--------------
Dopo aver verificato di poterti connettere in remoto, esci dal prompt:
Hai verificato l’accesso locale e l’accesso dal server web, ma non hai verificato che le altre connessioni saranno rifiutate. Per un controllo aggiuntivo, prova a fare la stessa cosa da un terzo server per il quale non hai configurato un account utente specifico per assicurarti che a questo altro server non venga concesso l’accesso.
Nota che prima di eseguire il comando seguente per tentare la connessione, potresti dover installare nuovamente le utilità client di MySQL come hai fatto precedentemente:
Questo non dovrebbe completarsi con successo e dovrebbe restituire un errore simile a questo:
OutputERROR 1130 (HY000): Host '203.0.113.12' is not allowed to connect to this MySQL server
Questo è previsto, poiché non hai creato un utente MySQL autorizzato a connettersi da questo server, ed è anche desiderato, poiché desideri essere sicuro che il tuo server di database rifiuti l’accesso agli utenti non autorizzati al tuo server MySQL.
Dopo aver testato con successo la tua connessione remota, puoi procedere all’installazione di WordPress sul tuo server web.
Passo 4 — Preparazione del Server Web per l’Installazione di WordPress
Se hai seguito i tutorial prerequisito, dovresti avere installati sia Nginx che PHP. WordPress, e molti dei suoi plugin, sfruttano numerose estensioni PHP aggiuntive. Prima di installare WordPress sul tuo server web, prepara il server installando alcune di queste estensioni PHP per l’uso con WordPress:
Nota: Ogni plugin di WordPress ha il proprio set di requisiti. Alcuni potrebbero richiedere l’installazione di pacchetti aggiuntivi di estensioni PHP. Verifica la documentazione del plugin per scoprire i suoi requisiti PHP. Se sono disponibili, possono essere installati con apt come nell’esempio precedente.
Dopo aver terminato l’installazione delle estensioni, riavvia il processo PHP-FPM in modo che il processore PHP in esecuzione possa sfruttare le nuove funzionalità installate:
Successivamente, apporta alcune modifiche ai file dei blocchi del server Nginx. In base ai tutorial prerequisito, dovresti avere un file di configurazione per il tuo sito nella directory /etc/nginx/sites-available/
. Dovrebbe anche essere configurato per rispondere al nome di dominio o all’indirizzo IP del tuo server e protetto da un certificato TLS/SSL. /etc/nginx/sites-available/tuo_dominio
è utilizzato come esempio di directory qui. Sostituisci il percorso del tuo file di configurazione dove appropriato.
Inoltre, /var/www/your_domain
verrà utilizzato come directory principale in questo esempio di installazione di WordPress. Di nuovo, utilizza la root del documento specificata nella tua configurazione.
Nota: È possibile che tu stia utilizzando la configurazione predefinita /etc/nginx/sites-available/default
con /var/www/html
come root del documento. È accettabile utilizzarlo se hai intenzione di ospitare un solo sito web su questo server. In caso contrario, è meglio suddividere la configurazione necessaria in chunk logici, un file per sito.
Apri il file del blocco del server del tuo sito con il tuo editor preferito. Questo esempio utilizza nano
:
All’interno di questo blocco server, aggiungi alcuni blocchi di localizzazione. Inizia creando blocchi di localizzazione corrispondenti esattamente per le richieste a /favicon.ico
e /robots.txt
, entrambi i quali non desideri registrare le richieste per.
Farai questo utilizzando una localizzazione di espressioni regolari per corrispondere a qualsiasi richiesta per file statici, disattivare il logging per queste richieste e contrassegnarle come altamente memorizzabili poiché queste sono risorse tipicamente costose da servire. Puoi regolare questa lista di file statici per contenere qualsiasi altra estensione di file che il tuo sito potrebbe utilizzare:
server {
server_name your_domain www.your_domain;
root /var/www/your_domain;
index index.html index.htm index.php;
location = /favicon.ico { log_not_found off; access_log off; }
location = /robots.txt { log_not_found off; access_log off; allow all; }
location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
expires max;
log_not_found off;
}
. . .
}
All’interno del blocco di localizzazione esistente location /
, puoi regolare l’elenco try_files
. Prima, commenta l’impostazione predefinita aggiungendo un cancelletto (#
) alla prima riga. Poi aggiungi le seguenti righe:
server {
. . .
location / {
#try_files $uri $uri/ =404;
try_files $uri $uri/ /index.php$is_args$args;
}
. . .
}
Con questa nuova riga nella tua configurazione, anziché restituire un errore 404 come opzione predefinita, il controllo viene passato al file index.php
con gli argomenti della richiesta.
Nel complesso, la parte superiore del tuo file dovrebbe essere simile a questo:
server {
server_name your_domain www.your_domain;
root /var/www/your_domain;
index index.html index.htm index.php;
location = /favicon.ico { log_not_found off; access_log off; }
location = /robots.txt { log_not_found off; access_log off; allow all; }
location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
expires max;
log_not_found off;
}
location / {
# try_files $uri $uri/ =404;
try_files $uri $uri/ /index.php$is_args$args;
}
...
}
Quando hai finito, salva e chiudi il file.
Controlla la tua configurazione per errori di sintassi digitando:
Se non vengono segnalati errori, ricarica Nginx digitando:
Dopo aver preparato il tuo server web, sei ora pronto per installare WordPress.
Passaggio 5 – Installazione di WordPress sul server Web
Per dimostrare le capacità del tuo nuovo server MySQL con capacità remote, passerai attraverso il processo di installazione e configurazione di WordPress — il popolare sistema di gestione dei contenuti — sul tuo server web. Con il software del server configurato, puoi scaricare WordPress. Per motivi di sicurezza, è sempre consigliabile ottenere l’ultima versione di WordPress direttamente dal sito web del progetto.
Prima, cambia in una directory scrivibile (una temporanea come /tmp
è consigliata):
Questo cambia la tua directory di lavoro alla cartella temporanea. Quindi, inserisci il seguente comando per scaricare l’ultima versione di WordPress come file compresso:
Estrai il file compresso per creare la struttura della directory di WordPress:
Stai per spostare questi file nella tua root del documento momentaneamente, ma prima copia il file di configurazione di esempio nel nome file che WordPress legge:
Copia l’intero contenuto della directory nella tua radice del documento. Il flag -a
assicurerà che i tuoi permessi siano mantenuti, e un punto alla fine della tua directory di origine per indicare che tutto all’interno della directory dovrebbe essere copiato (inclusi i file nascosti):
Con i tuoi file al loro posto, assegna la proprietà all’utente e al gruppo www-data. Questo è l’utente e il gruppo con cui Nginx viene eseguito, e Nginx dovrà essere in grado di leggere e scrivere file di WordPress per servire il sito web e eseguire gli aggiornamenti automatici:
I tuoi file WordPress sono ora nella radice del documento del server e hanno la proprietà corretta. Ora sei pronto per configurare WordPress.
Passaggio 6 — Configurazione del File di Configurazione di WordPress
Quando apri il file di configurazione di WordPress, inizierai regolando alcune chiavi segrete per fornire un po’ di sicurezza alla tua installazione. WordPress fornisce un generatore sicuro per questi valori in modo che tu non debba inventare valori da solo. Questi sono utilizzati solo internamente, quindi non danneggerà l’usabilità avere valori complessi e sicuri qui.
Per ottenere valori sicuri dal generatore di chiavi segrete di WordPress, digita:
Riceverai valori unici che assomigliano all’output simile al seguente:
Avviso! È importante che richiedi i tuoi valori unici ogni volta. Non copiare i valori mostrati qui!
Outputdefine('AUTH_KEY', 'L4|2Yh(giOtMLHg3#] DO NOT COPY THESE VALUES %G00o|te^5YG@)');
define('SECURE_AUTH_KEY', 'DCs-k+MwB90/-E(=!/ DO NOT COPY THESE VALUES +WBzDq:7U[#Wn9');
define('LOGGED_IN_KEY', '*0kP!|VS.K=;#fPMlO DO NOT COPY THESE VALUES +&[%8xF*,18c @');
define('NONCE_KEY', 'fmFPF?UJi&(j-{8=$- DO NOT COPY THESE VALUES CCZ?Q+_~1ZU~;G');
define('AUTH_SALT', '@qA7f}2utTEFNdnbEa DO NOT COPY THESE VALUES t}Vw+8=K%20s=a');
define('SECURE_AUTH_SALT', '%BW6s+d:7K?-`C%zw4 DO NOT COPY THESE VALUES 70U}PO1ejW+7|8');
define('LOGGED_IN_SALT', '-l>F:-dbcWof%4kKmj DO NOT COPY THESE VALUES 8Ypslin3~d|wLD');
define('NONCE_SALT', '4J(<`4&&F (WiK9K#] DO NOT COPY THESE VALUES ^ZikS`es#Fo:V6');
Queste sono linee di configurazione che puoi incollare direttamente nel file di configurazione per impostare chiavi sicure. Copia l’output che hai ricevuto adesso.
Apri il file di configurazione di WordPress:
Trova la sezione che contiene i valori di esempio per quelle impostazioni:
. . .
define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');
. . .
Elimina quelle linee e incolla i valori che hai copiato dalla riga di comando:
. . .
define('AUTH_KEY', 'VALUES COPIED FROM THE COMMAND LINE');
define('SECURE_AUTH_KEY', 'VALUES COPIED FROM THE COMMAND LINE');
define('LOGGED_IN_KEY', 'VALUES COPIED FROM THE COMMAND LINE');
define('NONCE_KEY', 'VALUES COPIED FROM THE COMMAND LINE');
define('AUTH_SALT', 'VALUES COPIED FROM THE COMMAND LINE');
define('SECURE_AUTH_SALT', 'VALUES COPIED FROM THE COMMAND LINE');
define('LOGGED_IN_SALT', 'VALUES COPIED FROM THE COMMAND LINE');
define('NONCE_SALT', 'VALUES COPIED FROM THE COMMAND LINE');
. . .
Successivamente, modifica alcune delle impostazioni di connessione al database all’inizio del file. Dovrai regolare il nome del database, l’utente del database e la password associata configurata all’interno di MySQL.
Inserisci le informazioni di connessione per il tuo database remoto. Ricorda di utilizzare lo stesso indirizzo IP e le credenziali utilizzate nel test del database remoto in precedenza:
. . .
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');
/** MySQL database username */
define('DB_USER', 'remote_user');
/** MySQL database password */
define('DB_PASSWORD', 'remote_user_password');
/** MySQL hostname */
define('DB_HOST', 'db_server_ip');
. . .
E infine, seguendo la linea define( 'DB_COLLATE', '' );
, aggiungi questa linea evidenziata che indica a WordPress di utilizzare una connessione SSL al tuo database MySQL:
...
define( 'DB_COLLATE', '' );
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
...
Salva e chiudi il file.
Con la tua configurazione impostata, WordPress è installato e sei pronto per eseguire la sua procedura di configurazione basata sul web.
Passaggio 7 — Configurazione di WordPress tramite l’interfaccia web
WordPress ha un processo di configurazione basato sul web. Mentre procedi, ti verranno poste alcune domande e verranno installate tutte le tabelle di cui ha bisogno nel tuo database. Qui, eseguirai i passaggi iniziali per configurare WordPress, che puoi utilizzare come punto di partenza per la creazione del tuo sito web personalizzato che utilizza un backend di database remoto.
Naviga verso il nome di dominio (o indirizzo IP pubblico) associato al tuo server web seguito da /wp-admin
:
http://your_domain.com/wp-admin
Ti verrà chiesto di selezionare la lingua che desideri utilizzare:
Successivamente, arriverai alla pagina principale di configurazione.
Seleziona un nome per il tuo sito WordPress e scegli un nome utente. Si consiglia di scegliere qualcosa di unico e di evitare nomi utente comuni come “admin” per motivi di sicurezza. Una password forte verrà generata automaticamente. Salva questa password o seleziona un’altra password forte.
Inserisci il tuo indirizzo email e seleziona se desideri scoraggiare i motori di ricerca dall’indicizzare il tuo sito:
Una volta inviate le informazioni, dovrai accedere all’interfaccia di amministrazione di WordPress utilizzando l’account appena creato. Sarai quindi portato a un cruscotto dove potrai personalizzare il tuo nuovo sito WordPress.
Conclusione
Seguendo questo tutorial, hai configurato un database MySQL per accettare connessioni protette da SSL da un’installazione remota di WordPress. I comandi e le tecniche utilizzate in questa guida sono applicabili a qualsiasi applicazione web scritta in qualsiasi linguaggio di programmazione, ma i dettagli specifici dell’implementazione saranno diversi. Consulta la documentazione del tuo database dell’applicazione o del linguaggio per ulteriori informazioni.