sábado, 17 de septiembre de 2016

Jugando con mi Server: 1

Instrucciones para poner a funcionar una base de datos NoSQL que utilizarán nuestras aplicaciones web, usamos MongoDB.


 Install & Run 


 Instalación del paquete mongodb:
$ sudo apt-get install mongodb-org
Creamos carpeta donde alojaremos nuestra base de datos con
$ mkdir
IMPORTANTE: Necesario dar permisos; p.e. Para base de datos en /home/ubuntu/db
$ sudo chown -R 'youruserid' /home/ubuntu/db
Correr mongod con el fichero de config (fichero por defecto lo podemos encontrar en /etc/mongod.conf):
$ mongod --f /etc/mongod.conf
Correr mongod apuntando directamente a un directorio (donde tenemos la base de datos), en localhost:27017, que es la config por defecto.
$ mongod --dbpath /home/ubuntu/midb/

Acceso por shell


En otra terminal/screen podemos acceder a la shell de mongodb para hacer consultas:
$ mongo

Paquetes python 


La siguiente sirve para instalar pymongo, que nos permite hacer llamadas NoSQL a nuestra base de datos desde python.

Para utilizar la base de datos en python podemos instalar pymongo, sería conveniente crear un entorno virtual para comenzar a instalar los paquetes de python con pip, si no tenemos los paquetes:
$ sudo apt-get install virtualenv pip
Recordamos como activar virtualenv...
$ cd /home/MiUser $ virtualenv MiWebAPP $ source MiWebAPP/bin/activate
* Para desactivarlo
$ deactivate
Una vez activo el virtualenv:
$ sudo pip install pymongo

Enlaces de interés

jueves, 8 de septiembre de 2016

Lanzando un demonio

Pasos para lanzar una script de bash en ubuntu que nos ejecutará automáticamente una script de python en caso que ésta deje de correr.

Para nuestro caso, será necesario crear el .sh y hacerlo ejecutable:

editamos/creamos con nano: sudo nano -c /directorio/running.sh
hacemos ejecutable: sudo chmod +x /directorio/running.sh

Utilizaremos la script dentro de la carpeta /demon/ en nuestro directorio, y en ella misma, tendremos la carpeta tmp donde utilizaremos un fichero vacío .lock como variable.

La script en cuestión, desarrollada hace algunos meses con un compañero para una aplicación de la raspi (Gracias Darkomen!):
lockfile=/home/ubuntu/...../demon/tmp/void.lock

rm -rf /home/ubuntu/...../demon/tmp/

mkdir /home/ubuntu/....../demon/tmp/

while true
do
    litems=`ls /home/ubuntu/......./demon/tmp/ | wc -l`
    echo "$litems"
    if [[ "$litems" == "0" ]]
    then
        if (set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null;
        then
            trap 'rm -f "$lockfile"; exit $?' INT TERM EXIT
            echo "Launching..."
                python /home/ubuntu/......../server.py

        rm -f "$lockfile"
        trap - INT TERM EXIT

        else
            echo "Running..."

        fi
    fi
    sleep 10
done
Importante no dejar espacio entre el signo igual y la comilla en la asignación a la variable litems del output del comando ls.

En este caso quiero dejar corriendo en el servidor la script de bash a mano, por lo que utilizaré screen, ya que accedo al servidor por ssh mediante putty y se cerrarían los procesos al cerrar la sesión. La script en bash hará que la script de python sea lanzada automáticamente cuando ésta pete.


Será necesario hacer: 
screen

* Podemos dar un nombre a la sesión de screen:  screen -S Misesion

y estando en el directorio del fichero:
./running.sh

Ya podemos hacer deatach de la sesión de screen (ctrl-a + ctrl-d) y cerrar la conexión con putty. Todo debería ir fino.


Comandos de utilidad: 
para ver procesos python, por ejemplo: ps -e | grep python
lo mismo para screen: ps -e | grep screen 
Del comando anterior nos interesa el PID si queremos matar el proceso.

ver sesiones de screen: screen -ls
Enlazarse a una de ellas que ya esté corriendo: screen -r PID.NOMBRE

tambien puede ser útil para ver qué nos consume recursos: top

para matar un proceso: sudo kill -9 PID
PID será el número del PID del proceso.