Linux初心者がVPS借りてWebサービスをホストするまでのこまごましたことメモ


こういうことを残しておくと将来の自分に感謝されるのでメモ。

VPSを選ぶ

VPSはConoHaを借りた。

さくらのVPSも触ってはみたけれど、コンソールが日本語キーボードで入力することが前提みたいになっていたのが自分的にマイナス。
単にかっこいいからという理由でUSキーボードを使うVPS初心者にはハードモードだった。

ConoHaの場合は以下の2つの設定をすればOK。

  • VPS設定 - コンソールキーマップを "ja" から "en-us"に変更する
  • コンソールで次のコマンドを入力
sudo loadkeys us

このコマンドはサッと対処するにはいいが再起動すると初期化されてしまうことに注意。

CentOS/コンソール上の英語キーボード・日本語キーボードの切替方法

日本語入力ができない問題

CUIから日本語入力ができないが手元のMacからSSHで接続した場合はできるので必要なときはそっちから入力することにした。

OSを選ぶ

CentOS v6.7を選んだ。
最新のCentOS v7も選べたが、初心者には差異がよくわからないということ、細かい設定方法をウェブで探すときにCentOS v6の方が情報が多いので。

CentOSの基本設定 〜 SSH

少し古い記事だけどけっこう参考になる。

CentOSをサーバーとして活用するための基本的な設定

SSHキーを設定する部分は次のブログ記事がわかりやすい。

さくらvpsの設定自分メモ - ssh設定① - for mac
さくらvpsの設定自分メモ - ssh設定④ - for mac2台目とか

ただし、SSHキーをmacで生成するコマンドは "ssh keygen" ではなく "ssh-keygen"だった。
また、SSHの設定を変更してサービスを変更する部分はCentOS6と7で異なっている。

# CentOS6
/etc/init.d/sshd restart

#CentOS7
systemctl restart sshd.service

参考
http://www.putorius.net/2014/07/restarting-services-in-red-hat-7-or.html

動作環境のインストール

インストールするもの

  • nginx
  • MongoDB
  • Golang

基本的に公式ドキュメントの手順に進めればOK

nginx のインストール

  • /etc/yum.repos.d/nginx.repoを作成

golangのインストール

  • 最初にgolangのファイルをダウンロードするコマンド
wget https://storage.googleapis.com/golang/go1.5.3.linux-amd64.tar.gz

※後述する原始的なデプロイ方法を取ったのでこれはおそらく必要なかった。

参考
How to install Go language on Linux

資産のデプロイ

原始的(で非効率)なやり方

  • とりあえずVPSでアプリを動かすことを優先している
  • 開発機であるMacのローカルでLinux用にビルドしてscpで転送するというもの。

GOOS=linux GOARCH=386 CGO_ENABLED=0 go build -o app.linux github.com/seihmd/app
sudo scp -rp ./app [email protected]:/path

  • golangのドキュメント通り .linux というファイル名にしたがlinuxでは拡張子は合ってないようなものなのでなんでもいいかもしれない。
  • 普通はgithubの資産をフェッチしてvpsサーバーでビルドして、という手順?そこらへんはよくわからない。
  • ただ、その手順だとwebpackでjsファイルを一つにしているフロントエンドの資産をビルドするためにさらにNode.jsやらなにやら入れないといけないのでやめた。
  • 手元のMacでもLinux用のバイナリをビルドできるGoの手軽さに甘えることにした。

資産のデプロイ先ディレクトリ

  • とりあえず/home/username/以下に作ったディレクトリにデプロイした。
  • CentOSでよく使われるのは/var/www/っぽい?

Google analytics

目ぼしい項目を設定したら後はDot metrixで確認するようにした

ドメイン設定

  1. お名前.comとかでドメインを取得

  2. ConoHaのダッシュボードからDNSの設定をする

  3. ここまででDNSの設定値は次のようになった

タイプ 名称
A(通常) @ xxx.xxx.xxx.xx
NS @ ns-a1.conoha.io
NS @ ns-a2.conoha.io
NS @ ns-a3.conoha.io

nginxの設定

初期設定

まずは最低限と謳われる設定をしておく。mydomain.confの記述は変更する必要がある。

CentOS 6.5でnginxを動かす為の最低限の設定

webアプリをホストする設定

WebアプリはGoのフレームワーク Martini を使用しているので、mydomain.confを合わせる必要がある。

How To Use Martini to Serve Go Applications Behind an Nginx Server on Ubuntu

mydomain.conf
server {
  listen  80;
  server_name  mydomainname;
  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_pass http://127.0.0.1:3000;  
}

何もフレームワークを使わないなら次の記事が参考になりそう。

Nginx + Golang でWebアプリケーション開発を試してみた

nginxをrestartすれば(かつドメインが通っていれば)、ドメイン名のURLでWebサービスが表示されるようになる。

セキュリティ・パフォーマンスのための設定

nginx.conf
http{:
  gzip  on;
  gzip_types  application/x-javascript application/json;
  gzip_vary   on;
  gzip_proxied  any;

  server_tokens  off;
  • gzip_typesで"application/x-javascript"としたのはchromeのデベロッパツールでContent-Typeをみるとそうなっていたから。

  • gzip_staticの設定はやりたいけどなぜかbundle.jsが404エラーになるのでまだできていない

Favicon

作成

keynoteとFavicon Generatorで作成した

かなり縮小して表示されるので、複雑な図形でないことや輪郭(色の明暗?)がはっきりしていたほうがいい

表示設定

  • index.htmlのheadにlinkを追加
<link href="favicon.ico" type="shortcut icon" sizes="96x96">
  • nginxの設定は特に無し
  • faviconの置き場所 index.htmlと同じディレクトリ

approot --- app.linux
     └ public --- index.html, favicon.ico

ブラウザからの確認

Faviconを差し替えても古いアイコンが表示されるのはキャッシュされているから。
その場合、/favicon.ico にアクセスし、リロードをかけて新しいファイルを取得させる必要がある。

リリース前の確認

  • 各ブラウザ、モバイル表示の確認
  • Webサービス作った系のエントリを読んで復習

完成?

作ったサービスについてはそのうちQiitaにエントリを書く予定。

便利コマンドメモ

  • mongoDBのエラー

mongoコマンドで次のエラーが出たとき
Failed global initialization: BadValue Invalid or no user locale set. Please ensure LANG and/or LC_* environment variables are set correctly.

export LC_ALL=C
  • iptablesをOFFにする

Vagrant使って開発中にブラウザからlocalhost:xxxxが確認できないときは大体これ

/etc/init.d/iptables save
/etc/init.d/iptables stop
  • .bash_profileのリロード
source ~/.bash_profile
  • ストレージ容量の確認
df -h