Come automatizzare la distribuzione del tuo progetto Elixir in AWS

Questo è il primo articolo di una serie in 2 parti, in cui spieghiamo in dettaglio come automatizzare la distribuzione del tuo progetto Elixir. Le tecnologie utilizzate sono AWS, per ospitare il tuo progetto e CircleCI, per automatizzare il test e la distribuzione dell'applicazione.

Parte II - Come automatizzare la distribuzione del progetto Elixir con CircleCI

Configurazione AWS

Una configurazione AWS di base per la tua applicazione dovrebbe consistere in vari servizi interconnessi, di cui EC2 è il più importante, poiché ospiterà il tuo progetto e interagirai molto con esso.

Inoltre, utilizziamo RDS per il database e Route 53 per la gestione del dominio, insieme ad alcuni altri strumenti utili minori. Questa esercitazione è suddivisa in vari passaggi sequenziali che spiegano come configurare completamente questi servizi, in modo da poter disporre di un'infrastruttura perfettamente funzionante su cui distribuire il codice.

Configurazione AWS - Vista generale

Se hai problemi a trovare i servizi che configureremo, puoi cercarli e accedervi nella scheda servizi:

A) EC2

Configureremo 2 istanze una per la gestione temporanea e un'altra per l'ambiente di produzione.

1. Creare un'istanza di gestione temporanea

Configurazione EC2

Tieni presente che alcuni servizi potrebbero non essere disponibili in alcune regioni, per il nostro esempio utilizzeremo la Virginia del Nord.

In questo esempio useremo un'immagine di livello gratuito di Ubuntu 16.0.4 (AMI) con un'istanza t2.micro composta da 1 GB di RAM e 20 GB di disco (volume EBS). Per il tuo progetto sentiti libero di adattare questi valori in base alle esigenze del progetto. Un'altra cosa importante sono le regioni e le zone di disponibilità e ciascun servizio AWS potrebbe essere o non essere disponibile per quella zona.

Passaggio 1: selezionare AMIPassaggio 2: selezionare il tipo di istanzaPassaggio 3: configurare l'istanza

Non dimenticare di controllare la sezione "Proteggi da risoluzione accidentale".

Passaggio 4: aggiungere memoria

L'ultimo passaggio consiste nell'aggiunta di tag alla nostra istanza EC2. Questo passaggio non è cruciale per la configurazione e l'unico scopo dei tag è identificare la nostra istanza all'interno dei servizi AWS, quindi sentiti libero di aggiungere i tuoi tag.

2. Configurare il gruppo di sicurezza

Il gruppo di sicurezza è una delle configurazioni più cruciali, in quanto definisce esattamente chi può accedere alla macchina. Nel nostro caso, definiamo i protocolli SSH, HTTP e HTTPS.
SSH, perché vogliamo essere in grado di accedere alla macchina e interagire con essa tramite il terminale in modo da poterlo configurare.
HTTP e HTTPS in modo che il nostro progetto sia accessibile quando distribuito.

Passaggio 6: configurare il gruppo di sicurezza

Avvertenza: le regole con una sorgente di 0.0.0.0/0 consentono a tutti gli indirizzi IP di accedere all'istanza. Si consiglia di impostare le regole del gruppo di sicurezza per consentire l'accesso solo da indirizzi IP noti.

3. Creare una nuova coppia di chiavi (per l'accesso esterno all'istanza)

Al termine del processo di creazione dell'istanza EC2, è necessario creare una coppia di chiavi (salvare la coppia di chiavi nel computer in uso, in modo da poter configurare l'accesso SSH localmente).

B) IP elastico

Creare un indirizzo IP elastico associato all'istanza EC2 creata. L'IP elastico è necessario perché se, ad esempio, chiudiamo questa istanza e ne creiamo un'altra con altre caratteristiche, riassociamo semplicemente l'IP elastica creato alla nuova istanza e tutto funziona bene.

Passaggio 1: IP elasticoPassaggio 2: associare IP elastico all'istanza

C) Configurare la macchina EC2

1. Configurare l'accesso SSH

### consigliato mettere key-pair.pem nella cartella ~ / .ssh
chmod 400 key-pair.pem
### sostituisci 111.11.111 con l'IP elastico generato
ssh -i key-pair.pem [email protected]

2. Installare gli strumenti necessari nell'istanza EC2

Accedi alla macchina e installa il software necessario.

  • Elixir / Erlang
  • Idiota
  • Nodo
  • nginx
  • Postgres (non l'installazione completa, ma solo la versione client nella stessa versione di quella in RDS)

3. Installa Certbot

Devi installare Certbot e quindi generare un certificato SSL per il dominio a cui corrisponderà la tua macchina. Importante: a volte è necessario eseguire prima il passaggio "E) Route 53".

# Sostituisci example.com con il tuo dominio
sudo certbot --nginx -d esempio.com -d www.esempio.com
sudo certbot renew --dry-run

Quindi, seguire i passaggi 3 e 4 di questo tutorial.

Avviso: Certboot è limite di velocità.

4. Configura Nginx

Successivamente, è necessario configurare Nginx per utilizzare il certificato appena creato per questo dominio. Passare alla cartella / etc / nginx / sites-available, dove è possibile trovare il file Nginx predefinito, che assomiglia a quello che segue:

Attenzione: sostituire con il nome_server precedentemente generato.

5. Ultime impostazioni sull'istanza

Infine, devi creare la cartella in / opt. Dopodiché dobbiamo passare il controllo all'utente ubuntu.

sudo mkdir 
sudo chown -R ubuntu: ubuntu  /

6. Creare un'immagine in base all'istanza creata e Creare un'istanza di produzione

Puoi saltare questo passaggio se devi solo configurare un singolo ambiente. Nei nostri progetti di solito iniziamo con una scenografia e un ambiente di produzione. L'ambiente di gestione temporanea contiene tutto il codice fatto finora e viene utilizzato per testare le funzionalità più recenti prima che entrino in produzione. L'ambiente di produzione è quello utilizzato dagli utenti reali.

Passaggio 1: creare un'immagine in base all'istanza creataPassaggio 2: creare un'immagine

Creare un'immagine (EC2 - AMI) in base all'istanza precedentemente creata (istanza di gestione temporanea). Quindi creare l'istanza di produzione dall'immagine (in modo da creare e configurare le due istanze: produzione e gestione temporanea). Non dimenticare: salva la coppia di chiavi nel tuo computer per configurare l'accesso SSH localmente.

Per l'istanza di produzione è necessario ripetere i seguenti passaggi:

  • B) IP elastico (istanza di produzione)
  • C) 1. Configurare l'accesso SSH (istanza di produzione)
  • C) 1. Configurare l'accesso SSH (istanza di produzione)
  • C) 3. Installa Certbot (istanza di produzione)

D) RDS

L'esempio che vi mostriamo qui utilizza un database relazionale. In questo caso, utilizziamo Postgres.

Configurazioni EC2 e RDS

1. Creare 2 istanze DB (produzione e gestione temporanea)

  • Attento alle opzioni scelte come: versione del motore, negozio assegnato e abilita la protezione dalla cancellazione.
Passaggio 1: selezionare il motorePassaggio 2: specifiche dell'istanzaPassaggio 3- ImpostazioniPassaggio 4: rete e sicurezzaPassaggio 5: opzioni del databasePassaggio 6: backupPassaggio 7: manutenzionePassaggio 8: protezione dall'eliminazione

2. Configurare il gruppo di sicurezza per consentire a EC2 di connettersi all'RDS

Fondamentalmente è necessario aggiungere il gruppo di sicurezza dell'istanza al gruppo di sicurezza RDS per consentire a EC2 di connettersi all'istanza RDS.

Consentire a EC2 di connettersi all'istanza RDS

E) Percorso 53

Per instradare i domini e i sottodomini alle macchine precedentemente create abbiamo utilizzato Route 53.

Percorso 53 - esempio

1. Creare una zona ospitata con un nome di dominio

Passaggio 1: creare una zona ospitata

2. Crea alias

  • Crea un set di record alias per la messa in scena dell'IP elastico della macchina EC2
  • Crea un set di record di alias per l'IP elastico della macchina di produzione EC2
Passaggio 2: creare un set di record

Ora disponi di una configurazione AWS completamente funzionante (routing, database, istanza del server) pronta a ricevere e ospitare un server basato su elisir. Nella parte successiva del tutorial configureremo CircleCI per distribuire automaticamente il tuo progetto nell'impostazione AWS che abbiamo appena creato.

Grazie per aver letto!

Grazie mille per la lettura e se ti è piaciuto questo articolo assicurati di premere quel pulsante . Significa molto per noi! Inoltre, non dimenticare di seguire Coletiv su Medium, Twitter e LinkedIn mentre continuiamo a pubblicare articoli sempre più interessanti su più tecnologie.

Nel caso non lo sapessi, Coletiv è uno studio di sviluppo software di Porto specializzato nello sviluppo di app Elixir, iOS e Android. Ma facciamo tutti i tipi di cose. Ci occupiamo della progettazione di UX / UI, sviluppo web e persino sicurezza per te.

Quindi, facciamo qualcosa insieme?