Introduzione
A causa delle speciali restrizioni ambientali dei server Webfaction, le istruzioni di installazione non sono così semplici come lo sarebbero. Tuttavia alla fine avrai un server Redis perfettamente funzionante che rimane attivo anche dopo un riavvio. Ho installato personalmente Redis con la seguente procedura circa sei mesi fa e da allora ha funzionato perfettamente. Un piccolo avvertimento però, un anno e mezzo non è molto tempo, soprattutto perché i server non sono stati sottoposti a un uso intenso.
Le istruzioni sono composte da cinque parti:installazione, test, avvio del server, gestione del server e mantenimento del server in esecuzione.
Installazione
Accedi alla tua shell Webfaction
ssh [email protected]
Scarica l'ultimo Redis dal sito di download di Redis.
> mkdir -p ~/src/
> cd ~/src/
> wget http://download.redis.io/releases/redis-2.6.16.tar.gz
> tar -xzf redis-2.6.16.tar.gz
> cd redis-2.6.16/
Prima della marca, vedi il tuo server Linux a 32 o 64 bit. Lo script di installazione non gestisce bene gli ambienti a 32 bit, almeno sui computer CentOS 5 di Webfaction. Il comando per i bit è uname -m
. Se Linux è a 32 bit il risultato sarà i686, se a 64 bit allora x86_64. Vedi questa risposta per i dettagli.
> uname -m
i686
Se il tuo server è a 64 bit (x86_64), crea semplicemente.
> make
Ma se il tuo server è a 32 bit (i686), devi fare piccole cose extra. C'è un comando make 32bit
ma produce un errore. Modifica una riga nello script di installazione per fare make 32bit
lavorare.
> nano ~/src/redis-2.6.16/src/Makefile
Cambia la riga 214 da questo
$(MAKE) CFLAGS="-m32" LDFLAGS="-m32"
a questo
$(MAKE) CFLAGS="-m32 -march=i686" LDFLAGS="-m32 -march=i686"
e risparmia. Quindi esegui il make con il flag a 32 bit.
> cd ~/src/redis-2.6.16/ ## Note the dir, no trailing src/
> make 32bit
Gli eseguibili sono stati creati nella directory ~/src/redis-2.6.16/src/
. Gli eseguibili includono redis-cli
, redis-server
, redis-benchmark
e redis-sentinel
.
Test (facoltativo)
Come suggerisce l'output dell'installazione, sarebbe utile assicurarsi che tutto funzioni come previsto eseguendo i test.
Hint: To run 'make test' is a good idea ;)
Sfortunatamente il test richiede l'installazione di tlc8.6.0 che non è il default almeno sulla macchina web223. Quindi devi prima installarlo, dal sorgente. Vedere le note di installazione di Tcl/Tk e le note di compilazione.
> cd ~/src/
> wget http://prdownloads.sourceforge.net/tcl/tcl8.6.0-src.tar.gz
> tar -xzf tcl8.6.0-src.tar.gz
> cd tcl8.6.0-src/unix/
> ./configure --prefix=$HOME
> make
> make test # Optional, see notes below
> make install
Testare Tcl con make test
richiederà tempo e fallirà anche a causa delle restrizioni ambientali di WebFaction. Ti suggerisco di saltare questo.
Ora che abbiamo installato Tlc possiamo eseguire i test Redis. I test richiederanno molto tempo e utilizzeranno anche temporaneamente una quantità di memoria abbastanza grande.
> cd ~/src/redis-2.6.16/
> make test
Dopo i test sei pronto per continuare.
Avvio del server
Innanzitutto, crea un'applicazione personalizzata tramite il pannello di controllo di Webfaction (app personalizzata (ascolto sulla porta)). Chiamalo ad esempio fooredis . Tieni presente che non è necessario creare un dominio o un sito Web per l'app se Redis viene utilizzato solo localmente, ovvero dallo stesso host.
In secondo luogo, prendi nota del numero di porta del socket fornito per l'app. Sia l'esempio 23015 .
Copia gli eseguibili compilati in precedenza nella directory dell'app. Puoi scegliere di copiare tutti o solo quelli che ti servono.
> cd ~/webapps/fooredis/
> cp ~/src/redis-2.6.16/src/redis-server .
> cp ~/src/redis-2.6.16/src/redis-cli .
Copia anche il file di configurazione di esempio. Presto lo modificherai.
> cp ~/src/redis-2.6.16/redis.conf .
Ora Redis è già eseguibile. Ci sono però un paio di problemi. Innanzitutto la porta Redis predefinita 6379 potrebbe essere già in uso. In secondo luogo, anche se la porta fosse libera, sì, potresti avviare il server ma smette di funzionare nello stesso momento in cui esci dalla shell. Per la prima è necessario modificare redis.conf e per la seconda è necessario un demone che si risolve anche modificando redis.conf.
Redis è in grado di funzionare da solo in modalità demone. Per questo è necessario impostare un luogo in cui il demone memorizzi i suoi ID di processo, PID. Di solito i file pid sono archiviati in /var/run/ ma a causa delle restrizioni dell'ambiente è necessario selezionare un posto per loro nella directory home. Poiché un motivo spiegato più avanti nella parte Gestione del server, una buona scelta è mettere il file pid nella stessa directory degli eseguibili. Non devi creare il file da solo, Redis lo crea automaticamente per te.
Ora apri redis.conf per la modifica.
> cd ~/webapps/fooredis/
> nano redis.conf
Modificare le configurazioni nel modo seguente.
daemonize no
->daemonize yes
pidfile /var/run/redis.pid
->pidfile /home/foouser/webapps/fooredis/redis.pid
port 6379
->port 23015
Ora finalmente, avvia il server Redis. Specificare il file conf in modo che Redis ascolti la porta corretta e venga eseguito come demone.
> cd ~/webapps/fooredis/
> ./redis-server redis.conf
>
Guardalo in esecuzione.
> cd ~/webapps/fooredis/
> ./redis-cli -p 23015
redis 127.0.0.1:23015> SET myfeeling Phew.
OK
redis 127.0.0.1:23015> GET myfeeling
"Phew."
redis 127.0.0.1:23015> (ctrl-d)
>
Arresta il server se lo desideri.
> ps -u $USER -o pid,command | grep redis
718 grep redis
10735 ./redis-server redis.conf
> kill 10735
o
> cat redis.pid | xargs kill
Gestione del server
Per semplicità di utilizzo e come lavoro preparatorio per la parte successiva, creare uno script che aiuti ad aprire il client e avviare, riavviare e arrestare il server. Una soluzione semplice è scrivere un makefile. Quando scrivi un makefile, ricorda di usare le tabulazioni invece degli spazi.
> cd ~/webapps/fooredis/
> nano Makefile
# Redis Makefile
client cli:
./redis-cli -p 23015
start restart:
./redis-server redis.conf
stop:
cat redis.pid | xargs kill
Le regole sono abbastanza autoesplicative. La particolarità della seconda regola è che mentre si è in modalità demone, chiamare il ./redis-server non crea un nuovo processo se ce n'è già uno in esecuzione.
La terza regola contiene una certa saggezza tranquilla. Se redis.pid non fosse archiviato nella directory di fooredis ma ad esempio in /var/run/redis.pid, non sarebbe così facile arrestare il server. Ciò è particolarmente vero se esegui più istanze Redis contemporaneamente.
Per eseguire una regola:
> make start
Mantenere in funzione il server
Ora hai un'istanza di Redis in esecuzione in modalità demone che ti consente di uscire dalla shell senza interromperla. Questo non è ancora abbastanza. E se il processo si arresta in modo anomalo? Cosa succede se la macchina server viene riavviata? Per coprirli devi creare due cronjob.
> export EDITOR=nano
> crontab -e
Aggiungi le due righe seguenti e salva.
*/5 * * * * make -C ~/webapps/fooredis/ -f ~/webapps/fooredis/Makefile start
@reboot make -C ~/webapps/fooredis/ -f ~/webapps/fooredis/Makefile start
Il primo assicura ogni cinque minuti che fooredis è in esecuzione. Come detto sopra, questo non avvia un nuovo processo se uno è già in esecuzione. Il secondo assicura che fooredis venga avviato immediatamente dopo il riavvio della macchina server e molto prima che entri in gioco la prima regola.
Alcuni metodi più delegati per questo potrebbero essere utilizzati, ad esempio per sempre. Vedi anche questo thread della community di Webfaction per ulteriori informazioni sull'argomento.
Conclusione
Ora ce l'hai. Tante cose fatte ma forse ne arriveranno altre. Le cose che potresti voler fare in futuro che non sono state trattate qui includono quanto segue.
- Impostazione di una password, impedendo ad altri utenti di svuotare i tuoi database. (Vedi redis.conf)
- Limitazione dell'utilizzo della memoria (vedi redis.conf)
- Registrazione dell'utilizzo e degli errori (vedi redis.conf)
- Backup dei dati ogni tanto.
Qualche idea, commento o correzione?