[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構成
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などは念のため入力しない方がいいです。
GROWI の使い方はこちらを参考に
今回作った物を全て抹消する方法
目的によって作業の開始箇所を変えてください。
もう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とはなにか?サブネットはなんのためにあるのか?ルーターとは?など、基礎がわかっていると、そういったツールの勉強の効率は跳ね上がります。もし行き詰まった時はネットワークの本などを読んでみてください。(初学者からのアドバイスです)