Raspberry pi 2にNginx+GolangでWebサーバー構築
NginxとGolangで自宅Webサーバ環境を構築したので、その方法を書きたいと思います。
環境
Linux raspberrypi 4.1.17-v7+ #838 SMP Tue Feb 9 13:15:09 GMT 2016 armv7l GNU/Linux nginx version: nginx/1.6.2
Raspbianインストールからセキュリティ設定
ココらへんは他のサイトに書かれているのでそれらを参考してください。
インストール時の注意点としてはWebサーバ用途であればGUIは必要ないのでRaspbian LITEで良いです。あと、IPアドレスですが、ルータの設定ページにどこからどこまでをプライベートIPとして使うとか書かれているので下からpingしていけばOKです。pingできればssh pi@[ip-address]
で接続してパスワードはraspberry
です。通ればほぼ確でラズパイです。
セキュリティ設定は
Raspberry Piのセキュリティー設定 for Webサーバー用 パート1 | ものづくりエクスペリメント
Raspberry Piのセキュリティー設定 for Webサーバー用 パート2 | ものづくりエクスペリメント
を参考にしてください。
Nginx導入
RaspbianのパッケージにあるNginxは1.6.2です。安定版は1.8ですがソースからビルドしたところセグメンテーションフォールトでクラッシュしてしまったので、仕方なく1.6.2を使いました。
ここからの過程はroot権限が必要なのでrootでなければsudoをつけてください。
apt-get update apt-get upgrade apt-get install nginx
でインストールします。
Nginxの設定ファイルは/etc/nginx
以下にあります。設定しなければならないものは/etc/nginx/nginx.conf
と/etc/nginx/sites-available/[server-name]
です。設定ファイルはホームディレクトリなどにバックアップをとっておくと良いです。
/etc/nginx/nginx.conf
は好みですが自分はserver_tokens off;
とgzip on;
にしました。
/etc/nginx/sites-available/[server-name]
にはバーチャルホストの設定をします。自分は下記のように設定しました。
server { listen 80 default_server; listen [::]:80 default_server; server_name [server-name]; root /var/www/html/[プロジェクトネーム]; index index.html; location / { try_files $uri $uri/ =404; proxy_pass http://127.0.0.1:[ポート番号]; } location ~ .*\.(jpg|JPG|gif|GIF|png|PNG|swf|SWF|css|CSS|js|JS|inc|INC|ico|ICO) { root /var/www/html/[プロジェクトネーム]/public; } }
サーバネーム、パスやポート等は自分の環境にしてください。ポート番号は環境変数で設定すると便利です。
ルートにアクセスした時デフォルトで表示するサイトの設定ファイルにはlisten
の最後にdefault-server
を追記します。はじめから入っている/etc/nginx/sites-available/default
のdefault-server
は消してください。この設定の場合Goの実行ファイルは/var/www/html/[プロジェクトネーム]
以下に静的ファイルは/var/www/html/[プロジェクトネーム]/public
以下に配置します。location /
にあるproxy_pass
はこのバーチャルホストの/
にきたアクセスはhttp://127.0.0.1:[ポート番号]
に転送してくださいという意味です。もし別のマシンでGoのWebサーバを動かす場合はIPアドレスを変更します。その下のlocation ~ .*\.(jpg....
は静的ファイルの保存場所を表しています。
記述完了したら保存して/etc/nginx/sites-enabled
以下にシムリンクを貼ります。
ln -s /etc/nginx/sites-available/[プロジェクトネーム] /etc/nginx/sites-enabled/[プロジェクトネーム]
これで設定が有効化されます。そしたら
nginx -t
で設定ファイルの正しさを検証します。
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
とでたらOKです。
そしたら下記コマンドでNginxを再起動します。
nginx -s reload
これでNginxの設定が完了しました。
ルータの設定
Webサーバを公開するにあたりルータの80番ポートにきた通信をラズパイに転送する設定をします。ルータのプライベートIPアドレスにアクセスし設定画面を開きます。まずラズパイのマックアドレスに対するプライベートIPアドレスを固定してください。そしたら80番ポートをラズパイのプライベートIPアドレスにマッピングしてください。これでルータの80番ポートの通信がラズパイに転送されます。
GoのWebサーバの導入
Goはクロスコンパイル可能なコンパイル型言語なのでラズパイ上にビルド環境を作成する必要はありません。作成してもいいですが、セキュリティを高めたければ作らないほうがいいです。クロスコンパイルには
GitHub - mitchellh/gox: A dead simple, no frills Go cross compile tool
を使います。
go get -u https://github.com/mitchellh/gox
で開発マシンにインストールしてください。
gox osarch="linux/arm"
でラズパイで動くバイナリを生成できます。
バイナリを生成したらscpコマンドなりsftpなりで設定ファイルで指定した場所に実行ファイル、静的ファイル群を転送します。最後に
cd [実行ファイルのあるパス] ./[プロジェクトネーム] &
でセットアップ完了です。
LAN内で[ラズパイのプライベートIP]
、LAN外部から[自宅のグローバルIP]
にそれぞれアクセスして結果が返されることを確認してください。