Como instalar Python, Django, Nginx y Memcached en un servidor Ubuntu desde cero, parte 1

Como instalar Python, Django, Nginx y Memcached en un servidor Ubuntu desde cero, parte 1
Photo by Kevin Ache / Unsplash

Después de varios años utilizando el mismo servidor para hospedar namespace.mx, recibí una oferta para contratar una nueva VPS con mejores características y decidí aprovechar la oportunidad para migrar todo el sitio.

El cambio resultó completamente transparente para los usuarios. Preparé el nuevo servidor, instalé todas las dependencias, copié el proyecto, realicé las pruebas necesarias y, únicamente cuando todo funcionó correctamente, cambié el DNS para que el tráfico comenzara a llegar al nuevo servidor.

Ésta no pretende ser la única forma de preparar un servidor para Django. Es simplemente el procedimiento que seguí durante esa migración y que decidí documentar mientras iba resolviendo los pequeños problemas que fueron apareciendo.

El objetivo de esta serie es partir de un servidor recién instalado y dejarlo listo para ejecutar aplicaciones desarrolladas con Python y Django utilizando PostgreSQL, Nginx y Memcached.

Preparación del servidor

En aquel momento elegí una instalación mínima de Ubuntu Server.

Más allá de la distribución concreta, mi recomendación sigue siendo la misma: siempre que sea posible utiliza una versión con soporte de largo plazo (Long Term Support o LTS). La estabilidad suele ser mucho más importante que disponer inmediatamente de la versión más reciente de cada paquete.

Lo primero que conviene hacer después de recibir el acceso al servidor es comprobar qué versión del sistema operativo estamos utilizando.

cat /etc/issue

También es una buena práctica actualizar inmediatamente la información de los paquetes disponibles.

sudo apt-get update

Este comando no instala nada; simplemente descarga la información más reciente de los repositorios configurados.

Una vez actualizado el índice de paquetes podemos instalar las actualizaciones disponibles.

sudo apt-get upgrade

En algunas ocasiones el sistema indicará que determinados paquetes no pueden actualizarse porque requieren instalar o eliminar dependencias adicionales.

Cuando eso ocurre puede ser necesario ejecutar:

sudo apt-get dist-upgrade

Este comando permite resolver cambios mayores en las dependencias del sistema.

No es algo que deba ejecutarse diariamente sin revisar su salida, pero sí resulta útil cuando estamos preparando un servidor nuevo y queremos comenzar con un sistema completamente actualizado.

Finalmente, antes de continuar, cambia la contraseña inicial que proporciona el proveedor del servicio.

passwd

Es un paso muy sencillo y, sin embargo, suele olvidarse con demasiada frecuencia.

Crear un usuario de trabajo

Una de las primeras medidas de seguridad que conviene adoptar consiste en evitar trabajar directamente como root.

El usuario administrador tiene permisos para modificar cualquier archivo del sistema y un simple error al escribir un comando puede provocar daños importantes.

Lo recomendable es crear un usuario normal y concederle permisos administrativos mediante sudo.

Creamos primero el usuario.

adduser javier

El sistema solicitará una contraseña y algunos datos adicionales que pueden dejarse en blanco si no son necesarios.

A partir de este momento ya disponemos de un usuario con el que podremos trabajar diariamente.

Instalar y configurar sudo

Dependiendo de la distribución utilizada, es posible que el paquete sudo no venga instalado por defecto.

En ese caso basta con instalarlo.

apt-get install sudo

Una vez instalado debemos editar el archivo /etc/sudoers.

La forma correcta de hacerlo es utilizando visudo.

visudo

Esta utilidad verifica la sintaxis antes de guardar los cambios y evita dejar el sistema en un estado inconsistente.

Busca la sección correspondiente a los privilegios de usuario.

# User privilege specification
root    ALL=(ALL) ALL

y agrega el usuario recién creado.

root    ALL=(ALL) ALL
javier  ALL=(ALL) ALL

A partir de ese momento ya no será necesario iniciar sesión como root.

Las tareas administrativas podrán ejecutarse anteponiendo sudo al comando correspondiente.

sudo apt-get update
sudo service ssh restart
sudo vi /etc/hosts

Además de reducir el riesgo de errores, esta práctica permite mantener un registro de las operaciones administrativas realizadas por cada usuario.

Una vez comprobado que el nuevo usuario puede utilizar sudo, ya podemos cerrar la sesión de root y continuar el resto de la configuración trabajando únicamente con nuestra cuenta habitual.

En la siguiente parte configuraremos el acceso remoto mediante SSH, ajustaremos la zona horaria del servidor y prepararemos el entorno para comenzar a instalar Python y el resto de las herramientas necesarias para ejecutar nuestros proyectos con Django.