勉強を兼ねてSEOで使える単語数カウンターを作りました
新しい技術を学びたかったのでGolangで文章中に出現する単語の数をチェックするツールを作りました。
チェック対象はURLからとテキストの貼り付けに対応しています。
SEOの調整などにお役立てください。
この記事を公開後にこのページの単語数をチェックしてみました
結果はこのようになりました。
無料がダントツで多かったです……
cloudが2位でgoogleが4位なのはおそらくGoogle Cloud Platformというワードがまだ辞書にないのでそのあたりの誤差かと思います。
3位のITはこのブログのカテゴリです。
そんなにカテゴリ名が含まれているのですね。
これは自分でも意外でした。
さすがに無料が一番になるよりはGCEかGCPが一番になるように後日調整していきたいと思います。
最初はXSERVERでリリースを考えました。
XSERVERでGolangを動かしたという先人の方がいましたので、最初は同じ方法で進もうかと思いました。
ソースもHello World!を出力するような単純なものでしたので、検証にはちょうどいいかと思い、XSERVERにしました。
動いた実績のあるソースをそのままXSERVERに転送して動かしたのですが、どうにもこれが動かない。
そしてログを見るもデバッグするにはなんの足しにもならないエラーしか出ないのです。
[Tue Jun 18 06:31:17.014101 2019] [fcgid:warn] [pid 91890:tid 140309501519616] (104)Connection reset by peer: [client 101.22.33.11:43822] mod_fcgid: error reading data from FastCGI server [Tue Jun 18 06:31:17.014136 2019] [core:error] [pid 91890:tid 140309501519616] [client 101.22.33.11:43822] End of script output before headers: test.fcgi
せめてWEBサーバのログレベルを変えてデバッグしたいと思いXSERVERのサポートにも連絡しましたが、個別の調整は受け付けていないとの事でした。
自前でもログ出力を追加しましたが、そもそも書き込みでエラーになってるのか、はたまたそれ以前にエラーになってるのかすら把握できない状態でした。
GCPのGCEでサーバを立てて無料枠で運用する
AWSも候補に上がったのですが、無料枠を超えて課金されてしまった人の体験談をあちこちで見かけちょっと個人で勉強のために運用するのは怖い印象がありましたので、Google Cloud Platform(GCP)の無料枠で運用することにしました。
正確にはGCPのCompute Engine(GCE)でサーバを立てて運用することにしました。
XSERVERで運用するより、かえって勉強になって良かったかもしれません。
GCPは1年間無料の他に$300分のクレジットももらえますので無料枠を超えて最悪課金が発生したとしても安心です。
そして1年の無料期間が過ぎてもAlways Freeの対象となるように運用すれば無料枠が継続されるのも魅力です。
無料で運用するには他の方のサイトに詳しく紹介されていますので、そちらに譲るとして肝だけメモしておきます。
GCEの無料枠内でのインスタンスの作成方法
- リージョンはus-を選ぶ
※ 北バージニア [us-east4] を除く
※ us-以外は無料の対象外です。 -
マシンタイプはf1-microを選ぶ
- ブートディスクは標準永続ディスクを選ぶ
** ブートディスクの容量は30GBまでが無料なので10GBから30GBに変更する
以上の設定で無料枠内でのVMインスタンスが作成されます。
右上に月間予測として$5ほどのかかると表示されて心配になったのですが、こちらは先の条件でインスタンスを作成していれば$0で済むらしいです。
こちらは実際に1ヶ月後に無料枠で収まったかどうか追ってご報告します。
忘れてはならないSSHのポート変更
中国、オーストラリアとの通信は課金対象となるのですが、中国からのSSH総当たり攻撃にも課金されてしまいます。
実際一月で一円にも満たないか金額らしいのですが、気持ち悪いので変更しておきます。
ファイアウォールも忘れずに変更してください。
僕はOSをCentos7にしたのですが、firewalldとSELinuxは無効にしました。
GCEのファイアウォールで一元管理した方が楽だからです。
WEBサーバへの中国、オーストラリアからのアクセスはどうする?
上でSSHのことを書きながら、ふとWEBサーバにも中国、オーストラリアからの不正アクセスあるよなぁと思い、
こちらのページを参考にGoogle Cloud SDKを使用し、最新のリストからGCEのファイアウォールに一括で登録するスクリプトを作成しました。
こちらのものを使用しても良かったのですが、2018年10月時点と少々古かったのとGolangの勉強がてら自分で作りました。
リストはこちらのものを使用させていただきました。
一つのルールには250個のIPアドレスレンジを指定しています。
※こちらのIPアドレスを指定できる最大値は255個までであるとか256個まであるとか複数ありましたので、実際にいくつまでか検証してみました。
IPアドレスを500個にしてルールを作成しようとしたところ、下記のエラーが返されました。
ERROR: (gcloud.compute.firewall-rules.create) Could not fetch resource: - Value for field 'resource.sourceRanges' is too large: maximum size 256 element(s); actual size 500.
どうやらIPアドレスは256個まで指定できそうです。
先のスクリプトでは切りの良いところで250個としてルールを作成しています。
ルールは全部で40個、IPアドレスレンジは中国、オーストラリアでそれぞれおよそ5,000個、計10,000ものIPアドレスレンジからの通信が拒否されるようになります。
使い方はこちらからファイルをダウンロード後、解凍してください。
その後シェルにそのファイルを渡してください。
bash fwrule.sh
Google Cloud SDKを使用しますので、そちらの設定は済ませたあとに行ってください。
このようにルールが作成されます。
ルールの中にはこのようにIPが250個設定されています。
スクリプトで作ると楽ですね。
これで気持ちよく使えそうです。
ちょくちょくログや課金状態をチェックして運用していきたいと思います。
GCPのGCEを運用する上で地味にハマった点
無料枠で運用するためにf1-microを選びましたのでマシンスペックの低さとかははじめから気にしていなかったのですが、ハマった点がデフォルトの状態ではswap領域がなく、ライブラリのコンパイルでエラーになってしまいました。
swap領域が少ないとかではなくまったく無い状態がデフォルトです。
どうしても必要なライブラリでしたので、swap領域を確保することにより事なきを得ました。
sudo dd if=/dev/zero of=/swapfile1 bs=1M count=2048 sudo chmod 600 /swapfile1 sudo mkswap /swapfile1 sudo swapon /swapfile1
このswap領域は今後どうしていくか監視しながら調整していきたいと思います。
コメント