[PYTHON] Wenn ich eine Django-App auf Apache2 bereitstelle und keine statischen Dateien mehr liest

Notieren Sie sich, was zu tun ist, wenn Sie das Lesen von CSS- und Bilddateien beenden, nachdem Sie eine Django-App gemäß dem Lernprogramm erstellt und in einer Produktionsumgebung bereitgestellt haben.

Diese Folie ist leicht zu verstehen, daher ist es möglicherweise besser, sie zu lesen https://tell-k.github.io/djangocongressjp2019/#43

1. Umgang mit statischen Dateien in Django

Django behandelt statische Dateien während der Entwicklung und in der Produktion unterschiedlich. Um dies zu ändern, ist DEBUG = True / False in settings.py.

/ Static / wenn DEBUG = True

Da django für die Entwicklung entwickelt wurde, indem es für jede Anwendung in Ordner unterteilt wird, werden CSS- und Bilddateien, bei denen es sich um statische Dateien handelt, ebenfalls im Anwendungsordner abgelegt. Während DEBUG = True ist, was bedeutet, dass sich in der Entwicklung alle Ordner mit dem Namen / static / unter dem in STATIC_URL und STATICFILES_DIRS angegebenen Ordner befinden, die in settings.py geschrieben sind, werden sie von einem Alias namens / static / behandelt.

Zum Beispiel, wenn Sie eine Datei wie project / app1 / static / base.css haben Es behandelt es so, als wäre es http://hoge.com/static/base.css.

Warum Django nicht / statisch / in Produktion liefert

Wenn Sie diese Funktion in der Produktionsumgebung verwenden, wird der Hauptprozess unnötig überlastet und kann zu Sicherheitslücken führen. Daher müssen Sie diese Funktion in der Produktionsumgebung deaktivieren. Wenn Sie eine Django-App mit Apache2 usw. bereitstellen, um dies zu erzwingen, wird nur der Beispielbildschirm angezeigt, es sei denn, DEBUG = False.

/ Statisch / wenn DEBUG = False

Wenn DEBUG = True, hat Django eine statische Datei mit Alias / static / bereitgestellt, aber wenn DEBUG = False, wird sie nicht bereitgestellt. Im vorherigen Beispiel also http://hoge.com/static/ Dies bedeutet, dass base.css nicht existiert. Wenn Sie dies mit Apache usw. bereitstellen, können Sie den gleichen Vorgang wie während der Entwicklung ausführen.

2. Apache2-Setup-Prozedur

Sammeln Sie statische Dateien an einem Ort mit python manage.py collectstatic und schreiben Sie den gesammelten Speicherort in apahce2.conf, damit Apache2 ihn als / static / liefert. Es ist dasselbe wie das Django Girls Tutorial .

2-1 Sammeln Sie statische Dateien an einem Ort

Erstellen Sie einen Ordner namens static direkt unter dem Projekt, wie unten gezeigt, und sammeln Sie ihn.

/home/xxxx/django/proj1/


proj1
├── manage.py
├── mysite
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── myvenv
│   └── ...
├── statisch Wo werden statische Dateien gesammelt?
│   ├── hoge.jpg
│   └── base.css
└── requirements.txt

Gibt an, wo statische Dateien erfasst werden sollen (STATIC_ROOT). Im Folgenden lautet / home / xxxx / django / proj1 / static / STATIC_ROOT.

proj1/mysite/setting.py


STATIC_ROOT = os.path.join(BASE_DIR, 'static')

Wenn Sie den Befehl collectstatics ausführen, werden statische Dateien im PATH von STATIC_ROOT erfasst.

terminal


cd /home/xxxx/django/proj1
python manage.py collectstatics

2-2. Fügen Sie den Speicherort der statischen Datei zu apache2.conf hinzu

Ich möchte /home/xxxx/django/proj1/static/base.css als http://hoge.com/static/base.css behandeln. Fügen Sie daher dem Ordner einen Alias hinzu und erteilen Sie die Berechtigung (Alle erforderlich).

/etc/apache2/apache2.conf


Alias /static/ /home/xxxx/django/proj1/static/
<Directory /home/xxxx/django/proj1/static>
    Require all granted
</Directory>

Ich habe die Einstellungen geändert, also starte Apache2 neu.

terminal


sudo /etc/init.d/apache2 restart

2-3. Wenn es nicht funktioniert

Da collectstatics die Datei einfach kopiert, können Sie den Vorgang überprüfen, indem Sie überprüfen, ob die Datei nach STATIC_ROOT kopiert wurde.

Wenn Sie Apache2 nicht erfolgreich registriert haben, sollte Django wsgi Apache2: 'AH01630: Client von Serverkonfiguration abgelehnt' in Ihrem Apache2-Fehlerprotokoll angezeigt werden. Stellen Sie sicher, dass der Inhalt von apache2.conf mit STATIC_ROOT übereinstimmt.

Wenn Sie die Standardeinstellungen beibehalten, wird das Apache2-Fehlerprotokoll unten angezeigt.

terminal


tail -f /var/log/apache2/error.log

Recommended Posts

Wenn ich eine Django-App auf Apache2 bereitstelle und keine statischen Dateien mehr liest
Stellen Sie die mit PTVS erstellte Django-App in Azure bereit
Stellen Sie Echtzeit-Webanwendungen mit swampdragon x apache bereit
Umgang mit statischen Dateien bei der Bereitstellung in der Produktion mit Django
Erstellen Sie ein Bereitstellungsskript mit Stoff und Küche und verwenden Sie es erneut
Als ich Django in mein Home-Verzeichnis legte, wurde ich mit einem Berechtigungsfehler in eine statische Datei eingebunden
Erstellen Sie eine temporäre Datei mit Django als Zip und geben Sie sie zurück
Ein Memorandum beim automatischen Erwerb mit Selen
Erstellen und Bereitstellen von Django-Apps (PTVS) mithilfe des Azure Table-Speichers
Erstellen Sie mit Python + Django + AWS eine Scraping-App und wechseln Sie Jobs
Ich habe einen Chat-Chat-Bot mit Tensor2Tensor erstellt und diesmal hat es funktioniert
Erstellen Sie eine Django-App auf Docker und stellen Sie sie in AWS Fargate bereit
Kein Grund zum Nachdenken beim Schreiben eines Crawlers mit Django und Celery
Todo-App mit Django erstellen ④ Ordner- und Aufgabenerstellungsfunktion implementieren
Ich habe eine App für Ausländer erstellt, die Japan in Hackason besuchen, und einen Preis gewonnen, aber als ich mir das genau überlegte, war es nutzlos.
CentOS 6.4, Python 2.7.3, Apache, mod_wsgi, Django
Ich kann nicht mehr mit der Google App Engine bereitstellen
Ich habe eine WEB-Bewerbung bei Django gemacht
Als ich versuchte, eine VPC mit AWS CDK zu erstellen, konnte ich es aber nicht schaffen
Als ich versuchte, mit Python eine virtuelle Umgebung zu erstellen, funktionierte dies nicht
Ich möchte ein Element mit numpy in eine Datei schreiben und es überprüfen.
Lassen Sie uns mit Vue.js und Django-Rest-Framework [Teil 1] ~ Django-Setup ~ eine nervenschwächende App erstellen
Ich erhalte einen UnicodeDecodeError, wenn ich mit mod_wsgi laufe
Konfigurieren Sie ein Modul mit mehreren Dateien in Django
Ich möchte eine Django-App auf Heroku hochladen
Ich habe ein Docker-Image erstellt, das RSS liest und automatisch regelmäßig twittert, und es veröffentlicht.
[Einführung in den Systemhandel] Ich habe einen Stochastic Oscillator mit Python gezeichnet und damit gespielt ♬
Erstellt eine Web-App, die IT-Ereignisinformationen mit Vue und Flask abbildet
[Shell Art] Nur wenn es ein Vielfaches von 3 ist und eine Zahl mit 3 dumm wird
Erstellen Sie mit Streamlit schnell ein Python-Datenanalyse-Dashboard und stellen Sie es in AWS bereit
Bildverarbeitung mit Python (ich habe versucht, es in 0 und 1 Mosaikkunst zu binarisieren)