[PYTHON] Für Sie, die durch den Einsatz von Django in die Enge getrieben werden. Vollversion der Django 2.2-Bereitstellung unter Ubuntu 18.04 + Nginx

Einführung

Da ich ein Anfänger war, habe ich vor, es für Anfänger zu schreiben. Wenn Sie Fragen oder Fehler haben, hinterlassen Sie bitte einen Kommentar.

Ich sagte, es ist eine vollständige Version, aber im Gegensatz zu den meisten Artikeln werde ich sie bei der Erstellung eines Projekts nicht erklären.

Es fühlt sich an, als wäre Django 3.0 gerade veröffentlicht worden, aber ich denke nicht, dass sich mit Django 3.0 so viel ändern wird. Es funktionierte gut in dem Bereich, den ich tat.

Umgebung

Annahme

Lokale Vorbereitung

Verzeichnisstruktur in der Bereitschaftsphase

YourProjekutName
        ├ YourProjectName
        │     ├ __init__.py
        │     ├ settings
        │     │     ├ __init__.py
        │     │     ├ base.py
        │     │     ├ local.py
        │     │     └ production.py
        │     ├ urls.py
        │     └ wsgi.py
        ├ YourAppName
        │     ├ migrations
        │     │     └ __init__.py
        │     ├ __init__.py
        │     ├ admin.py
        │     ├ apps.py
        │     ├ models.py
        │     ├ tests.py
        │     ├ urls.py
        │     └ views.py
        ├ collected_static
        ├ media
        ├ static
        │     ├ css
        │     ├ images
        │     └ js
        └ templates

Schreiben Sie YourProjectName / settings.py neu

Es kann genauer sein, es neu zu erstellen, als es neu zu schreiben.

YourProjectName/settings/base.py


import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

INSTALLED_APPS = [
    'YourAppName',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'YourProjectName.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'django.template.context_processors.static',
            ],
        },
    },
]

WSGI_APPLICATION = 'YourProjectName.wsgi.application'

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Tokyo'

USE_I18N = True

USE_L10N = True

USE_TZ = True

STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static')

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

YourProjectName/settings/local.py


from .base import *

SECRET_KEY = 'Secret Key Written on settings.py'

DEBUG = True

ALLOWED_HOSTS = []

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

YoutProjectName/settings/production.py


from .base import *

SECRET_KEY = 'Secret Key Written on settings.py'

DEBUG = False

ALLOWED_HOSTS = ['YourHostName']

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

Details werden später hinzugefügt.

Erstellen Sie einen Ordner "collect_static" im obersten Verzeichnis

Ich werde später sehen warum.

Verzeichnisstruktur in der Bereitschaftsphase

YourProjekutName
        ├ YourProjectName
        │     ├ __init__.py
        │     ├ settings
        │     │     ├ __init__.py
        │     │     ├ base.py
        │     │     ├ local.py
        │     │     └ production.py
        │     ├ urls.py
        │     └ wsgi.py
        ├ YourAppName
        │     ├ migrations
        │     │     └ __init__.py
        │     ├ __init__.py
        │     ├ admin.py
        │     ├ apps.py
        │     ├ models.py
        │     ├ tests.py
        │     ├ urls.py
        │     └ views.py
        ├ collected_static
        ├ media
        ├ static
        │     ├ css
        │     ├ images
        │     └ js
        └ templates

Push to GitHub

Beim Verschieben von Daten aus der Entwicklungsumgebung in die Produktionsumgebung verwenden wir GitHub im Hinblick auf die zukünftige Entwicklung. Es wird empfohlen, . \ \ Pychache \ _ \ _, db.sqlite3, collect_static / * in .gitignore anzugeben, um es vom Ziel von git auszuschließen.

Betrieb auf dem Server

Ich denke, es war schwierig, sich vorzubereiten, aber jetzt ist es Zeit, live zu gehen. Ich werde es vorerst schreiben, aber von nun an wird es eine Operation auf dem Server sein.

Firewall-Einstellungen

Bitte öffnen Sie Port 80. Stellen Sie sicher, dass Sie den Firewall-Dienst mit sudo systemctl restart neu starten.

Nginx-Installation

sudo apt install nginx

Nginx-Einstellungen

Geben Sie zu diesem Zeitpunkt die Domain in Ihrem Browser ein und Sie sollten Willkommen bei nginx! Sehen. Wenn dies nicht angezeigt wird, ist die Installation möglicherweise fehlgeschlagen, die Firewall-Einstellungen sind möglicherweise nicht korrekt oder die Einstellungen für die Domäne oder den Nameserver sind möglicherweise nicht korrekt.

Bearbeiten Sie zunächst den folgenden Teil.

/etc/nginx/nginx.conf


# user www-data;
user webmaster;

Bitte erstellen Sie unten eine neue Datei.

/etc/nginx/sites-available/YourProjectName


server {
    server_name YourHostName;

    location /static {
        alias /home/webmaster/YourProjectName/collected_static;
    }

    location /media {
        alias /home/webmaster/YourProjectName/media;
    }

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header X-Forwarded_For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Symbolischer Link

sudo ln -s /etc/nginx/sites-available/YourProjectName /etc/nginx/sites-enabled/YourProjectName

Benutzer: Webmaster erstellen

sudo adduser webmaster

Projekt klonen

Klonen Sie das Projekt, das Sie gerade lokal auf GitHub verschoben haben. Wichtig hierbei ist, dass Sie es in das Benutzerverzeichnis (/ home / webmaster /) des gerade erstellten Benutzers (webmaster) klonen.

Aufbau einer Python-Umgebung

Oft gibt es viele Artikel über das Erstellen virtueller Umgebungen, was vorzuziehen ist, aber es ist ärgerlich und aus irgendeinem Grund hat es nicht funktioniert, also mache ich es normal.

Installieren Sie Python 3.8

sudo apt install python3.8 python3.8-dev python3-pip

Paket mit pip installieren

Was Sie hier brauchen, ist ein Paket namens Gunicorn sowie Django.

sudo python3.8 -m pip install django gunicorn

Stellen Sie sicher, dass Sie alle anderen Pakete installieren, die für das erstellte Projekt erforderlich sind.

Diesmal entfällt die Funktionsprüfung von Gunicorn.

migrieren und sammeln

python3.8 manage.py makemigrations --settings YourProjectsName.settings.production
python3.8 manage.py migrate --settings YourProjectsName.settings.production
python3.8 manage.py collectstatic --settings YourProjectsName.settings.production

Daemon mit Gunicorn

Dämonisierung

sudo gunicorn --daemon --bind 127.0.0.1:8080 YourProjectName.wsgi:application

Service hinzufügen

Bitte erstellen Sie unten eine neue Datei.

/etc/systemd/system/YourProjectName.service


[Unit]
Description=gunicorn
After=network.target

[Service]
WorkingDirectory=/home/webmaster/YourProjectName
ExecStart=/usr/local/bin/gunicorn --bind 127.0.0.1:8080 YourProjectName.wsgi:application

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl restart nginx
sudo systemctl restart YourProjectName

Bestätigung

Geben Sie YourHostName in Ihren Browser ein und Sie sollten es sehen.

HTTPS-Konvertierung

sudo apt install certbot python-certbot-nginx
sudo certbot --nginx
sudo certbot renew --dry-run

Alles was Sie tun müssen, ist den Anweisungen zu folgen. Nur hier ist es wirklich einfach.

schließlich

Für Anfänger ist es ziemlich schwierig, aber selbst wenn Sie geistig in die Enge getrieben sind, bevor Sie es tun können, können Sie es definitiv eins nach dem anderen tun, ohne es unterwegs wegzuwerfen. Ich konnte es auch tun. Bitte gib dein bestes!! Wie ich am Anfang schrieb, fehlt möglicherweise etwas. Wenn Sie also Fragen haben oder einen Fehler finden, hinterlassen Sie bitte einen Kommentar.

Recommended Posts

Für Sie, die durch den Einsatz von Django in die Enge getrieben werden. Vollversion der Django 2.2-Bereitstellung unter Ubuntu 18.04 + Nginx
Was ich durch die Bereitstellung von Django auf EC2 gefunden habe
Stellen Sie Django-Apps unter Ubuntu + Nginx + MySQL bereit (Build)
Memo zur Bereitstellung von Django × Postgresql auf Docker für Heroku
Ermöglicht die Auswahl nach Namen aus dem Django-Benutzernamen