By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4...

26
By Adam Cavallin 1

Transcript of By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4...

Page 1: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

By Adam Cavallin

1

Page 2: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

2

Page 3: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

Indice

➢ Web server NGINX.............................................................................. pag.4

➢ Le caratteristiche di NGINX.................................................................pag. 4

➢ Preparativi per installare NGINX.........................................................pag.5

➢ Installare e configurare NGINX...........................................................pag.6

➢ Installare PHP......................................................................................pag.8

➢ Installare FCGIWrap............................................................................pag.8

➢ installare PostgreSQL.........................................................................pag.11

➢ Un po di storia su PostgreSQL............................................................pag.11

➢ che cos'è PostgreSQL.........................................................................pag.12

➢ Abilitare connessione remota a PostgreSQL......................................pag.17

➢ Installare phpPgAdmin........................................................................pag.17

➢ Impostare NGINX con certificato SSL.................................................pag.19

➢ Abilitare il redirect da http a https........................................................pag.20

➢ Abilitare l'estensioni.............................................................................pag.21

➢ Configurare virtualhost........................................................................pag.21

➢ Ringraziamenti.....................................................................................pag.26

3

Page 4: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

INSTALLARE IL WEB SERVER NGINX CONPOSTGRESQL, PHP e PHPPgAdmin

Su CentOS 6.4 (x86_64)

NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad alteprestazioni, è anche un server proxy di posta elettronica (IMAP / POP3), rilasciato sottolicenza BSD-Like, il sistema funziona sotto varia piattaforme quali Linux, Windows, Unix,BSD, Solaris e MacOS.

Nginx fornisce rapidamente i contenuti statici con un utilizzo efficiente delle risorse disistema. È possibile distribuire contenuti dinamici HTTP su una rete che utilizza i gestoriFastCGI per gli script, e può servire come un bilanciatore di carico software molto capace.

Nginx utilizza un approccio asincrono basato su eventi nella gestione delle richieste inmodo da ottenere prestazioni più prevedibili sotto stress, in contrasto con il modello delserver HTTP Apache che usa un approccio orientato ai thread o ai processi nella gestionedelle richieste.

In origine, fu sviluppato per soddisfare le esigenze di vari siti gestiti da Rambler (un portalerusso), per il quale ngnix serviva 500 milioni di richieste al giorno a partire da settembre2008

Secondo il Web Server Survey Netcraft di maggio 2011, nginx è risultato essere il terzoserver web più utilizzato in tutti i domini (7,50% dei siti esaminati) e il quarto server webpiù utilizzato per tutti i siti "attivi" (8,23% dei siti esaminati). Secondo BuiltWith, è utilizzatodal 9,92% del primo milione di siti web e la sua crescita all'interno dei primi diecimila,centomila ed un milione è in aumento.

Le caratteristiche HTTP di NGINX di base

Gestione dei file statici, file di indice, e auto-indicizzazione

• Reverse proxy con caching • Bilanciamento del carico • Tolleranza agli errori • Supporto SSL • Supporto FastCGI con il caching • Server virtuali basati su nome ed IP • Streaming FLV • Streaming MP4, utilizzando il modulo streaming MP4 • Autenticazione di accesso nelle pagine web • Compressione gzip • Capacità di gestire più di 10000 connessioni simultanee • Riscrittura degli URL • Log personalizzato • include server-side • WebDAV

4

Page 5: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

Caratteristiche come Mail Proxy

• Proxy SMTP, POP3 e IMAP

• supporto per STARTTLS

• supporto SSL

Prepariamoci ad installare NGINX

Una volta installato CentOS in modalità testuale e configurato a dovere per le nostreesigenze iniziamo ad installare i i repository necessari per NGINX, quindi accediamo comeroot al nostro sistema e digitiamo quanto segue qui sotto.

# rpm - - import /etc/pki/rpm-gpg/RPM-GPG-KEY*# rpm - - import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt

Accediamo ora alla cartella tmp con cd /tmp e scriviamo

# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

# rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

# rpm - -import https://fedoraproject.org/static/0608B895.txt# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm# rpm -ivh epel-release-6-8.noarch.rpm

# rpm - - import http://rpms.famillecollet.com/RPM-GPG-KEY-remi# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

Ora che abbiamo inserito i repository necessari scarichiamo le priorities

# yum install yum-priorities

Accediamo ora al file di configurazione del repository epel

# nano /etc/yum.repos.d/epel.repo

All'interno del file aggiungiamo questa voce priority = 10 e impostiamo enabled = 1.

Editiamo ora il repository remi:

# nano /etc/yum.repos.d/remi.repo

Abilitiamo enabled = 1 e priority = 10, salviamo e usciamo ed eseguiamo il comando

# yum update

in questo modo ricarichiamo il databese dei repository, al termine diamo anche il comando

# yum groupinstall 'Development Tools'.

5

Page 6: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

INSTALLARE NGINX

Per installare il web server impartiamo il comando

# yum install ntp# yum install nginx

Terminata l'installazione apportiamo un piccola modifica al file di configurazione.

# nano /etc/nginx/nginx.conf

Inseriamo queste righe all'interno della variabile http per abilitare il servizio https checonfigureremo prossimamente

http { [ … ] ## Detect when https is used map $scheme $https { default off; https on; } [ … ]}

Fermare ora eventuali servizi di web server come apache se installato

# /etc/init.d/httpd stop# chkconfig httpd off

Avviamo ora il web server NGINX

# chkconfig - -levels 235 nginx on# /etc/init.d/nginx start

Testiamo il funzionamento aprendo il browser e inserendo l'IP del server, dovremo vederela pagina index del server

6

Page 7: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

Apportiamo ora altre modifiche prima di installare PHP.

Per configurare NGINX, dobbiamo sapere quante cpu cono installate sul nostro server, pervelocizzare l'elaborazione dei processi, con il comando lscpu ne vediamo le proprietà. Aquesto punto, editiamo nuovamente il file conf di nginx e modifichiamo la voce specificataqui sotto assegnando il numero di cpu o core della nostra macchina.

worker_process 1; ←- (Cambiamo il numero inserendo il numero dei core del server)

Salviamo e poi editiamo il file default.conf per apportare le modifiche necessarie, quali ip eporta di ascolto e nome del server.

# nano /etc/nginx/conf.d/default.conf

server { listen 80 default_server; server_name webx.test.lan

Una volta apportata la modifica, salviamo e chiudiamo e poi riavviamo il server nginx

# /etc/init.d/nginx restart

Per permettere a NGINX di vedere i file con estensione .php, inseriamo questo script allafine del file /etc/nginx/conf.d/default.conf, prima dell'ultima parentesi }

## php block location ~ \.php?$ { try_files $uri =404; include fastcgi_params; #fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; fastcgi_split_path_info ^(.+\.php)(.*)$; #Prevent version info leakage

7

Page 8: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

fastcgi_hide_header X-Powered-By;}

INSTALLARE PHP

# yum install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-pecl-apc php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy

Avviamo php.fpm

# /etc/init.d/php-fpm start# chkconfig php-fpm on

Modifichiare il file php.ini, modificare la voce error_reporting in questo modo:error_reporting = E_ALL & ~E_NOTICEmodificare anche la voce cgi.fix_pathinfo=0 e la voce date.timezone = "Europe/Rome"

Controllare il cambiamento con il commando.

# cat /etc/sysconfig/clock

Installiamo fcgiwrap

# yum install fcgi-devel

Poi digitiamo cd /usr/local/src seguito da git clone git://github.com/gnosek/fcgiwrap.git,dopodiché scriviamo cd fcgiwrap e digitiamo i seguenti comandi:

# autoreconf -i# ./configure# make# make install

Installiamo poi (questo va considerato come otpional)

# yum install spawn-fcgi# nano /etc/sysconfig/span-fcgi E modifichiamo in questo modo il file:

8

Page 9: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

# You must set some working options before the "spawn-fcgi" service will work. # If SOCKET points to a file, then this file is cleaned up by the init script. # # See spawn-fcgi(1) for all possible options. # # Example : #SOCKET=/var/run/php-fcgi.sock #OPTIONS="-u apache -g apache -s $SOCKET -S -M 0600 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi" FCGI_SOCKET=/var/run/fcgiwrap.socket FCGI_PROGRAM=/usr/local/sbin/fcgiwrap FCGI_USER=apache FCGI_GROUP=apache FCGI_EXTRA_OPTIONS="-M 0770" OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"

Una volta apportata la modifica inseriamo l'utente nginx nel gruppo apache

# usermod -a -G apache nginx

Creare l'avvio per spawn-fcgi.

# chkconfig - - levels 235 spawn-fcgi on# /etc/init.d/spawn-fcgi start

A questo punto siamo pronti per testare il funzionamento di php, creiamo un file phpinfo

# nano /usr/share/nginx/html/testphp.php Al suo interno digitiamo quanto segue:<? phpphpinfo();?>salvare e uscire, riavviamo nginx /etc/init.d/nginx restart.Testiamo ora se php effettivamente funzioni, apriamo il browser e inseriamo l'IP delserver/testphp.php

9

Page 10: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

Testiamo con uno script il funzionamento dell'interprete CGI, rimaniamo nella cartella doveabbiamo creato il file di test per php e creiamo il nostro script di test.

# nano /usr/share/nginx/html/index.cgi

E creiamo lo script

#!/usr/bin/perl

print "Content-type: text/html\n\n";print "<html>\n<body>\n";print "<div style=\"width: 100%; font-size: 40px; font-weight: bold; text-align: center;\">\n";print "CGI Pagina di Test";print "\n</div>\n";print "</body>\n</html>\n";

Salviamo e chiudiamo e impostiamo i permessi corretti al file creato.

# chmod 705 /usr/share/nginx/html/index.cgi

Aggiungiamo in fondo al file /etc/nginx/conf.d/default.conf prima dell'ultima parentesi ilseguente codice

10

Page 11: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

## CGI block location ~ \.pl|cgi$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.cgi; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; }

E riavviamo

# /etc/rc.d/init.d/nginx restart # /etc/rc.d/init.d/spawn-fcgi start

Aprendo il browser e digitando l'ip del server/index.cgi, il risultato dovrebbe essere questo.

INSTALLIAMO POSTGRESQL 9.2

PostgreSQL è un completo database relazionale ad oggetti rilasciato con licenza libera(stile Licenza BSD). Spesso viene abbreviato come "Postgres", sebbene questo sia unnome vecchio dello stesso progetto.

PostgreSQL è una reale alternativa sia rispetto ad altri prodotti liberi come MySQL,Firebird SQL e MaxDB che a quelli a codice chiuso come Oracle, Informix o DB2 ed offrecaratteristiche uniche nel suo genere che lo pongono per alcuni aspetti all'avanguardia nelsettore dei database.

Un po si storia

Inizialmente il DBMS si chiamava INGRES ed era un progetto della Università di Berkeley.Nel 1982 il capo progetto, Michael Stonebraker, lasciò la Berkeley per commercializzare ilprodotto, ma in seguito tornò nel contesto accademico. Nel 1985 lasciò nuovamentel'università per dare vita a un progetto post-Ingres (che prese il nome di Postgres) chesuperasse gli evidenti limiti dei prodotti concorrenti dell'epoca. Le basi dei sorgenti diIngres e di Postgres erano, e sono rimaste nel tempo, ben distinte.

Il nuovo progetto puntava a fornire un supporto completo ai tipi di dati, in particolare lapossibilità di definire nuovi tipi di dati, UDF (User Defined Function), User Defined Types.

11

Page 12: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

Vi era anche la possibilità di descrivere la relazione tra le entità (tabelle), che fino ad alloraveniva lasciata completamente all'utente. Perciò non solo Postgres preservava l'integritàdei dati, ma era in grado di leggere informazioni da tabelle relazionate in modo naturale,seguendo le regole definite dall'utente.

Dal 1986 gli sviluppatori diffusero un gran numero di articoli che descrivevano il nuovosistema e nel 1988 venne rilasciato un primo prototipo funzionante. La versione 1 vennerilasciata nel giugno del 1989 per un numero di utenti contenuto. Seguì una versione 2 nelgiugno del 1990, in cui il sistema delle regole venne completamente riscritto. Nellaversione 3, del 1991, questo sistema venne riscritto ancora, ma venne aggiunto anche ilsupporto a gestori multipli di immagazzinamento dei dati e un motore di query migliorato.Nel 1993 vi era già un numero di utenti notevole che inondava il team di sviluppo conrichieste di supporto e di nuove caratteristiche. Dopo aver rilasciato la versione 4, che fuprincipalmente un ripulimento del codice, il progetto terminò.

Sebbene il progetto Postgres fosse ufficialmente abbandonato, la licenza BSD dava modoagli sviluppatori Open Source di ottenere una copia del software per poi migliorarlo a lorodiscrezione. Nel 1994 due studenti del Berkeley, Andrew Yu e Jolly Chen aggiunsero aPostgres un interprete SQL per rimpiazzare il vecchio QUEL che risaliva ai tempi di Ingres.Il nuovo software venne quindi rilasciato sul web col nome di Postgres95. Nel 1996cambiò nome di nuovo: per evidenziare il supporto al linguaggio SQL, venne chiamatoPostgreSQL.

Il primo rilascio di PostgreSQL è stata la versione 6. Da allora ad occuparsi del progetto èuna comunità di sviluppatori volontari provenienti da tutto il mondo che si coordinaattraverso Internet. Alla versione 6 ne sono seguite altre, ognuna delle quali ha portatonuovi miglioramenti. Nel gennaio 2005 è stata rilasciata la 8, la prima nativa per Windows.

Sebbene la licenza permetta la commercializzazione del software, il codice di Postgresnon è stato sviluppato commercialmente con la stessa rapidità di Ingres. Ad un certopunto, però, Paula Hawthorn (membro originale del team di Ingres) e Michael Stonebrakerformarono una società chiamata Illustra Information Technologies per commercializzarlo.

Che cos'è Postgresql

Un rapido esame di PostgreSQL potrebbe suggerire che sia simile agli altri database.PostgreSQL usa il linguaggio SQL per eseguire delle query sui dati. Questi sonoconservati come una serie di tabelle con chiavi esterne che servono a collegare i daticorrelati. La programmabilità di PostgreSQL è il suo principale punto di forza ed ilprincipale vantaggio verso i suoi concorrenti: PostgreSQL rende più semplice costruireapplicazioni per il mondo reale, utilizzando i dati prelevati dal database.

I database SQL conservano dati semplici in "flat table" (tabelle piatte n.d.t.), richiedendoche sia l'utente a prelevare e raggruppare le informazioni correlate utilizzando le query.Questo contrasta con il modo in cui sia le applicazioni che gli utenti utilizzano i dati: comead esempio in un linguaggio di alto livello con tipi di dato complessi dove tutti i daticorrelati operano come elementi completi, normalmente definiti oggetti o record (in base allinguaggio).

La conversione delle informazioni dal mondo SQL a quello della programmazioneorientata agli oggetti, presenta difficoltà dovute principalmente al fatto che i due mondiutilizzano differenti modelli di organizzazione dei dati. L'industria chiama questo problema"impedance mismatch" (conflitto di impedenza): mappare i dati da un modello all'altro puòassorbire fino al 40% del tempo di sviluppo di un progetto. Un certo numero di soluzioni di

12

Page 13: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

mappatura, normalmente dette "object-relational mapping", possono risolvere il problema,ma tendono ad essere costose e ad avere i loro problemi, causando scarse prestazioni oforzando tutti gli accessi ai dati ad aver luogo attraverso il solo linguaggio che supporta lamappatura stessa.

PostgreSQL può risolvere molti di questi problemi direttamente nel database. PostgreSQLpermette agli utenti di definire nuovi tipi basati sui normali tipi di dato SQL, permettendo aldatabase stesso di comprendere dati complessi. Per esempio, si può definire un indirizzocome un insieme di diverse stringhe di testo per rappresentare il numero civico, la città,ecc. Da qui in poi si possono creare facilmente tabelle che contengono tutti i campinecessari a memorizzare un indirizzo con una sola linea di codice.

PostgreSQL, inoltre, permette l'ereditarietà dei tipi, uno dei principali concetti dellaprogrammazione orientata agli oggetti. Ad esempio, si può definire un tipo codice_postale,quindi creare un tipo cap (codice di avviamento postale) o un tipo us_zip_code basato sudi esso. Gli indirizzi nel database potrebbero quindi accettare entrambi i tipi, e regolespecifiche potrebbero validare i dati in entrambi i casi. Nelle prime versioni di PostgreSQL,implementare nuovi tipi richiedeva scrivere estensioni in C e compilarle nel server didatabase. Dalla versione 7.4 è diventato molto più semplice creare ed usare tipipersonalizzati attraverso il comando "CREATE DOMAIN".

La programmazione del database stesso può ottenere grandi vantaggi dall'uso dellefunzioni. La maggior parte dei sistemi SQL permette agli utenti di scrivere una procedura,un blocco di codice SQL che le altre istruzioni SQL possono richiamare. Comunque il SQLstesso rimane inadatto come linguaggio di programmazione, pertanto gli utenti possonosperimentare grandi difficoltà nel costruire logiche complesse. Ancora peggio, il SQLstesso non supporta molti dei principali operatori di base dei linguaggi di programmazione,come le strutture di controllo di ciclo e condizionale. Pertanto ogni venditore ha scritto lesue estensioni al linguaggio SQL per aggiungere queste caratteristiche, e pertanto questeestensioni non per forza operano su diverse piattaforme di database.

In PostgreSQL i programmatori possono implementare la logica in uno dei molti linguaggisupportati.

• Un linguaggio nativo chiamato PL/pgSQL simile al linguaggio procedurale di OraclePL/SQL, che offre particolari vantaggi nelle procedure che fanno uso intensivo diquery.

• Wrapper per i più diffusi linguaggi di scripting come Perl, Python, Tcl, e Ruby chepermettono di utilizzare la loro potenza nella manipolazione delle stringhe e nel linkad estese librerie di funzioni esterne.

• Le procedure che richiedono prestazioni maggiori e logiche di programmazionecomplesse possono utilizzare il C ed il C++.

• Inoltre è disponibile anche un interfacciamento all'esoterico linguaggio R, ricco difunzioni statistiche e per il calcolo matriciale.

Il programmatore può inserire il codice sul server come funzioni, che rendono il codiceriusabile come stored procedure, in modo che il codice SQL possa richiamare funzioniscritte in altri linguaggi (come il C o il Perl).

Punti di forza della programmabilità di PostgreSQL:

• Incremento delle prestazioni, in quanto la logica viene applicata direttamente dalserver di database in una volta, riducendo il passaggio di informazioni tra il client edil server.

13

Page 14: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

• Incremento dell'affidabilità, dovuto alla centralizzazione del codice di controllo sulserver, non dovendo gestire la sincronizzazione della logica tra molteplici client e idati memorizzati sul server.

• Inserendo livelli di astrazione dei dati direttamente sul server, il codice del client puòessere più snello e semplice.

Questi vantaggi fanno di PostgreSQL, probabilmente, il più avanzato sistema database dalpunto di vista della programmabilità, il che aiuta a spiegarne il successo. UtilizzarePostgreSQL può ridurre il tempo totale di programmazione di molti progetti, con i vantaggisuddetti che crescono con la complessità del progetto stesso, ovviamente se utilizzato dautenti esperti nel suo utilizzo.

Dati Nativi

Sono inclusi nativamente una grande varietà di tipi di dati:

• Booleani • numerici con precisione arbitraria • Caratteri (testo, varchar, char) • Binari • Data/ora (timestamp/time con/senza fusi orari, date, interval) • Money • Enum • Bit strings • Text search type • Composite • Arrays (lunghezza variabile e qualsiasi tipo di dato, incluso text e tipi composti) fino

a 1GB. • Primitive geometriche • Indirizzi IPv4 e IPv6 • Blocchi CIDR e Indirizzi MAC • XML che supporta interrogazioni XPath (dalla 8.3) • UUID (dalla 8.3)

PostgreSQL gestisce la concorrenza attraverso un sistema conosciuto come controllodella concorrenza multiversione (MVCC) che dà ad ogni transazione una "immagine" dellabase di dati, permettendo cambiamenti non visibili ad altre transazioni fino a che questinon sono eseguiti. Ciò permette di eliminare quasi sempre il bisogno di ricorrere all'utilizzodi lock di lettura (read locks) e assicura il mantenimento dei principi ACID in manieraefficiente.

Iniziamo la nostra installazione di Postgresql spostandoci nella cartella /tmp e iniziamo ascaricare il database da sorgente.

# cd /tmp# wget http://yum.pgrpms.org/9.2/redhat/rhel-6-x86_64/pgdg-centos92-9.2-6.noarch.rpm# rpm -ivh pgdg-centos92-9.2-6.noarch.rpm

14

Page 15: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

# yum search postgres# yum install postgresql92 postgresql92-server

Se vogliamo utilizzare yum aggiungiamo exclude a /etc/yum.repos.d/CentOS-Base.repofile [base] e [updates] sections:

[base]...exclude=postgresql* [updates]...exclude=postgresql*

Installiamo i repository

## CentOS 6 - i386 - 32-bit ##rpm -Uvh http://yum.postgresql.org/9.2/redhat/rhel-6-i386/pgdg-centos92-9.2-6.noarch.rpm ## CentOS 6 - x86_64 - 64-bit ##rpm -Uvh http://yum.postgresql.org/9.2/redhat/rhel-6-x86_64/pgdg-centos92-9.2-6.noarch.rpm ## CentOS 5 - i386 - 32-bit ##rpm -Uvh http://yum.postgresql.org/9.2/redhat/rhel-5-i386/pgdg-centos92-9.2-6.noarch.rpm ## CentOS 5 - x86_64 - 64-bit ##rpm -Uvh http://yum.postgresql.org/9.2/redhat/rhel-5-x86_64/pgdg-centos92-9.2-6.noarch.rpm

Ora possiamo installare tramite yum

# yum install postgresql92 postgresql92-server postgresql92-contrib

Settiamo ora l'IP e la porta d'ascolto di prosgresql, accediamo a/var/lib/pgsql/9.2/data/postgresql.conf e aggiungiamo o commentiamo le seguentimodifche:

listen_addresses = '*'port = 5432

Se si vuole utilizzare la sola configurazione come localhost allora eseguire questa modifica:

listen_addresses = 'localhost'

15

Page 16: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

port = 5432

Oppure si può usare un ip specifico

listen_addresses = '192.1.2.33'port = 5432

Una volta installato postresql creiamo il db di default avviandone il servizio

# service postgresql-9.2 initdb# service postgresql-9.2 start# chkconfig postgresql-9.2 on

Creiamo ora l'utente per accedere a postgressql, con il comado.

# su postgrespsql postgrespostgres=# alter user postgres with password 'password';outputalter roleposgres=#

Configuriamo postgres per la cryptazione delle password, editiamo il file

# nano /var/lib/pgsql/9.2/data/pg_hba.conf

Imposteremo i metodi di autenticazione in MD5 In questo modo solo per localhost

# TYPE DATABASE USER ADDRESS METHOD

# "local" is for Unix domain socket connections only local all all md5 # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5

Oppure cosi se vogliamo collegamenti al database diferenziati

# Local networkshost all all xx.xx.xx.xx/xx md5# Examplehost all all 10.20.4.0/24 md5# Example 2host test testuser 127.0.0.1/32 md5

16

Page 17: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

Chiudiamo e riavviamo il servizio di postgres.

# service postgresql-9.2 restart

Creiamo ora un database di test, accediamo come utente posgres

# su postgres

Creiamo il database di test con l'utente postgres.

createdb test

Creiamo ora il nuovo utente che chiameremo “testuser” con i previlegi amministrativi

CREATE ROLE testuser WITH SUPERUSER LOGIN PASSWORD 'test';

Testiamo ora il collegamento al nostro db come normale utente Linux

psql -h localhost -U testuser test

ABILITARE CONESSIONE REMOTA A POSGRESQL (OPTIONAL)

Per permettere una connessione remota a postgresql dobbimo fare in modo che la portatcp 5432 risulti aperta, se abbiamo impostato il firewall di Linux (iptables) come attivoallora dobbiamo creare una regola che ci permetta di aprire questa porta.

Editiamo il file /etc/sysconfig/iptables file

# nano /etc/sysconfig/iptables

Aggiungere la seguente riga prima di -A INPUT -j REJECT…

-A INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT

Salviamo e riavviamo il servizio di iptables.

# service iptables restart

## OPPURE ##

# /etc/init.d/iptables restart

Ora possiamo testare la nostra connessione remota verso il database

# psql -h dbserver_name_or_ip_address -U testuser -W test

17

Page 18: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

INSTALLARE PHPPGADMIN

phpPgAdmin è un'applicazione PHP libera che consente di amministrare in modosemplificato database di PostgreSQL tramite un qualsiasi browser. L'applicazione èindirizzata sia agli amministratori del database, sia agli utenti. Gestisce i permessiprelevandoli dal database PostgreSQL.phpPgAdmin permette di creare un database da zero, creare le tabelle ed eseguireoperazioni di ottimizzazione sulle stesse. Presenta un feedback sulla creazione delletabelle per evitare eventuali errori. Sono previste delle funzionalità per l'inserimento deidati (popolazione del database), per le query, per il backup dei dati, ecc..

L'amministratore, invece ha a disposizione un'interfaccia grafica per la gestione degliutenti: l'interfaccia permette l'inserimento di un nuovo utente, la modifica della relativapassword e la gestione dei permessi che l'utente ha sul database, utilizzando lo standardSQL.

Il progetto è iniziato come un fork di phpMyAdmin, ma attualmente ha un codice di basecompletamente differente e fornisce servizi paragonabili a quelli per gli utenti di MySQL,principale concorrente di PostgreSQL

Da shell digitiamo.

# yum install phppgadmin

Al termine dell'installazione trovaimo la cartella di phpPgAdmin in /usr/share, entriamoci eeditiamo il file config.inc.php e modifichiamo alcune voci.

# nano /usr/share/phpPgAdmin/conf/config.inc.php

$conf [ 'servers' ] [0] [' host '] = 'localhost'; ←- (Modifichiamo questa voce)

$conf [ 'extra_login_security' ] = true; ←- (sostituire true con false)

Questo permetterà di sbloccare il login in phpPgadmin.Creiamo ora un link simbolico vero la root di nginx, posizioniamoci in /usr/share/nginx/html/e creiamo il link simbolico.

# cd /usr/share/nginx/html/# ln -s /usr/share/phpPgAdmin/ ./phpPgAdmin

Creato il link collegarsi tramite browser a ip_server/phpPgAdmin/index.php, cliccaresull'icona a sinistra del db e logarsi con le credenziali create per postgresql.

18

Page 19: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

IMPOSTAZIONE DI NGINX CON CERTIFICATO SSL

Creare una cartella chiamata ssl

# mkdir /etc/nginx/ssl# cd /etc/nginx/ssl

Creiamo ora un certificato per il server.

# openssl genrsa -des3 -out server.key 2048

# openssl req -new -key server.key -out server.csr

Compiliamo le richieste fatte dal setup

Rimuoviamo ora la passphrase

# cp server.key server.key.org# openssl rsa -in server.key.org -out server.key

Eseguiamo la firma del certificato (in questo esempio ho creato un certificato dalla validitàdi 2 anni).

# openssl x509 -req -days 730 -in server.csr -signkey server.key -out server.crt

Una volta creato il certificato passiamo ad abilitare nginx all'uso di ssl, editando il file ssl.conf.

19

Page 20: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

# nano /etc/nginx/conf.d/ssl.conf

E rimuovere il simbolo # da queste voci:

# # HTTPS server configuration #

server { listen 443; server_name Srvngpostgr.adam.lan;

ssl on; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key;

Riavviare ora il server.

# /etc/init.d/nginx restart

Testiamo ora il server utilizzando https.

Attenzione, se vogliamo convalidare anche il php sotto https, dobbiamo inserire le stesserighe di php che abbiamo inserto precedentemente per l'http(/etc/nginx/conf.d/default.conf), le stesse dovranno essre inserite in fondo al file ssl.confprima della parentesi graffa di chiusura.

# nano /etc/nginx/conf.d/ssl.conf

## php block location ~ \.php?$ { try_files $uri =404; include fastcgi_params; #fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; fastcgi_split_path_info ^(.+\.php)(.*)$; #Prevent version info leakage fastcgi_hide_header X-Powered-By; }

ABILITARE REDIRECT FROM HTTP TO HTTPS

Se necessita per motivi di sicurezza impostare il redirect di http verso https, dobbiamoiniziare con l'editare il file default.conf

20

Page 21: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

# nano /etc/nginx/conf.d/default.conf

Posizioniamoci dopo la parentesi graffa finale ( } ) e digitiamo:

## HTTP to HTTPS redirect server { listen 80;

infondo alla riga prima dell'ultima }

root /var/empty; server_name Srvngpostrg.adam.lan; rewrite ^ https://Srvngpostgr.adam.lan$request_uri permanent; }

ABILITIAMO UTILIY PER L'ESTENSIONE DELLE IMMAGINI ECC..

Nginx permette di abilitare e modificare le estensioni dei file gestiti, come i file immagine ei file compressi, per fare questo dobbiamo editare il file nginx.conf.

# nano /etc/nginx/nginx.conf

Prima della parentesi graffa ( } ) finale, dove troviamo scritto gzip on; inseriamo:

# compression gzip on; gzip_buffers 16 8 k; gzip_vary on; gzip_types text/plain text/css application/json application/x-javascript application/xml application/xml+rss text/javascript image/png image/jpeg image/jpg image/gif text/x- component text/richtext image/svg+xml text/xls text/xsd text/xml image/x-icon image/pdf;

# General options charset UTF-8; ignore_invalid_headers on; max_ranges 0; recursive_error_pages on; server_tokens off; source_charset UTF-8;

}

NGINX CONFIGUARAZIONE VIRTUALHOST

Vediamo ora come ultima parte di questo how-to su nginx come configurare un virtualhost,

21

Page 22: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

iniziamo con il creare la directory del virtualhost, come visto all'inizio, la root di nginx è in/usr/share/nginx/html , il path che useremo per il nostro virtualhost sarà /var/www ed èproprio qui che inseriremo tutti i siti che vogliamo nel nostro server.

Per creare la folder digitiamo:

# mkdir -p /var/www/example.com/public_html

È necessario designare un dominio effettivo DNS approvato, o un indirizzo IP, verificareche un host virtuale funziona. In questo tutorial useremo example.com come nome didominio corretto.

Impostiamo ora i permessi corretti alla cartella, abbiamo bisogno di impostare i permessi ele proprietà corrette della directory con l'utente giusto, L'utente creato per Nginx è nginx,pertanto imposteremo i permessi in questo modo:

# chown -R nginx:nginx /var/www/example.com/public_html# sudo chmod -R 755 /var/www

Creiamo ora la pagina di test:

# nano /var/www/example.com/public_html/index.html

E inseriamo queste righe:

<html> <head> <title>www.example.com</title> </head> <body> <h1>Perfetto: Hai appena settato il tuo primo virtualhost</h1> </body></html>

Salviamo e usciamo. Ora passiamo alla configurazione vera e propria del virtualhost, perfare questo dobbiamo editare il file virtual.conf.

# /etc/nginx/conf.d/virtual.conf

E inseriamo ora quanto riportato qui sotto:

## A virtual host using mix of IP-, name-, and port-based configuration#

server { listen 80;# listen *:80; server_name example.com;

22

Page 23: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

location / { root /var/www/example.com/public_html/; index index.html index.htm; }}

Riavviamo il server

# /etc/init.d/nginx restart

Per poter testare il virtualhost, dovremo inserire nel file host del client dove stiamolavorando il nome del sito nel nostro caso example.com e l'ip del server, questo perchéstiamo testando il nostro server localmente, se avessimo avuto a disposizione un serverDNS avremmo fatto il lavoro da li uguale se avevamo a disposizione un vero nome DNS.

Per configurare il nostro file hosts, su linux il path è /etc/hosts, se invece stiamo lavorandoda Windows 7 o 8, il path per il file host è C:\Windows\system32\drivers\etc, per poterscrivere nel file host dovete aprirlo come amministratore.

Ecco cosa si scrive all'interno del file hosts:

# nano /etc/hosts

# Host Database## localhost is used to configure the loopback interface# when the system is booting. Do not change this entry.##127.0.0.1 localhost

#Virtual Hosts 12.34.56.789 www.example.com

Ora non resta che aprire il browser e digitare http://example.com, dovrebbe visualizzarsi ilfile in html preparato precedentemente.

23

Page 24: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

Abbiamo visto che tutto funziona, ora se dobbiamo aggiungere più virtualhost, nondobbiamo fare altro che inserire nuove righe nel file virtual.conf, in questo modo:

## A virtual host using mix of IP-, name-, and port-based configuration#

server { listen 80;# listen *:80; server_name example.com;

location / { root /var/www/example.com/public_html/; index index.html index.htm; }}

server { listen 80;# listen *:80; server_name example.org;

location / { root /var/www/example.org/public_html/; index index.html index.htm; }}

Un ultimo sforzo, se avete notato i virtualhost permettono la visualizzazione solo dei filehtml, ovvero di siti statici, per inserire e visualizzare pagine in php dobbiamo aggiungere

24

Page 25: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

infondo prima dell'ultima parentesi di ogni virtualhost lo script per il php che si compone inquesto modo:

server { listen 80; # listen *:80; server_name elisa.lan;

location / { root /var/www/elisa.lan/public_html/; index index.php index.html index.htm; } (Qui inizia lo script)# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 location ~ \.php$ { root /var/www/example.com/public_html; try_files $uri =404; include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_hide_header X-Powered-By; } (Qui finisce)location ~ /\.ht { deny all; } }

Per testare non vi resta che preparare un file infophp e inserirlo nella cartella public_html,chiameremo il nostro file test.php

# nano /var/www/example.com/public_html/test.php

Inseriamo questo piccolo codice in php

<?phpPhpinfo() ;?>

Salvate e uscite, impostate i permessi al file con:

# chmod 755 test.php

Ora aprite il browser e digitate http://example.com/test.php, dovreste visualizzare la paginain php ricca di informazioni.

25

Page 26: By Adam Cavallin · INSTALLARE IL WEB SERVER NGINX CON POSTGRESQL, PHP e PHPPgAdmin Su CentOS 6.4 (x86_64) NGINX sviluppato da Igor Sysoev è un web server/reverse proxy leggero ad

Ringraziamenti

Abbiamo terminato, e qui permettetemi di fare i dovuti ringraziamenti alla mia famiglia allaquale di tanto in tanto sottraggo a loro tempo per dedicarmi a queste mini guide, ma lapassione e tanta e anche la pazienza di mia moglie. Un ringraziamento speciale va allacomunità di internet della quale orgogliosamente ne faccio parte per il sapere collettivoimmesso constatemene in rete.

Grazie Camelia e Elisa per il vostro tempo.

Adam

26