Python의 Flask를 처음 만진 후 30분 만에 프로덕션 환경에 배포 + HTTPS 통신까지 완성
소개
전회, Bottle로 30분에 배포할 수 있는 곳까지 써, Bottle은 매우 취급하기 쉬웠습니다만, SSL 통신을 서포트하려면 cherrypy
나란히 가벼운 Python 웹 프레임 워크인 Flask를 사용합니다.
개발 환경
환경 구축부터 Hello Flask!까지(5분)
이쪽은 로컬(수중의 Mac)로 작업을 해 갑니다.
$ pip3 install flask
app.py# coding: utf-8
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Flask!"
if __name__ == "__main__":
app.run()
서버 시작$ python3 app.py
브라우저에서 로컬 호스트로 "http://127.0.0.1:5000”으로 이동합니다.
Bottle과 마찬가지로 매우 쉽습니다.
이번에는 DB의 조작이나 템플릿에 대해서는 언급하지 않지만 물론 그들도 모두 지원하고 있습니다.
프로덕션 환경에서 https 통신까지
여기에서 서버에서 작업합니다.
환경 구축(10분)
시작하려면 CentOS에 필요한 패키지를 설치합니다.
$ sudo yum groupinstall "development tools"
$ sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
$ sudo yum install httpd-devel python-devel
그리고 python3.5 시스템과 패키지 관리 도구 pip을 설치합니다.
python3.5 및 pip3.5 설치$ sudo su # rootで操作していきます
$ cd /usr/local/src
$ wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
$ tar zxvf Python-3.5.2.tgz
$ cd Python-3.5.2
$ ./configure --enable-shared
$ make && make altinstall
$ ln -s /usr/local/bin/python3.5 /usr/bin/python3
$ ln -s /usr/local/lib/libpython3.5m.so.1.0 /lib64/
$ python3.5 --version # 最後にバージョンの確認ができればpythonのインストール完了
Python 3.5.2
# 同時にpip3.5もインストールされるので、シンボリックリンクを貼る
$ ln -s /usr/local/bin/pip3.5 /usr/bin/pip3.5
$ pip3.5 --version
pip 8.1.1 from /usr/local/lib/python3.5/site-packages (python 3.5)
프로덕션 환경에서 Apache와 함께 작동하는 데 필요한 mod_wsgi도 설치합니다.
mod_wsgi 설치$ cd /usr/local/src
$ wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.5.6.tar.gz
$ tar zxvf 4.5.6.tar.gz
$ cd mod_wsgi-4.5.6
$ ./configure --with-apxs=/usr/sbin/apxs --with-python=/usr/local/bin/python3
$ make && make install
$ chmod 755 /etc/httpd/modules/mod_wsgi.so
임베디드 서버에서 Flask 동작 확인(5분)
환경이 갖추어졌으므로, 우선은 Flask의 임베디드 서버로 동작 확인할 수 있는 곳까지를 해설해 갑니다.
Flask 설치$ pip3.5 install flask
/var/www/html/app.py# coding: utf-8
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Flask!"
if __name__ == "__main__":
app.run(host="example.com", port=8000)
임베디드 서버 시작$ python3.5 app.py
이제 ぁ tp : // 에어 mpぇ. 코m:8000에 액세스합니다.
여기까지는 OK입니다.
Apache와 mod_wsgi로 프로덕션 서버 구축(10분)
Apache 구성 파일을 편집합니다.
/etc/httpd/conf.d/flask.conf# http通信はhttps通信へ強制リダイレクト
<VirtualHost *:80>
ServerName example.com:80
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule ^/(.*)$ https://example.com/$1 [R=301,L]
</VirtualHost>
# https通信の設定はこちら
<VirtualHost *:443>
SSLEngine on
SSLProtocol all -SSLv2
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
SSLCertificateChainFile /etc/httpd/conf/ssl.crt/internal.crt
SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
DocumentRoot /var/www/html/api
ServerName example.com:443
CustomLog /var/www/html/access.log common
ErrorLog /var/www/html/error.log
AddDefaultCharset UTF-8
WSGIScriptAlias / /var/www/html/adapter.wsgi
<Directory "/var/www/html/">
options Indexes FollowSymLinks +ExecCGI
</Directory>
</VirtualHost>
Apache 재부팅$ sudo service httpd restart
SSL 통신의 열쇠나 설정에 관하여 불명한 점이 있는 분은, 「 사쿠라 VPS에 SSL 인증서를 도입하여 HTTPS 통신 구축 」로 쓰고 있으므로, 이쪽을 봐 주세요.
wsgi 파일을 편집합니다.
/var/www/html/adapter.wsgi# coding: utf-8
import sys
sys.path.insert(0, '/var/www/html')
from app import app as application
다음에, 조금 정도의 app.py
도 프로덕션 환경에 맞추어 다소 변경합니다.
/var/www/html/app.py# coding: utf-8
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Flask!"
if __name__ == "__main__":
app.run()
변경점은 이상입니다.
이제 htps : // 에아 mpぇ. 이 m 에 액세스해 봅시다.
외형은 동일하지만 https://...에서 작동해야 합니다.
요약
Flask는 Bottle처럼 가볍지만 SSL 통신까지 매우 쉽게 구현할 수있었습니다.
또한 Bottle과 비교하면 해설 기사의 수가 구름 진흙의 차이라고 할 정도로 많습니다.
덤
따라 기다리고 있습니다!
$ pip3 install flask
# coding: utf-8
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Flask!"
if __name__ == "__main__":
app.run()
$ python3 app.py
여기에서 서버에서 작업합니다.
환경 구축(10분)
시작하려면 CentOS에 필요한 패키지를 설치합니다.
$ sudo yum groupinstall "development tools"
$ sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
$ sudo yum install httpd-devel python-devel
그리고 python3.5 시스템과 패키지 관리 도구 pip을 설치합니다.
python3.5 및 pip3.5 설치
$ sudo su # rootで操作していきます
$ cd /usr/local/src
$ wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
$ tar zxvf Python-3.5.2.tgz
$ cd Python-3.5.2
$ ./configure --enable-shared
$ make && make altinstall
$ ln -s /usr/local/bin/python3.5 /usr/bin/python3
$ ln -s /usr/local/lib/libpython3.5m.so.1.0 /lib64/
$ python3.5 --version # 最後にバージョンの確認ができればpythonのインストール完了
Python 3.5.2
# 同時にpip3.5もインストールされるので、シンボリックリンクを貼る
$ ln -s /usr/local/bin/pip3.5 /usr/bin/pip3.5
$ pip3.5 --version
pip 8.1.1 from /usr/local/lib/python3.5/site-packages (python 3.5)
프로덕션 환경에서 Apache와 함께 작동하는 데 필요한 mod_wsgi도 설치합니다.
mod_wsgi 설치
$ cd /usr/local/src
$ wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.5.6.tar.gz
$ tar zxvf 4.5.6.tar.gz
$ cd mod_wsgi-4.5.6
$ ./configure --with-apxs=/usr/sbin/apxs --with-python=/usr/local/bin/python3
$ make && make install
$ chmod 755 /etc/httpd/modules/mod_wsgi.so
임베디드 서버에서 Flask 동작 확인(5분)
환경이 갖추어졌으므로, 우선은 Flask의 임베디드 서버로 동작 확인할 수 있는 곳까지를 해설해 갑니다.
Flask 설치
$ pip3.5 install flask
/var/www/html/app.py
# coding: utf-8
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Flask!"
if __name__ == "__main__":
app.run(host="example.com", port=8000)
임베디드 서버 시작
$ python3.5 app.py
이제 ぁ tp : // 에어 mpぇ. 코m:8000에 액세스합니다.
여기까지는 OK입니다.
Apache와 mod_wsgi로 프로덕션 서버 구축(10분)
Apache 구성 파일을 편집합니다.
/etc/httpd/conf.d/flask.conf
# http通信はhttps通信へ強制リダイレクト
<VirtualHost *:80>
ServerName example.com:80
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule ^/(.*)$ https://example.com/$1 [R=301,L]
</VirtualHost>
# https通信の設定はこちら
<VirtualHost *:443>
SSLEngine on
SSLProtocol all -SSLv2
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
SSLCertificateChainFile /etc/httpd/conf/ssl.crt/internal.crt
SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
DocumentRoot /var/www/html/api
ServerName example.com:443
CustomLog /var/www/html/access.log common
ErrorLog /var/www/html/error.log
AddDefaultCharset UTF-8
WSGIScriptAlias / /var/www/html/adapter.wsgi
<Directory "/var/www/html/">
options Indexes FollowSymLinks +ExecCGI
</Directory>
</VirtualHost>
Apache 재부팅
$ sudo service httpd restart
SSL 통신의 열쇠나 설정에 관하여 불명한 점이 있는 분은, 「 사쿠라 VPS에 SSL 인증서를 도입하여 HTTPS 통신 구축 」로 쓰고 있으므로, 이쪽을 봐 주세요.
wsgi 파일을 편집합니다.
/var/www/html/adapter.wsgi
# coding: utf-8
import sys
sys.path.insert(0, '/var/www/html')
from app import app as application
다음에, 조금 정도의
app.py
도 프로덕션 환경에 맞추어 다소 변경합니다./var/www/html/app.py
# coding: utf-8
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Flask!"
if __name__ == "__main__":
app.run()
변경점은 이상입니다.
이제 htps : // 에아 mpぇ. 이 m 에 액세스해 봅시다.
외형은 동일하지만 https://...에서 작동해야 합니다.
요약
Flask는 Bottle처럼 가볍지만 SSL 통신까지 매우 쉽게 구현할 수있었습니다.
또한 Bottle과 비교하면 해설 기사의 수가 구름 진흙의 차이라고 할 정도로 많습니다.
덤
따라 기다리고 있습니다!
따라 기다리고 있습니다!
서비스 소개
「수학→프로그래밍→Web어플리케이션」까지 단번에 배울 수 있는 기계 학습의 맨투맨 가정 교사 서비스 「키카가쿠」에 흥미가 있는 분은 부담없이 연락해 주세요.
Reference
이 문제에 관하여(Python의 Flask를 처음 만진 후 30분 만에 프로덕션 환경에 배포 + HTTPS 통신까지 완성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yoshizaki_91/items/3cd785b4a670deec0685텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)