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