Passa al contenuto principale
Versione: 1.0.0

Discourse su Aruba Cloud

Esegui il deployment di Discourse — la piattaforma forum community open-source leader — su Aruba Cloud tramite Terraform e cloud-init. Discourse viene installato tramite il launcher ufficiale discourse_docker, che raggruppa PostgreSQL, Redis e NGINX all'interno di un singolo container gestito.

Versione provider: arubacloud/arubacloud ~> 1.0 | Terraform: ≥ 1.9


Introduzione​

Discourse è una piattaforma di discussione moderna e ottimizzata per mobile, utilizzata da migliaia di progetti open-source e community. Questo esempio usa l'installazione ufficiale basata su Docker — l'unico metodo supportato dal team Discourse per la produzione — che esegue il provisioning di:

  • Launcher discourse_docker clonato dal repository GitHub ufficiale
  • PostgreSQL, Redis, NGINX e Sidekiq inclusi nel container Discourse
  • Configurazione SMTP per le email in uscita (necessaria per la registrazione degli utenti)
  • Porte 80 e 443 aperte a internet
  • Dominio opzionale con SSL tramite Let's Encrypt (automatico nel container quando hostname è un dominio reale)

Tempo di bootstrap: Il launcher costruisce un'immagine Docker dal sorgente la prima volta. Prevedi 20–30 minuti prima che il forum sia accessibile.

L'email è obbligatoria. Discourse usa l'email per la conferma dell'account. Configura SMTP prima del deployment — le registrazioni senza email funzionante falliranno.


Panoramica dell'architettura​


Infrastruttura creata​

RisorsaPattern del nomeDescrizione
arubacloud_projectdiscourse-prodContenitore del progetto
arubacloud_vpcdiscourse-prod-vpcVirtual Private Cloud
arubacloud_subnetdiscourse-prod-subnetSubnet base
arubacloud_securitygroupdiscourse-prod-vm-sgSecurity group
arubacloud_securityrulediscourse-prod-vm-sshRegola ingress SSH
arubacloud_securityrulediscourse-prod-vm-httpRegola ingress HTTP TCP 80
arubacloud_securityrulediscourse-prod-vm-httpsRegola ingress HTTPS TCP 443
arubacloud_elasticipdiscourse-prod-vm-eipIP pubblico della VM
arubacloud_blockstoragediscourse-prod-bootDisco di boot da 100 GB (Performance)
arubacloud_keypairdiscourse-prod-keypairChiave pubblica SSH
arubacloud_cloudserverdiscourse-prod-vmVM CloudServer

Costo mensile stimato​

RisorsaSpecificheCosto stimato/mese
VM CloudServerCSO4A8 — 4 vCPU / 8 GB~€35
Disco di boot100 GB Performance~€15
Elastic IP—~€3
Totale~€53/mese

Requisiti​

  • Terraform ≥ 1.9
  • ArubaCloud Terraform Provider ~> 1.0
  • Un account ArubaCloud con credenziali API OAuth2
  • Una coppia di chiavi SSH
  • Un server SMTP per le email in uscita (Gmail App Password, Mailgun, ecc.)
  • (Consigliato) Un nome di dominio con un record A che punta all'Elastic IP della VM

Variabili​

Obbligatorie​

VariabileDescrizione
arubacloud_client_idClient ID OAuth2 di ArubaCloud
arubacloud_client_secretClient secret OAuth2 di ArubaCloud
ssh_public_keyContenuto della chiave pubblica SSH
admin_emailEmail per l'account admin iniziale di Discourse
smtp_hostHostname del server SMTP
smtp_userNome utente di login SMTP
smtp_passwordPassword di login SMTP

Opzionali​

VariabileDefaultDescrizione
app_name"discourse"Nome breve usato in tutti i nomi delle risorse
environment"prod"Etichetta dell'ambiente
location"ITBG-Bergamo"Regione ArubaCloud
zone"ITBG-1"Zona di disponibilità
billing_period"Hour""Hour" o "Month"
vm_flavor"CSO4A8"Flavor del CloudServer
vm_image"LU22-001"Immagine del disco di boot (Ubuntu 22.04 LTS)
vm_disk_size_gb100Dimensione del disco di boot in GB (min 40 GB)
ssh_cidr"0.0.0.0/0"CIDR per SSH
web_cidr"0.0.0.0/0"CIDR per HTTP/HTTPS
hostnameautoNome di dominio (default: IP Elastico della VM)
smtp_port587Porta SMTP

Output​

OutputDescrizione
site_urlURL del sito Discourse
vm_public_ipIndirizzo IP pubblico della VM
ssh_commandComando SSH per connettersi alla VM

Istruzioni di deployment​

1. Clona e naviga​

git clone https://github.com/arubacloud/terraform-arubacloud-examples.git
cd terraform-arubacloud-examples/discourse

2. Configura le variabili​

cp terraform.tfvars.example terraform.tfvars

Imposta credenziali, email admin, impostazioni SMTP e opzionalmente un dominio:

admin_email = "admin@example.com"
hostname = "forum.example.com" # ometti per usare l'IP Elastico
smtp_host = "smtp.gmail.com"
smtp_port = 587
smtp_user = "you@gmail.com"
smtp_password = "your-app-password"

Per Gmail, crea una App Password (non la password del tuo account) su myaccount.google.com/apppasswords.

3. Esegui il deployment​

terraform init
terraform plan
terraform apply

terraform apply termina rapidamente (VM provisioning in ~2 min). Il bootstrap di Discourse continua in background per 20–30 minuti. Monitora il progresso:

ssh ubuntu@$(terraform output -raw vm_public_ip)
sudo tail -f /var/log/discourse-bootstrap.log

4. Crea l'account admin​

terraform output site_url

Visita l'URL e registrati con lo stesso indirizzo email impostato in admin_email. Discourse concede automaticamente i diritti di amministratore al primo utente che si registra con quella email.


Abilitazione HTTPS (Let's Encrypt)​

Quando hostname è impostato su un dominio reale:

  1. Crea un record DNS A: forum.example.com → <vm_public_ip>
  2. Imposta hostname = "forum.example.com" in terraform.tfvars
  3. Ri-applica — Discourse ottiene automaticamente un certificato Let's Encrypt al bootstrap

Nessuna configurazione aggiuntiva è necessaria; il launcher discourse_docker gestisce ACME automaticamente.


Aggiornamento di Discourse​

Discourse fornisce aggiornamenti frequenti. Per aggiornare:

ssh ubuntu@$(terraform output -raw vm_public_ip)
cd /var/discourse
git pull
./launcher rebuild app

Il comando rebuild scarica l'immagine più recente e riavvia il container senza downtime per il database.


Risoluzione dei problemi​

Forum non accessibile dopo 30 minuti​

ssh ubuntu@$(terraform output -raw vm_public_ip)
sudo tail -50 /var/log/discourse-bootstrap.log
cd /var/discourse && ./launcher logs app

Email non inviate​

Verifica la connettività SMTP dalla VM:

nc -zv smtp.gmail.com 587

Poi dal pannello admin di Discourse: Admin → Email → Test Email.


Riferimenti​