[PYTHON] Ich habe versucht, eine Serverumgebung zu erstellen, die unter Windows 10 ausgeführt wird

Derzeit mache ich ein Strategiespiel, das im Web ausgeführt wird, aber ich hatte Probleme, weil ich den gemieteten Server aus verschiedenen Gründen gekündigt habe.

Geld ... nein ... ;;;

Ich habe also Windows 10 auf meinem PC, aber ich habe geprüft, ob eine experimentelle Umgebung lokal erstellt werden kann, und als ich es tatsächlich ausprobiert habe, habe ich es geschafft, also werde ich es bereitstellen. Wenn Sie einen Computer haben, können Sie eine Webumgebung einrichten, ohne Geld auszugeben. Probieren Sie es also aus, auch wenn Sie in Schwierigkeiten sind!

Sicherheit wird jedoch fast ignoriert, da es sich um eine "ungezogene Umgebung" handelt. Das Erstellen eines Servers unter Windows 10 und das Veröffentlichen im Web stellt eine Verletzung der Microsoft-Lizenz dar. Machen Sie es also niemals. Nur unter Verwendung der lokalen experimentellen Umgebung.

Inhaltsverzeichnis

Annahme

Geeignet für Apps, die über einen Webbrowser eingegeben werden. Grundsätzlich handelt es sich um eine Frontoperation mit HTML5 und Javascript, es wird jedoch davon ausgegangen, dass komplizierte Berechnungen und Ausgaben von Python auf einem virtuellen Server verarbeitet werden. Machen Sie es möglich, auch mit der Datenbank umzugehen.

** Software Anforderungen **

Es gibt eine Version von Nginx, die mit Windows kompatibel ist. Verwenden Sie diese. Der Kolben wird auch als Rahmen zwischen uwsgi und nginx verwendet.

Operationsbild

Es gibt eine Anweisung, dass uwsgi, das auf dem virtuellen Server verwendet wird, von Windows unterstützt wird, aber tatsächlich kann es nicht direkt unter Windows ausgeführt werden (es funktioniert nicht ...). Stattdessen kann uwsgi virtuell auf der Terminalsoftware "cygwin" ausgeführt werden, die unter Windows ausgeführt wird. Der Prozessablauf ist ein Bild der Übergabe einer Eingabeaktion aus dem Web an Cygwin über Nginx, der Verarbeitung von Python und PostgreSQL und der Rückgabe an Nginx.

Als Image ist cygwin uwsgi und postgreSQL Server. 20200831003334.jpg

Umgebung

Richten Sie die Umgebung tatsächlich ein. Installieren Sie hier die folgende Anwendung.

  1. Installieren Sie nginx. Holen Sie sich das Archiv von: Ich benutze grundsätzlich die Stable-Version. Entpacken Sie das erhaltene Archiv an einen Ort Ihrer Wahl.  nginx HP

1-1. Starten Sie die Eingabeaufforderung im Ziel nginx-X.X.X. 1-2. Start Geben Sie nginx ein, um es auszuführen. 1-3. Zeigen Sie http: // localhost im Browser an. Zulassen, wenn von der Firewall blockiert. Wenn "Willkommen bei Nginx!" Angezeigt wird, ist das Setup normal. 1-4.nginx -s beenden, um zu beenden.

2. Installieren Sie Python und die erforderlichen Bibliotheken. Holen Sie sich das Installationsprogramm von: Grundsätzlich * verwenden Sie das webbasierte Installationsprogramm. Richten Sie es mit dem Installationsprogramm ein, das Sie möchten.  python HP

Sie sollten "Python x.x zum Pfad hinzufügen" aktivieren. Wählen Sie für andere die Standardeinstellung oder die Option entsprechend Ihrer Umgebung aus. Ich werde es testen, nachdem die Installation abgeschlossen ist.

# python -V
Python 3.8.2
* Für Windows scheint es Python zu sein, nicht Python3.

# pip3 install flask requests requests_oauthlib python-dateutil psycopg2
~ Ausgelassen ~

# pip3 list
~ Unten weggelassen ~

3. Installieren Sie uwsgi. Hier werden wir Cygwin Terminal verwenden, um es auf dem Linux-Emulator zu installieren. Richten Sie es mit dem Installationsprogramm ein, das Sie möchten.  Cygwin HP

Wählen Sie Folgendes für das Paket aus (beachten Sie, dass es sonst übersprungen wird):

Wählen Sie die Standardeinstellung oder die Option, die zu Ihrer Umgebung passt. Die virtuelle Umgebung kann aktuell eingerichtet sein.

Starten Sie nach dem Setup cygwin und richten Sie uwsgi ein.

Überprüfen Sie den Home-Benutzernamen ★ Danach[Cygwin-Benutzer]Vereinige dich mit
# echo $USER
* Standardmäßig der Windows-Login-Benutzername(Ordner)Wird den gleichen Namen haben wie

passend zu wget-Holen Sie sich Cyg
$ wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
$ chmod 755 apt-cyg
$ mv apt-cyg /usr/local/bin

Für Systembefehle
$ apt-cyg install procps

Holen Sie sich die Python3-Bibliothek
$ apt-cyg install python3-devel

Laden Sie uwsgi von git herunter und richten Sie es ein.

$ wget https://github.com/unbit/uwsgi/archive/[Archivname freigeben]
$ unzip [Archivname]
$ cd uwsgi-[Versionsname]
$ python3 setup.py install
* Geben Sie die Release-Version für das Archiv an
* Es dauert lange, da die Kompilierung funktioniert.

Überprüfen Sie übrigens die Standardkodierung für alle Fälle. Wenn es auf Linux basiert, ist uft-8 einfach, aber Cygwin ist standardmäßig utf-8, daher sollte es kein Problem geben.

$ python3
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
>>> exit
[ctrl+D]* Ende durch Tastatureingabe

Was wäre, wenn es nicht utf-8 wäre? Fügen Sie Ihrem Profil eine Codierung hinzu.

$ vi /home/[Cygwin-Benutzer]/.bash_profile

export LANG=ja_JP.UTF-8

:wq

Führen Sie nach dem Hinzufügen Folgendes aus, um es zu laden.

$ source ~/.bash_profile

4. Installieren Sie postgreSQL.

4-1. Beziehen Sie den Quellcode aus dem Folgenden.  postgresql HP
Wählen Sie das .qz-Format.

$ wget [Quellcode-URL]

4-2. Kompilieren und installieren Sie den Quellcode.

$ tar -xvzf [Name der Archivdatei]
$ cd [Entpackter Ordner]
$ mkdir make_dir
$ cd make_dir
$ ../configure --enable-nls --enable-thread-safety
$ make
$ make install
$ cd src/interfaces/libpq
$ make
$ make install

4-3. Fügen Sie Umgebungsvariablen zu .bash_profile hinzu.

$ vi /home/[Cygwin-Benutzer]/.bash_profile

export PATH=/usr/local/pgsql/bin:/usr/local/pgsql/lib:$PATH
export PGHOST=localhost
export PGLIB=/usr/local/pgsql/lib
export PGDATA=/usr/local/pgsql/data

:wq

Führen Sie nach dem Hinzufügen Folgendes aus, um es zu laden.

source ~/.bashrc
source ~/.bash_profile

4-4. Grundeinstellung.

$ /usr/sbin/cygserver.exe &
$ initdb -U postgres

Dadurch wird der Name des postgreSQL-Superusers in [postgres] geändert.

4-5 Starten Sie den postgreSQL-Server und prüfen Sie, ob Sie sich anmelden können.

$ pg_ctl start
$ pg_ctl status
$ psql -l
$ psql postgres -U postgres

=>

=> \q

Wenn keine Fehler vorliegen, ist dies in Ordnung.

4-6 Anmelden Legen Sie als Nächstes das Kennwort des Superusers fest, erstellen Sie eine Datenbank und führen Sie eine einfache Kennwortauthentifizierung durch.

$ createuser strgdb -U postgres
$ createdb -O strgdb strgdb -U postgres

Super User[postgres]Einloggen mit
$ psql postgres -U postgres

Super User[postgres]Legen Sie ein Passwort für fest
=> alter role postgres with password '[Postgres Master Passwort]';  

Benutzer für Sternregion[strgdb]Legen Sie ein Passwort für fest.
=> alter role strgdb with password '[DB-Passwort]';  
=> alter role strgdb with login;  
=> \q  

Bearbeiten Sie die Berechtigungsdatei.
$ vi /etc/local/pgsql/data/pg_hba.conf

Von L95 zu Vertrauen → Passwort wie folgt einstellen

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
###local   all             all                                     trust
local   all             all                                     password
# IPv4 local connections:
###host    all             all             127.0.0.1/32            trust
host    all             all             127.0.0.1/32            password
# IPv6 local connections:
###host    all             all             ::1/128                 trust
host    all             all             ::1/128                 password
# Allow replication connections from localhost, by a user with the
# replication privilege.
###local   replication     all                                     trust
###host    replication     all             127.0.0.1/32            trust
###host    replication     all             ::1/128                 trust

:wq

Wenn Sie fertig sind, pg_Starten Sie SQL neu
$ pg_ctl start

$ psql postgres -U postgres
Password for user postgres:* Geben Sie das Superuser-Passwort ein

=> 

=> \q

$ psql strgdb -U strgdb
Password for user strgdb:* Geben Sie das strgdb-Benutzerpasswort ein
=> 
=> \q
Wenn Sie sich anmelden können, ist es OK.

5. Bereiten Sie die Testquelle vor.

Nginx (Windows) Seite
/www/index.html
Passend.

Uwsgi (Cygwin) Seite
/home/[Lucida(Nutzername)]/uwsgi/test.py
Python-Testquelle

#!/usr/bin/python
# coding: UTF-8
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

6. Starten Sie cygwin und testen Sie den uwsgi-Server.

uwsgi --http :9090 --wsgi-file uwsgi/test.py
*** Starting uWSGI 2.0.18 (64bit) on [Tue Aug 25 17:58:48 2020] ***
~ Ausgelassen ~
*** uWSGI is running in multiple interpreter mode ***

Zulassen, wenn von der Firewall blockiert. Greifen Sie in Ihrem Browser auf Folgendes zu.

http://localhost:9090

Wenn Hello World angezeigt wird, ist es OK. Stoppen Sie den uwsgi-Server mit Strg + C.

8. Stellen Sie ein SSL-Zertifikat aus. Die folgenden Zertifikate sind erforderlich, um SSL zu verwenden.

Wenn Sie diese nicht haben, können Sie sie kaufen und erhalten oder eine Selbstzertifizierung ausstellen. Das Folgende zeigt das Verfahren zur Ausstellung einer Selbstzertifizierung.

8-1 Öffnen Sie die Datei openssl.cnf mit einem Texteditor und bearbeiten Sie Folgendes. [Cygwin-Installationsordner] /etc/pki/tls/openssl.cnf

L91 : default_days	  = 825

L150: countryName_default = JP
L155: stateOrProvinceName_default =XXXXXX * Präfektur
L158: localityName_default        =XXXXXX * Gemeinden
L161: 0.organizationName_default  =XXXXXX * Name der Organisation
* Die Zeile scheint sich je nach Version von openssl zu ändern

8-2. Erstellen Sie den privaten Schlüssel der Zertifizierungsstelle und das Zertifikat der Stammzertifizierungsstelle. Es wird mit Cygwin arbeiten.

$ mkdir /etc/pki/CA
$ chmod 700 /etc/pki/CA
$ cd /etc/pki/CA
$ openssl genrsa -des3 -out ca.key 2048
Enter pass phrase for ca.key:* Zertifizierungsstelle ordnungsgemäß bestanden
Verifying - Enter pass phrase for ca.key:* Wie auf dem Zertifizierungsstellenausweis

$ openssl req -x509 -new -nodes -key ca.key -sha256 -out ca.pem
Enter pass phrase for ca.key:* Wie auf dem Zertifizierungsstellenausweis
~ Ausgelassen ~
Common Name (eg, your name or your server's hostname) []:* Name der Zertifizierungsstelle
* Ansonsten keine Eingabe
~ Ausgelassen ~

8-3 Installieren Sie das Zertifizierungsstellenzertifikat auf dem Client. Suchen Sie unter Windows → Einstellungen nach "Zertifikat". Öffnen Sie Benutzerzertifikate verwalten. Klicken Sie mit der rechten Maustaste auf eine vertrauenswürdige Stammzertifizierungsstelle, Alle Aufgaben → Importieren. Wählen Sie den aktuellen Benutzer aus, ca.pem, wählen Sie die Routenzertifizierungsstelle aus und klicken Sie auf OK.

8-4. Erstellen Sie ein Serverzertifikat. Es wird mit Cygwin arbeiten.

$ mkdir /etc/pki/Server
$ chmod 700 /etc/pki/Server
$ cd /etc/pki/Server
$ openssl genrsa -out server.key 2048
$ openssl req -new -key server.key -out server.csr
~ Ausgelassen ~
Common Name (eg, your name or your server's hostname) []:* IP-Adresse und Hostname entsprechend
* Ansonsten keine Eingabe
~ Ausgelassen ~
$ vi server.txt
---------
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
---------\wq
$ openssl x509 -req -in server.csr -CA ../CA/ca.pem -CAkey ../CA/ca.key -CAcreateserial -out server.crt -sha256 -extfile server.txt
Enter pass phrase for ../CA/ca.key:* Zertifizierungsstellenausweis

9. nginx Config-Einstellungen Passen Sie nginx.config in 9-1.nginx an. [Nginx-Installationsordner] /config/nginx.conf

#user  nobody;
worker_processes auto;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

worker_rlimit_nofile 2048;
events {
### worker_connections 1024;
	worker_connections 2048;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include [HTML-Quellordner]/source/nginx/*.conf;
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    include [HTML-Quellordner]/source/nginx/sites-enabled/*; 
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Fügen Sie diese beiden Zeilen hinzu
    
###    server {
###        listen       80;
###        server_name  localhost;
###
###        #charset koi8-r;
###
###        #access_log  logs/host.access.log  main;
###
###        location / {
###            root   html;
###            index  index.html index.htm;
###        }
###
###        #error_page  404              /404.html;
###
###        # redirect server error pages to the static page /50x.html
###        #
###        error_page   500 502 503 504  /50x.html;
###        location = /50x.html {
###            root   html;
###        }

~ Ausgelassen ~
    }
~ Ausgelassen ~
}

9-2. Bereiten Sie die Konfiguration für den Nginx-Server vor. Bereiten Sie eine andere als die Standarddatei vor. [Geeigneter Ordner] /nginx/https.conf

server {
	listen 443 ssl http2;
	server_name localhost;

	ssl_protocols TLSv1.2;
	ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
	ssl_ecdh_curve prime256v1;
	ssl_prefer_server_ciphers on;
	ssl_session_cache shared:SSL:10m;
	ssl_certificate [Cygwin-Installationsordner]/etc/pki/Server/server.crt;
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Serverzertifikat
	ssl_certificate_key [Cygwin-Installationsordner]/etc/pki/Server/server.key;
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Privater Serverschlüssel

	keepalive_timeout 70;
	sendfile on;
	client_max_body_size 0;
	root [HTML-Quellordner]
       ~~~~~~~~~~~~~~~~~~~~~
	server_tokens off;
	charset utf-8;

	gzip on;
	gzip_disable "msie6";
	gzip_vary on;
	gzip_proxied any;
	gzip_comp_level 6;
	gzip_buffers 16 8k;
	gzip_http_version 1.1;
	gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
	add_header Strict-Transport-Security "max-age=31536000";

	location / {
		index index.html;
	}

	location /uwsgi {
		include uwsgi_params;
		proxy_pass https://127.0.0.1:9090;
	}

}

9-3. Starten Sie den Server.

Starten Sie cygwin.
$ uwsgi --master --https 127.0.0.1:9090,/etc/pki/Server/server.crt,/etc/pki/Server/server.key --wsgi-file strg_uwsgi/test.py
  
Starten Sie nginx an der Windows DOS-Eingabeaufforderung.
$ [Nginx-Installationslaufwerk]:
$ cd [Nginx-Installationsordner]
$ start nginx
  
Greifen Sie mit Ihrem Browser auf die folgenden zwei Stellen zu.
 https://localhost/
Es ist in Ordnung, wenn der obere Rand der Webseite angezeigt wird.

 https://localhost/uwsgi
Wenn Hello World angezeigt wird, ist es OK.

Stoppen Sie die Server nginx und uwsgi einmal. uwsgi ist Strg+Halt bei C.
$ nginx -s quit
  

das ist alles. Dann mach was du willst.

Start und Ende

Beginnen Sie mit dem folgenden Befehl.

Nginx (Windows) Seite
# start nginx

Cygwin Seite
# /usr/sbin/cygserver.exe &
# pg_ctl start
# pg_ctl status
# uwsgi --master --https 127.0.0.1:9090,/etc/pki/Server/server.crt,/etc/pki/Server/server.key --wsgi-file uwsgi/test.py

Verwenden Sie zum Beenden den folgenden Befehl.

Nginx (Windows) Seite
# nginx -s stop

Cygwin Seite
※Ctrl+Drücken Sie C.
# pg_ctl stop
# pg_ctl status

Beenden Sie Cygwin

Referenzierte Websites / Artikel

Die Titel sind unten weggelassen.

Recommended Posts

Ich habe versucht, eine Serverumgebung zu erstellen, die unter Windows 10 ausgeführt wird
Erstellen Sie eine Linux-Umgebung unter Windows 10
Ich habe versucht, einen Linebot zu erstellen (Implementierung)
Ich habe versucht, einen Linebot zu erstellen (Vorbereitung)
Ich habe eine TensorFlow-Umgebung mit Windows 10 erstellt
Ich habe versucht, eine Umgebung von MkDocs unter Amazon Linux zu erstellen
Erstellen Sie eine Python-Ausführungsumgebung unter IBM i
Vorgehensweise zum Erstellen einer virtuellen Python-Umgebung mit VS-Code unter Windows
Ich habe versucht, eine SATA-Software-RAID-Konfiguration zu erstellen, die das Betriebssystem unter Ubuntu Server startet
Ich habe versucht, eine Klasse zu erstellen, mit der Json in Python problemlos serialisiert werden kann
Erstellen Sie eine komfortable Python 3 (Anaconda) -Entwicklungsumgebung mit Windows
Als ich versuchte, mit Python eine virtuelle Umgebung zu erstellen, funktionierte dies nicht
Erstellen einer TensorFlow-Umgebung, die GPUs unter Windows 10 verwendet
[Go + Gin] Ich habe versucht, eine Docker-Umgebung zu erstellen
Ich habe versucht, einen Übersetzungs-BOT zu erstellen, der mit Discord unter Verwendung von Googletrans funktioniert
So führen Sie Django unter IIS auf einem Windows-Server aus
Erstellen Sie unter Windows eine anständige Shell- und Python-Umgebung
Ich wollte schnell einen Mailserver erstellen, der mit postfix + dovecot auf EC2 frei verwendet werden kann
Ich habe versucht, eine Umgebung mit WSL + Ubuntu + VS-Code in einer Windows-Umgebung zu erstellen
CodePicnic, das eine Umgebung [Entwicklung | Ausführen | Tutorial | Demo] erstellen kann, die im Browser ausgeführt wird
[Mac] Ich möchte einen einfachen HTTP-Server erstellen, auf dem CGI mit Python ausgeführt wird
Ich habe versucht, mit Open AI Gym eine verbesserte Lernumgebung für Othello zu schaffen
Ich habe den Super-Resolution-Algorithmus "PULSE" in einer Windows-Umgebung ausprobiert
Ich habe versucht, automatisch einen Bericht mit der Markov-Kette zu erstellen
Ich habe versucht, einen Bot für die Ankündigung eines Wiire-Ereignisses zu erstellen
Ich habe versucht, das Python-Skript unter Windows 10 von 2.7.11 auf 3.6.0 zu ändern
Ich habe einen neuronalen Netzwerkgenerator erstellt, der auf FPGA läuft
Ich habe versucht, eine Quip-API zu erstellen
Erstellen Sie eine Python-Umgebung auf dem Mac (2017/4)
Erstellen Sie eine Python-Umgebung in Centos
Ich habe versucht, es ein- und auszuschalten, indem ich "Ein Plug-In erstellen, das Leerzeichen mit Sublime Text 2 in voller Breite hervorhebt" eingestellt habe.
[Linux] So installieren Sie ein Paket auf einem Server ohne Internetumgebung (eigenständig)
So richten Sie WSL2 unter Windows 10 ein und erstellen eine Lernumgebung für Linux-Befehle
Als ich versuchte, eine Rails-Umgebung auf WSL2 (Ubuntu 20.04LTS) zu erstellen, stolperte ich und fiel hin.
Wettbewerb mit VS-Code Erstellen Sie eine Python-Umgebung für Profis unter Windows
Ich habe versucht, einen einfachen Kredit-Score mit logistischer Regression zu erstellen.
Ich habe versucht, ein System zu erstellen, das nur gelöschte Tweets abruft
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Qiskit: Ich möchte eine Schaltung erstellen, die beliebige Zustände erzeugt! !!
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Ich habe versucht, einen Sender auf der IoT-Plattform "Rimotte" zu registrieren.
Ich habe versucht, Bulls and Cows mit einem Shell-Programm zu erstellen
Alles vom Erstellen einer Python-Umgebung bis zur Ausführung unter Windows
Erstellen Sie eine Python-Umgebung auf Ihrem Mac
Ich möchte eine Python-Umgebung erstellen
Ich habe versucht, Kivy in einer Mac-Umgebung zu installieren
[Python] Erstellen Sie einen LineBot, der regelmäßig ausgeführt wird
[Python] Ich habe versucht, mit argparse ein einfaches Programm zu erstellen, das in der Befehlszeile funktioniert
Ich habe eine Web-API erstellt
Erstellen Sie eine virtuelle Linux-Maschine unter Windows
Ich habe versucht, Objekte mit YOLO v3 (TensorFlow 2.0) auf einer Windows-CPU zu erkennen!
Ich habe versucht, mit einem Remote-Server über Socket-Kommunikation mit Python zu kommunizieren.
Ich habe versucht, eine Blockchain zu implementieren, die tatsächlich mit ungefähr 170 Zeilen funktioniert
Ich habe versucht, ein Programm zu erstellen, das Hexadezimalzahlen mit Python in Dezimalzahlen konvertiert
Erstellen Sie eine Python-Entwicklungsumgebung unter Windows (Remote-WSL für Visual Studio Code).
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Entwicklung] (2/3) zu erstellen.
Ich habe ein Systemkonfigurationsdiagramm mit Diagrams on Docker geschrieben
Ich habe versucht, einen Formatierer zu entwickeln, der Python-Protokolle in JSON ausgibt