LoginSignup
3
6

More than 1 year has passed since last update.

最強のWiki「GROWI」を Terraform を使って超絶簡易的に EC2 にデプロイして個人利用する【GROWI】【AWS】

Last updated at Posted at 2021-07-13

[2021/07/17 18:00] 今日か明日Dockerfile, Terraform fileを修正しますのでそれまで動かないです。

[2021/07/17 22:26] Dockerfile, Terraform fileを更新しました。

  • Dockerfile
    • growi:4.3 がubuntuベースのイメージになったためapt-getに変更
  • Terraform file
    • terraform ブロック内で変数を使用していたため定数値に変更

この記事の目的

GROWI をインターネット上で使いたい人が使えるようにすることのみです。
技術的な解説などは全て省きたいと思います。手順と手順の目的と概要のみを記します。
ただ、超簡易的な方法になるので念のため自己責任でお願いします。

注意事項

  • 本当に簡易的です。
  • Elastic Searchは使いません。
  • httpsでの接続はしません。
  • アクセス数によっては費用が発生する可能性があります。
  • この記事はクオリティ的には未完成ですのでフィードバックをいただけると嬉しいです。すぐに改善します。

前提知識

手順通りやればできるようになっています。基本的な知識があればできます。ググれば誰でもできます。

デプロイに必要なもの

  • AWS アカウント
  • Docker がインストールされているPC

今回のデプロイの方針

今回は、とにかく個人利用でセキュリティも何もいらなく、とにかく GROWI が使えればいいと言う方針でやっていきます。

さらに、ほぼ無料で使いたいと言う欲望から、Elastic Searchは使わないことにします。これがあるだけでハイスペックinstanceが必要になり、月々数千円と言うお金がかかってしまうからです。他にも様々な問題が出るかもしれませんが、それは今後改善していきましょう。

GROWI

一言で言うと、「最強のWiki OSS」です。
強力なマークダウンと、URLベースのページ作成、Elastic Search による全文検索(今回は使わない)、Slack 統合などなど ...

Terraform

Infrastructure as Code を可能にするツールです。便利なので使っていきます。
コマンド一つでインフラを構築し、コマンド一つでインフラを削除できる、僕が好きなツールです。

EC2

AWS で最も有名なサービスの一つ。無料枠を使えばお金がほぼかからないので、GROWI の個人利用にはこれを使っていきたいと思っています。

S3, DynamoDB

Terraform のバージョン管理に使います。

aws-vault

aws-vaultの使いかた

AWS構成

VPC {
  Public Subnet + IGW {
    EC2 { ssh, httpを通す
      Docker { GROWI, MongoDB ... }
    }
  }
}

最もシンプルな方法の一つでいきます。

デプロイ手順

バージョンを固定してデプロイするので、ほぼ100%再現できるはずです。

AWSアカウントを作成し、結構権限多めの IAMユーザー を用意する

ここは調べてください。最悪ルートユーザーでもいいです。IAM の権限を絞る作業は超憂鬱なので。
個人の趣味での利用なら AdministratorAccess で構いません。

作ったIAMのAccess Keyを発行し、aws-vaultに登録する

aws-vaultの使いかた に沿ってやればできるはずです。

Terraform 用の S3 Bucket を作る

S3のダッシュボードに行って、
Create Bucket を押して、
好きな名前入力して、
Block All Public Access にチェックが入ってることを確認して、
Bucket Versioning を Enable にして、
Create。

Terraform の State を管理するファイルの保存場所になります。

DynamoDBで terraform state lock 用のテーブルを作成する

DynamoDB のダッシュボードに行って、
Create Table を押して、
Table name を適当に入力して、
Primary Key を "LockID" にして(好きな名前でいいが、結構これが使われてる気がする)、
Create。

先ほどの State のバージョンを一意に固定するためのものです。(2つ以上存在したらどっちが本物かわからなくなる)

Git clone

今回作ったTerraformの環境をクローンします。

$ mkdir 好きな名前
$ cd 好きな名前
$ git clone https://github.com/hakumizuki/grw-easy-infra.git
$ ls
 > ちゃんとできているか確認。 grw-easy-infra と表示されるはず

ファイルを編集

grw-easy-infra の中にある、change.tf の指示通りに編集してください。

Terraform の初期化

grw-easy-infraに移動して、初期化。
aws-vault の行は、aws-vaultの使いかた をもう一度見てください。

$ cd grw-easy-infra
$ aws-vault exec iamのusername --duration=12h
$ docker-compose -f infra/docker-compose.yml run --rm terraform init

※ここからお金が発生する可能性がある作業です(少額のはず)※

EC2インスタンスを起動する

$ docker-compose -f infra/docker-compose.yml run --rm terraform apply
 > yes と入力し、Enter

ちょっとまってからGROWIに接続

ec2 instanceは今回 t2.microを使っているので dockerなどのインストールや、docker-compose up時のimageの取得に多少時間がかかるので3分ほど待ちます。コーラを飲んで、ラムネを食べましょう。プリンは 治一郎のプリン がお勧めです。

接続して使ってみよう

terraform apply コマンドの出力結果に "growi_url" というものがあるはずなので、それをそのままコピペして接続してみましょう。(http://XXX.XXX.XXX.XXX:3000)
Install 画面が表示されたら成功です。
※ SSL化されていないので普段使っているパスワードやemailなどは念のため入力しない方がいいです。
Screenshot 2021-07-18 at 0.21.24.png

GROWI の使い方はこちらを参考に

GROWI Docs

今回作った物を全て抹消する方法

目的によって作業の開始箇所を変えてください。

もうGROWIを使わない場合はここから

aws のコンソールにログインして 今回作った IAM, S3 Bucket, DynamoDB Tableを全て削除します。ただし、もう一度やりたくなった場合は再度作ってください。

(7/16 9:35追記)
IAMは消さないでください!次のステップができなくなります!

Terraformのコマンドでエラーが出ていて一旦やり直したい場合はここから

grw-easy-infra に移動し、

$ docker-compose -f infra/docker-compose.yml run --rm terraform destroy
 > yes と入力し、Enter

これでEC2 インスタンス, VPC, Subnet, Elastic IP が削除されます。
もう一度立ち上げたい場合はdestroyの部分をapplyにすればOKです。

どんな質問でも受け付けています

コメントで質問していただければお答えします。
誤字などの指摘もとてもありがたいです。

余談(超初学者の方へ)

今回、Docker, TerraformなどのツールやAWSを使ってきました。もしかしたら読者の方の中には、これらの知識がまだそんなにないような方もいるかもしれません。もし興味を持っていただけたら幸いです。ですが、DockerやTerraformなどのツールだけを勉強することはお勧めしません。TCP/IPとはなにか?サブネットはなんのためにあるのか?ルーターとは?など、基礎がわかっていると、そういったツールの勉強の効率は跳ね上がります。もし行き詰まった時はネットワークの本などを読んでみてください。(初学者からのアドバイスです)

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6