Vagrant + Python3.5 を用いて Japronto を動かすメモ

WindowsVagrant + Python3.5 を用いて Japronto をとりあえず動かすまで。

VirtualBox/Vagrantはインストール済み

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

起動後はホストOSのブラウザで http://192.168.33.15:8080/ にアクセス

f:id:nfnoface:20170227151253p:plain