//ルートにアクセスされたら/archiveにリダイレクトする

エイリーの備忘録

開発や音楽について書いていこうと思っています。

meteorのプロジェクトをpassengerで1回目のデプロイをする

今回はmeteorのプロジェクトの1位回目のデプロイ方法を書かせていただきます。
日本語の記事って少なすぎて泣けてきますよね・・・
エンジニアなら英語の記事ぐらい読めろって言われますが、まだ苦手です・・・

この記事は、
Deploying a Meteor app on Debian 8 (with APT) on a Linux/Unix production server with Passenger open source in Standalone mode - Passenger + Meteor deployment tutorial - Passenger Library
上記サイトを参考にして筆者が実際に構築をし、必要と思われるものを書き出しています。

passengerのインストー

まだpassenger(webサーバー)をインストールしていなければ、下記の記事を参考にpassengerをインストールしてください。
youmjww.hatenablog.jp

前提環境

ディストリービュージョン:ubuntuまたはdebian
サーバー:passenger
sudo権限が使える
Meteorのバージョンが1.4以上

デプロイ前の準備

meteorをビルドしてサーバーに送信する

まず、ローカル環境でmeteorのパッケージをビルドします。

#ローカル環境
#ビルド
$meteor build --server-only ../new_package && mv ../new_package/*.tar.gz package.tar.gz

#ファイルをアップロード
$scp package.tar.gz adminuser@yourserver:~/

appユーザの作成

ここからは特に指示がない限りサーバー上で作業を行ってください。

#ローカル
#サーバーに接続
$ssh adminuser@yourserver

私、セキュリティの事はよくわからないのですが専用のユーザを作って操作してるのが安全らしいですね。よくわからんけど・・・

#appユーザーの作成
$sudo adduser myappuser

meteorのパッケージを抽出する

$sudo mkdir -p /var/www/myapp

$cd /var/www/myapp
$tar xzf ~/package.tar.gz
$chown -R myappuser: .

アプリ環境を用意する

MongoDBのインストー

#aptのリポジトリを追加
$sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6

$echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

#リポジトリを追加したのでパッケージリストに更新をかける
$sudo apt update

$sudo apt install -y mongodb-org

依存関係のインストー

#myappuserに切り替え
$su myappuser

#依存関係のインストール
$cd /var/www/myapp/bundle/programs/server
$npm install --production

passengerの設定

サーバーの設定を行います。

$cd /var/www/myapp/bundle
$vim Passengerfile.json

Passengerfile.jsonに下記の内容を入力してください。

{
  // Tell Passenger that this is a Meteor app.
  "app_type": "node",
  "startup_file": "main.js",
  "envvars": {
    // Tell your app where MongoDB is
    "MONGO_URL": "mongodb://localhost:27017/myappdb",
    // Tell your app what its root URL is
    "ROOT_URL": "http://yourserver.com",
  },
  // Store log and PID file in parent directory
  "log_file": "../passenger.log",
  "pid_file": "../passenger.pid"
  // Run the app in a production environment. The default value is "development".
  "environment": "production",
  // Run Passenger on port 80, the standard HTTP port.
  "port": 80,
  // Tell Passenger to daemonize into the background.
  "daemonize": true,
  // Tell Passenger to run the app as the given user. Only has effect
  // if Passenger was started with root privileges.
  "user": "myappuser"
}

ROOT_URLはページのルートURLを指定してください。

passengerを起動する

#今はadminuserからmyappuserにスイッチしている状態のはずなのでadminuserに戻る
$exit

#passengerのスタート
$cd /var/www/myapp/bundle
$sudo passenger start

サーバがちゃんと動いているかテストする

#ローカル環境
$curl http://yourserver.com/
#これでちゃんと立っていたらHTMLファイルが帰ってくるはずです。

あとがき

これでpassengerの初期設定などは完了しました。
ただ、私も英語が得意なわけではないので解説などはざっくりしています。
ああ・・・英語できるようになりたい・・・