Fabricを使って自動化します。

Python学習【365日チャレンジ!】253日目のマスターU(@Udemy11)です。

昨日は、2匹目のどじょうを狙いにエギングに行ってきました。

普通なら、空振りで終わるのがパターンなのですが、昨日の私はこれまた絶好調!

一昨日を上回る9杯のアオリイカをゲットすることができました。

アオリイカ

釣れたら釣れたでさばくのが大変なんですよね。

魚ならちゃっちゃとさばけるようにはなってきたのですが、アオリイカはこれまでにそんなにさばいていないので、要領がつかめず夜中までかかってしまいました。

寝不足でつらいのですが、大満足のエギング釣行でした。

それでは今日もPython学習を始めましょう。

昨日の復習

昨日は、Fabricの出力結果にカラーを付けてわかりやすく表示する方法を学習しました。

出力結果が長くなると中身を判別するのに時間がかかってしまいますが、出力内容によってカラーを変更することで、出力結果を見やすくすることができました。

詳細については、昨日の記事を参考にしてみてください。

今日は、Fabricでサーバーにアプリケーションを自動でインストールする方法を学習しますが、まずはウォームアップからスタートします。

fabfile.py

fabric.pyを変更します。

ffrom fabric.api import *
from fabric.colors import *
from fabric.contrib.files import *

env.hosts = ['root@172.16.200.101:22']
env.passwords = {'root@172.16.200.101:22': 'root'}
env.roledefs = {
    'common': ['root@172.16.200.101:22'],
    'web': ['root@172.16.200.101:22'],
}

@task
@roles('common')
def install_packages():
    run('apt-get install -y software-properties-common')
    run('add-apt-repository universe')
    run('apt-get update')
    run('apt-get install -y python-setuptools')
    run('easy_install pip')

@task
@roles('web')
def deploy_web():
    run('apt-get install -y supervisor')
    run('apt-get install -y gunicorn')

@task
def deploy_dev_server():
    install_packages()
    deploy_web()
    print(green('success'))

順番にコードを確認してみましょう。

install_packages()

最初にインポートしているのは、これまでに学習したfabric.apifabric.colorfabric.contrib.filesの3つです。

5行目から10行目のコードでserver1のみを使って、サーバー共通のツールをインストールするcommonroleを追加しています。

まずは、関数install_packegesで共通で使うツールをインストールします。

api-getは、apt-get [スイッチ] [オプション] [パッケージ]という使い方をするLinuxのコマンドで、14行目はosのubuntuにsoftware-properties-common-yオプションでインストールします。

オプションの-yは、通常ならYesかNoの確認が出るところをYesにする意味があります。

次に15行目のadd-api-repositoryでレポジトリにuniverseを追加します。

16行目でapi-getをアップデートして、17行目でpython-setuptoolsをインストールします。

最後に18行目でpipが使えるようにしてcommonの設定は完了です。

次は、webの関数deploy_webの設定です。

deploy_web()

webサーバーには、関数deploy_webの23行目、24行目でsupervisorgunicornをインストールしています。

酒井さんの講座の中では、25行目でpipを使ってFlaskのバージョン0.12.2をインストールしています。

レクチャーの内容が古いこともあって、Flaskのインストールでエラーが起こるので、今回は、25行目を削除して実行してみました。

deploy_dev_server()

最後の関数deploy_dev_serverは、用意した関数を2つ実行し、問題なくコードが終了すれば、緑色でsuccessと表示されるコードです。

ターミナルから実行

コードが完成したら、ターミナルからmainサーバーに接続して、fabfile.pyが保存されているディレクトリまで移動します。

そのあと、いつものようにコマンドfab deploy_dev_serverを実行すれば、commonに自動的に共通のツールとwebに指定したツールがインストールされて最後に緑色でsuccessが出力されて完了です。

途中でエラーが起こる場合はスペルミスなどが考えられるので、コードを見直しましょう。

私自身、コマンドを実行するときに起きるエラーはほとんどがスペルミスで、ほんといつも気を付けないといけないなと感じつつ、同じことをやってしまっている自分がいます。

慌ててタイプすると間違ってるんですよね。

まとめ

自動化ってプログラミングの醍醐味なので、コマンドを実行して、処理が進んでいる画面を見ると、ちょっと気分がよくなるんですよね。

でも、流れが速すぎて何をしているのかわからないので、きちんとできてるかどうか不安な気持ちも少しはあります。

この不安感って、効率化を進める妨げになってるんじゃないかと思うんです。

新しいものへの不安感や目に見えるものだけしか信じられない人は、作業を自分でやらないと気が済まないわけで、そんな人は、自分以外を信用していないのかもしれませんね。

それでは明日もGood Python!