ubuntu15.10にnginx + Perl環境を構築(plenv+cpanm+carton)
目的
環境
- VirtualBox 5.0.8 r103449
- ホストOS:Windows 7 Professional(64bit)
- ゲストOS:ubuntu 15.10 server(amd64)
前準備
VirtualBoxへのインストール前に、[設定]→[ネットワーク]の項目で
- アダプタ1:NAT
- アダプタ2:ホストオンリーアダプター
に設定しています。
インストール時、OpenSSHだけインストールにチェックを入れています。
インストール後、systemd-networkdで
- アダプタ1(enp0s3)
- アダプタ2(enp0s8)
にDHCPでアドレスを割り当てます。
$ sudo systemctl enable systemd-resolved.service $ sudo mv /etc/resolv.conf{,.orig} $ sudo mkdir /run/systemd/resolve $ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf $ sudo touch /etc/systemd/network/dhcp.network
$ sudo vi /etc/systemd/network/dhcp.network [Match] Name=enp* [Network] DHCP=yes
(再起動したらsudo systemctl restart systemd-networkdをしないといけない、要調査)
/* 追記
再起動後にもenp0s8にDHCPでIPを割り当てるためには、
dhclientを止めて、systemd-resolvedとsystemd-networkdを有効にします。
$ sudo systemctl status | grep -2 dhc
ifup@enp0s3.serviceというサービスが見つかるので無効にします。
$ sudo systemctl disable ifup@enp0s3.service $ sudo systemctl enable systemd-resolved.service $ sudo systemctl enable systemd-networkd.service $ sudo reboot
以上で再起動後、2つのネットワークアダプタにIPが割り振られます。
追記ここまで*/
Windowsからsshクライアントを使ってログイン(Cygwin)
(enp0s8に192.168.56.101が割り当てられているものとします)
$ ssh username@192.168.56.101
- gitのセットアップ
ubuntu 15.10 serverではgitが最初から入っていたので、
git configでユーザー名などを登録します。
(もし無ければapt-get install gitをしてください)
$ git config --global user.name "YOURNAME" $ git config --global user.email youraddress@example.com //以下必要に応じて $ git config --global url."https://".insteadOf "git://" $ git config --global http.proxy "http://proxy.example.com:8080/" $ git config --global https.proxy "http://proxy.example.com:8080/"
- plenvのインストール
https://github.com/tokuhirom/plenv#installation
plenvのGithubページに書いてあるインストール方法に従います。
plenv installするときに、makeやらgccやらが必要になるので、build-essentialで一気に入れてしまいます。
$ sudo apt-get install -y build-essential
注意書きにもありますが、ubuntuは~/.profileに記述するという点に注意しましょう。
$ git clone git://github.com/tokuhirom/plenv.git ~/.plenv $ echo 'export PATH="$HOME/.plenv/bin:$PATH"' >> ~/.profile $ echo 'eval "$(plenv init -)"' >> ~/.profile $ exec $SHELL -l $ git clone git://github.com/tokuhirom/Perl-Build.git ~/.plenv/plugins/perl-build/
ここでは5.20.2をインストールします。
$ plenv install 5.20.2 $ plenv global 5.20.2 $ plenv versions $ plenv rehash
- cpanmをインストール
$ curl -L https://cpanmin.us | perl - App::cpanminus $ plenv rehash
- cartonをインストールします。
CartonはRubyでいうBundlerに相当します。
$ cpanm --local-lib=~/perl5 local::lib $ cpanm Carton $ plenv rehash $ mkdir psgi && cd psgi $ echo "requires 'Task::Plack';" >> cpanfile $ carton install
ここで試しにhello.psgiを作成します。
$ vi hello.psgi #!/usr/bin/env perl use strict; use warnings; my $app = sub { my $env = shift; # アプリケーションの処理 return [200, ['Content-Type'=>'text/plain'], ["Hello World\n"] ]; };
$ carton exec plackup hello.psgi
ホスト側(Windows)のブラウザでhttp://192.168.56.101:5000にアクセスして、Hello worldが返ってくることを確認します。Ctrl-Cで終了します。
- nginxをリバースプロキシにする
普通にaptで入れます
$ sudo apt-get install -y nginx-full $ sudo cp -p /etc/nginx/nginx.conf{,.orig} $ sudo pkill nginx
nginx.confは
http://mojolicio.us/perldoc/Mojolicious/Guides/Cookbook#Nginx
などを参考に記述します。
$ sudo vi /etc/nginx/nginx.conf http { ... upstream myapp { server 127.0.0.1:5000; } server { listen 8080; server_name localhost; location / { proxy_pass http://localhost:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ... }
nginxを再度起動し、PSGIサーバ(ここではPlack)を起動します
$ sudo nginx $ carton exec plackup hello.psgi
再びホスト側ブラウザから、http://192.168.56.101:8080/ にアクセスし、Hello worldが表示されたら完了です。
- 補足
一通りの流れを忘れないうちに書きましたが、記事を書きながら動作確認を行っていたので、不正確な点があるかもしれません。
(というか全体的に理解が足りてないので不正確な点が多々ある気がします...)
- 参考
ゆきろぐ: systemd-networkdでのネットワーク設定
PSGI/Plack - Perl Superglue for Web Frameworks and Web Servers