Memo zum Erstellen eines Python-Webservers auf Sakura VPS (CentOS7) Apache → Gunicorn → Pipenv → Flasche + SQLAlchemy (Bonus phpMyAdmin) Erstellen Sie einen Webserver, der die Datenbank in kürzester Zeit nach der Erstellung der Serverinstanz mit Python verarbeitet.
Dieser Artikel ist vollständig für Anfänger gedacht, aber das erforderliche Mindestwissen ist
Es geht um.
Ich hoffe, es wird nützlich sein für die Serverkonstruktion und Python-Anfänger (ich selbst).
** Dieser Artikel dient zum Erstellen eines Testwebservers in kürzester Zeit, sodass Sicherheit usw. nicht berücksichtigt werden **
Installieren Sie schließlich Folgendes:
** Sagen wir es schnell. ** ** **
Betriebssysteminstallation mit den folgenden Einstellungen auf dem Sakura VPS-Administratorbildschirm Verschiedene Einstellungen> Betriebssysteminstallation
Melden Sie sich über die Sakura VPS-Konsole oder die Client-SSH-Verbindung als Root an Beim Anmelden von einem Mac-Client
Offending ECDSA key in /Users/'Nutzername'/.ssh/known_hosts:1
Löschen Sie bekannte_Hosts in ~ / .ssh
Weitere Informationen finden Sie im Sakura VPS-Handbuch https://www.sakura-vps.net/centos7-setting-list/mysql-settings-for-sakura-vps-centos7
** MariaDB löschen **
$ yum remove -y mariadb-libs
$ rm -rf /var/lib/mysql
*** Hinzufügung des offiziellen MySQL-Repositorys ***
$ rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
** Installiere MySQL **
$ yum -y install mysql-community-server
** Versionsprüfung **
$ mysqld --version
** Einstellungen für MySQL-Start und Autostart **
$ systemctl start mysqld.service
$ systemctl enable mysqld.service
** Überprüfen Sie das anfängliche MySQL-Passwort ** In MySQL5.7 wird das ursprüngliche Kennwort beim ersten Start generiert. Überprüfen Sie daher das anfängliche Kennwort mit dem folgenden Befehl.
$ cat /var/log/mysqld.log | grep password
[Note] A temporary password is generated for root@localhost:(Passwort)
** MySQL-Sicherheitseinstellungen **
[root@ ~]# mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root:"Geben Sie das ursprüngliche Passwort ein"
The existing password for the user account root has expired. Please set a new password.
New password:"Geben Sie ein neues Passwort ein (einschließlich Groß- und Kleinbuchstaben, Zahlen und Symbole)"
Re-enter new password:"Passwort zur Bestätigung erneut eingeben"
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) :y "Geben Sie y (* 1) ein"
New password:"Geben Sie das oben angegebene Passwort ein"
Re-enter new password:"Passwort zur Bestätigung erneut eingeben"
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) :y "Geben Sie y ein, um zu bestätigen, dass das festgelegte Passwort in Ordnung ist."
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) :y "Geben Sie y ein, um zu bestätigen, dass Sie den anonymen Benutzer löschen können."
Success.
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) :y "Geben Sie y ein, um zu bestätigen, dass Sie sich nicht remote als Root anmelden können."
Success.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) :y "Geben Sie y ein, um zu bestätigen, dass Sie die Testdatenbank löschen können."
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) :y "Geben Sie y ein, um zu bestätigen, ob die Berechtigungstabelle jetzt gelesen und die Einstellung aktiviert werden soll."
Success.
All done!
** Ändern Sie die MySQL-Einstellungen (my.cnf) **
$ vi /etc/my.cnf
Fügen Sie Ihrer my.cnf-Datei die folgenden Highlights hinzu.
"Zeichensatzserver = utf8" ⇒ Geben Sie den in der MySQL-Datenbank verwendeten Zeichencode als UTF8 an. "Default_password_lifetime = 0" ⇒ Ab MySQL 5.7 beträgt das Ablaufdatum des Kennworts des Benutzers standardmäßig 360 Tage. Setzen Sie dieses Ablaufdatum daher auf 0, um es zu deaktivieren.
Starten Sie MySQL neu, damit die Einstellungen wirksam werden.
$ systemctl restart mysqld.service
** Datenbank erstellen ** Melden Sie sich bei MySQL an
$ mysql -u root -p
Erstellen Sie test_db
mysql>CREATE DATABASE test_db;
mysql>SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test_db |
+--------------------+
Melden Sie sich von MySQL ab
mysql> QUIT;
yum Installation
$ yum install httpd
Automatische Starteinstellung
$ systemctl enable httpd.service
Apache-Start
$ systemctl start httpd
Überprüfen Sie im Browser http://'サイトのアドレス'
** Yum install ** erforderliche Pakete
$ yum install gcc bzip2 bzip2-devel openssl openssl-devel readline readline-devel
$ yum update -y
$ yum groupinstall "Development Tools"
$ yum install libffi-devel
$ yum install mariadb-devel
** pyenv Installation ** Klicken Sie hier für den Ort, den Sie passieren können
$ cd /usr/local/
Klone pyenv von git
$ git clone https://github.com/pyenv/pyenv.git ./pyenv
$ mkdir -p ./pyenv/versions ./pyenv/shims
PFAD-Einstellung
$ echo 'export PYENV_ROOT="/usr/local/pyenv"' | sudo tee -a /etc/profile.d/pyenv.sh
$ echo 'export PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${PATH}"' | sudo tee -a /etc/profile.d/pyenv.sh
$ source /etc/profile.d/pyenv.sh
Überprüfen Sie die Version von pyenv
$ pyenv --version
** Installiere Python 3.8.0 ** Irgendwie mit Optionen für wsgi installieren
$ env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.8.0
Versionen wechseln
$ pyenv global 3.8.0
$ pyenv rehash
Bestätigung
$ python --version
Python 3.8.0
** Installieren **
$ pip install --upgrade pip
$ pip install pipenv
** Virtuelle Umgebung erstellen ** Erstellen Sie ein "Test" -Projekt
$ mkdir -p /var/www/app/test
$ cd /var/www/app/test
$ pipenv install
Starten Sie die Pipenv-Shell
$ pipenv shell
Installationsbestätigung
$ python --version
** Installieren Sie das diesmal verwendete Paket ** Der Ordnername wird während der pipenv-Shell auf der linken Seite angezeigt
(test) $ pipenv install gunicorn
(test) $ pipenv install flask
(test) $ pipenv install sqlalchemy
(test) $ pipenv install mysqlclient
Proxy-Anfragen von Apache an Gunicorn
$ vi /etc/httpd/conf/httpd.conf
Zur letzten Zeile hinzufügen
httpd.conf
ProxyPass /test http://localhost:8000/
Starten Sie Apache neu
$ systemctl restart httpd.service
Die http-Anforderung wird an Port 8000 weitergeleitet Sie können über Ihren Browser auf die von Ihnen erstellte Flask-Anwendung zugreifen.
** .py-Datei erstellen **
Erstellen Sie zwei Flask-Start- und SQL-PY-Dateien in / var / www / app / test.
$ vi app.py
app.py
from flask import Flask
from testsql import *
import datetime
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World! "
@app.route("/insert")
def insert():
#Wenn keine Tabelle vorhanden ist, wird die Anweisung CREATE TABLE ausgeführt
Base.metadata.create_all(bind=ENGINE)
data = TestTable()
ret = data.create_date.strftime("%Y-%m-%d %H:%M:%S")
session.add(data)
session.commit()
session.close()
return "insert data "+ret
@app.route("/select")
def select():
#Holen Sie sich die neuesten Daten
res = session.query(TestTable).order_by(desc(TestTable.create_date)).all()
ret = ""
print("ret len "+str(len(res)))
if 0 < len(res):
ret = str(res[0].create_date)
return "select "+ret
if __name__ == "__main__":
#Start des Webservers
app.run(debug=True)
Erstellen Sie als Nächstes eine Datei, die DB verarbeitet
$ vi testsql.py
testsql.py
from sqlalchemy import *
from sqlalchemy.orm import sessionmaker, scoped_session
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Float, DateTime, Text
from datetime import datetime, timedelta, timezone
#MySQL DB Einstellungen
DATABASE = 'mysql://%s:%s@%s/%s?charset=utf8' % (
"root", #Nutzer
"Das erste MySQL-Passwort, das Sie notiert haben", #Passwort
"localhost", # host ip
"test_db", #DB-Name
)
ENGINE = create_engine(
DATABASE,
encoding = "utf-8",
echo=False #Wenn True, wird SQL bei jeder Ausführung ausgegeben
)
#Sitzung erstellen
session = scoped_session(
sessionmaker(
autocommit = False,
autoflush = True,
bind = ENGINE))
#Basismodellerstellung
Base = declarative_base()
Base.query = session.query_property()
#Erben Sie das Basismodell und definieren Sie die Modellklasse
class TestTable(Base):
__tablename__ = 'tbl_test'
id = Column('id', Integer, primary_key = True)
create_date = Column('create_date', DateTime)
def __init__(self):
#Zeitzonengenerierung
JST = timezone(timedelta(hours=+9), 'JST')
self.create_date = datetime.now(JST)
gunicorn [Dateiname]: Beginnen Sie mit [Variablenname](mit Option zum erneuten Laden durch Ändern der Datei)
(test) $ gunicorn --reload app:app
http: 'Site-Adresse' / Test Überprüfen Sie die Anzeige mit
http: 'Site-Adresse' / test / insert Schreiben Sie in die Datenbank mit
http: 'Site-Adresse' / test / select Gibt die in (Datum und Uhrzeit) in die Datenbank geschriebenen Daten zurück.
Im Gunicorn-Protokoll wann / auswählen ret len [Anzahl der eingefügten Datensätze] Wird angezeigt
Gunicorn fertig
(test) $ pkill gunicorn
Diesmal habe ich es nicht getan Starten Sie Gunicorn, wenn der Server startet Referenz: https://qiita.com/sti320a/items/c196387d405272cce46e
Für diejenigen, die mit der DB-bezogenen GUI in Kontakt treten möchten
** Installieren Sie PHP aus dem Remi-Repository **
$ rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
$ yum install --enablerepo=remi,remi-php71 php php-devel php-mbstring php-mysqlnd php-pdo php-gd
** Installation und Konfiguration von phpMyAdmin ** Referenz: https://knowledge.sakura.ad.jp/9006/
Installation
$ yum --enablerepo=remi-php72 install phpmyadmin
Zugriffseinstellungen
$ vi /etc/httpd/conf.d/phpMyAdmin.conf
Fügen Sie zu den Highlights unten "Alle erforderlich" hinzu. Mit dieser Einstellung können Sie von außen auf phpMyAdmin zugreifen.
Starten Sie Apache neu
$ systemctl restart httpd
http://'サイトのアドレス'/phpmyadmin/
Ich recherchiere viel, um einen Webserver mit Python aufzubauen
Dieser Bereich war fast allen Artikeln gemeinsam.
Ich stolperte über einen Teil, der nicht der ursprüngliche Zweck war, und nahm mir Zeit, um nachzuforschen, also fing ich von vorne an ... Weil es ziemlich viele Dinge gab Bauen Sie trotzdem schnell und lassen Sie zusätzliche Arbeit und Erklärungen aus Ich habe versucht, mich darauf zu konzentrieren.
Darüber hinaus ist der Unterschied zwischen pyenv und pipenv in der Python-Umgebung Wo die virtuelle Umgebung erstellt wird und wie sie funktioniert Wie der AP-Server von Gunicorn funktioniert usw. Als ich anfing zu untersuchen, wurde es noch tiefer und gleichzeitig wurde ich interessiert, ich entfernte mich allmählich von dem Zweck ...
Dieser Artikel + Selen usw. wurde verwendet, um den Prozess zu automatisieren Eine Site, die Manga sammelt, die mit jeder Manga-App gelesen werden kann Manga Ikki Funktioniert. Bitte schauen Sie hier, wenn Sie möchten.
Recommended Posts