Dopo aver installato Ghost in rete locale, dovrete dar un occhio a come vorreste utilizzare la piattaforma per essere raggiungibile dall’esterno. Ovviamente se volete solamente usare il cms internamente, probabilmente questa guida non farà per voi.

Il problema del certificato SSL

L’installazione di Ghost richiede un certificato SSL per essere raggiungibile dall’esterno. Seguendo l’installazione di Ghost, vi sarete accorti che vi suggerisce di usare Let’s Encrypt per generare un certificato che sarà poi usato dal vostro server NGINX. Se avete già stabilito un tunnel Cloudflare verso la macchina virtuale che ospita l’istanza, noterete che Let’s Encrypt non riesce ad ottenere un certificato, restituendo un errore durante l’installazione.

Un altro problema, qualora riusciste ad ottenere il certificato (senza connessione a Cloudflare), sarebbe il suo rinnovo. Ogni 90 giorni il sistema cerca di connettersi per rinnovare il certificato e se avete la vostra istanza esposta su internet tramite un tunnel Cloudflare, vi risulterà impossibile rinnovarlo. Questo perché Cloudflare agisce da proxy, impedendo a Let’s Encrypt di comunicare con la sua infrastruttura di emissione di certificati.

La soluzione

La soluzione è quella di ottenere un certificato direttamente da Cloudflare e installarlo sulla vostra macchina virtuale. Quindi dovrete poi cambiare il percorso del certificato nella configurazione NGINX ed il gioco è fatto.

Armatevi di pazienza 😀

Crea un certificato Origin in Cloudflare

Prima di tutto, entrate nel portale CLoudflare e selezionate il vostro dominio, quindi aprite la sezione SSL/TLS, quindi Overview

image-2

Selezionate la modalità  Full (strict)
Ora selezionate Origin Certificates sempre dal menu SSL/TLS

image-3

Create un certificato RSA (scadenza a 15 anni) impostando il dominio di interesse, assieme a qualsiasi altro sottodominio (usate la wildcard *.dominio per questo)

image-4
image-5

Una volta cliccato Create la schermata successiva vi mostrerà il Certificato (Certificate) e la Chiave privata (Private Key).

Copiate il contenuto del certificato e incollatelo in un file che rinominerete dominio.com.crt
Copiate il contenuto della chiave privata e incollatelo in un file che rinominerete dominio.com.key

Cliccate su OK per chiudere la finestra

Importare il certificato e la chiave privata sulla vostra VM

Collegatevi in SSH sulla vostra macchina

 ssh user@yourserverip

create una cartella per i vostri 2 files

sudo mkdir /etc/ssl/dominio.com

inserite all’interna i due files. Potete usare scp per trasferirli

Configurare NGINX

Create un file di configurazione come segue

/etc/nginx/sites-available/www.dominio.com.conf

quindi modificatelo e incollate il contenuto qui sotto

server {     
   
listen 443 ssl;    
ssl on;    
server_name dominio.com;    

ssl_certificate    /etc/ssl/dominio.com.crt;    ssl_certificate_key /etc/ssl/dominio.com.key;    

location / {            
proxy_pass http://127.0.0.1:2368;            
proxy_http_version 1.1;            
proxy_set_header Upgrade $http_upgrade;            proxy_set_header Connection 'upgrade';            proxy_set_header Host $host;            
proxy_cache_bypass $http_upgrade;            client_max_body_size {VALUE}M;

}
}

server {        

listen 80;    
server_name dominio.com;    
return 301 https://dominio.com$request_uri;

}

Salvate il file con CTRL + O e uscite CTRL + X

Verificate che la sintassi sia corretta con

sudo nginx -t

Quindi riavviate il servizio NGINX

sudo systemctl restart nginx

Il vostro sito dovrebbe essere adesso visibile dall’esterno 😎

Bonus

Per qualsiasi errore, verificate che la configurazione di Ghost sia la seguente

/var/www/ghost/config.production.json
{  
"url": "https://dominio.com",  

"server": {    
"port": 2368,    
"host": "127.0.0.1"  
},  

"database": {    
"client": "mysql",    
"connection": {      
"host": "localhost",      
"user": "ghostuser",      
"password": "***ghostSQLpsw***",      
"database": "ghostdb"    
}  
},  
"mail": {    
"transport": "Direct"  
},  
"logging": {    
"transports": [      "file",      "stdout"    ]  
},  
"process": "systemd",  
"paths": {    
"contentPath": "/var/www/ghost/content" 
}
}

e che la configurazione del vostro tunnel Cloudflare sia come la seguente

tunnel: UUID-TUNNELcredentials-file: /root/.cloudflared/UUID-TUNNEL.json

ingress:  
- hostname: dominio.com    
  service: http://localhost:2368  
- service: http_status:404

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *