Growiを無料でクラウドで動かす環境を作った

5月 17, 2021

GrowiはWikiサービスの中でもカッコ良くてとても使いやすいです。

少し前まで「Growi Cloud」というサービスを使っていたのですが、お金がかかるので解約してしまっていました。

他の無料サービスを使っていたのですが、やっぱりGrowiがいい!となったので、なんとか無料でクラウド上で動かせないかと考え始めました。

そこで、GCPだと永久無料でVMインスタンス立ち上げられることを知ったので、模索してみました。

Growiとは

百聞は一見にしかず!
公式ページにデモサイトがあるので、色々操作してみるとイメージつきやすいかと思います。
https://growi.org/ja/

Growiデモサイト

あー、かっこいい

GCPの永久無料のVMインスタンスとは

公式ページにありました。
https://cloud.google.com/free?hl=ja

GCP永久無料のVMインスタンス

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をブラウザ で叩くとアクセスできるような感じです。

余裕があれば、Let’s Encrypt+HTTPSにしたい…

どうやって構築していくか

Growiの公式ページにdocker-composeでの構築手順が載っていたので、コンテナで構築します。

docker-compose | Growi Docs

公式ページの手順以外でやるべきことは

  • 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できます。

インスタンスへ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インスタンス一覧から確認できます。

sign up

こんな感じの画面が出てきたら、成功です。