CentOS 7でBottle Micro Frameworkを使用してPython Webアプリケーションを展開する方法

前書き

Pythonは、その柔軟性と高度な機能により、Webプログラミングに最適な言語です。 Webフレームワークは、堅牢なWebインターフェイスに必要な多くのコンポーネントを接続するため、Webアプリケーションのプログラミングを非常に簡単にすることができます。

すべてを提供しようとするWebフレームワークもあれば、実装が困難な重要な問題を処理しながら邪魔にならないようにしようとするものもあります。 * Bottle *は、2番目のカテゴリに分類されるPythonフレームワークです。 これは非常に軽量ですが、アプリケーションの迅速な開発も容易にします。

このガイドでは、CentOS 7サーバーで簡単なWebアプリケーションを作成するためにBottleをセットアップして使用する方法について説明します。

前提条件

このガイドを始める前に、次のものが必要です。

  • CentOS 7ドロップレット

  • コマンドラインからテキストファイルを編集する方法に関する実用的な知識

  • sudo user

ステップ1-Python用の仮想環境をインストールする

Bottleが構築されているプログラミング言語であるPythonは、デフォルトでCentOSにインストールされています。

PythonプロジェクトをシステムのPython環境から分離するために、 `+ python-virtualenv +`パッケージをインストールします。 virtualenvソフトウェアを使用すると、OS全体に影響を与えないPythonプロジェクト用の独立した環境を作成できます。

パッケージリストを更新します。

sudo yum update

リポジトリから `+ python-virtualenv +`をインストールします。

sudo yum install python-virtualenv

ホームディレクトリに「+ projects +」フォルダーを作成し、このフォルダー内に仮想環境を作成します。

mkdir ~/projects
cd ~/projects
virtualenv --no-site-packages venv

これにより、 `+ projects `ディレクトリ内に ` venv +`というディレクトリが作成されます。 このフォルダー内にいくつかのPythonユーティリティをインストールし、追加のツールをインストールするためのディレクトリ構造を作成しました。

ステップ2-Pythonの仮想環境をアクティブ化する

プロジェクトの作業を開始する前に、仮想環境をアクティブ化する必要があります。

source venv/bin/activate

コマンドプロンプトは、現在仮想環境で操作しているという事実を反映して変更されます。

ステップ3-ボトルのインストール

virtualenvプログラムがインストールしたツールの1つは `+ pip +`でした。

このツールを使用すると、オンラインリポジトリであるhttps://pypi.python.org/pypi[Python package index]からPythonパッケージを簡単にインストールできます。

Bottleに関係するPythonパッケージを検索する場合、次を実行できます。

pip search bottle

Bottleパッケージをインストールすることから始めます。

pip install bottle

プロセスが完了すると、アプリケーション内でBottleフレームワークを使用できるようになります。

ステップ4-最初のボトルアプリケーションを作成する

Bottleは、ほとんどのフレームワークと同様に、MVCソフトウェアパターンのバージョンを実装しています。 MVCはモデル、ビュー、コントローラーの略で、ユーザーインターフェイスのさまざまな機能を分離する決定を説明しています。

_model_は、一連のデータの表現であり、データの保存、クエリ、および更新を行います。 _view_は、ユーザーに情報を表示する方法を示します。 データの表示をフォーマットおよび制御するために使用されます。 _controller_は、アプリのメイン処理センターであり、ユーザーのリクエストへの応答方法を決定します。

ボトルのアプリケーションは非常に簡単です。 最も単純な形式では、これらのコンポーネントをすべて単一のファイル内に実装できます。 これがどのように行われるかを示す「hello world」アプリケーションを作成します。

お気に入りのテキストエディターで、 `+ hello.py +`というPythonアプリケーションを作成します。

nano ~/projects/hello.py

各行を1つずつ表示し、このセクションの最後に最終ファイルを含めます。

このファイル内で追加する最初の行は、Bottleパッケージからいくつかの機能をインポートします。 これにより、アプリケーション内でフレームワークツールを使用できるようになります。

hello.py

from bottle import route, run

この行はプログラムに、ルートをインポートしてボトルパッケージからモジュールを実行することを伝えます。

  • インポートする `+ run +`モジュールを使用して、開発サーバーでアプリケーションを実行できます。これは、プログラムの結果をすばやく確認するのに最適です。

  • インポートする `+ route +`モジュールは、どのPythonリクエストによってどのURLリクエストが処理されるかをアプリケーションに伝える役割を果たします。 Bottleアプリケーションは、要求された各URLに対して単一のPython関数を呼び出すことによりルーティングを実装します。 次に、関数の結果をユーザーに返します。

URLパターン「+ / hello +」に一致するルートを今すぐ追加できます。 ファイルの最後に新しい行を1行追加します。

hello.py

from bottle import route, run

このルートデコレータはURL「+ / hello +」と一致するため、そのパスがサーバー上で要求されると、直接続く関数が実行されます。 ファイルの最後にさらに2行追加します。

hello.py

from bottle import route, run

@route('/hello')

この関数は非常に単純ですが、ルーティング関数の唯一の要件を満たします。Webブラウザーに表示できる値を返します。 この場合、値は単純なHTML文字列です。 h1ヘッダータグを削除すると、同じ情報が装飾なしで表示されます。

最後に、開発サーバーを使用してアプリケーションを実行する必要があります。 最後の行を追加すると、ファイルが完成しました。

hello.py

from bottle import route, run

@route('/hello')
def hello():
   return "<h1>Hello World!</h1>"

この行はサーバーインスタンスを実行します。

  • パラメータ `+ host = '0.0.0.0' +`を渡すことで、ローカルマシンだけでなく、あらゆるコンピューターにコンテンツを提供します。 アプリケーションはリモートでホストされているため、これは重要です

  • `+ port +`パラメーターは、これが使用するポートを指定します

ファイルを保存して閉じます。

次のコマンドでこのアプリケーションを実行できます。

python ~/projects/hello.py

Webブラウザでこのアプリケーションにアクセスするには、IPアドレスに移動し、実行するように選択したポート(8080)、作成したルート(/ hello)の順に移動します。

  • + http://:8080 / hello +

これは次のようになります。

image:https://assets.digitalocean.com/articles/bottle/hello_world.png [DigitalOcean Bottle hello world]

次のように入力して、サーバーをいつでも停止できます。

CTRL-C

ステップ5-ボトルモデルの作成

これで最初のアプリケーションが実装されました。 シンプルでしたが、MVCの原則を実際に実装したり、特に興味深いことをしたりしませんでした。 今回はもう少し洗練されたアプリケーションを作成しましょう。

モデルから始めます。 これは、データストレージを処理するプログラムの一部です。 Bottleは、プラグインを使用して、データのさまざまなバックエンドを簡単に実装できます。

データベースにはSQLiteデータベースファイルを使用します。 これは、軽量タスク用に設計された非常にシンプルなデータベースです。

SQLiteはCentOS 7のデフォルトイメージに含まれていますが、再インストールする必要がある場合は、1つのコマンドと同じくらい簡単です。

sudo yum install sqlite

既にインストールされているはずです。

また、これらのデータベースを使用できるようにするBottleプラグインをダウンロードしてインストールする必要があります。

pip install bottle-sqlite

コンポーネントができたので、いくつかのデータを含むSQLiteデータベースを生成するPythonファイルを作成します。 Pythonインタープリターでこれを行うこともできますが、ファイルを作成すると簡単に繰り返すことができます。

ファイルを作成します。

nano ~/projects/picnic_data.py

このコンテンツをファイルに追加します。 ピクニックインベントリアイテムで満たされたデータベースを作成します。

picnic_data.py

import sqlite3
db = sqlite3.connect('picnic.db')
db.execute("CREATE TABLE picnic (id INTEGER PRIMARY KEY, item CHAR(100) NOT NULL, quant INTEGER NOT NULL)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('bread', 4)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('cheese', 2)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('grapes', 30)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('cake', 1)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('soda', 4)")
db.commit()

このファイルでは、次のことを行います。

  • SQLiteパッケージをインポートする

  • テーブルを作成してデータを挿入するコマンドを実行します

  • 最後に、変更をコミットします

ファイルを保存して閉じます。

ファイルを実行すると、現在のディレクトリ内に `+ picnic.db +`というデータベースファイルが作成されます。

python ~/projects/picnic_data.py

必要に応じて、ディレクトリを「+ ls +」して、データベースファイルが作成されたことを確認できます。

これで、プログラムのモデル部分はかなり完成しました。 モデルが、データとやり取りするために制御部分がどのように機能する必要があるかを少し指示することがわかります。

[[6---create-a-bottle-controller]] === 6-ボトルコントローラーを作成する

データベースができたので、メインアプリケーションの開発を開始できます。 これにより、主にコントローラー機能が実装されます。 また、最初のアプリケーションに最もよく似たファイルになります。

メインアプリケーションを保存するための `+ picnic.py +`というファイルを作成します。

nano ~/projects/picnic.py

前と同じように、ファイルを1行ずつ説明し、手順の最後に完成したファイルを表示します。

このファイル内で、以前と同様に、Bottleパッケージからいくつかのものをインポートする必要があります。 これまで使用したことのない追加のモジュールが必要です。 さらに、SQLite機能をインポートする必要があります。

picnic.py

import sqlite3
from bottle import route, run, template

次に、URLパス `+ / picnic +`に一致するルートを定義します。

picnic.py

import sqlite3
from bottle import route, run, template

データベースに接続し、テーブルからデータを取得し、ビューを呼び出してページをレンダリングする関数を実装します。

picnic.py

import sqlite3
from bottle import route, run, template

@route('/picnic')
  • データベースに接続するコマンドは `+ db = sqlite3.connect( 'picnic.db')+`コマンドです

  • データベースにクエリを実行し、次の4行ですべての値を選択します

  • データをフォーマットするためにビューを呼び出す行は、 + output = template( 'bring_to_picnic'、rows = data)+`です。 これは、 `+ bring_to_picnic.tpl +`というテンプレート(ビュー)を呼び出してデータをフォーマットします。 `+ data`変数をテンプレート変数 + rows`として渡します

  • 最後に、フォーマットされた出力をユーザーに返します

最後に、 `+ run +`コマンドを追加して実際のサーバーを実行する必要があります。

picnic.py

import sqlite3
from bottle import route, run, template

@route('/picnic')
def show_picnic():
   db = sqlite3.connect('picnic.db')
   c = db.cursor()
   c.execute("SELECT item,quant FROM picnic")
   data = c.fetchall()
   c.close()
   output = template('bring_to_picnic', rows=data)
   return output

ファイルを保存して閉じます。

次のセクションで、このテンプレートファイル `+ bring_to_picnic.tpl +`を作成します。

ステップ7-ボトルビューを作成する

モデルとコントローラーができたので、作成する必要があるのはビューだけです。 これは、Bottleの組み込みテンプレートエンジンを使用して簡単に処理できます。

アプリケーションは、 `+ .tpl `で終わるテンプレート関数で指定された名前に一致するテンプレートを検索します。 これは、プロジェクトのメインディレクトリ、または「 view +」というディレクトリにあります。

前のスクリプトの `+ output +`行にあるテンプレート関数で呼び出したファイルと一致するファイルを作成します。

nano ~/projects/bring_to_picnic.tpl

このファイルでは、HTMLとプログラミングを混在させることができます。 私たちのものは非常に簡単です。 ループを使用してテーブルを作成し、そこにモデルデータを取り込みます。 これらの行をすべてファイルに追加します。

bring_to_picnic.tpl

<h1>Things to bring to our picnic</h1>

<table>
   <tbody>
       <tr><th>Item</th><th>Quantity</th></tr>
       %for row in rows:
       <tr>
       %for col in row:
           <td>{{col}}</td>
       %end
       </tr>
   %end
   <tbody>
</table>

これにより、ページがHTMLでレンダリングされます。

  • ここにあるテンプレート言語は基本的にPythonです

  • テンプレートに渡した `+ rows +`変数は、出力を設計するときに使用できます

  • Pythonの行の前に `%`を付けることで入力できます

  • `+ {{var}} +`構文を使用して、HTML内の変数にアクセスできます。

ファイルを保存して閉じます。

ステップ8-ボトルアプリケーションの開始

これでアプリケーションが完成しました。

メインファイルでPythonを呼び出すと、プログラムを開始できます。

python ~/projects/picnic.py

IPアドレスとポートにアクセスして、作成したURLルートを表示すると、結果を確認できます。

  • + http://:8080 / picnic +

Webページは次のようになります。

image:https://assets.digitalocean.com/articles/bottle/mvc_example.png [DigitalOcean Bottle mvc example]

アプリケーションを停止するには、 `+ CTRL-C +`を押します。

(オプション)ステップ9-独自のアプリケーションをアップロードする

独自のBottleアプリケーションをアップロードするには、すべてのプロジェクトファイルをこのディレクトリにコピーする必要があります。

~/projects/

例えば:

scp :~/projects/

同様に、このプロジェクトに関連付けられている*すべてのファイル*をアップロードします。 SFTPは、ファイルをアップロードする別の方法です。 '+ scp + `に詳しくない。

(オプション)ステップ10-独自のアプリケーションを開始する

仮想環境をアクティブにします(まだ実行していない場合)。

cd ~/projects/
source venv/bin/activate

`+ python`コマンドを使用して、アプリケーションを起動します。 バックグラウンドでプロセスを開始することで、初歩的なことをやや少なくします。つまり、端末を閉じてもアプリは実行され続けます。

nohup python ~/projects/ &

出力には、プロセスID番号と次のメッセージが表示されます。

出力

[1]
(venv)[sammy@bottle projects]$ nohup: ignoring input and appending output to ‘nohup.out’

本番の準備ができたら、アプリのより堅牢なスタートアッププランを作成することを強くお勧めします。 (バックグラウンドで起動するだけで、サーバーの再起動後にアプリが停止します。)CentOS 7はhttps://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files[systemd]を使用します。

結論

これで、Bottleのようなシンプルで必要最低限​​のマイクロフレームワークを使用して、複雑なアプリケーションを構築する方法を確認できるはずです。 例は単純ですが、より高度な機能を活用するのは簡単です。

ボトルのプラグインシステムも重要な資産です。 プラグインはコミュニティ内で積極的に共有されており、プラグインシステムを介してより複雑な動作を簡単に実装できます。

たとえば、Bottle互換プラグインを見つける簡単な方法の1つは、 `+ pip search bottle +`コマンドを使用することです。 これにより、いくつかのより一般的なオプションのアイデアが得られます。

Related