LAPP & SSL - Servidor de Producción Con Web.py Vol 1
Jorge Alonso Toro Hoyos
15 de Agosto del 2011
Puede encontrar la versión actualizada en
http://jolthgs.wordpress.com/
Copyright © 2011 Jorge Toro http://jolthgs.wordpress.com/
LAPP & SSL - Servidor de Producción Con Web.py Vol 1.
by Jorge Toro
Copyright © 2011 Jorge Toro
Copyright © 2011 Jorge Toro http://jolthgs.wordpress.com/
Índice general
1 Introducción al Objetivo
2 Instalación desde las fuentes de PostgreSQL 9.0.4
3 Instalación de Apache
4 Configuración y soporte a mod_wsgi
5 Configuración Apache + SSL
6 Instalación y configuración de Web.py + Apache + PostgreSQL
7 Creación de APP
Copyright © 2011 Jorge Toro http://jolthgs.wordpress.com/
Prefacio
Objetivos
Los objetivos principales de este manual son el montaje de un servidor LAPP en GNU/Linux que
permita ejecutar en un ambiente de producción, aplicativos desarrollados en python que accedan a una
base de datos postgresql con replicación de datos.
La ejecución y la paquetería fue desarrollada y probada en un servidor Debian GNU/Linux 6.0.2
(squeeze). Sin embargo no existe ningún impedimento para que esto se pueda llevar a cabo en otras
distros.
Requisitos
Se supone que los lectores tienen algún conocimiento en GNU/Linux, CLI, bash, compilación, gestor
de paquetes, postgresql, ssl, ssh, programación en python y apache.
Errores
Si desea informar de algún error por favor ponerse en contacto con el creador
[email protected] y
[email protected]. Se agradece su ayuda.
Dependencias
Para cada apartado se indicará por separado cada una de las dependencias que sean necesarias para el
desarrollo del mismo.
Copyright © 2011 Jorge Toro http://jolthgs.wordpress.com/
1. Introducción a los Objetos
En este capítulo se detalla una breve introducción a cada una de las tecnologías usadas en
el desarrollo del manual y los objetivos a alcanzar.
GNU/Linux
Debian
PostgreSQL
Apache
SSL
mod_wsgi
Python
Web.py
Psycopg
Copyright © 2011 Jorge Toro http://jolthgs.wordpress.com/
2. Instalación desde las fuentes de PostgreSQL
9.0.4
Este capítulo presenta la instalación de postgreSQL y su configuración básica.
1. DEPENDENCIAS:
paquetes: gcc, make, zlib, readline, gettext, openssl
librerías: libssl-dev, libreadline6-dev, libpam0g-dev, libldap-dev, python-dev, libperl-dev
2. USUARIO DEL SISTEMA PARA PostgreSQL
Creamos nuestro usuario:
# adduser --home /usr/local/postgresql-9.0.4 postgres
ingresamos al user postgres:
# login postgres
3. VARIABLES DEL ENTORNO
$ echo "export PGDATA=$HOME/data" >> .profile
$ echo "export PGSRC=$HOME/src/postgresql-9.0.4" >> .profile
$ echo "export PGHOME=$HOME/pgsql" >> .profile
$ source .profile
$ echo "export PGLOG=$PGDATA/pg9.0.4.log" >> .profile
$ echo "export PGBIN=$PGHOME/bin" >> .profile
$ source .profile
$ echo "export PATH=$PATH:$PGBIN" >> .profile
$ source .profile
4. INSTALACION DE PostgreSQL 9.0.4
Creamos el directorio para las fuentes:
$ mkdir -p $PGSRC
Descargamos las fuentes:
$ cd $PGSRC
$ wget -c ftp://ftp5.us.postgresql.org/pub/PostgreSQL/source/v9.0.4/postgresql-
9.0.4.tar.gz
Desempaquetamos las fuentes:
$ gzip -dc postgresql-9.0.4.tar.gz | tar xvf -
$ cd postgresql-9.0.4/
Preparamos todo para la compilación:
$ ./configure --prefix=$PGHOME --enable-nls --with-python --with-perl --with-
openssl --with-pam --with-ldap
Copyright © 2011 Jorge Toro http://jolthgs.wordpress.com/
Compilamos:
$ make
Instalamos:
# make install
5. PUESTA EN MARCHA
# cd /usr/local/postgresql-9.0.4/
# chown -R postgres. pgsql/
Creamos el Cluster:
$ initdb --pgdata=$PGDATA --encoding=utf8 -U postgres
Los archivos de este cluster serán de propiedad del usuario «postgres».
Este usuario también debe ser quien ejecute el proceso servidor.
El cluster será inicializado con configuración local es_CO.UTF-8.
La configuración de búsqueda en texto ha sido definida a «spanish».
creando el directorio /usr/local/postgresql-9.0.4/data ... hecho
creando subdirectorios ... hecho
seleccionando el valor para max_connections ... 100
seleccionando el valor para shared_buffers ... 28MB
creando archivos de configuración ... hecho
creando base de datos template1 en /usr/local/postgresql-9.0.4/data/base/1 ...
hecho
inicializando pg_authid ... hecho
inicializando dependencias ... hecho
creando las vistas de sistema ... hecho
cargando las descripciones de los objetos del sistema ... hecho
creando conversiones ... hecho
creando directorios ... hecho
estableciendo privilegios en objetos predefinidos ... hecho
creando el esquema de información ... hecho
instalando el lenguaje PL/pgSQL ... hecho
haciendo vacuum a la base de datos template1 ... hecho
copiando template1 a template0 ... hecho
copiando template1 a postgres ... hecho
ATENCIÓN: activando autentificación «trust» para conexiones locales.
Puede cambiar esto editando pg_hba.conf o usando el parámetro -A
la próxima vez que ejecute initdb.
Completado. Puede iniciar el servidor de bases de datos usando:
postgres -D /usr/local/postgresql-9.0.4/data
o
pg_ctl -D /usr/local/postgresql-9.0.4/data -l archivo_de_registro start
Iniciamos el servidor postgres:
$ pg_ctl -D $PGDATA -l $PGLOG start
Copyright © 2011 Jorge Toro http://jolthgs.wordpress.com/
6. CONFIGURANDO POSTGRES.
$ psql template1
template1=# ALTER USER postgres WITH PASSWORD 'sergtsop';
template1=# \q
Editamos el fichero postgresql.conf:
$ vim data/postgresql.conf
buscamos y reemplazamos las siguientes variables:
listen_addresses = '*'
password_encryption = on
Editamos el fichero pg_hba.conf :
$ vim data/pg_hba.conf
reemplazamos todas las conexiones: trust, por md5.
Debe quedar algo como esto:
77 # TYPE DATABASE USER CIDR-ADDRESS METHOD
78
79 # "local" is for Unix domain socket connections only
80 local all all md5
81 # IPv4 local connections:
82 host all all 127.0.0.1/32 md5
83 # IPv6 local connections:
84 host all all ::1/128 md5
Reiniciamos nuestro servidor postgresql:
$ pg_ctl -D $PGDATA -l $PGLOG restart
Ingresamos al CLI de postgresql y probamos la conexión:
$ psql -U postgres -W postgres
Copyright © 2011 Jorge Toro http://jolthgs.wordpress.com/
3. Instalación de Apache
En este capítulo se detalla la instalación de Apache desde el gestor de paquetes de Debian y
la forma de instalarlo desde las fuentes.
# hostname -f
debian1.local
1. INSTALACION DESDE EL GESTOR DE PAQUETES
# aptitude install apache2 -y
# lynx localhost
o
# /etc/init.d/apache2 status
2. INSTALACION DESDE LAS FUENTES
Copyright © 2011 Jorge Toro http://jolthgs.wordpress.com/
4. Configuración y soporte a mod_wsgi
En este capítulo se detalla la configuración de Apache con mod_wsig.
1. INSTALACION DESDE EL GESTOR DE PAQUETES
# aptitude install libapache2-mod-wsgi python-flup
Habilitamos los módulos necesarios:
# a2enmod rewrite
Luego creamos nuestro directorio raíz:
# mkdir -p /srv/www/`hostname -f`/application/
Creamos la configuración de nuestra VirtualHost para Apache con soporte mod_wsgi:
# vim /etc/apache2/sites-available/debian1.local
<VirtualHost *:80>
ServerAdmin
[email protected]
ServerName debian1.local
ServerAlias www.debian1.local
DocumentRoot /srv/www/debian1.local/public_html/
ErrorLog /srv/www/debian1.local/logs/error.log
CustomLog /srv/www/debian1.local/logs/access.log combined
WSGIScriptAlias / /srv/www/debian1.local/application
Alias /static /srv/www/debian1.local/public_html
<Directory /srv/www/debian1.local/application>
SetHandler wsgi-script
Options ExecCGI FollowSymLinks
</Directory>
# <Files code.py>
# SetHandler wsgi-script
# Options ExecCGI FollowSymLinks
# </Files>
AddType text/html .py
<Location />
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !^/static
RewriteCond %{REQUEST_URI} !^(/.*)+code.py/
RewriteRule ^(.*)$ code.py/$1 [PT]
</Location>
</VirtualHost>
Deshabilitamos el sitio por defecto y habilitamos nuestro sitio:
# a2ensite debian1.local
# a2dissite default
Copyright © 2011 Jorge Toro http://jolthgs.wordpress.com/
Creamos la estructura de directorios necesaria:
# mkdir /srv/www/debian1.local/public_html/
# mkdir /srv/www/debian1.local/logs/
# touch /srv/www/debian1.local/logs/error.log
Reiniciamos el servidor web:
# /etc/init.d/apache2 restart
Copyright © 2011 Jorge Toro http://jolthgs.wordpress.com/
5. Configuración Apache + SSL
En este capítulo se detalla cómo configurar apache con soporte SSL.
1. INSTALACION
# aptitude install openssl ssl-cert
Creamos el directorio para nuestras claves.
# mkdir /etc/apache2/ssl
Creamos nuestra clave publica y privada.
root@debian1:/srv/www/debian1.local/application/templates# openssl req -new -x509
-days 365 -nodes -out /etc/apache2/ssl/publico.pem -keyout
/etc/apache2/ssl/privado.pem
Generating a 1024 bit RSA private key
.++++++
..++++++
writing new private key to '/etc/apache2/ssl/privado.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CO
State or Province Name (full name) [Some-State]:Bogota
Locality Name (eg, city) []:Bogota
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:jolth
Email Address []:
[email protected]
root@debian1:/srv/www/debian1.local/application/templates# /etc/i
Comentarios de: LAPP & SSL - Servidor de Producción Con Web.py (0)
No hay comentarios