Afin d'obtenir HTTPS/SSL pour travailler pour Flask afin que Flask fonctionne sur 2 ports, vous voulez d'abord suivre les conseils ici: Https with Http in Flask Python
Cependant, cela ne mettre en place votre code Flask pour exécuter avec SSL. Il ne lancera pas réellement le processus Flask lors du déploiement. Pour cela, vous devrez éditer votre script /etc/httpd/conf.d/wsgi.conf pour lancer une deuxième instance du démon wsgi. Votre script par défaut pour wsgi.conf doit contenir une section pour le port 80. Vous souhaitez copier cette section, ajouter vos paramètres SSL, puis modifier la commande wsgi pour avoir un nom de variable différent, sinon Apache se plaindra lorsque vous lancement. Je donne les résultats suivants ajouté:
<VirtualHost *:443>
ServerName <MY SERVER NAME>
ServerAlias <MY SERVER NAME>
SSLEngine on
SSLCertificateFile <Server PEM file>
SSLCertificateKeyFile <Private Key PEM file>
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
SSLHonorCipherOrder on
Alias /static/ /opt/python/current/app/static/
<Directory /opt/python/current/app/static/>
Order allow,deny
Allow from all
</Directory>
WSGIScriptAlias//opt/python/current/app/application.py
<Directory /opt/python/current/app/>
Require all granted
</Directory>
WSGIDaemonProcess wsgi2 processes=1 threads=15 display-name=%{GROUP} \
python-path=/opt/python/current/app:/opt/python/run/venv/lib64/python3.4/site-packages:/opt/python/run/venv/lib/python3.4/site-packages user=wsgi group=wsgi \
home=/opt/python/current/app
WSGIProcessGroup wsgi2
</VirtualHost>
Notez que vous pouvez également modifier la section port 80 à ce moment pour enlever wsgi et à la place ont une redirection vers 443, comme expliqué ici: Redirect to Https using Elastic Beanstalk ELB et Redirect HTTP to HTTPS Apache2
test cette configuration en réinitialisant le serveur Apache en utilisant
sudo service httpd restart
Et puis lancez votre serveur de développement
python application.py
ou
sudo /home/ec2-user/anaconda3/bin/python application.py
Vous devriez alors voir Flask en cours d'exécution sur deux ports! Cependant, notez que si vous exécutez ceci sur votre instance EC2, votre code peut déjà être déployé et en cours d'exécution, ainsi vous pourrez utiliser les ports et vous verrez "OSError: [Errno 98] Address déjà utilisé "
Mais vous n'avez pas encore fini ... oh non, il y en a un de plus ...
J'ai découvert ce fait suite à partir https://forums.aws.amazon.com/thread.jspa?threadID=163369 (voir aussi des questions Stackoverflow what is difference between commands and container commands in elasticbean talk, Configure apache on elastic beanstalk, wsgi user permissions on elastic beanstalk) ...
De toute évidence le déploiement EC2 via Codestar et Elastic Beanstalk ne remplace votre /etc/httpd/conf.d/ wsgi.conf fichier. Afin de prévenir/corriger cela, vous devez éditer vos scripts de configuration .ebextensions pour utiliser votre propre fichier wsgi.conf. Notez que cela a l'inconvénient de ne pas suivre les mises à jour qu'Amazon peut apporter à leur script par défaut.
J'ai d'abord copié le fichier wsgi.conf que je veux conserver dans le répertoire .ebextensions.
Ensuite, je modifié mon .ebextensions/fichier sshd.config (le seul que j'ai dans ce répertoire) pour ajouter ce qui suit:
files:
"/etc/httpd/conf.d/wsgi.conf" :
mode: "000777"
owner: root
group: root
content: |
<IfModule !wsgi_module>
LoadModule wsgi_module modules/mod_wsgi.so
</IfModule>
. . .
<VirtualHost *:443>
. . .
</VirtualHost>
LogFormat "%h (%{X-Forwarded-For}i) %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Puis, après les « fichiers: » section, ajouter ce qui suit à la fin de la configuration:
container_commands:
02_update_wsgi:
command: >
cp .ebextensions/wsgi.conf ../wsgi.conf
Notez que les utilisations ci-dessus CONTAINER_COMMANDS, pas Commands.
La grande chose au sujet de cette technique est que Elastic Beanstalk exécute automatiquement la commande de redémarrage du serveur Apache, donc une fois que vous vous déployez ne pas besoin de copier quoi que ce soit manuellement ou re-run « httpd restart sudo service »
Suite à la Au-dessus des étapes obtiendront votre Flask s'exécutant sur HTTPS avec des certificats SSL ET déployer correctement.