[PYTHON] Bis die Django-Anwendung (+ MySQL) auf AWS EC2 veröffentlicht wird (+ RDS (+ S3))

Wie kann ich eine Webanwendung mit Django + Apache (+ mod-wsgi) + MySQL aus dem Status veröffentlichen, in dem sich die EC2-Instanz und die RDS-Instanz von AWS befinden? Es wird davon ausgegangen, dass ein Webanwendungsprogramm vorhanden ist. Die Informationen sind ab dem 1. Januar 2020.

Ich verwende auch pyenv + Anaconda, aber bitte passen Sie Python an yum install oder Pipenv an, je nach Ihrer Religion.

Verwendete Version usw.

Python im Zusammenhang

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 verwendet die Serie 8.0.

Installation von pyenv und Python3

Installieren Sie pyenv

Ich möchte die Standardpython nicht verschmutzen.

sudo git clone git://github.com/yyuu/pyenv.git /usr/local/pyenv
%Der Besitzer ist Sudo. Rekursiv ändern
sudo chown -r ec2-user:ec2-user pyenv

Schreiben Sie ~ / .bash_profile neu

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 -)"

Lesen Sie es nach dem Umschreiben mit "source .bash_profile".

Python 3-Installation

Ich möchte Spaß haben, also werde ich Anakonda hinzufügen. Ich bin nicht in religiöse Kriege verwickelt. Ich werde die Installation niemals mit conda verwenden.

#Neueste stabile Version zum Zeitpunkt des Schreibens
pyenv install anaconda3-2019.10
#Ändern Sie die Standardeinstellung
pyenv global anaconda3-2019.10

Wir stellen vor: Django

Das ist einfach. Seien Sie jedoch vorsichtig mit der Version von Django. Oft Änderungen, die nicht abwärtskompatibel sind.

pip install django

Andere nützliche Leute

%Dateien behandeln
pip install django-storages
%Wartungsmodus
pip install django-maintenance-mode
%Griff s3
pip install boto3

Einführung in den Webserver

Stellen Sie einen Webserver vor. Ziel für Apache + Mod-Wsgi.

Installieren Sie Apache

sudo yum install httpd
sudo systemctl start httpd
#Wenn Sie überprüfen möchten
sudo systemctl status httpd
#Servicestart
sudo systemctl start httpd.service

Wenn Sie die globale IP angeben, wird die Apache-Testseite angezeigt.

Wenn Sie etwas anderes als die Apache-Testseite möchten, schreiben Sie den Inhalt von / etc / httpd / conf / httpd.conf neu.

Referenzierte Seite: https://qiita.com/saki-engineering/items/5ea8e66b498fc7d4a399 https://miyabi-lab.space/blog/16#200

Einführung von mod-wsgi

Ein Tool, das Python und Apache verbindet.

Apex und gcc sind beim Kompilieren für die Installation erforderlich, aber standardmäßig nicht enthalten.

sudo yum install httpd-devel
sudo yum install gcc

Auf diese Weise wird mod-wsgi mit pip eingegeben

pip install mod_wsgi

Verknüpfung

Im Folgenden wird davon ausgegangen, dass eine Seite auf Django veröffentlicht werden soll. Es kann eine Probe sein.

Teilweise referenzierte Seite: https://qiita.com/saki-engineering/items/5ea8e66b498fc7d4a399

Finde den Ort, an dem sich mod-wsgi befindet. Nach dem Umzug in das Stammverzeichnis

$ 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

Daher befindet es sich in / usr / local / pyenv / version / anaconda3-2019.10 / lib / python3.7 / site-packages / mod_wsgi / server / mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so.

Für Amazon Linux 2 möglicherweise am Ende von "/ etc / httpd / conf / httpd.conf"

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

Sollte geschrieben werden, also in / 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.Wo py platziert wurde)
WSGIPythonPath (Stammverzeichnis des in Django geschriebenen Webapp-Programms)
WSGIPythonHome (Übergeordnetes Verzeichnis der ausführbaren Python-Datei, die Sie ausführen möchten;Beispiel: /usr/local/pyenv/versions/anaconda3-2019.10)
Alias /static/ (Verzeichnis statischer Dateien für in Django geschriebene Webapp-Programme)

<Directory (Stammverzeichnis des in Django geschriebenen Webapp-Programms)>
    <Files wsgi.py>
        Order deny,allow
        Require all granted
    </Files>
</Directory>
<Directory (Verzeichnis statischer Dateien für in Django geschriebene Webapp-Programme)>
    Require all granted
</Directory>

Wie auch immer. sudo service httpd restart.

Ich musste beim letzten Mal nicht "WSGIPythonPath" angeben, warum ...

Einführung in MySQL

Es wird davon ausgegangen, dass der MySQL 8.0-Server bereits mit RDS gestartet wurde.

Setzen Sie den Client für MySQL 8.0 Referenzierte Seite: https://dev.classmethod.jp/cloud/aws/amazon-linux2-mysqlclient/

#Repository hinzufügen
$ sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
#8 im Standardzustand.Es wird auf 0 gesetzt, ist aber vorerst gültig
$ 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)

Serverstart

$ whereis mysql_config
mysql_config:

Eigentlich werde ich an diesem Punkt wütend, wenn ich nicht "mysql_config" habe.

$ sudo yum install mysql-devel

Dann

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

Und installieren Sie mit pip, um von Python aus auf den MySQL-Client zuzugreifen

pip install mysqlclient

Ich möchte eine Nation mit unendlichen Seiten

$ pip install django-el-pagination

Derjenige, der mit eintrat, war alt. Es wurde seit ungefähr zwei Jahren nicht mehr veröffentlicht. Dann lass es von git fallen (die Wartung ist ordentlich und Django 3.0 wird bald unterstützt)

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

Selbst wenn ich dies tue, versucht es zu funktionieren, aber ich kann nicht auf die Website zugreifen. Es wird zu "ModuleNotFoundError el_pagination". Wird es durch schlechte Verknüpfung verursacht? Oder liegt es am bearbeitbaren Modus?

Dann lassen Sie uns Pip direkt von Git installieren.

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

Es ist fertig.

Andere notwendige Einstellungen (settings.py) https://django-el-pagination.readthedocs.io/en/latest/start.html Sehen.

Swap-Bereich sichern

Erforderlich, da die Standardspeichergröße für EC2-Instanzen unglaublich klein ist.

$ sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
2048+0 Aufzeichnungseingabe
2048+0 Datensatzausgabe
2147483648 Bytes(2.1 GB)Kopiert, 31.4376 Sekunden, 68.3 MB/Sekunden
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
Stellen Sie Swap Space Version 1 ein. Größe= 2 GiB (2147479552 Bytes)
Kein Etikett, UUID=82de405a-d7ef-4ae3-ba93-16baa38c6e2c
$ sudo swapon /swapfile
#Bestätigung
swapon -s
Dateiname Typ Größe Verwendete Priorität
/swapfile                              	file    	2097148	0	-2
#Der Swap-Bereich ist jetzt beim Start aktiviert
$ sudo vi /etc/fstab
#hinzufügen
# /swapfile swap swap defaults 0 0

Referenz: https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-memory-swap-file/

Vermeiden Sie die Suche

In / var / www / html / robots.txt

User-agent : *
Disallow : /

Erstellen und speichern

Recommended Posts

Bis die Django-Anwendung (+ MySQL) auf AWS EC2 veröffentlicht wird (+ RDS (+ S3))
# 1 Bis zur Bereitstellung der Webanwendung von Django (Erstellen einer Instanz mit EC2 unter AWS)
Stellen Sie die Django-Anwendung auf Heroku bereit
Bis die mit Flasche erstellte Webanwendung auf Heroku veröffentlicht (bereitgestellt) wird
[AWS EC2] So installieren Sie nur den MySQL-Client unter Amazon Linux 2 und stellen eine Verbindung zu RDS her
Veröffentlichen Sie Ihre Django-App unter Amazon Linux + Apache + mod_wsgi
Einmaliges Anmelden bei der Django-Anwendung mit AWS SSO
[AWS EC2] Einstellungen, die Sie unter Amazon Linux 2 vornehmen möchten
Stellen Sie die Django-Anwendung auf EC2 mit Nginx + Gunicorn + Supervisor bereit
Installieren Sie Django auf dem Mac
# 3 Erstellen Sie eine Python-Umgebung (Django) mit einer EC2-Instanz (ubuntu18.04) von AWS part2
Erstellen Sie eine AWS Cloud9-Entwicklungsumgebung auf einer Amazon EC2-Instanz
Startete eine Webanwendung auf AWS mit Django und wechselte Jobs
Führen Sie TensorFlow auf einer GPU-Instanz in AWS aus
Versuchen Sie Tensorflow mit einer GPU-Instanz unter AWS
Führen Sie den Tensorflow der GPU-Version vor Ort in AWS EC2 aus
Verwenden Sie jupyter für eine GPU-Instanz in AWS
Version vom Juni 2017 zum Erstellen einer Tensorflow / Keras-Umgebung auf einer GPU-Instanz von AWS
Bis die Django-Anwendung (+ MySQL) auf AWS EC2 veröffentlicht wird (+ RDS (+ S3))
Ich habe versucht, TensorFlow (GPU-Version) unter Ubuntu zu installieren
Importieren Sie Ihre eigenen Funktionen mit AWS Glue