자택 서버용 라즈파이로 Python으로 LINE bot(HTTPS화)를 만든다(heroku, ngrok 사용하지 않는다) Apache(+wsgi)+Flask(Django에서도 같다?)
9285 단어 RaspberryPi아파치wsgi장고linebot
소개
아무것도 초보자이므로 설정에 90 %의 시간을 사용했습니다 ...
설정은 구체적으로
두 가지입니다.
이것은 브라우저에서
https://<domainname>/testFlask
에서 파이썬으로 쓴 "Hello Flask!"를 볼 수 있도록하는 것입니다.이것만 가능하면 LINE API의 Webhook URL에 붙어 있으면 LINE bot은 할 수 있습니다.
후에는 heroku 되어 ngrok 사용한 다른 기사를 참고해 주시면 좋겠습니다.
체계
위 그림과 같이 PHP로 쓰려고하면 Apache만으로 좋지만 Python으로 쓰고 싶었기 때문에 wsgi라는 모듈을 사용했습니다.
htps : // 이 m / ぁ mp ぅ s / ms / 9877849d3108 2c6d0df
사용한 모듈, 서비스
디렉토리 구성
/etc/
|---apache2/
| |---ports.conf
| |---sites-available/
| |---flask.conf(新規作成)
|
|---letsencrypt
| |-...
| ...
|
|
/home/
|---t13m082h/
|---ExampleFlask
|---my_flask_app.py (my_flask_app.wsgiでこれをimportする)
|---my_flask_app.wsgi (flask.confでこれを読み込ませる)
각 모듈, 서비스 설치는 다른 기사 참고로
아파치
# apt-get
$ sudo apt-get install apache2
wsgi + Flask
$ sudo apt-get install libapache2-mod-wsgi-py3 python-dev
$ pip install flask
$ pip install mod_wsgi
Let's encrypt
htps : // 피구이로. 에서 v / 2019/03/13 / et al. HTML
Flask로 작성한 페이지를 웹 공개
오류 로그는 항상
$ sudo cat /var/log/apache2/access.log
$ sudo cat /var/log/apache2/error.log
에서 확인. (설정은 후술)
포트 설정
HTTP 리퀘스트를 받아들이는 것은 Apache이지만, 특정의 Listen하고 있는 포트에 온 리퀘스트를 wsgi로 처리하고 있다.
우선, Listen하고 있는 포트를 설정.
포트의 설정 파일은 /etc/apache2/ports.conf
에 정리하고 있다.
/etc/apache2/ports.conf# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf
Listen 80
Listen 8000
<IfModule ssl_module>
Listen 443
Listen 4443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
Listen 4443
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
wsgi 용으로 새로 4443 번 포트를 사용 (라우터 설정의 포트 포워딩의 설정도 잊지 않고)
이제 4443번 포트에 온 HTTP 요청을 접수할 수 있게 되었다.
덧붙여서, 포트 번호를 변경하고 싶을 때는
# apt-get
$ sudo apt-get install apache2
$ sudo apt-get install libapache2-mod-wsgi-py3 python-dev
$ pip install flask
$ pip install mod_wsgi
오류 로그는 항상
$ sudo cat /var/log/apache2/access.log
$ sudo cat /var/log/apache2/error.log
에서 확인. (설정은 후술)
포트 설정
HTTP 리퀘스트를 받아들이는 것은 Apache이지만, 특정의 Listen하고 있는 포트에 온 리퀘스트를 wsgi로 처리하고 있다.
우선, Listen하고 있는 포트를 설정.
포트의 설정 파일은
/etc/apache2/ports.conf
에 정리하고 있다./etc/apache2/ports.conf
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf
Listen 80
Listen 8000
<IfModule ssl_module>
Listen 443
Listen 4443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
Listen 4443
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
wsgi 용으로 새로 4443 번 포트를 사용 (라우터 설정의 포트 포워딩의 설정도 잊지 않고)
이제 4443번 포트에 온 HTTP 요청을 접수할 수 있게 되었다.
덧붙여서, 포트 번호를 변경하고 싶을 때는
의 3개소의 변경이 필요.
wsgi 설정
설정 파일은
/etc/apache2/sites-available
디렉토리의 conf 파일.전부 설정 후의 파일 내용은 이하. (SSL 증명서의 설정도 들어 있으므로 일부 읽어 주세요)
conf 파일을 작성하는 방법
htps : // Pau Lzny. 코 m / 세르 r ょ r / d 쟈고 / 2018/02/26 / ぇ - st-ko mp ぇ 테 - 아파치 2- 곤후 ぃ g ぉ rws 기드 쟈고 d-drf/
/etc/apache2/sites-available/flask.conf
(t13m082h は username)
<IfModule mod_ssl.c>
<VirtualHost *:4443>
# Add machine's IP address (use ifconfig command)
#ServerName <domain name>
# Give an alias to to start your website url with
WSGIScriptAlias /testFlask /home/t13m082h/ExampleFlask/my_flask_app.wsgi
<Directory /home/t13m082h/ExampleFlask>
# set permissions as per apache2.conf file
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/<domain name>/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/<domain name>/privkey.pem
</VirtualHost>
</IfModule>
설정을 보는 한 여기
WSGIScriptAlias /testFlask /home/t13m082h/ExampleFlask/my_flask_app.wsgi
에서 Aapache에서 wsgi로 받아들입니다.
https:///testFlask에서 액세스할 수 있습니다.
.py 파일
my_flask_app.wsgi
# /home/bin/python
import logging
import sys
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0, '/home/t13m082h/ExampleFlask/')
from my_flask_app import app as application
my_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()
그리고 이전의 에러 로그 설정은 여기입니다.
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
HTTPS화
SSL 서명서의 발행은 여기로 끝나고 있는 전제로 합니다.
즉, /etc/letsencrypt/live/<domain name>/
디렉토리에 증명서가 놓여져 있는 것.
앞서 언급했지만 이미 Let's encrypt에서 443번 포트를 SSL화하고 있었으므로, 4443번 포트에서 대기하고 https://<domain name>/testFlask
를 /home/t13m082h/ExampleFlask
로 리디렉션하고 있다.
이전의 flask.conf
파일의 이쪽에서 설정.
SSLEngine on
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/<domain name>/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/<domain name>/privkey.pem
Document root 변경할 위치
SSLEngine on
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/<domain name>/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/<domain name>/privkey.pem
/etc/apache2/sites-available
의 WSGIScriptAlias
과 <Directory>
my_flask_app.wsgi
의 sys.path.insert()
다른 모듈, 서비스 노트
ngrok(엔지락) ⇔ Let'script + 독자 도메인 + wsgi(위스기)
ngrok 사용하면 8 시간 만료됩니다.
8시간마다 다시 시작하는 스크립트를 작성해도 좋지만, 매번 URL이 바뀌어 버리므로 LINE API 설정의 Webhook URL도 매번 고쳐야 하는 것이 까다롭다.
heroku(헤로쿠) ⇔ 집 서버(Raspberry Pi) + wsgi(위스기)
무료로는 월에 1000시간 밖에 서버 가동시킬 수 없기 때문에, 가동시키고 싶은 Web 어플리케이션 늘어났을 때에 과금해야 한다.
nginx (엔진 엑스) ⇔ apache
Apache를 원래 사용하고 있었던 것과, 자신용의 서버이므로 많은 액세스도 없기 때문에 Apache로 충분.
장고 (장고) ⇔ Flask
Flask 쪽이 가벼운 것 같기 때문에.
참고 URL
htps : // 코 m / 오콧 8 / ms / 0f67753706cdc11f1cd
htps : // 이 m / ぁ ぅ s / ms / 9877849d3108 2c6d0df
htps //w w. 코멘과 r. 이오 / 아 b 히샤케 / 미니 마 l 아파치 ぇ コンフーp후 50아 7ft
htps : // 하고 싶다 l. 코 m / 쿠에 s 치온 s / 78671
htps : ///b-e-b-ck. k /? p=4601
Reference
이 문제에 관하여(자택 서버용 라즈파이로 Python으로 LINE bot(HTTPS화)를 만든다(heroku, ngrok 사용하지 않는다) Apache(+wsgi)+Flask(Django에서도 같다?)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/t13m082h/items/06fc8619eec606251686
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
htps : // 코 m / 오콧 8 / ms / 0f67753706cdc11f1cd
htps : // 이 m / ぁ ぅ s / ms / 9877849d3108 2c6d0df
htps //w w. 코멘과 r. 이오 / 아 b 히샤케 / 미니 마 l 아파치 ぇ コンフーp후 50아 7ft
htps : // 하고 싶다 l. 코 m / 쿠에 s 치온 s / 78671
htps : ///b-e-b-ck. k /? p=4601
Reference
이 문제에 관하여(자택 서버용 라즈파이로 Python으로 LINE bot(HTTPS화)를 만든다(heroku, ngrok 사용하지 않는다) Apache(+wsgi)+Flask(Django에서도 같다?)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/t13m082h/items/06fc8619eec606251686텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)