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.
--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.
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
.
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
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ésentez un serveur Web. Visez apache + mod-wsgi.
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
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
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 ...
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)
$ 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
$ 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.
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/
Dans / var / www / html / robots.txt
User-agent : *
Disallow : /
Créer et sauvegarder
Recommended Posts