Edited at

Python or Docker でローカルサーバををつくる

More than 1 year has passed since last update.


はじめに

Webブラウザを使って操作するWebアプリを、標準のPythonモジュールで作成したいと思います。

標準のモジュールだけを使ってシンプルなアプリケーションを構築することで、Webアプリがどのように動作しているかを理解することを目的とします。

開発環境:

MacbookPro(Mid2012)

OSはMacOS Sierra(High Sierraはすでに出ているが自分はアップグレードしてない)

PythonでWebアプリを開発するためには、開発環境にPythonをインストールする必要があります。

MacOS Sierra には python2.7.10がはじめからインストールされていますが、今回使っているのはPython3.5.1です。

Pythonのバージョンを確認方法、Terminalを起動してから、以下のコマンドを入力します。

python または python3


1. Python3でWebサーバを作る

Python3の時ではhttp.serverを使います。

ポート番号を省略すると8000が用いられます。

Terminalを起動して、以下の一行のコードを書くと簡単にSimpleHTTPServerが立ち上がることができます。

$ python3 -m http.server [ポート番号(デフォルトは8000)]

Webブラウザを起動して、「http://localhost:8000」にアクセスしてみてください。

現在いるディレクトリによって表示する内容が異なります。

私のディレクトリリストは以下のようになります。

また、Terminalには、Webサーバの稼働状態が表示されています。

localhostは現在使用しているシステムそのもののことを指します。Webブラウザにlocalhostと入力した場合、127.0.0.1(ループバックアドレス)が読み込まれます。

つまり、今回入力した 「http://localhost:8000」 とは、「このブラウザが開かれているPC上で起動してるWebサーバの8000番ポートにアクセスする」という意味です。

※ ちなみに、サーバを終了するには Control+C を押します。


1.2 HTMLファイルを表示する

Webサーバとして公開するからには、HTMLファイルを表示したいです。その方法はとても簡単で、表示したいHTMLを作成して、ドキュメントルートに置くだけで完了します。

まずはドキュメントルートにするディレクトリを作成しましょう。場所はどこでもかまいません。

今回は、先ほどのディレクトリリストの中のtest.htmlを使います。


test.html

<!Doctype HTML>

<html>
<head>
<meta charset="UTF-8">
<title>Hello Wolrd</title>
</head>
<body>
<h1 style="color:red;">Hello Welcome Python's World</h1>
<h2>Python</h2>
<h3>Python</h3>
<p>Python</p>
</body>
</html>

表示すると



になります。

「HTTPリクエストに対してHTMLファイルを返す」ことができましたので、これでWebサーバと呼んでいいアプリケーションが完成しました。HTMLファイルに画像を追加したり、CSSで装飾したりすることによって、より素晴らしいWebページを表示することができます。


2. Python2でWebサーバを作る

Python2ではSimpleHTTPServerを使います。

ポート番号を省略すると8000が用いられます。

Terminalを起動してPythonのインタラクティブシェルを起動し、以下の二行のコードを書くと簡単にSimpleHTTPServerが立ち上がることができます。

>>> import SimpleHTTPServer

>>> SimpleHTTPServer.test()


3. DockerでWebサーバをつくってみる


3.1 Python2の場合

$ docker run -it --rm -p 8888:8888 -v `pwd`:/app -w /app python:2-alpine python -m SimpleHTTPServer 8888


3.2 Python3の場合

$ docker run -it --rm -p 8888:8888 -v `pwd`:/app -w /app python:3-alpine python -m http.server 8888