DjangoEnVpsMateria - ucseiw-team/catedra GitHub Wiki

Deploy de proyectos django en el vps

Cada grupo dispone de un usuario en el servidor provisto por la cátedra (credenciales de acceso enviadas por mail). Al tener un usuario, disponen también de una home, es decir, de un directorio en el cual trabajar y almacenar sus datos.

Entornos virtuales

Para evitar conflictos de dependencias de python vamos a utilizar virtualenv. Cada grupo posee un virtualenv de python creado dentro de su home, en un directorio llamado env. Cada vez que accedan al servidor es recomendable que activen el virtualenv y trabajen siempre con el mismo activado, lo que les permite instalar y desinstalar dependencias sin requerir ser superusuarios, ni interferir con las dependencias de los demás grupos.

Para activar el virtualenv, se debe ejecutar:

source path_al_virtualenv/bin/activate

Por ejemplo, si están posicionados en su home, ejecutarían:

source env/bin/activate

Deploy de proyecto

Para deployar el código del proyecto, simplemente clonen su proyecto dentro de algún directorio en sus homes, de la misma forma que lo harían en una máquina normal. Y a medida que vayan realizando cambios en sus pcs personales y pusheando los cambios a sus repos, pueden conectarse al servidor y hacer pull dentro del mismo para recibir los cambios desde el repo.

Es decir, el esquema es algo como esto:

  • [solo 1 vez] clono el repositorio en el servidor
  • [diariamente] trabajo en mi notebook o pc, y pusheo los cambios al repo de código
  • [cuando quiero actualizar el servidor] me conecto al servidor, entro al directorio del repo, y pulleo los cambios del repositorio

NO trabajen editando y commiteando en el servidor, no es la forma correcta de hacerlo, y probablemente terminen generando problemas (conflictos en el repo por no pullear antes, olvidos de commitear lo que cambiaron en el servidor, etc.). Recuerden: se trabaja en sus máquinas personales, en el servidor solo se hacen pull.

Control del servidor

Cada grupo puede correr su proyecto en modo "produccion" dentro del servidor. Para ello, en su home disponen de un ejecutable llamado control. Con el mismo puede iniciar el servidor web, detenerlo, o reiniciarlo. La forma de uso de este ejecutable es la siguiente:

(estando en la home)

./control PATH_AL_RAIZ_DEL_PROYECTO NOMBRE_PROYECTO ACCION

Donde:

  • PATH_AL_RAIZ_DEL_PROYECTO es la ruta a donde se encuentra el manage.py, sin incluir ese archivo. Por ejemplo: repo/proyecto_noticias.
  • NOMBRE_PROYECTO es el nombre del proyecto django, por ejemplo: proyecto_noticias.
  • ACCION es lo que desean realizar con el servidor, y puede ser alguna de estas tres acciones: start, stop o restart.

Un ejemplo completo de uso, en el que se reinicia un servidor:

./control repo/proyecto_noticias proyecto_noticias restart

Recuerden que cada vez que bajen cambios en el servidor, tienen que reiniciarlo para que esos cambios sean visibles.

Log de errores

Si por alguna razón el servidor tira errores antes de siquiera poder iniciar django, no van a ver la página de información de error de django (precisamente porque ni django llegó a iniciarse correctamente). En esos casos, probablemente el error quede logueado en un archivo llamado error.log dentro del directorio del proyecto.