ドキュメント共有ツール Crowi をAmazonLinuxで構築する

ドキュメント共有ツール Crowi をAmazonLinuxで構築する

Crowiとはオープンソースで、ドキュメントを色々溜め込むことができるツールです。
ずっと、RedmineのWikiを使っていましたが、どうしても好きになれなかったんですよね・・
(マークダウンで書けない、タグサーチができなくて検索不便等々・・・)
おそらくプラグインをいれたら上記は解決できるかと思いますが、そこまでやるのは面倒だということで、他にないか探していたらCrowiを発見しました!

今回は、導入と設定らへんを書いていきたいと思います。

構築準備

  • AmazonLinux
  • Node.js v8.0
  • Mongo v3.4.2
  • Nginx v1.6.2

構築方法

まずはサクッとNode.jsとNginxのインストールをおこないます。

Node.jsのインストール

こちらを参考にしてインストールしてみてください。
http://qiita.com/sinmetal/items/154e81823f386279b33c

Nginxのインストール

$ sudo yum install -y nginx

こちらでサクッとインストール&起動しておきましょう!

MongoDBのインストール

/etc/yum.repos.d/mongodb-org-3.4.repo
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

このファイルを作成しておきます。
作成が完了したら、

$ sudo yum install -y mongodb-org
$ sudo service mongod start

これで、起動が完了です。

各設定

  • Nginxの設定

3001番ポートにプロキシする設定を書きます。

/etc/nginx/vhost.d/crowi.conf
server {
  listen   *:80;
  server_name crowi.hoge.com;

  access_log /opt/nginx/logs/crowi_access.log;
  error_log  /opt/nginx/logs/crowi_error.log;

  location / {
    proxy_pass http://127.0.0.1:3001;
  }
}
  • Mongoの設定
$ mongo
> use crowidb
switched to db crowidb
>  db.createUser({user: "crowi", pwd: "crowi", roles: [{role: "userAdmin", db: "crowidb"}]})
Successfully added user: {
    "user" : "crowi",
    "roles" : [
        {
            "role" : "userAdmin",
            "db" : "crowidb"
        }
    ]
}

Crowiをインストールする

$ git clone --depth 1 https://github.com/crowi/crowi.git
$ cd crowi
$ git checkout v1.6.0
$ sudo npm install

これで、Crowiの設定は完了です。

次に、プロセスを起動しますが、ここはforeverを用いて、プロセスを常に起動できるようにしておきます。
その前に、環境変数の設定をしておきます。

$ export PASSWORD_SEED=なんでもOK
$ export MONGO_URI=mongodb://crowi:パスワード@localhost/crowidb
$ export PORT=3001
$ export NODE_ENV=production
$ npm install forever -g

foreverのインストールが完了したので、プロセスを起動していきます。

$ forever start app.js
$ forever list
ここにプロセスの起動情報が書いてある

これでプロセスの起動が完了したので、設定したドメインにアクセスすればCrowiが表示されると思います。

その他設定

他にもCrowiにはこういった機能があります

  • 画像やファイルをアップロードできるようにする
  • 認証をGoogleアカウント認証に変更できる
  • 全文検索ができるようになる

ここはまたのちほど紹介していきたいと思います。

では、よいドキュメント共有ライフを!

続きを読む

【AWS】OpsWorks スタック

はじめに

タダです。
AWS認定資格の試験勉強のためにCloudFormationの情報をまとめた自分用メモになります。
あくまで個人用のメモになるので、その点はご了承ください。
※違う内容書いているなどありましたらご指摘いただけると幸いです。
※随時アップデートがあれば更新していきます。
※本記事では、OpsWorks スタック中心のまとめになります。

サービス概要

  • OpsWorksはChefを使ったAWSリソース(EC2、ELB、RDSなど)やEC2上のアプリケーションの設定・管理を行うためのサービス
  • Chefサーバーは不要で、OpsWorksスタックは、インスタンスのヘルスチェックをモニタリングし、自動復旧および Auto Scaling を使用して、必要な場合に新しいインスタンスをプロビジョニングする
  • Chefのcookbookレシピを使って、インフラの管理を自動化、アプリケーションの継続的なインストール、構成、管理、デプロイ、スケールが可能なのがChef Automate
    • Chefサーバありきだが、管理はAWS

OpsWorksエージェント

  • OpsWorksスタックで必要

    • OpsWorksの一連のコマンドを取得し、エージェントがChef Clientのローカルモードでレシピを実行

利用メリット

アプリケーションのモデル化とサポート
管理作業を自動化

CloudFormation/Elastic Beastalkとの違い

  • OpsWorksは、DevOps環境を提供することを目的におき、デプロイ、モニタリング、自動スケーリング、自動化の主要なアクティビティに対して統一された設定管理を行う
  • CloudFormationはAWSリソースのプロビジョニングと管理をJSON/YAMLで行うことを目的とする
  • Elastic BeastalkはJava、.NET、PHP、Node.js、Python、Ruby、Go、Docker で開発されたウェブアプリケーションとウェブサービスをデプロイおよびスケーリングする

制限

デフォルトでは、最大40スタックを作成できる
最大40のレイヤー、最大40のインスタンス、最大40のアプリケーションを保持できる
 

専門用語

  • スタック

    • OpsWorksの管理対象をまとめたコンポーネントで、属する全員インスタンスの構成を管理する
  • レイヤー
    • 1つ以上の Layer を追加することにより、スタックのコンポーネントを定義する
    • レイヤーは、アプリケーションへのサービス提供やデータベースサーバーのホストのような特定の目的を果たす一連のEC2インスタンスを表す
  • インスタンス
    • インスタンスのスケーリングタイプは3つある

      • 24/7インスタンス(常時稼働)
      • load-basedインスタンス
        • 負荷に対してサーバを起動することができる
        • メトリックスの閾値は次のものを定義し、インスタンスの増減をコントールできる
          • [Average CPU] – Layer の平均 CPU 使用率 (合計に対する割合)
          • [Average memory] – Layer の平均メモリ使用率 (合計に対する割合)
          • [Average load] – Layer の平均負荷
      • time-basedインスタンス
        • 時間ベースのスケーリングにより指定したスケジュールでインスタンスを起動、停止できる
        • 特定の時間または特定の曜日にレイヤーによりオンラインにされるインスタンス数を制御できる
  • App
    • アプリケーショサーバにデプロイするアプリケーション
  • レシピ
    • Chefレシピを実行して、アプリケーションの設定、アプリケーションのデプロイ、スクリプトの実行などを行う

スタックコマンド

スタック全体の構成を変更・管理するためのコマンドで以下のようなものがある
実行方法はAWSマネジメントコンソールやCLI、SDKなど

  • Update Custom Cookbook

    • リポジトリにある更新されたCookbookをそれぞれのインスタンスに展開する
  • Execute Recipes
    • 指定したレシピを指定したインスタンス上で実行する
  • Setup
    • Setupのレシピを実行する
  • Configure
    • Configureのレシピを実行する
  • Upgrade Operationg System
    • (Linuxのみ)Amazon Linuxを最新バージョンにアップグレードする

ライフサイクル

OpsWorksのインスタンスで自動的に行う処理をさす

  • Setup : 新しいインスタンスが正常にブートした後に発生する

    • ex: ロードバランサーをインストール、アプリケーションサーバをインストール、データベースをインストール
  • Configure : インスタンスがオンライン状態に移行したときとオンライン状態から移行した時にスタックのすべてのインスタンスで発生する
    • ex: アプリケーションサーバのIPをアップデート、DB接続先をアップデートして再起動、アプリケーションサーバのIPのACLをアップデート
  • Deploy : ユーザーがアプリケーションをデプロイする時に発生する
    • ex:アプリケーションコードをアップデートして再起動
  • Undeploy : アプリケーションを削除する時に発生する
    • ex:アプリケーションを削除して再起動
  • Shutdown : インスタンスの終了
    • コネクションをDrainする、ログを保存、スナップショットの保存

Opsworksと他サービスとの連携

モニタリング

スタックは次の方法で監視可能

  • CloudWatchによるスタックのインスタンスごとに詳細モニタリング
  • CloudTrailによるAPI監視
  • CloudWatch Logsでスタックのシステム・アプリケーション・カスタムログを監視する

セキュリティおよびアクセス許可

  • VPC内に展開可能
  • AWSリソースにアクセスするためのACLやインスタンスへの接続管理はIAM(ユーザー、許可、ロール)で行う

参考

更新日時

  • 2017/05/01 初回投稿

続きを読む

AWS上でMongoDBを動かす

MongoDBに関する基本的な内容をまとめてみたものです。MongoDBに関する、Web上にすでにある良識な解説コンテンツをまとめたまとめサイトの抜粋です。
AWS上でMongoDBを動かす

AWSであれば、MongoDB環境を容易に構築できる

AWS MarketPlaceには、MongoDB環境を構築するために必要なミドルウェアがプリインストールされたOSイメージが多数あります。
※MongoDBの開発元である 10gen (現MongoDB Inc.)もMongoDB入りイメージを無償提供中

基本的に、それらのイメージをもとにAWSのインスタンスを立ち上げればMongoDB環境ができあがります。英文ですが、下記に具体的な構築手順があります。
http://www.mongodb.org/display/DOCS/AWS+Marketplace

AWSの複数ゾーンとレプリカを組み合わせればDRも容易

MongoDBは、マスタ/スレープ方式のレプリケーションに対応しています。

世界中のデータセンターから選択できる、AWSのさまざまなリージョンやアベイラビリティゾーンを複数選択してMongoDBのレプリカ機能を使用すれば、DR (Disaster Recovery)対応も可能です。

AWSは12のリージョンに、合計で33のアベイラビリティゾーンで運用されています (2016年5月現在)
https://aws.amazon.com/jp/about-aws/global-infrastructure/
AWSのリージョンは、最低でも2つのAZ(アベイラビリティゾーン)をもっていて、それぞれのAZはお互いに地理的・電源的・ネットワーク的に分離されつつも、AZ間は高速専用線で接続されています。

一方のゾーンにMongoDBおよびMongoDBのArbiterインスタンスを立ち上げ、もう一方のゾーンにMongoDBインスタンスを立ち上げれば、片方のゾーンで地震等の災害があっても、データが残り、そのままMongoDBは機能し続けます。

シャードとレプリカを組み合わせたMongoDBクラスタ構成

MongoDBでは、基本的に、シャードを増やすことにより水平スケールさせ、レプリカにより可用性を実現します。各シャードをレプリカセットにすることにより、高い可用性を実現しながら、水平スケールさせた大規模なデータベースを構成することができます。

開発段階では、1 つのレプリカセットから始めることもできますし、本稼働中に 3 つのレプリカセットに移行することもできます。下記URLに、AWS上でMongoDB環境を構築するアーキテクチャ例が示されています。
http://docs.aws.amazon.com/ja_jp/quickstart/latest/mongodb/architecture.html
・図1: レプリケーション係数 3 の MongoDB リファレンスデプロイ
・図2: 3つのレプリカセット2方向シャーディングを使用するAWSのMongoDBクラスター

MongoDBをAWS上で動くようにするまでの手順

AWSにて、MongoDBを動くようにするまでの手順は、概略、下記の通り:

・EC2インスタンスおよびEBSボリュームを用意

・Amazon VPC をセットアップ

*Amazon VPC 内のプライベートサブネットとパブリックサブネット、NAT インスタンス、
セキュリティ グループ、IAM ロールなど、MongoDB のデプロイ中に必要な様々な
ネットワークリソースを作成

・Amazon EBS をセットアップして MongoDB を保存。

・MongoDB 設定をカスタマイズするオプションを指定した後、MongoDBを起動。

MongoDB のバージョン番号 (2.6 または 3.0)、レプリカセットの数 (1 または 3)、シャード数
(0、1、2、または 3)、インスタンスあたりのマイクロシャード数を選択することができます。

※より詳細は、下記を参照ください。
[AWS上の MongoDB] http://docs.aws.amazon.com/ja_jp/quickstart/latest/mongodb/deployment.html

続きを読む

MongoDBのアーキテクチャ

MongoDBに関する基本的な内容をまとめてみたものです。MongoDBに関する、Web上にすでにある良識な解説コンテンツをまとめたまとめサイトの抜粋です。
MongoDBのアーキテクチャ

MongoDBにおけるクラスタ構成

MongoDBでは、レプリケーション機能・シャーディング機能を提供しており、両者を組み合わせることにより分散コンピューティング環境にて、負荷分散された冗長構成のクラスタを構築することができます。
(アプリケーション側からは、クラスタ全体をひとつの論理DBとみなすことができます)

・レプリケーション構成においては、一般的な条件下では障害からの自動フェイルオーバー
・シャーディング構成においては、自動バランシング機能を備え、データをそれぞれのノードにできるだけ均等に配分するとともに、動的にノードの追加や削除にも対応

クラスタ構成要素
– primaryサーバ レプリケーションのマスタ。データのマスタを保持
– secondaryサーバ レプリケーションのテレーブ。プライマリ上のデータのコピーを保持
– arbiterサーバ 自動的にフェイルオーバーする際に新しいプライマリノードを選択・指示
– configサーバ シャーディングの構成情報や分散状況を保持
– mongosサーバ シャーディング構成にて、データリクエストに対するルーティングを実施

2方向シャーディングと3レプリカセットのクラスター

MongoDBで、レプリケーション・シャーディング機能を利用して、可用性と水平スケールを実現する構成を実現する場合、最小構成で2方向シャーディングと3つのレプリカセットの構成となります。

MongoDBでは、ひとつのレプリカセットから始めて、本稼働中に3つのレプリカセットに移行することも可能です。

複数のレプリカ構成の場合には、書き込みオペレーションはプライマリノードで行われ、セカンダリノードに非同期にレプリケートされます (読み取りオペレーションでセカンダリノードを選択する場合には、古いノードに注意する必要があります)

MongoDBでは各シャードをレプリカセットにすることができます。2方向シャーディングと3つのレプリカセットの構成の場合には、ひとつのシャードが3つのレプリカセットにレプリケートされます。
AWSを利用する場合には、それぞれのレプリカは別々のアベイラビリティーゾーンに格納されますので、データセンター単位での障害があった場合でも、別のアベイラビリティゾーンにあるレプリカに自動フェールオーバーされてMongoDBは機能し続けることができます。

※参考: MongoDB on AWS >> アーキテクチャ
http://docs.aws.amazon.com/ja_jp/quickstart/latest/mongodb/architecture.html

続きを読む