Instalación manual

Estas instrucciones se han comprobado que funcionan en Ubuntu 16.04 64 bits. Para otras distribuciones el proceso debería ser similar.

Instalación de las dependencias:

sudo apt-get install python3-software-properties software-properties-common \
build-essential python3-pip python3-dev python3-venv python3-wheel \
python3-setuptools libxml2-dev libxslt1-dev libgmp-dev zlib1g-dev \
wget git libpq-dev postgresql postgresql-contrib python-psycopg2 \
openssl checkinstall openjdk-8-jre elasticsearch

echo ". ~/.virtualenvs/libreborme/bin/activate" >> ~/.bashrc

Configuración de PostgreSQL:

Creamos un usuario y una base de datos para LibreBORME:

sudo su postgres
psql -U postgres -c 'CREATE DATABASE libreborme;'
psql -U postgres -c "CREATE USER libreborme WITH PASSWORD 'password';"
psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE libreborme TO libreborme;"

Instalación de LibreBORME:

En este caso la instalación la realizamos en la carpeta /var/www/libreborme pero podría ser cualquier otra teniendo en cuenta que tenemos que cambiar esta ruta en otros archivos de configuración que la usan. Nos descargamos el paquete de LibreBORME y lo instalamos en un entorno virtual de Python junto a sus dependencias (entre ellas, bormeparser):

git clone https://github.com/PabloCastellano/libreborme.git
cd libreborme
mkvirtualenv libreborme -p /usr/bin/python3
pip install -r requirements/base.txt

A continuación ajusta tu configuración en libreborme/settings.py con tus rutas y especialmente cambia la variable SECRET_KEY.

Ya podemos crear el esquema de las tablas en la base de datos PostgreSQL y cargar unos datos predefinidos necesarios para que funcione LibreBORME:

./manage.py migrate
./manage.py loaddata libreborme/fixtures/config.json
./manage.py collectstatic

Ejecución

LibreBORME ya está listo para funcionar. Ejecutamos el servidor de desarrollo de Django para comprobarlo:

cd libreborme
./manage.py runserver

Herramientas de desarrollo

Si quieres instalar herramientas de desarrollo:

pip install -r requirements/development.txt

Versión en producción:

Si queremos la versión de producción necesitamos configurar además nginx, uwsgi y supervisor.

sudo apt-get install nginx-full nginx-common uwsgi-plugin-python3 supervisor

Para configurar supervisor crearemos el archivo /etc/supervisor/conf.d/uwsgi.conf con el siguiente contenido:

[program:uwsgi]
user=www-data
directory=/var/www/libreborme
command=uwsgi --ini uwsgi.ini --plugin python3
autostart=true
autorestart=true
stopsignal=INT
redirect_stderr=true
stdout_logfile=/var/www/libreborme/log/uwsgi.log
stdout_logfile_maxbytes=30MB
stdout_logfile_backups=5

De esta forma supervisor monitorizará el proceso uwsgi y lo arrancará si el servidor se reinicia. La interfaz uwsgi la configuramos creando el archivo /var/www/libreborme/uwsgi.ini con el siguiente contenido:

[uwsgi]
chdir=/var/www/libreborme
module=mylibreborme.wsgi:application
master=True
pidfile=/var/www/libreborme/uwsgi.pid
socket=libreborme.sock
chmod-socket = 664
processes=2
harakiri=20
max-requests=5000
vacuum=True
home=/home/libreborme/.virtualenvs/libreborme
enable-threads=True
env=HTTPS=on
buffer-size=8192

Por último nos queda configurar en nginx un nuevo sitio web creando el archivo /etc/nginx/sites-available/libreborme con el siguiente contenido:

server {
  listen 80;

  server_name libreborme.net;

  access_log /var/log/nginx/libreborme.net.access.log;
  error_log /var/log/nginx/libreborme.net.error.log;

  root /var/www/libreborme/public_html;
  index index.html index.htm;

  # set client body size #
  client_max_body_size 5M;

  location @uwsgi {
    uwsgi_pass unix:/var/www/libreborme/libreborme.sock;
    include uwsgi_params;
    uwsgi_param HTTP_X_FORWARDED_PROTO https;
  }

  location / {
    try_files $uri @uwsgi;
  }

  location /static {
    alias /var/www/libreborme/mylibreborme/static/;
  }

  location ~ /\.ht {
    deny all;
  }
}

Y activamos el sitio:

sudo ln -sf /etc/nginx/sites-available/libreborme /etc/nginx/sites-enabled/libreborme
sudo supervisorctl restart uwsgi
sudo service nginx restart

Tareas periódicas

Queremos que cada día LibreBORME descargue los nuevos BORMEs y actualice la base de datos con los últimos cambios en el Registro Mercantil. Para ello vamos a configurar una tarea programada de cron. Creamos el archivo /var/www/libreborme/script.sh con el siguiente contenido, al que le daremos también permisos de ejecución:

#!/bin/sh
. ~/.virtualenvs/libreborme/bin/activate

cd /var/www/libreborme && ./manage.py importbormetoday

El archivo necesita permisos de ejecución:

chmod 755 /var/www/libreborme/script.sh

Finalmente añadimos la tarea programada con la utilidad crontab y la configuramos para que se ejecute de lunes a viernes (1-5) a las 8:00 AM:

crontab -e

# Añadir la siguiente línea al final del archivo:
0 8 * * 1-5

Comandos

./manage.py companyinfo "SOCIEDAD ESTATAL CORREOS Y TELEGRAFOS SA"
./manage.py companyinfo sociedad-estatal-correos-y-telegrafos
./manage.py findcompany correos asd
./manage.py importbormepdf /home/libreborme/.bormes/pdf/2009/01/02/BORME-A-2009-1-31.pdf -v 3

Para actualizar a la última versión:

git stash && git pull && git stash pop && ./manage.py updateversion

Tests:

./runtests.sh