Ich habe einen Vertrag mit GMO Cloud ALTUS unterzeichnet und die entwickelte Django-Anwendung in der Umgebung von Nginx + uWSGI + MySQL + Python3 bereitgestellt. Daher möchte ich ein Memorandum über die ausgeführte Operation aufbewahren. Bitte beachten Sie, dass dies nur eine Arbeitsnotiz ist und nicht unbedingt eine bewährte Methode ist. Bitte zögern Sie nicht, auf Fehler oder Mängel hinzuweisen (lacht)
Erstens ist WSGI (Web Server Gateway Interface) eine Standardschnittstelle (PEP333) zwischen einer in Python geschriebenen Anwendung und einem Webserver. UWSGI bezieht sich auf einen Webserver, auf dem Webanwendungen ausgeführt werden können, die den WSGI-Spezifikationen entsprechen.
Die mit Django erstellte Anwendung wurde für die Arbeit mit WSGI entwickelt und kann mit verschiedenen Konfigurationen betrieben werden. Diesmal gab Yuri Umezaki von Pycon 2015 jedoch bekannt ([Webdienstbetrieb mit uWSGI / Docker]). Beispiel](https://www.youtube.com/watch?v=zsoqAf-c3_s&index=23&list=PLMkWB0UjwFGkE3BIm4qpwaK5oPrmLLJoT)) wurde mit der folgenden Konfiguration erstellt.
Web Browser <--> Nginx <--> socket <--> uWSGI <--> Djnago <--> MySQL
/
└── var/
└── www/
└── example.jp/ <-Bereitstellungszielordner
├── venv/ <-Verzeichnis der virtuellen Umgebung
│ ├── app <-Projektstamm der Django-Anwendung(django-Erstellt mit der App admin startproject)
│ │ └ main <-Anwendungsstamm der Django-Anwendung(python manage.py startapp main)
│ ├── uwsgi.ini <-INI-Datei, die die Startoptionen von uwsgi verwaltet
│ └── uwsgi_params <-Datei, in der uwsgi-Variablen gespeichert sind
└── static <-Verzeichnis zum Speichern statischer Dateien
GMO Cloud ALTUS verfügt über eine Funktion, mit der Sie die Firewall vom Bildschirm aus einstellen können. Set gemäß make_security.html). Erstens haben nur "22" und "80" Ports geöffnet.
GMO Cloud ALTUS - Erstellen Sie einen virtuellen Server mit der Ubuntu-Vorlage für den Basisplan. Nach der Erstellung können Sie sich als Benutzer namens "Cloud" anmelden. Nach dem Erstellen des virtuellen Servers wird das Anmeldekennwort des virtuellen Servers im Dialogfeld angezeigt. Notieren Sie sich dies, da Sie es auf anderen Bildschirmen nicht sehen können.
Die SSH-Portnummer "22" wird häufig gehackt. Ändern Sie sie daher von 22 auf eine andere Nummer (diesmal 2222). In Bezug auf die Kennwortauthentifizierung durch den Root-Benutzer befindet sich "PermitRootLogin-Verbotskennwort" in einem Zustand, in dem dies nicht einmal standardmäßig möglich ist, sodass die erforderlichen Mindesteinstellungen abgeschlossen sind. Für den Fall, dass die SSH-Anmeldung durch den Root-Benutzer überhaupt verboten ist. Machen.
# sshd_Konfigurationsdatei bearbeiten
[cloud]$ sudo vi /etc/ssh/sshd_config
[sudo] password for cloud: <-Geben Sie das Cloud-Benutzerpasswort ein
/etc/ssh/sshd_config
# What ports, IPs and protocols we listen for
-Port 22
+Port 2222
(Unterlassung)
# Authentication:
(Unterlassung)
-PermitRootLogin prohibit-password
+PermitRootLogin no
Starten Sie den SSH-Dienst neu, damit die bisherigen Änderungen wirksam werden.
[cloud]$ sudo service ssh restart
Schließen Sie nach dem Neustart den Port "22" in der Firewall und öffnen Sie den Port "2222". Sobald Sie den Port öffnen und schließen können
--Deny Verbindung über Port "22" --Port "2222" kann sich nicht als Root anmelden --Port "2222", Cloud-Benutzer kann sich anmelden
Versicher dich.
[SSH-Port ändern und Anmeldung durch Root-Benutzer verbieten](# 3 - SSH-Port ändern und Anmeldung durch Root-Benutzer verbieten) verbietet die direkte Anmeldung als Root-Benutzer und legt fest, dass sich nur allgemeine Benutzer anmelden können. Ich habe es geändert, aber ich werde es so einstellen, dass es sich mit der Authentifizierung mit öffentlichem Schlüssel für eine sicherere Verwendung anmeldet.
Für diejenigen, die etwas über die Authentifizierung mit öffentlichem Schlüssel wissen möchten, "Vertraute Authentifizierung mit öffentlichem Schlüssel" - selbst Anfänger können verstehen! Weitere Informationen finden Sie im Webserver-Betriebskurs von VPS (2).
Ich verwende Tera Term auch als SSH-Client. Informationen zum Festlegen der Authentifizierung mit öffentlichem Schlüssel in Tera Term finden Sie unter SSH-Verbindung durch Authentifizierung mit öffentlichem Schlüssel - Verwendung von Tera Term. / linux / tera-term-ssh-login-public-key /) und [SSH-Verschlüsselungsmethode mit öffentlichem Schlüssel - Authentifizierung mit öffentlichem Schlüssel mit Tera Term](http://www.j-oosk.com/teraterm/authorized_keys/ Bitte beachten Sie 306 /).
Folgen Sie dem obigen Link, um die Authentifizierungseinstellungen für den öffentlichen Schlüssel in Tera Term abzuschließen.
/etc/ssh/sshd_config
# Change to no to disable tunnelled clear text passwords
-#PasswordAuthentication yes
+PasswordAuthentication no
Bearbeiten.
Starten Sie den SSH-Dienst nach der Bearbeitung wie in [4. Starten Sie den SSH-Dienst neu] neu (# 4 - Starten Sie den SSH-Dienst neu) und bestätigen Sie, dass die Authentifizierungsmethode von der Kennwortauthentifizierung zur Authentifizierung mit öffentlichem Schlüssel geändert wurde. Ich werde.
apt-get ist ein Befehl zum Bedienen und Verwalten von Paketen mithilfe der APT-Bibliothek (Advanced Package Tool), einem Paketverwaltungssystem für Debian-basierte Distributionen (Debian und Ubuntu), das die Abhängigkeiten der Anwendungen enthält, die Sie installieren möchten. Sie können mit installieren / deinstallieren.
#Aktualisieren Sie die Datenbank, die das Paket verwaltet (aktualisieren Sie das Paket selbst nicht).
[cloud]$ sudo apt-get update
#Installierte Pakete aktualisieren
[cloud]$ sudo apt-get upgrade
Referenz: [Ubuntu] Paket mit apt-get installieren / deinstallieren / aktualisieren Verwendung von apt-get apt-get --Package-Betrieb und -Verwaltung --Linux-Befehl APT HOWTO (Veraltete Dokumentation) Kapitel 3 - Paketverwaltung [Protokoll der Position und Bestätigungsmethode des Ubuntu / apt-Befehls](http://linux.just4fun.biz/Ubuntu/apt%E3%82%B3%E3%83%9E%E3%83%B3%E3%83] % 89% E3% 81% AE% E6% 93% 8D% E4% BD% 9C% E3% 83% AD% E3% 82% B0% E3% 81% AE% E5% 9C% A8% E5% 87% A6 % E3% 81% A8% E7% A2% BA% E8% AA% 8D% E6% 96% B9% E6% B3% 95.html)
Das Standardgebietsschema ist für englischsprachige Länder. Nachrichten und Daten werden für englischsprachige Länder angezeigt. Ändern Sie daher das Gebietsschema für Japan.
#Überprüfen Sie das Gebietsschema vor der Änderung
[cloud]$ locale
#Bestätigen Sie, dass es sich um ein englischsprachiges Gebietsschema handelt
[cloud]$ date
Fri Dec 16 10:01:01 JST 2016
#Installieren Sie das japanische Paket
[cloud]$ sudo apt-get install language-pack-ja
#Gebietsschema aktualisieren
[cloud]$ sudo update-locale LANG=ja_JP.UTF-8
#Neustart des Betriebssystems
[cloud]$ sudo shutdown -r now
#Überprüfen Sie das geänderte Gebietsschema
[cloud]$ locale
#Bestätigen Sie, dass es sich um ein japanischsprachiges Gebietsschema handelt
[cloud]$ date
Bis zum 15.04. Verwendete Ubuntu ntpdate, um die Zeit zu synchronisieren, ab 15.10 verwendet es die Systemd-Funktion, um die Zeit zu synchronisieren. Standardmäßig wird ein NTP-Server mit dem Namen "ntp.ubuntu.com" für die Zeitsynchronisation verwendet. Ändern Sie ihn daher in den NTP-NTP-Server (Informations- und Kommunikationsforschungsorganisation) (ntp.nict.jp).
#Überprüfen Sie die Einstellungen für die Zeitsynchronisation
[cloud]$ systemctl -l status systemd-timesyncd
#Ändern Sie das Zeiterfassungsziel
[cloud]$ sudo sed -i 's/#NTP=/NTP=ntp.nict.jp/g' /etc/systemd/timesyncd.conf
? #Neustart des Betriebssystems
? sudo shutdown -r now
#Starten Sie den Zeitsynchronisationsdienst neu
[cloud]$ sudo systemctl restart systemd-timesyncd.service
#Überprüfen Sie die Einstellungen für die Zeitsynchronisation
[cloud]$ systemctl -l status systemd-timesyncd
#Anzeigezeit
[cloud]$ date
※Referenz: Ändern Sie die Einstellung für die Zeitanpassung in Ubuntu 16.04 und 15.10 systemd ich weiß nicht
Später, wenn wir Nginx installieren, erstellen wir eine Gruppe namens Nginx und einen Benutzer namens Nginx, der sich nicht anmelden kann. Stellen Sie die 100s-Gruppen-ID und die Benutzer-ID gemäß der folgenden Zuordnungsrichtlinie ein.
Verwenden | Reichweite |
---|---|
Systemadministrator | 0 - 99 |
Systemkonto | 100 - 999 |
Benutzerkonto | 1000 - 29999 |
Reservierung | 30000 - 59999 |
#Überprüfen Sie die verwendete Gruppen-ID
[cloud]$ cat /etc/group
#Erstellen Sie eine Nginx-Gruppe
[cloud]$ sudo groupadd -g [Gruppen-ID] nginx
#Überprüfen Sie die verwendete Benutzer-ID
[cloud]$ cat /etc/passwd
#Erstellen Sie einen Nginx-Benutzer, der zur Nginx-Gruppe gehört
[cloud]$ sudo useradd -g nginx -u [Benutzeridentifikation] -d /nonexistent -s /bin/false nginx
Erstellen Sie einen App-Benutzer als den Benutzer, der die Anwendung ausführt.
#App-Benutzer hinzufügen
[cloud]$ sudo useradd app -g nginx
#Bestätigen Sie den App-Benutzer
[cloud]$ sudo cat /etc/passwd
#Überprüfen Sie die Gruppe, zu der der App-Benutzer gehört
[cloud]$ sudo groups app
#Legen Sie das App-Benutzerpasswort fest
[cloud]$ sudo passwd app
#Bestätigen Sie, dass Sie zum App-Benutzer wechseln können
[cloud]$ su app
#Melden Sie sich vom App-Benutzer ab
[app]$ exit
Ich möchte Pakete für jedes Projekt unabhängig installieren und verwenden, anstatt sie global zu installieren. Verwenden Sie pyvenv, da Pyvenv anscheinend anstelle von virtualenv aus Python 3.3 verwendet werden kann.
#Ubuntu 16 von GMO Cloud ALTUS.Python ist bereits in der 04-Vorlage installiert.
#Überprüfen Sie das installierte Python.
[cloud]$ python3 -V
#Installieren Sie pip
[cloud]$ sudo apt install python3-pip
#Pip aktualisieren
[cloud]$ pip3 install --upgrade pip
#Installieren Sie pyvenv
[cloud]$ sudo apt install python3-venv
Referenz: Python3-Entwicklungsumgebung mit pyenv und venv vorbereiten Hinweise zu dem, was ich gelernt habe, als ich über die Verwendung von pyenv oder virtualenv unter Windows nachgedacht habe
Später möchte ich die Website beschleunigen und optimieren. Daher werde ich dieses Mal das von Google entwickelte PageSpeed-Modul (ngx_pagespeed) verwenden, indem ich es in Nginx einbinde. Installieren Sie Nginx + ngx_pagespeed mithilfe eines von Google bereitgestellten Shell-Skripts aus dem Quellcode.
#Installieren Sie den Befehl zum Entpacken
[cloud]$ sudo apt-get install unzip
#Installieren Sie die OpenSSL-Bibliothek
[cloud]$ sudo apt-get install libssl-dev
#Die PCRE-Bibliothek ist eine Bibliothek für reguläre Ausdrücke
#Das Abgleichen durch reguläre Ausdrücke wird möglich, indem die URL neu geschrieben und der Speicherort angegeben wird
[cloud]$ sudo apt-get install libpcre3-dev
#Erstellen Sie ein Cache-Zielverzeichnis für den Puffer
[cloud]$ sudo mkdir -p /var/cache/nginx/client_temp
#Ändern Sie den Eigentümer des Cache-Zielverzeichnisses des Puffers
[cloud]$ sudo chown nginx:root /var/cache/nginx/client_temp
#Ändern Sie die Berechtigungen des Cache-Zielverzeichnisses des Puffers
[cloud]$ sudo chmod 700 /var/cache/nginx/client_temp
#Wechseln Sie zum Root-Benutzer
[cloud]$ sudo su -
#Neueste Nginx- und PageSpeed-Module(ngx_pagespeed)Installieren
[root]$ bash <(curl -f -L -sS https://ngxpagespeed.com/install) --nginx-version latest -b /usr/local/src
#In der Mitte wird ein Dialogfeld angezeigt, in dem Sie zusätzliche Konfigurationsoptionen angeben können. Geben Sie daher zusätzliche Optionen an.
(Unterlassung)
About to build nginx. Do you have any additional ./configure
arguments you would like to set? For example, if you would like
to build nginx with https support give --with-http_ssl_module
If you don't have any, just press enter.
> --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-file-aio --with-threads --with-ipv6 --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_ssl_module --with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed'
#Melden Sie sich vom Root-Benutzer ab
[root]$ exit
#Überprüfen Sie die Nginx-Version
[cloud]$ nginx -V
#Starten Sie Nginx
[cloud]$ sudo nginx
Stellen Sie nach dem Starten von Nginx mit einem Browser eine Verbindung zu http: // [IP-Adresse] her. Wenn Sie die Nginx-Begrüßungsseite anzeigen können, ist dies in Ordnung!
Ich werde die Einstellung von ngx_pagespeed im Operationsabschnitt einführen, der später aktualisiert wird, aber dieses Mal möchte ich nur den Teil überprüfen, der die Funktion vorerst aktiviert.
Fügen Sie der Serveranweisung in /etc/nginx/nginx.conf die Einstellung zum Aktivieren von PageSpeed hinzu. In der Server-Direktive von nginx.conf
/etc/nginx/nginx.conf
http {
(Unterlassung)
server {
(Unterlassung)
+ pagespeed on;
+ pagespeed RewriteLevel CoreFilters;
+ pagespeed FileCachePath /var/cache/ngx_pagespeed_cache;
+ pagespeed EnableFilters collapse_whitespace,trim_urls,remove_comments;
(Unterlassung)
}
}
Wenn Sie hinzufügen können, starten Sie Nginx neu und überprüfen Sie die Antwort der Anforderung. Wenn der Antwortheader "X-Page-Speed: 1.11.33.4-0" enthält, ist dies in Ordnung!
#Starten Sie Nginx neu
[cloud]$ sudo nginx -s reload
#Wirf eine Anfrage und überprüfe den Antwortheader
[cloud]$ curl -I 'http://localhost/' | grep X-Page-Speed
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
X-Page-Speed: 1.11.33.4-0
Referenz: Build ngx_pagespeed From Source So beschleunigen Sie die Website durch Einführung von Nginx + PageSpeed (ngx_pagespeed) 1. Serialisierung von Nginx: Einführung von Nginx Verwenden Sie PageSpeed, um Ihre Website zu optimieren und zu beschleunigen NGINX-1.5.12. Kompilierungs- und Installationsverfahren [Debian] [CentOS] [Ubuntu] Benutzer-ID-Richtlinien und Zuweisungsregeln überprüfen Ubuntu Policy Manual - 9.2.2 UID and GID classes
# MySQL5.Installieren Sie 7
$ sudo apt-get -y install mysql-server-5.7
#Melden Sie sich als Root an
$ mysql -u root -p
#Datenbank erstellen
mysql> CREATE DATABASE `[Name der Datenbank]` DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
#Wählen Sie MySQL-Datenbank
mysql> USE 'mysql';
#Benutzerinformationen anzeigen
mysql> select user,host from mysql.user;
#Berechtigung für vom Benutzer erstellte und erstellte Datenbank(CREATE, ALTER, REFERENCES, INDEX, SELECT, UPDATE, INSERT, DELETE)Gewähren
mysql> GRANT CREATE,ALTER,REFERENCES,INDEX,SELECT,UPDATE,INSERT,DELETE ON [Name der Datenbank].* TO '[Nutzername]'@'localhost' IDENTIFIED BY '[Passwort]';
#Überprüfen Sie die Berechtigungen des erstellten Benutzers
mysql> SHOW GRANTS for '[Nutzername]'@'localhost';
#Melden Sie sich von MySQL ab
mysql> exit
※Referenz MySQL-Installation Using MySQL with Django - Access denied for user '@'localhost [MySQL / Benutzer- und DB-Erstellung](http://wiki.minaco.net/index.php?MySQL%2F%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%A8DB % E4% BD% 9C% E6% 88% 90)
#Erstellen Sie ein Bereitstellungszielverzeichnis
[cloud]$ sudo mkdir -p /var/www/example.jp
#Ändern Sie den Eigentümer des Zielverzeichnisses
[cloud]$ sudo chown root:nginx /var/www/example.jp
#Ändern Sie die Berechtigungen des Bereitstellungszielverzeichnisses
[cloud]$ sudo chmod g+w /var/www/example.jp
#Wechseln Sie zum App-Benutzer
$ su app
#Erstellen Sie eine virtuelle Umgebung namens venv.
[app]$ /usr/bin/pyvenv /var/www/example.jp/venv
#Aktivieren Sie die erstellte virtuelle Umgebung. Wenn die virtuelle Umgebung aktiviert ist, "([evn name])Wird am Anfang der Shell hinzugefügt.
[app]$ source /var/www/example.jp/venv/bin/activate
#Aktualisieren Sie die Pip der virtuellen Umgebung auf den neuesten Stand
(venv)[app]$ pip install --upgrade pip
#Installieren Sie Django in einer virtuellen Umgebung
(venv)[app]$ pip install Django
#Installieren Sie uWSGI in einer virtuellen Umgebung
(venv)[app]$ pip install uwsgi
#Installieren Sie PyMySQL in einer virtuellen Umgebung, damit Django eine Verbindung zu MySQL herstellen kann
(venv)[app]$ pip install PyMySQL
#Deaktivieren Sie die virtuelle Umgebung einmal
(venv)[app]$ deactivate
Ich denke, es gibt verschiedene Möglichkeiten, die erstellte Django-Anwendung bereitzustellen, z. B. mithilfe von Git- oder FTP-Software, aber dieses Mal werde ich sie mithilfe von FTP-Software auf den Server hochladen.
Laden Sie die erstellte Django-Anwendung als App-Benutzer unter "/var/www/example.jp/venv/" mit der FTP-Software hoch. Ich habe jedoch geändert, um die Kennwortauthentifizierung in [SSH-Verbindung durch Authentifizierung mit öffentlichem Schlüssel](# 5-ssh-Verbindung durch Authentifizierung mit öffentlichem Schlüssel) zu verbieten und mich mit Authentifizierung mit öffentlichem Schlüssel anzumelden. Daher habe ich festgelegt, dass die Authentifizierung mit öffentlichem Schlüssel auch mit FTP-Software durchgeführt werden kann. Müssen, zu ... haben.
Ich verwende WinSCP als FTP-Software, aber da WinSCP nur private Schlüssel im PuTTY-Format unterstützt, habe ich es mit [SSH-Verbindung durch Authentifizierung mit öffentlichem Schlüssel](# 5-ssh-Verbindung durch Authentifizierung mit öffentlichem Schlüssel) erstellt. Ich habe den privaten Schlüssel in das PuTTY-Format konvertiert.
Klicken Sie im Anmeldebildschirm auf die Schaltfläche Bearbeiten, um den Bildschirm "Erweiterte Websiteeinstellungen" anzuzeigen. Klicken Sie in der Navigation auf "SSH" ⇒ "Authentifizierung" und dann auf die Schaltfläche "Datei auswählen" für "Privater Schlüssel". Der Bildschirm "Privaten Schlüssel auswählen" wird angezeigt. [SSH-Verbindung durch Authentifizierung mit öffentlichem Schlüssel](# 5-Wenn Sie den privaten Schlüssel auswählen, der durch SSH-Verbindung durch Authentifizierung mit öffentlichem Schlüssel erstellt wurde, wird er automatisch in den privaten Schlüssel im PuTTY-Format konvertiert.
#Melden Sie sich vom App-Benutzer ab
[app]$ exit
#Erstellen Sie ein Verzeichnis zum Speichern von uWSGI-Socket- und PID-Dateien
[cloud]$ sudo mkdir -p /var/run/uwsgi
#Ändern Sie den Eigentümer des Verzeichnisses, in dem die uWSGI-Socket- und PID-Dateien gespeichert sind
[cloud]$ sudo chown root:nginx /var/run/uwsgi
#Ändern Sie die Berechtigungen des Verzeichnisses, in dem die uWSGI-Socket- und PID-Dateien gespeichert sind
[cloud]$ sudo chmod g+w /var/run/uwsgi
#Erstellen Sie ein Verzeichnis zum Speichern von uWSGI-Protokolldateien
[cloud]$ sudo mkdir -p /var/log/uwsgi
Erstellen Sie eine Datei (uwsgi_params), die Variablen für uWSGI unter /var/www/example.jp/venv/ definiert.
/var/www/example.jp/venv/uwsgi_params
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
Erstellen Sie uwsgi.ini mit den Startoptionen von uWSGI.
vim:/var/www/example.jp/venv/uwsgi.ini
[uwsgi]
uid = nginx
gid = nginx
# Django-related settings
# the base directory (full path)
#Bitte ändern Sie es entsprechend Ihrer Umgebung
chdir = /var/www/example.jp/venv/app
# Django's wsgi file
#Bitte ändern Sie es entsprechend Ihrer Umgebung(Grundsätzlich "Django Projektname.wsgi "gesetzt)
module = app.wsgi
# the virtualenv (full path)
#Bitte ändern Sie es entsprechend Ihrer Umgebung
home = /var/www/example.jp/venv
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 2
threads = 1
# the socket (use the full path to be safe
socket = /var/run/uwsgi/master.sock
pidfile = /var/run/uwsgi/master.pid
# ... with appropriate permissions - may be needed
chmod-socket = 666
# clear environment on exit
vacuum = true
thunder-lock = true
max-requests = 6000
max-requests-delta = 300
# log
logto = /var/log/uwsgi/uwsgi.log
deamonize = /var/log/uwsgi/uwsgi-@(exec://date +%Y-%m-%d).log
log-reopen = true
Stellen Sie den virtuellen Host in Zukunft unter der Annahme ein, dass mehrere Anwendungen auf demselben Server ausgeführt werden.
Erstellen Sie die Verzeichnisse "/ etc / nginx / sites-available" und "/ etc / nginx / sites-enabled". Die Konfigurationsdatei des virtuellen Hosts wird in "/ etc / nginx / sites-available" gespeichert.
Wenn Nginx gestartet wird, lesen Sie unter "/ etc / nginx / sites-enabled" und unter "/ etc / nginx / sites-enabled" symbolisch einen Link zur Einstellungsdatei unter "/ etc / nginx / sites-available". Sie können die Einstellungen des virtuellen Hosts aktivieren oder deaktivieren, indem Sie die Einstellungen hinzufügen oder löschen, was die Verwaltung erleichtert.
#Erstellen Sie ein Verzeichnis zum Speichern der Konfigurationsdatei des virtuellen Hosts
[cloud]$ sudo mkdir /etc/nginx/sites-available
#Erstellen Sie ein Verzeichnis zum Speichern des symbolischen Links zur Konfigurationsdatei des virtuellen Hosts, den Sie aktivieren möchten
[cloud]$ sudo mkdir /etc/nginx/sites-enabled
Erstellen Sie eine Konfigurationsdatei für den virtuellen Host unter "/ etc / nginx / sites-available /".
/etc/nginx/sites-available/example.jp
# the upstream component nginx needs to connect to
upstream django {
# for a file socket
server unix:///var/run/uwsgi/master.sock;
}
# configuration of the server
server {
# the port your site will be served on
listen 80;
# the domain name it will serve for
# substitute your machine's IP address or FQDN
server_name [IP-Adresse oder Domain];
charset utf-8;
# max upload size
# Django media
location /static {
# your Django project's static files - amend as required
#Bitte ändern Sie es entsprechend Ihrer Umgebung.
alias /var/www/example.jp/static;
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
# the uwsgi_params file you installed
#Bitte ändern Sie es entsprechend Ihrer Umgebung.
include /var/www/example.jp/venv/uwsgi_params;
}
}
Nachdem Sie die Konfigurationsdatei für den virtuellen Host erstellt haben, erstellen Sie einen symbolischen Link.
#Stellen Sie einen symbolischen Link zur Konfigurationsdatei des virtuellen Hosts her, den Sie aktivieren möchten
[cloud]$ sudo ln -s /etc/nginx/sites-available/example.jp /etc/nginx/sites-enabled/example.jp
Fügen Sie der http-Direktive hinzu, um sie unter "/ etc / nginx / sites-enabled /" zu lesen.
/etc/nginx/nginx.conf
http {
(Unterlassung)
#gzip on;
+ include /etc/nginx/sites-enabled/*;
(Unterlassung)
}
Stellen Sie Nginx so ein, dass es automatisch startet, auch wenn das Betriebssystem neu gestartet wird. Erstellen Sie "/etc/systemd/system/nginx.service".
/etc/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Sobald Sie "/etc/systemd/system/nginx.service" erstellt haben
#Nginx läuft, also hör auf
#Wenn Sie eine Fehlermeldung wie "PID-Datei kann nicht geöffnet werden" erhalten, starten Sie das Betriebssystem neu
[cloud]$ sudo nginx -s stop
#Inbetriebnahme
[cloud]$ sudo systemctl start nginx
#Dienstausfall
[cloud]$ sudo systemctl stop nginx
#Aktivieren Sie den automatischen Dienststart
[cloud]$ sudo systemctl enable nginx
#Inbetriebnahme
[cloud]$ sudo systemctl start nginx
Nachdem Sie bestätigt haben, dass der Dienst durch Ausführen gestartet / gestoppt werden kann, registrieren Sie Nginx als Dienst.
Andere Befehle für den Dienst
#Neustart des Dienstes
$ sudo systemctl restart [Dienstname]
#Deaktivieren Sie den automatischen Start des Dienstes
$ sudo systemctl disable [Dienstname]
#Überprüfen Sie den Betriebsstatus des Dienstes
$ sudo systemctl status [Dienstname]
#Beenden Sie alle im Service enthaltenen Prozesse
$ sudo systemctl kill -s9 [Dienstname]
Referenz: [Einführung des leichten und schnellen Webservers Nginx in Ubuntu 12.04 (Einstellung von Teil 1)](http://blog.kondoyoshiyuki.com/2012/12/09/setting-1-nginx-on-ubuntu-12 -04 /) NGINX systemd service file
Ich möchte eine Datenbank und Tabellen in MySQL erstellen, damit ich eine DB-Migration von Django durchführen kann.
#Virtuelle Umgebung aktivieren
[app]$ source /var/www/example.jp/venv/bin/activate
#Erstellen Sie eine Migrationsdatei
(venv)[app]$ python /var/www/example.jp/venv/pornstar/manage.py makemigrations app
#Überprüfen Sie die Migration, die im SQL-Format ausgeführt werden soll
(venv)[app]$ python /var/www/example.jp/venv/pornstar/manage.py sqlmigrate app 0001
#Führen Sie die Migration durch
(venv)[app]$ python /var/www/example.jp/venv/pornstar/manage.py migrate
Außerdem werden statische Dateien erfasst, indem sie von jeder Anwendung in ein bestimmtes Verzeichnis kopiert werden, damit sie problemlos in der Produktionsumgebung veröffentlicht werden können. Kopieren Sie die statische Datei mit dem folgenden Befehl in das angegebene Verzeichnis.
Bearbeiten Sie settings.py in Ihrer Django-Anwendung, fügen Sie STATIC_ROOT hinzu und kommentieren Sie STATICFILES_DIRS aus.
diff:/var/www/example.jp/venv/app/app/settings.py
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.10/howto/static-files/
STATIC_URL = '/static/'
+STATIC_ROOT = '/var/www/example.jp/static/'
(Unterlassung)
-STATICFILES_DIRS = (
- os.path.join(BASE_DIR, "static"),
-)
+#STATICFILES_DIRS = (
+# os.path.join(BASE_DIR, "static"),
+#)
#Statische Datei kopieren
(venv)[app]$ python /var/www/example.jp/venv/app/manage.py collectstatic
#Deaktivieren Sie die virtuelle Umgebung
(venv)[app]$ deactivate
Referenz: So veröffentlichen Sie statische Dateien
Erstellen Sie wie Nginx "/etc/systemd/system/uwsgi.service", damit uWSGI automatisch gestartet wird, auch wenn das Betriebssystem neu gestartet wird.
/etc/systemd/system/uwsgi.service
# uwsgi.service
[Unit]
Description=uWSGI
After=syslog.target
[Service]
ExecStartPre=/bin/bash -c 'mkdir -p /var/run/uwsgi; chown root:nginx /var/run/uwsgi; chmod g+w /var/run/uwsgi;'
ExecStart=/bin/bash -c 'source /var/www/example.jp/venv/bin/activate; uwsgi --ini /var/www/example.jp/venv/uwsgi.ini'
#Restart=always
Restart=on-failure
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
[Install]
WantedBy=multi-user.target
"ExecStartPre" ist eine Option zum Angeben des Befehls, der vor dem Starten des Dienstes ausgeführt werden soll. Es wird jedoch angegeben, dass das Verzeichnis (/ var / run / uwsgi) zum Speichern der uWSGI-PID-Datei und der Socket-Datei als auszuführender Befehl erstellt wird.
Weil "/ var / run" eine symbolische Verknüpfung zu "/ run" ist und "/ run" im tmpfs-Dateisystem bereitgestellt ist. Beim Neustart des Betriebssystems werden dann alle Dateien unter "/ run (= / var / run)" gelöscht, sodass ein Befehl zum Erstellen eines Verzeichnisses angegeben wird, falls das Verzeichnis nicht vorhanden ist.
Stellen Sie sicher, dass Sie den Dienst starten / stoppen und den automatischen Start aktivieren können.
#Inbetriebnahme
[cloud]$ sudo systemctl start uwsgi
#Dienstausfall
[cloud]$ sudo systemctl stop uwsgi
#Aktivieren Sie den automatischen Dienststart
[cloud]$ sudo systemctl enable uwsgi
#Inbetriebnahme
[cloud]$ sudo systemctl start uwsgi
diff:/var/www/example.jp/venv/app/app/settings.py
(Unterlassung)
# SECURITY WARNING: don't run with debug turned on in production!
-DEBUG = True
+DEBUG = False
-ALLOWED_HOSTS = []
+ALLOWED_HOSTS = ['IP-Adresse oder Domain']
(Unterlassung)
Wenn Sie mit einem Browser auf http: // [IP-Adresse oder Domain] zugreifen und die Anwendung anzeigen können, ist dies in Ordnung!
--Interner Fehler
Überprüfen Sie die Nginx-Fehlerprotokolldatei (/var/log/nginx/error.log) und die uWSGI-Protokolldatei (/var/log/uwsgi/uwsgi.log), um den Fehler zu identifizieren.
Recommended Posts