[PYTHON] Jusqu'à ce que l'application Django (+ MySQL) soit publiée sur AWS EC2 (+ RDS (+ S3))

Comment puis-je publier une application Web avec Django + Apache (+ mod-wsgi) + MySQL à partir de l'état où se trouvent une instance EC2 et une instance RDS d'AWS? On suppose qu'il existe un programme d'application Web. Les informations sont en date du 1er janvier 2020.

De plus, j'utilise pyenv + Anaconda, mais veuillez ajuster Python pour yum install ou Pipenv en ce moment en fonction de votre religion.

Version utilisée, etc.

Lié à Python

--Python 3.7.4 (en utilisant anaconda3-2019.10)

Apache,MySQL Client

$ httpd -v
Server version: Apache/2.4.41 ()
Server built:   Oct 22 2019 22:59:04
$ mysql --version
mysql  Ver 8.0.18 for Linux on x86_64 (MySQL Community Server - GPL)

MySQL utilise la série de la version 8.0.

Installation de pyenv et Python3

Installez pyenv

Je ne veux pas polluer le python par défaut.

sudo git clone git://github.com/yyuu/pyenv.git /usr/local/pyenv
%Le propriétaire est sudo. Changer récursivement
sudo chown -r ec2-user:ec2-user pyenv

Réécrire ~ / .bash_profile

export PATH
export PYENV_ROOT="/usr/local/pyenv"
export GOPATH="$HOME/.go"
export PATH="$GOPATH/bin:$PYENV_ROOT/bin:$PYENV_ROOT/bin/pyenv:$PATH"
eval "$(pyenv init -)"

Après la réécriture, lisez-le avec source .bash_profile.

Installation de Python 3

Je veux m'amuser, alors j'ajouterai de l'anaconda. Je ne suis pas impliqué dans la guerre religieuse. Je n'utiliserai jamais l'installation avec conda.

#Dernière version stable au moment de la rédaction
pyenv install anaconda3-2019.10
#Changer la valeur par défaut
pyenv global anaconda3-2019.10

Présentation de Django

C'est facile. Cependant, faites attention à la version de Django. Souvent des changements qui ne sont pas rétrocompatibles.

pip install django

Autres gars utiles

%Gérer les fichiers
pip install django-storages
%Mode de Maintenance
pip install django-maintenance-mode
%Poignée s3
pip install boto3

Présentation du serveur Web

Présentez un serveur Web. Visez apache + mod-wsgi.

Installez Apache

sudo yum install httpd
sudo systemctl start httpd
#Si vous voulez vérifier
sudo systemctl status httpd
#Début du service
sudo systemctl start httpd.service

Si vous spécifiez l'adresse IP globale, la page de test Apache s'affiche.

Si vous voulez autre chose que la page de test Apache, réécrivez le contenu de / etc / httpd / conf / httpd.conf.

Page référencée: https://qiita.com/saki-engineering/items/5ea8e66b498fc7d4a399 https://miyabi-lab.space/blog/16#200

Introduction de mod-wsgi

Un outil qui connecte Python et apache.

Apex et gcc sont requis lors de la compilation pour l'installation, mais ils ne sont pas inclus par défaut.

sudo yum install httpd-devel
sudo yum install gcc

De cette façon, mod-wsgi entrera avec pip

pip install mod_wsgi

Lien

Ce qui suit suppose qu'il existe une page à publier sur Django. Cela peut être un échantillon.

Page partiellement référencée: https://qiita.com/saki-engineering/items/5ea8e66b498fc7d4a399

Trouvez l'emplacement où se trouve mod-wsgi. Après avoir déplacé vers le répertoire racine

$ find -name 'mod_wsgi*.so' 2> /dev/null
./usr/local/pyenv/versions/anaconda3-2019.10/lib/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so

Par conséquent, il se trouve dans / usr / local / pyenv / versions / anaconda3-2019.10 / lib / python3.7 / site-packages / mod_wsgi / server / mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so.

Pour Amazon Linux 2, peut-être à la fin de / etc / httpd / conf / httpd.conf

# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf

Doit être écrit, donc dans / etc / httpd / conf.d / myconf.conf

LoadModule wsgi_module /usr/local/pyenv/versions/anaconda3-2019.10/lib/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so

WSGIScriptAlias / (wsgi.Où py a été placé)
WSGIPythonPath (Répertoire racine du programme webapp écrit en Django)
WSGIPythonHome (Répertoire parent de l'exécutable Python que vous souhaitez exécuter;Exemple: /usr/local/pyenv/versions/anaconda3-2019.10)
Alias /static/ (Répertoire des fichiers statiques pour les programmes webapp écrits en Django)

<Directory (Répertoire racine du programme webapp écrit en Django)>
    <Files wsgi.py>
        Order deny,allow
        Require all granted
    </Files>
</Directory>
<Directory (Répertoire des fichiers statiques pour les programmes webapp écrits en Django)>
    Require all granted
</Directory>

En tous cas. sudo service httpd restart.

Je n'ai pas eu à spécifier WSGIPythonPath la dernière fois que je l'ai fait, pourquoi ...

Présentation de MySQL

On suppose que le serveur MySQL 8.0 a déjà été démarré avec RDS.

Mettez le client pour MySQL 8.0 Page référencée: https://dev.classmethod.jp/cloud/aws/amazon-linux2-mysqlclient/

#Ajouter un référentiel
$ sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
#8 en état standard.Il est mis à 0, mais il est valide pour le moment
$ sudo yum-config-manager --enable mysql80-community
# Mysql Client Install
$ sudo yum install -y mysql-community-client
$ mysql --version
mysql  Ver 8.0.18 for Linux on x86_64 (MySQL Community Server - GPL)

Démarrage du serveur

$ whereis mysql_config
mysql_config:

En fait, à ce stade, je me fâche si je n'ai pas mysql_config.

$ sudo yum install mysql-devel

Puis

$ whereis mysql_config
mysql_config: /usr/bin/mysql_config /usr/share/man/man1/mysql_config.1.gz

Et installez avec pip pour accéder au client mysql depuis Python

pip install mysqlclient

Je veux une nation de pages infinie

$ pip install django-el-pagination

Celui qui est entré avec était vieux. Il n'a pas été publié depuis environ deux ans. Ensuite, supprimez-le de git (la maintenance est soignée et Django 3.0 sera bientôt pris en charge)

$ git clone https://github.com/shtalinberg/django-el-pagination.git
$ cd django-el-pagination/
$ pip install -e .

Cependant, même si je fais cela, cela essaie de fonctionner, mais je ne peux pas accéder au site Web. Il devient ModuleNotFoundError el_pagination. Est-ce causé par une mauvaise liaison? Ou est-ce dû au mode modifiable?

Puis installons pip directement depuis git.

pip install git+https://github.com/shtalinberg/django-el-pagination.git

C'est fait.

Autres paramètres nécessaires (settings.py) https://django-el-pagination.readthedocs.io/en/latest/start.html Voir.

Sécurisation de la zone d'échange

Obligatoire car la taille de mémoire par défaut pour les instances EC2 est incroyablement petite.

$ sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
2048+0 Entrée d'enregistrement
2048+0 sortie d'enregistrement
2147483648 octets(2.1 GB)Copié, 31.4376 secondes, 68.3 MB/Secondes
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
Définissez la version 1 de l'espace de swap. Taille= 2 GiB (2147479552 octets)
Pas de label, UUID=82de405a-d7ef-4ae3-ba93-16baa38c6e2c
$ sudo swapon /swapfile
#Vérification
swapon -s
Nom de fichier Type Taille Priorité utilisée
/swapfile                              	file    	2097148	0	-2
#La zone d'échange est désormais activée au démarrage
$ sudo vi /etc/fstab
#ajouter à
# /swapfile swap swap defaults 0 0

Référence: https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-memory-swap-file/

Évitez de chercher

Dans / var / www / html / robots.txt

User-agent : *
Disallow : /

Créer et sauvegarder

Recommended Posts

Jusqu'à ce que l'application Django (+ MySQL) soit publiée sur AWS EC2 (+ RDS (+ S3))
# 1 Jusqu'au déploiement de l'application Web de Django (création d'une instance avec EC2 sur AWS)
Déployer l'application Django sur Heroku
Jusqu'à ce que l'application Web créée avec Bottle soit publiée (déployée) sur Heroku
[AWS EC2] Comment installer uniquement le client MySQL sur Amazon Linux 2 et se connecter à RDS
Publiez votre application Django sur Amazon Linux + Apache + mod_wsgi
Authentification unique à l'application Django avec AWS SSO
[AWS EC2] Paramètres que vous souhaitez effectuer sur Amazon Linux 2
Déployer l'application Django sur EC2 avec Nginx + Gunicorn + Supervisor
Installez Django sur Mac
# 3 Créez un environnement Python (Django) avec une instance EC2 (ubuntu18.04) d'AWS part2
Créer un environnement de développement AWS Cloud9 sur une instance Amazon EC2
Lancement d'une application Web sur AWS avec django et modification des tâches
Exécutez TensorFlow sur une instance GPU sur AWS
Essayez Tensorflow avec une instance GPU sur AWS
Exécutez la version GPU tensorflow sur une instance ponctuelle d'AWS EC2
Utiliser jupyter sur une instance GPU sur AWS
Version de juin 2017 pour créer un environnement Tensorflow / Keras sur une instance GPU d'AWS
Jusqu'à ce que l'application Django (+ MySQL) soit publiée sur AWS EC2 (+ RDS (+ S3))
J'ai essayé d'installer TensorFlow (version GPU) sur Ubuntu
Importez vos propres fonctions avec AWS Glue