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.
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.
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".
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
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
Stellen Sie einen Webserver vor. Ziel für Apache + Mod-Wsgi.
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
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
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 ...
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)
$ 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
$ 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.
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/
In / var / www / html / robots.txt
User-agent : *
Disallow : /
Erstellen und speichern
Recommended Posts