Vagrant + Python3.5 を用いて Japronto を動かすメモ
Windows で Vagrant + Python3.5 を用いて Japronto をとりあえず動かすまで。
※VirtualBox/Vagrantはインストール済み
- Japronto
- VagrantにCnetOS環境構築
- Python3 と Japronto インストール
- ホストOSで ./public/index.py を用意
- ゲストOSで index.py を起動
- 起動後はホストOSのブラウザで http://192.168.33.15:8080/ にアクセス
Japronto
- レスポンスが高速らしいとのことで興味を持ちました。
VagrantにCnetOS環境構築
- Vagrant, Python3 のセットアップは一部こちらを参考にしました。
$ vagrant box add py3_centos67 https://github.com/CommanderK5/packer-centos-template/releases/download/0.6.7/vagrant-centos-6.7.box $ vagrant init
- Vagrantfileを編集
Vagrant.configure("2") do |config| config.vm.box = "py3_centos67" config.vm.network "private_network", ip: "192.168.33.15" config.vm.synced_folder "./public", "/home/vagrant/public" end
- Guest Additionsをインストール後、Vagrantを起動してゲストOSに接続
※次回起動時に共有フォルダが共有されない問題が起きたときにGuest Additionsをインストールして解消しました。
$ vagrant plugin install vagrant-vbguest $ vagrant vbguest $ vagrant up $ vagrant ssh
Python3 と Japronto インストール
$ sudo su - $ yum install https://centos6.iuscommunity.org/ius-release.rpm $ yum search python3 $ yum install -y python35u python35u-pip python35u-devel $ pip3.5 install --upgrade pip $ pip3.5 install japronto $ exit
ホストOSで ./public/index.py
を用意
- 共有フォルダ(
config.vm.synced_folder
)を設定しているのでホストOS側で用意できます。 - ゲストOSで操作する際は
vi
などで。 ./public/index.py
※日本時間で今日の日時を表示
#!/usr/bin/python3.5 # -*- coding: utf-8 -*- from japronto import Application import codecs import datetime DEFAULT_ENCODING = 'UTF-8' JST = datetime.timezone(datetime.timedelta(hours = 9), 'JST') def header(title): with codecs.open('header.txt', 'r', DEFAULT_ENCODING) as f: return f.read().format(title) def footer(): with codecs.open('footer.txt', 'r', DEFAULT_ENCODING) as f: return f.read() def index(request): now = datetime.datetime.now(JST) text = '' text += header('index') text += '<div class="center">' text += now.strftime('<span class="l b">%Y</span><span class="s">年</span><br>') text += now.strftime('<span class="l b">%m</span><span class="s">月</span>') text += now.strftime('<span class="l b">%d</span><span class="s">日</span>') text += '<span class="s">(</span><span class="l b">{}</span><span class="s">)</span><br>'.format( ['日', '月', '火', '水', '木', '金', '土'][int(now.strftime('%w'))] ) text += now.strftime('<span class="l">%H</span><span class="s">:</span><span class="l">%M</span><span class="s">:</span><span class="l">%S</span>') text += '</div>' text += footer() return request.Response(mime_type='text/html', text=text, encoding=DEFAULT_ENCODING) app = Application() app.router.add_route('/', index) app.run()
./public/header.txt
※ファイルが長くなるので分けました。
<!DOCTYPE html> <html> <meta http-equiv="refresh" content="1;URL=/"> <head> <title>{}</title> </head> <style type="text/css"> .center {{ position: absolute; top: 0; right: 0; bottom: 0; left: 0; margin: auto; width: 200px; height: 80px; text-align:center; }} .b {{ font-weight: bold; }} .l {{ font-size: larger; }} .s {{ font-size: smaller; </style> <body>
./public/footer.txt
※ファイルが長くなるので分けました。
</body> </html>
ゲストOSで index.py
を起動
$ ./index.py Accepting connections on http://0.0.0.0:8080