Sviluppo Web con Amazon ec2

Sviluppo Web con Amazon ec2

La cosa migliore per fare web, sopratutto per più siti web, è usare Amazon EC2. Costa molto poco, anche nulla, e permette la condivisione dello spazio con tutti i collaboratori, senza dover tenere acceso a casa un pc (per quanto piccolo sia).

Questo perché le mie speranze di crearmi un serverino casalingo sono morte e ho bisogno di uno spazio per lavorare.

Le tecnologie da usare sono poche ma in grado di rendere la vita molto difficile. Amazon EC2 si attacca direttamente ad una carta di credito e non si fa problemi a prosciugarla, e MySQL sono in grado di far penare molto e proFTPd ancora non so come faccia a funzionare. Inutile peggiorare la situazione pensando di essere obbligati ad usare ubuntu per poter usufruire dell’EC2 Free Tier.

SVILUPPO WEB con AMAZON EC2

Setup di Amazon EC2

Facile: ec2.amazon.com, cliccate su SingUp Now e seguite la procedura. Se non ci riuscite è inutile che continuate a leggere.

Consiglio di usare una postepay o simile apposta per EC2; in questo modo se sbagliate qualche configurazione e lanciate mille istanze di un vostro server Amazon bloccherà tutto in quanto non ci sono i soldi.
Ovvio, il primo mese lo pagherete, e caro.
Fortunatamente potete usare CloudWatch per controllare quanto state spendendo e farvi mandare una mail quando spendete più di 0$. Potete anche crearvi mille altri alert per mille altre cose molto fighe ma non ne parlerò qui.

Attivato ec2 dovete creare una nuova istanza Ubuntu (fate in modo che ci sia sempre la stellina del FreeTier), creare per la prima volta le chiavi (Key Pair), il security group (io ne ho uno chiamato GenericoAllowOutsite) -NON USATE MAI DEFAULT- e poi tutto il resto va bene così com’è. Se volete tra i metadati create un campo “Nome” e date un nome alla macchina virtuale (in questo caso, LAMP è un buon nome. Anche Frescobaldo può funzionare, dipende da come vi piace chiamare i vostri computer).

Andate subito nel security group e aggiungete le seguenti porte:

20 – 21 0.0.0.0/0
22 (SSH) 0.0.0.0/0
80 (HTTP) 0.0.0.0/0
3306 (MYSQL) 0.0.0.0/0
49152 – 65535 0.0.0.0/0

Ossia l’ftp attivo e passivo, ssh, http standard e mysql. Mettere 0.0.0.0/0 come ip indica non voler fare restrizioni di alcun tipo sulla provenienza della richiesta.

I security Group sono molto, molto potenti. Arrangiatevi a trovare configurazioni migliori e più fighe. Oppure aprite tutto (bah).

Ora vi servirà un IP a cui poter puntare per accedere al vostro VPS, facile! Andate su Elastic IPs, createne uno nuovo e assegnatelo alla vostra istanza. Io mi faccio anche un bellissimo post-it sotto al monitor così non devo impararlo a memoria ne cercarlo quando mi serve, poiché se dopo questa guida vi servirà ancora l’ip vuol dire che qualcosa sta andando storto e non vorrete perdere tempo a cercare un cavolo di numeretto.
Quando avete creato il KeyPair dovreste aver automaticamente scaricato un file .pem. Copiate quel file dentro ~./.ssh/ e quindi modificate il file ~/.ssh/config aggiungendo qualcosa di simile:

  1. Host lamp
  2. Hostname 99.99.999.99
  3. User ubuntu
  4. IdentityFile “~/.ssh/MioKeyPair.pem”

Ora sarà possibile scrivere ssh lamp o sftp lamp e accederete al vostro bellissimo VPS.

Ovviamente questa è una delle più schifose configurazioni possibili, io normalmente aggiungo un nuovo utente (poiché il default, ubuntu, è un po’ facile da sgamare), configuro iptables e mille altre menate, tra cui creare una AMI della configurazione di base.

LAMP – To infinity and Beyond

So che è una configurazione triste.

  1. # aptitude update
  2. # aptitude install apache2 mysql-server phpmyadmin proftpd

Per rendere il tutto usabile anche altro ciarpame tipo git, lftp, mc, links2 che potrebbe fare comodo.

Teoria vuole che, una volta installato il tutto, tutto funzioni.
E infatti è così, se qualcosa va storto, beh… arrangiatevi e cercate su google.com, come ho fatto io.

Questione importantissima è aggiungere il proprio utente al gruppo www-data. Io sono un grezzo e modifico direttamente /etc/groups voi potete anche usare usermod 🙂 Il mio file group contiene questa riga:

  1. wwwdata:x:33:ubuntu:elacava

ubuntu è il nome utente di default, elacava è l’utente che effettivamente uso (ubuntu andrebbe eliminato).

Questo permetterà di usare permessi decenti (755) per le cartelle e i file dei vari siti web.

Configurare Apache

Visto che questo VPS è un ambiente di sviluppo, è verosimile dover sviluppare più siti in contemporanea. Comodissimo è il mod_vhost_alias di apache che permette il mapping AUTOMATICO dei dns su una specifica cartella del server.

Mi spiego meglio. Intanto è necessario avere un dominio di secondo livello attivo e un ISP che fornisca la possibilità di creare domini di terzo livello con campi A. Io uso tophost e mi trovo benissimo (e costa veramente, veramente poco).

Si attivano i due domini  sito1.i2media.it e sito2.i2media.it e si fanno puntare all’ip del VPS (che abbiamo configurato prima tramite Elastic IPs di EC2).

I due domini punteranno automaticamente alle due cartelle /var/www/vhosts/sito1 e /var/www/vhosts/sito2, senza deover modificare la configurazione di apache.

Per fare ciò un metodo molto rozzo è modificare /etc/apache2/site-available/default.

Dentro il primo blocco <virtualhost> (quello che è già dentro il file default che stiamo modificando) io ho  aggiunto le seguenti due righe:

  1. ServerAdmin enrico@i2media.it
  2. ServerName dev.i2media.it

La prima riga è ovvia, è la mail dell’amministratore del server web. La seconda permette di accedere alla home del server di sviluppo. (/var/www/index.htm) tramite il dominio specificato.

Sotto invece un nuovo blocco code>:

  1. <VirtualHost *:80>
  2.         UseCanonicalName Off
  3.         VirtualDocumentRoot “/var/www/vhosts/%1”
  4.         ServerAlias *.i2media.it
  5.     <Directory “/var/www/vhosts”>
  6.         Options Indexes FollowSymLinks MultiViews
  7.         AllowOverride All
  8.         Order allow,deny
  9.         Allow from all
  10.     </Directory>
  11. </VirtualHost>

La prima riga dice che questo blocco descrive una sorta di server virtuale per tutti gli ip che accedono sulla porta 80.
UseCanonicalName può essere ON (e andrebbe ad usare l’url del virtualhost), OFF (e usa l’url del server richiesto) o DNS (e usa l’IP del server richiesto). Noi usiamo OFF (che è di default).
La riga interessante è la terza, con %1 si identifica il primo token da sinistra dell’url del server richiesto. Se quindi la richiesta va a test1.i2media.it con %1 si ottiene test1, con %2 i2media e con %3 it; con %0 tutta l’url.
VirtualDocumentRoot ha un uso che può essere molto avanzato e contorto.
ServerAlias è IMPORTANTISSIMO, dice che questa direttiva prende in considerazione solamente i sottodomini di terzo livello di i2media.it. Questo permette di far puntare altri dns al server.

E questo è tutto, è sufficiente riavviare apache2 (service apache2 restart) e tutto dovrebbe funzionare.

Configurare Apache, un po’ meglio

Per lo sviluppo web c’è anche bisogno che le pagine non siano accessibili dall’esterno, poiché nessuno vuole vedere un sito web non finito. Per fare questo basta modificare il file /etc/apache2/conf.d/security.
Ho decommentato il primo blocco <directory>, per bloccare l’accesso a tutta la root, se non diversamente specificato con direttive aggiuntive; ho aggiunto in fondo le seguenti righe:

  1. <Directory /var/www/vhosts>
  2. AuthName “Restricted Development”
  3. AuthType Basic
  4. AuthUserFile /etc/apache2/users
  5. require validuser
  6. </Directory>

La cartella /var/www/vhosts era stata resa accessibile già con una direttiva directory dentro virtualhost nel file site-available/default. In queste righe viene aggiunto che per visualizzare la cartella (e tutte le sottocartelle e file) è necessario un utente inserito nel file /etc/apache2/users.

Per inserire gli utenti ho creato il file /etc/apache2/users con htpasswd. Leggetevi l’ottima documentazione Apache sull’autenticazione.

Poiché abbiamo bloccato tutto, in phpmyadmin.conf , sempre in conf.d, è necessario inserire:

  1.         Order Deny,Allow
  2.         Allow from all

sostituendo le direttive inverse se presenti.

FTP e altre menate

L’ultima cosa è modificare il file /etc/proftpd/proftpd.conf decommentando le seguenti linee:

  1. PassivePorts 49152 65535
  2. MasqueradeAddress  00.000.00.00

La prima attiva la modalità passiva su quelle due porte (aperte in precedenza sul security group), la seconda maschera il server sul’ip pubblico di ec2 (ovviamente da inserire al posto degli zeri).

Ora sarebbe necessario configurare iptables e fare varie altre ottimizzazioni, sopratutto di sicurezza. Magari nel prossimo articolo… forse…

Leave a Reply