logo cosasdedevs

Configurar dominio y certificados gratuitos a un proyecto en Django

Configurar dominio y certificados gratuitos a un proyecto en Django

My Profile
May 08, 2020

¡Hola! Seguimos con la cuarentena y yo sigo aprovechando este tiempo para explorar nuevo material para el blog que espero que os pueda ayudar 😄

Para el tuto de hoy quiero continuar con el tema del deploy de un proyecto en Django. En esta parte veremos como configurar el dominio para que redirija a nuestro proyecto e instalaremos unos certificados ssl gratuitos para que nuestra página se muestre como segura en los navegadores, si aún no sabes como realizar el despliegue en un servidor, te invito a que mires el tutorial sobre cómo hacer el Deploy de un proyecto Django en un vps con Ubuntu.

Importante

Para continuar con este tutorial, deberéis tener un dominio al que le queráis asignar y un vps con Ubuntu instalado, para el dominio estoy utilizando namecheap y para el vps uso ovh pero podéis obtenerlos de donde queráis.

Como en el anterior tutorial, yo estoy usando un vps de ovh, los pasos serán similares a los de otros servicios de vps y si necesitáis ayuda podéis escribir en la caja de comentarios al final del post 👇 e intentaré echaros una mano.

Lo primero que tenemos que hacer es acceder al panel de nuestro servidor, vamos a la pestaña de DNS secundario y pulsamos el botón Añadir un dominio, nos aparecerá una ventana donde tendremos que añadir nuestro dominio y una vez añadido pulsamos en Confirmar.

Nos aparecerá un mensaje similar al que mostramos en la siguiente imagen, ese código lo tendremos que añadir en la configuración de nuestro dominio para poder confirmar que es nuestro.

Ahora vamos al panel de gestión de nuestro dominio, en el caso de namecheap deberemos ir a la pestaña Advanced DNS y pulsad ADD NEW RECORD, para añadir el código de verificación de propiedad.

Volvemos a la configuración de nuestro vps, a la pestaña DNS secundario y volvemos a pulsar el botón Añadir un dominio y añadimos nuestro dominio de nuevo, esta vez nos debe aparecer un mensaje confirmando que se va a añadir nuestro dominio.

Una vez hecho esto, volvemos al panel de namecheap y a la pestaña Advanced DNS, ahí pulsaremos en ADD NEW RECORD y añadimos dos nuevos registros de tipo A RECORD, uno con host @ y otro con host www, en el campo value añadiremos la IP de nuestro vps, si aparecen otros registros de tipo @ y www los podéis eliminar.

Bien bien, ya tenemos la parte de namecheap y ovh configurada, ahora lo que vamos a hacer es conseguir unos certificados ssl gratuitos para nuestro proyecto, para ello iremos a la página https://www.sslforfree.com/, introducimos nuestro dominio y pulsamos en el botón para crear nuestro certificado ssl.

Nos aparecerá un menú como el que muestro a continuación, nosotros pulsaremos en Manual Verification (DNS):

Y nos aparecerá algo similar a lo mostrado en la imagen que se muestra a continuación, aquí tendremos que copiar los hosts _acme_challenge y _acme-challenge.www y sus valores y crearlos en namecheap

Debe quedar algo así

Pulsamos en descargar y listo, ya tenemos nuestros certificados 🎉. Descomprimimos la carpeta y debemos tener tres archivos que tendremos que subir a nuestro server, para ello usaremos el comando scp desde la terminal. Yo los he alojado en el home de mi usuario, este es el ejemplo de como quedaría.

scp ca_bundle.crt <username>@<IP address or hostname>:/home/<username>
scp certificate.crt <username>@<IP address or hostname>:/home/<username>
scp private.key <username>@<IP address or hostname>:/home/<username>

Por último solo nos queda configurar nuestro virtual host, para ello vamos al directorio /etc/apache2/sites-available/ y editamos el archivo que creamos en el tutorial anterior llamado simple_blog.conf (si quieres ver como lo hice puedes ver el tutorial aquí) y modificamos el código existente por el siguiente:

<VirtualHost *:443>
    ServerName <mi-dominio>
    ServerAdmin contacto@<mi-dominio>

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www\. [NC]
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
    RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]

    DocumentRoot /var/www/html/simple_blog
    Alias /static/ /var/www/html/simple_blog/static/
    Alias /media/  /var/www/html/simple_blog/media/

    WSGIPassAuthorization On
    WSGIScriptAlias / /var/www/html/simple_blog/simple_blog/wsgi.py
    WSGIDaemonProcess simple_blog python-path=/var/www/html/simple_blog:/var/www/html/simple_blog/env/lib/python3.6/site-packages
    WSGIProcessGroup simple_blog

    ErrorLog "/var/log/apache2/error.albertorcaballero.log"
    CustomLog "/var/log/apache2/common.albertorcaballero.log" common

    SSLEngine on
    SSLCertificateFile /home/<mi-usuario>/certificate.crt
    SSLCertificateKeyFile /home/<mi-usuario>/private.key
    SSLCACertificateFile /home/<mi-usuario>/ca_bundle.crt
</VirtualHost>


<VirtualHost *:80>
    ServerName <mi-dominio>
    RewriteEngine On

    # redirect http to https
    RewriteCond %{HTTPS} off
    #RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>

En el que sustituiremos <mi-usuario> por tu usuario en Ubuntu y <mi-dominio> por tu dominio. El virtual host está configurado de tal forma que todo lo que entre por http será redirigido a https y si intentan acceder mediante https://www.midominio redirigirá a https://midominio aunque también se podría hacer a la inversa, es decir, de https://midominio a https://www.midominio, lo importante es usar solo uno de los dos por temas de SEO.

Y listo, ya deberíamos poder acceder mediante https y nuestro dominio a nuestro proyecto 🥳

Espero que os haya ayudado este tutorial y nos vemos en el próximo en el que veremos como automatizar el pull de un proyecto cuando subimos cambios a master en nuestro proyecto en GitHub.

Nos leemos 😁

316 vistas

Nos tomamos en serio tu privacidad

Utilizamos cookies propias y de terceros para mejorar la experiencia del usuario a través de su navegación. Si pulsas entendido aceptas su uso. Ver política de cookies.

🐍 Sígueme en Twitter

Si te gusta el contenido que subo y no quieres perderte nada, sígueme en Twitter y te avisaré cada vez que cree contenido nuevo 💪
Luego ¡Te sigo!