Something went wrong. Try again.
Project for the UPV to develop an app like BlaBlaCar but only for UPV people.
Something went wrong. Try again.
9.3 kB · 309 lines
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310Despliegue en CentOS====================
Instrucciones para la instalación de poliCar en un servidor **CentOS 7.2**.
Dependencias de yum-------------------
.. code-block:: console
$ sudo yum install libjpeg-devel zlib-devel gcc python-devel libcap-devel supervisor gdal \ gdal-devel yum-utils
Instalar Python 3-----------------
El proyecto requiere de **Python 3** para funcionar. Se puede instalar usando las fuentes,siguiendo estos pasos:
.. code-block:: console
$ sudo yum-builddep python $ wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz $ tar xf Python-3.5.2.tgz $ cd Python-3.5.2 $ ./configure $ make $ sudo make install
Instalar Node-------------
Para la gestión de los ficheros estáticos se necesita tener instalado **Node**. Para instalarlo desdeel código fuente, basta seguir los siguientes pasos:
.. code-block:: console
$ wget https://nodejs.org/dist/v6.9.1/node-v6.9.1.tar.gz $ tar xvzf node-v6.9.1.tar.gz $ cd node-v6.9.1 $ ./configure $ make $ sudo make install
Instalar virtualenv--------------------
Para instalar las dependencias de Python, se recomienda usan un entorno virtual en vez de instalarlasdirectamente en el sistema. Para crear el entorno virtual y facilitar la gestión de este, se recomiendainstalar y configurar ``virtualenvwrapper``.
.. code-block:: console
$ sudo pip3 install virtualenv virtualenvwrapper
Hay que añadir lo siguiente al fichero ``.bashrc`` del usuario que se vaya a usar para instalar el proyecto, **no**en el de root.
.. code-block:: bash
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3 export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh
Para que los cambios tengan efecto, recargamos el fichero ``.bashrc``:
.. code-block:: console
$ source ~/.bashrc
Agregar clave pública a GitLab------------------------------
Se necesita una clave publica SSH para poder clonar el repositorio de Gitcon el código fuente:
.. code-block:: console
$ ssh-keygen -t rsa $ cat ~/.ssh/id_rsa.pub
El resultado se tiene que copiar como *Deploy key* en el proyecto de Git.
Instalar proyecto-----------------
Para instalar el proyecto, primero creamos su entorno virtual:
.. code-block:: console
$ mkvirtualenv --python=/usr/local/bin/python3 carshare
Luego, clonamos el código fuente del proyecto:
.. code-block:: console
(carshare) $ git clone git@git.upv.es:GIT_CARSHARE/carshare-project.git (carshare) $ cd carshare-project
Luego, instalamos las dependencias de Python:
.. code-block:: console
(carshare) $ pip install -r requirements/production.txt
Y por último, las dependencias de Javascript:
.. code-block:: console
(carshare) $ npm install
Configuración del proyecto--------------------------
La configuración del proyecto se realiza mediante el uso de variables de entorno. Se pueden declarar envarios lugares, pero se recomienda crear el fichero ``.env`` en la carpeta raíz del código fuente.
.. code-block:: bash
# poliCar project environment variables # ------------------------------------------------------------------------------
ORACLE_SID=ZETATEST
DJANGO_SETTINGS_MODULE=config.settings.production DJANGO_ALLOWED_HOSTS=host DJANGO_SECRET_KEY=some-seed DATABASE_URL=oraclegis://{username}:{password}@{host}:{port}/{database} DJANGO_DEBUG=False
UPV_LOGIN_DATA_USERNAME=user UPV_LOGIN_DATA_PASSWORD=password
.. glossary::
ORACLE_SID Valor del SID de la base de datos de Oracle.
DJANGO_SETTINGS_MODULE Ruta del módulo de settings que usará el proyecto. Para producción debe de estar siempre establecido ``config.settings.production`` como valor.
DJANGO_ALLOWED_HOSTS Dominio desde el que se permitirán las peticiones. Si se intenta acceder con otro nombre, la aplicación responderá con un error 400.
DJANGO_SECRET_KEY Semilla que se usa para guardar de forma segura las contraseñas en la base de datos.
DATABASE_URL Credenciales y ruta para acceder a la base de datos. Siempre será de la siguiente forma: ``oraclegis://{username}:{password}@{host}:{port}/{database}``, donde ``{username}`` es el nombre de usuario de base de datos, ``{password}`` es la contraseña de ese usuario, ``{host}`` es la ruta del servidor, ``{port}`` es el puerto y ``{database}`` es el nombre de la base de datos.
DJANGO_DEBUG Activa o desactiva el modo de depuración de la aplicación. Se usa ``True`` para activar y ``False`` para desactivar.
UPV_LOGIN_DATA_USERNAME Nombre de usuario para acceder al servicio de login de la UPV.
UPV_LOGIN_DATA_PASSWORD Contraseña para acceder al servicio de login de la UPV.
Actualización del proyecto--------------------------
Tanto si se han hecho **cambios en el código fuente**, como si se trata de la primera vez que se instala, hay unaserie de pasos que se tienen que ejecutar para asegurarse de que los cambios tienen efecto, siempre asumiendo que seestá en la raíz del código fuente.
Activar el entorno virtual:
.. code-block:: console
$ workon carshare
Aplicar las migraciones de la base de datos:
.. code-block:: console
(carshare) $ ./manage.py migrate
Compilar los ficheros estáticos:
.. code-block:: console
(carshare) $ npm run build
Recopilar los ficheros estáticos:
.. code-block:: console
(carshare) $ ./manage.py collectstatic
uWSGI-----
La aplicación poliCar sigue el `PEP 333 <https://www.python.org/dev/peps/pep-0333/>`_ para aplicaciones web hechas con Python,por lo que cualquier servidor de aplicaciones WSGI sería compatible con la aplicación.
Sin embargo, se recomienda el uso de ``uWSGI`` como servidor de aplicaciones WSGI, que es el que se instala junto alresto de dependencias. Para configurarlo, hay que crear un fichero ``uwsgi.ini``, con el siguiente contenido,cambiando las rutas de los ficheros si fuera necesario:
.. code-block:: ini
[uwsgi] chdir = /home/carshare/carshare-project/upvcarshare module = config.wsgi home = /home/carshare/.virtualenvs/carshare env = DJANGO_SETTINGS_MODULE=config.settings.production master = true processes = 5 socket = /home/carshare/carshare.sock chmod-socket = 666 vacuum = true stats = /home/carshare/carshare_stats.sock
.. note::
Asegúrate que el usuario que vaya a ejecutar nginx pueda acceder al fichero ``carshare.sock``.
Supervisor----------
Para que la gestión del proceso de uWSGI sea más sencilla, se recomienda usar ``supervisord``, que se instalacon las dependencias de yum. Para ello, hay que crear el fichero ``/etc/supervisord.d/carshare.ini``con los siguientes datos:
.. code-block:: ini
[program:carshare] user = carshare command = /home/carshare/.virtualenvs/carshare/bin/uwsgi --ini /home/carshare/uwsgi.ini environment = PATH="/home/carshare/.virtualenvs/carshare/bin" topsignal = HUP stderr_logfile = /var/log/carshare/carshare.log stderr_logfile_maxbytes = 50MB stderr_logfile_backups = 10 loglevel = info
Para cargar la nueva configuración hay que reiniciar el servicio:
.. code-block:: bash
$ sudo systemctl restart supervisord
Y para reiniciar el servidor, cuando se requiera que se apliquen nuevos cambios:
.. code-block:: bash
$ sudo supervisorctl restart carshare
Nginx-----
Se recomienda utilizar **Nginx** como proxy sobre **uWSGI**, y además, para servir los estáticosdirectamente
Para configurarlo, crea el siguiente fichero ``/etc/nginx/conf.d/carshare.conf``, cambiando las rutas quesean necesarias:
.. code-block:: nginx
upstream carshare_app { server unix:///home/carshare/carshare.sock; }
server { listen 80; client_max_body_size 0; charset utf-8;
location /media { alias /home/carshare/carshare-project/upvcarshare/media; }
location /static { alias /home/carshare/carshare-project/upvcarshare/public; }
location / { uwsgi_pass carshare_app; uwsgi_read_timeout 600; uwsgi_param QUERY_STRING $query_string; uwsgi_param REQUEST_METHOD $request_method; uwsgi_param CONTENT_TYPE $content_type; uwsgi_param CONTENT_LENGTH $content_length; uwsgi_param REQUEST_URI $request_uri; uwsgi_param PATH_INFO $document_uri; uwsgi_param DOCUMENT_ROOT $document_root; uwsgi_param SERVER_PROTOCOL $server_protocol; uwsgi_param REMOTE_ADDR $remote_addr; uwsgi_param REMOTE_PORT $remote_port; uwsgi_param SERVER_ADDR $server_addr; uwsgi_param SERVER_PORT $server_port; uwsgi_param SERVER_NAME $server_name; uwsgi_param UWSGI_SCHEME http; } }