GrowiはWikiサービスの中でもカッコ良くてとても使いやすいです。
少し前まで「Growi Cloud」というサービスを使っていたのですが、お金がかかるので解約してしまっていました。
他の無料サービスを使っていたのですが、やっぱりGrowiがいい!となったので、なんとか無料でクラウド上で動かせないかと考え始めました。
そこで、GCPだと永久無料でVMインスタンス立ち上げられることを知ったので、GrowiをGCPに構築してみました。
Growiとは
百聞は一見にしかず!
公式ページにデモサイトがあるので、色々操作してみるとイメージつきやすいかと思います。
https://growi.org/ja/
あー、かっこいい
GCPの永久無料のVMインスタンスとは
公式ページにありました。
https://cloud.google.com/free?hl=ja
Always Free プロダクトというもので、指定の使用量上限まで無料で使えるようです。
有効期限はなし!ただし変更される恐れあり...
条件は次の4つです。
- f1-micro インスタンス(1 か月あたり、北バージニア [us-east4] を除く米国リージョンのみ)
- 30 GB 月の HDD
- 5 GB 月のスナップショット(一部のリージョン)
- 1 GB の北米から全リージョン宛ての下り(外向き)ネットワーク(1 か月あたり、中国とオーストラリアを除く)
ストレージが30GBもあるのはいいですね。
用途にもよりますが、メモ程度で大きなファイルは置かないので今回は十分だと思います。
気になったのが、f1-micro インスタンス
です。
お、メモリ0.6GBしかない...
ここがネックになりました。
最終的に、ElasticSearchによる全文検索機能は諦めました。
まあ、無料でできるだけありがたい。
前置き
先に言っておきます、今回セキュリティのことは一切考えていません。
まあ、個人利用だしいいかなあ、一応Growiのユーザ認証機能あるし...というスタンスです。
ただし、SSH総当たり攻撃されると、ネットワーク外向きの通信が発生してしまい課金対象となってしまうので、そこだけ対策しておきたいです。
どんな構成にするか
GCPのVMインスタンスに、GrowiとMongo DBの2つを立ち上げる構成にします。
通常のGrowiは3つの構成になっています。
- Growi
- Mongo DB
- Elastic Search
ただし、今回メモリが少ないためElastic Searchは見送ります。
どうやってアクセスできるようにするか
まずは、HTTP(80)でアクセスできるようにします。[グローバルIP]:80
をブラウザ で叩くとアクセスできるような感じです。
どうやって構築していくか
Growiの公式ページにdocker-compose
での構築手順が載っていたので、コンテナで構築します。
公式ページの手順以外でやるべきことは
- GCPでVMインスタンス用意しておく
- dockerとdocker-composeインストールしておく
- 公式で用意されているdocker-compose.ymlを修正
- ElasticSearchを削除
- ポートを外部から80でアクセスできるように修正
こんなところかな。
構築手順
それでは、構築していきます。
GCPのVMインスタンスを作成する
事前にGCPのアカウントを作成しておきましょう!
画面ぽちぽちとしていけば、VMインスタンスが作成されます。
GCPにログインしたら、左欄からCompute Engine
->VMインスタンス
を選択します。
そしたら下のような画面になるので、インスタンスの作成
をクリックします。
インスタンス作成は次のように入力します。
- マシンの構成
- シリーズをN1
- マシンタイプをf1-micro
- ブートディスク
- CentOS7
- HDDを30GB
- ファイアウォール
- HTTP, HTTPSのトラフィックを許可
あとは任意に設定すればOKです。
VMインスタンスへSSH接続する
VMインスタンスの一覧から、SSHボタンをクリックすればSSHできます。
dockerとdocker-composeをインストールする
こちらの記事を参照ください。
Growi + MongoDBをインストールする
docker-compose | Growi Docs を参考に手順を進めます。
growi-docker-composeをダウンロードします。
git clone https://github.com/weseek/growi-docker-compose.git growi
docker-compose.yml
を編集していきます。
cd growi
vi docker-compose.yml
- ポート変更
変更前
services:
app:
ports:
- 127.0.0.1:3000:3000
変更後
services:
app:
ports:
- 80:3000
- Elastic Search削除
- elasticsearch:elasticsearch
- elasticsearch
- ELASTICSEARCH_URI=http://elasticsearch:9200/growi
-wait tcp://elasticsearch:9200
- elasticsearch:
- build:
- context: ./elasticsearch
- dockerfile: ./Dockerfile
- environment:
- - bootstrap.memory_lock=true
- - "ES_JAVA_OPTS=-Xms256m -Xmx256m" # increase amount if you have enough memory
- ulimits:
- memlock:
- soft: -1
- hard: -1
- restart: unless-stopped
- volumes:
- - es_data:/usr/share/elasticsearch/data ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
修正終わったら、ビルドして立ち上げます。
docker-compose build
docker-compose up
起動しているか確認します。
docker ps
無事起動していたら、構築は完了です。
Growiにアクセスしてみる
ブラウザ から[グローバルIP]:80で接続してみます。
グローバルIPはGCPのVMインスタンス一覧から確認できます。
こんな感じの画面が出てきたら、成功です。
さいごに
今回、GrowiをGCPに構築してみました。
無料でできると色々と試してみたくなりますよね。制限があると、なおさら試行錯誤して構築したくなります。
なお、この手順にはまだまだ課題もあるので、今後改善していこうと思います。