Python学習【365日チャレンジ!】242日目のマスターU(@Udemy11)です。
いまさらながらですが、「学年ビリのギャルが1年で偏差値を40上げて慶応大学に現役合格した話」通称「ビリギャル」を読みました。
映画を見たことはあったので、特段読む必要性に駆られていたわけではないのですが、坪田先生の「才能の正体」をオーディブルで聴いていると、やっぱり処女作は読んどかないとな~ということで読むことにしました。
レビューはAmazonやWebに任せるとして、映画では理解できないバックグラウンドがわかるのがおもしろくて、あっという間に読み終えてしまいました。
次は、「才能の正体」でふれられていたジョン・フォン・ノーマンの「ゲーム理論」に関する本を読んでみようかと思っています。
昨日までの復習
この二日間でVirtualboxとVagrantをインストールしました。
復習ということもないので、詳細については、昨日までの記事をごらんください。
今日は、VagrantfileでVMを立ち上げる方法を学習します。
仮想環境を構築
設定などを書き込んだファイルがVagrantfile
で、今回、酒井さんの講座で用意されているものを使わせていただきました。
Pycharmのプロジェクトフォルダに用意されているVagrantfile
とフォルダops
をドラッグ&ドロップしてからターミナルでコマンドvagrant up
を実行します。
ops
フォルダの中には、空のansible_project
とfab_project
フォルダが用意されています。
ドラッグ&ドロップすると下記のようなポップアップが表示されるので、【refactor】をクリックします。
このあと、ターミナルからls
コマンドでファイルを表示してみると、当然のことながらvagrantfile
があるので、vagrant up
コマンドを実行して、環境を構築します。
構築する仮想環境は、3日前にイメージとして紹介したものです。
環境の構築には、時間がかかります。
私のMacBookProでは、約15分ほどかかりました。
完了すれば、Pycharmのプロジェクトに次のようなディレクトリが作成されます。
main
がメインサーバーでserver1
、server2
が作成されているのがわかります。
Vagrantfile
用意されたものを実行しただけなので、全くもって意味がわかりませんが、Vagrantfile
の中身をみてみましょう。
$ssh_enable = <<SCRIPT
sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get install -y expect
sudo sed -i 's/prohibit-password/yes/' /etc/ssh/sshd_config
sudo sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
sudo service sshd restart
echo '#!/usr/bin/expect
set timeout 20
spawn sudo passwd root
expect "Enter new UNIX password:" {send "root\\r"}
expect "Retype new UNIX password:" {send "root\\r"}
interact' > change_password
chmod +x change_password
./change_password
SCRIPT
$install_package = <<SCRIPT
sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get -y install python3-pip
sudo apt-get -y install sshpass
sudo apt-get -y install python-dev python3-dev
sudo apt-get -y install libssl-dev libffi-dev libxml2-dev libxslt1-dev zlib1g-dev
sudo pip3 install --upgrade setuptools
sudo pip3 install Fabric==1.14.0
sudo pip3 install Fabric3
sudo pip3 install ansible==2.4.2.0
SCRIPT
Vagrant.configure(2) do |config|
config.vm.define 'main' do |main|
main.vm.hostname = 'main'
main.vm.box = 'ubuntu/xenial64'
main.vm.network 'private_network', ip: '10.0.0.100'
main.vm.synced_folder 'ops/', '/srv/ops'
main.vm.provision 'shell', inline: $install_package
end
config.vm.define 'server1' do |server1|
server1.vm.hostname = 'server1'
server1.vm.box = 'ubuntu/xenial64'
server1.vm.network :forwarded_port, guest: 5000, host: 8001, id: 'http'
server1.vm.network 'private_network', ip: '172.16.200.101'
server1.vm.provision 'shell', inline: $ssh_enable
end
config.vm.define 'server2' do |server2|
server2.vm.hostname = 'server2'
server2.vm.box = 'ubuntu/xenial64'
server2.vm.network :forwarded_port, guest: 5000, host: 8002, id: 'http'
server2.vm.network 'private_network', ip: '172.16.200.102'
server2.vm.provision 'shell', inline: $ssh_enable
end
end
1行目から16行目と18行目から29行目は下の方に記述しているVagrant
の設定ファイルで指定しているスクリプトです。
31行目からが設定のコードで、31行目のdo
と55行目のend
で挟んでconfig
を記述していますが、入れ子にしたdo
とend
でそれぞれのサーバーを設定しています。
ubuntu
は無料で使えるオペレーティングシステムで、メインのサーバー(main)には、名前、ubuntu
のデータフォルダ、IPアドレス、Macと同期するための設定、ssh
を使うための設定を記述しています。
それぞれのサーバー(server1,server2)には、メインサーバーと同じように、ホストの名前、ubuntu
、IPアドレス、ssh
の設定に加えて、ポートの設定を記述しています。
ここで指定している$install_package
と$ssh_enable
が1行目から29行目で記述しているスクリプトです。
main
の方には、python3-pip
、sshpass
、python-dev
、python3-dev
、libssl-dev
、libffi-dev
、libxml2-dev
、libxslt1-dev
、zlib1g-dev
、setuptools
、Fabric1.14.0
、Fabric3
、ansible2.4.2.0
をインストールしています。
サーバー1.2については、最初にアップデートするのは同じで、expect
を使って、root
のパスワードを書き換えるようにしています。
5行目、6行目でssh
が使えるように設定し、7行目からのecho
でパスワードを変更するexpect
のスクリプトを記述しています。
ユーザーネームとパスワードをroot
にしていますが、あくまでテストなので、実際はきちんとしたユーザーネームとパスワードを設定する必要があります。
ちんぷんかんぷん
久しぶりにちんぷんかんぷんな内容でした。
用意してもらったVagrantfile
をそのまま実行しただけなので、まったくもって何を実行しているのかが理解できませんでした。
なので、実行しているVagrantfile
をきちんと学習してどのような動きに必要なのか、考える必要があります。
今回は、テスト環境を構築するために使っているので、ちょっとづつ使いながらなれていくしかないのかなと感じています。
久しぶりに頭の中に?マークがたくさん浮かんでいたレクチャーでした。
それでは、明日もGood Python!