Help us understand the problem. What is going on with this article?

bottleのHTTPサーバーを3分でSSL化する

元のコード

例えば、以下のようなソースコードがあったとして、

http_server.py
from bottle import route, run

@route("/")
def root():
    return "Server running"

if __name__ == '__main__':
    run(host="0.0.0.0", port=80)

必要なモジュールをインストール

pip install gevent

鍵を準備

Let's Encryptでやるときはここを見ると良さそう
https://certbot.eff.org/lets-encrypt/ubuntufocal-nginx
オレオレ証明書を使うときはここ
https://qiita.com/ll_kuma_ll/items/13c962a6a74874af39c6
localhostで作りたいときはここ
https://qiita.com/rkunihiro/items/530b5dc685bd3bff2082

コードをちょっと変える

こうする

https_server.py
from bottle import route, run, ServerAdapter
from gevent.pywsgi import WSGIServer

certpem = "<公開鍵>"
privpem = "<秘密鍵>"

class SSLWebServer(ServerAdapter):
    def run(self, handler):
        srv = WSGIServer((self.host, self.port), handler,
                         certfile=certpem,
                         keyfile=privpem)
        srv.serve_forever()

@route("/")
def root():
    return "Server running"

if __name__ == '__main__':
    run(host="0.0.0.0", port=443, server=SSLWebServer)

Let's Encryptで鍵を用意した場合、
公開鍵は/etc/letsencrypt/live/<ドメイン>/cert.pem
秘密鍵は/etc/letsencrypt/live/<ドメイン>/privkey.pem
にある

注意点

UNIX系OSで1024未満のポートをバインドできるのはrootユーザーのみなので、実行するときは

sudo python3 https_server.py

とする必要がある
しかし、一般ユーザー権限でpip installした場合、モジュールは$HOME/.local/lib/python3.8/site-packagesに格納される。そして、root権限でPythonを実行した場合、上記のパスをモジュールパスに含めないため、ModuleNotFoundErrorを起こしてしまう。
対策として、
- root権限でpip installし直す必要がある
- 以下のようにモジュールパスに上記パスを追加する

from sys import path, version
path.append("/home/ubuntu/.local/lib/python{ver}/site-packages".format(ver=".".join(version.split(".")[:2])))
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした