En este post terminamos de configurar nuestro site para que sea servido por la instancia de EC2 mediante Apache y con certificados SSL.
1. Instalamos las aplicaciones necesarias
Primero instalamos las herramientas necesarias de apache (junto con el mod para utilizarlo para servir sitios python) y también las utilidades de SSL, que usaremos para tener certificados SSL con certbot)
trama@ip-172-31-88-32:~$ sudo apt-get install apache2 apache2-utils ssl-cert libapache2-mod-wsgi-py3 trama@ip-172-31-88-32:~$ sudo systemctl restart apache2 trama@ip-172-31-88-32:~$
Si en este momento entramos por IP al servidor (http), ya deberíamos ver la página por defecto de Apache. Nos queda únicamente configurarlo para servir nuestro sitio, y habilitar el https.
2. Configuramos servidor apache
Primero creamos la configuración del sitio en /etc/apache2/sites-available. Vamos a utilizar la configuración por defecto como plantilla
trama@ip-172-31-88-32:~$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/bernaldev.conf trama@ip-172-31-88-32:~$ sudo nano /etc/apache2/sites-available/bernaldev.conf ... ServerName bernaldev.com ServerAdmin info@bernaldev.com DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined ...
Ahora habilitamos el sitio en /etc/apache2/sites-enabled
trama@ip-172-31-88-32:~$ sudo a2ensite bernaldev.conf Enabling site bernaldev. To activate the new configuration, you need to run: systemctl reload apache2 trama@ip-172-31-88-32:~$ sudo systemctl reload apache2
En este punto ya debería mostrarnos apache la página de configuracción accediendo por http://bernaldev.com (todavía no está preparado para funcionar por https)
3. Instalar certificados y certbot
Instalamos las herramientas necesarias para trabajar con certificados, y conseguir la renovación automática vía certbot:
trama@ip-172-31-88-32:~$ sudo apt-get install certbot python3-certbot-apache
Ahora ya sólo tenemos que utilizar certbot para que termine de configurar el sitio con los certificados ssl:
trama@ip-172-31-88-32:~$ sudo certbot Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator apache, Installer apache Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): info@bernaldev.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must agree in order to register with the ACME server. Do you agree? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing, once your first certificate is successfully issued, to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: N Account registered. Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: bernaldev.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel): 1 Requesting a certificate for bernaldev.com Performing the following challenges: http-01 challenge for bernaldev.com Enabled Apache rewrite module Waiting for verification... Cleaning up challenges Created an SSL vhost at /etc/apache2/sites-available/bernaldev-le-ssl.conf Enabled Apache socache_shmcb module Enabled Apache ssl module Deploying Certificate to VirtualHost /etc/apache2/sites-available/bernaldev-le-ssl.conf Enabling available site: /etc/apache2/sites-available/bernaldev-le-ssl.conf Enabled Apache rewrite module Redirecting vhost in /etc/apache2/sites-enabled/bernaldev.conf to ssl vhost in /etc/apache2/sites-available/bernaldev-le-ssl.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations! You have successfully enabled https://bernaldev.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/bernaldev.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/bernaldev.com/privkey.pem Your certificate will expire on 2023-03-11. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
4. Configuramos apache para servir el sitio Django
Sólo nos queda actualizar el fichero /etc/apache2/sites-available/bernaldev.conf para que sepa servir el sitio Django. Para ello añadimos lo siguiente al fichero generado por certbot. En mi caso /etc/apache2/sites-available/bernaldev-le-ssl.conf (ya que el original únicamente se utiliza para hacer la redirección del tráfico http a https).
... Alias /media/ /home/trama/cdn_media/ Alias /static/ /home/trama/cdn_static/ Require all granted Require all granted WSGIScriptAlias / /home/trama/laestanciaazul/web/wsgi.py WSGIPythonHome /home/trama/webenv WSGIPythonPath /home/trama/laestanciaazul Require all granted ...
Ya está listo!
IMPORTANTE: En este punto tenía varios problemas de permisos, derivados de que el usuario www-data (que es el que utiliza Linux para correr apache) no tenía permisos a las carpetas de /home/trama/cdn_media (y cdn_static). Así que decidí corregir la ubicación del site moviendolo todo a /var/www/bernaldev. Que es donde debería estar ubicado el sitio. Posteriormente di permisos sobre los datos de media y statics (chown) al usuario www-data
IMPORTANTE 2: Si teneis fallos con el SSL aseguraros de tener los siguientes mods activos en apache:
sudo a2enmod ssl sudo a2enmod rewrite