2017年8月15日火曜日

じょしどきと鈴蘭とアサマなど

公私共に変化がありましてなかなかブログを書くまとまった時間を作れませんでしたが、気付いたら3ヶ月以上空いてしまいました。
良くないねーホントこういうの。悪い癖だなー。

今更だけどまとめてドン。






GWに女子のためのしどきイベント『じょしどき(©kwskくん)』を開催しました。
当日集まった50人ほどのうち半数が女子という、当初目論んだ通りのイベントとなり大盛況のまま終わりました。



朝早くからたくさん集まりました

バイク経験はあるけどオフ未経験の女子たちと走ったり

慣れてきたら自由に走ったり

ご家族で参加してくれたり

バイク完全未経験の女子も参加したり

発進からゆっくりレクチャーしてみたり

それはそれは盛り上がりました



おかげさまで怪我人もなく大好評のうちに終えることができました。
秋のうちにまたやりたいなーと話しています。
9月16、17日にしどきに行くつもりですが連休なので貸し切りは難しいかなぁ。
とにかくこの2日間はしどきにいるので興味ある方はゼヒ僕まで連絡下さい。









で、じょしどきの翌週末に今シーズン初のJNCC参戦でした。
しかも鈴蘭。今まで誰からも楽しいという言葉を聞いたことのないコース。
なんでエントリーしたのか思い出せません。
しかもじょしどき後に風邪を引いてしまい絶不調のまま会場入り。



閉鎖された感ムンムンの鈴蘭ゲート

前日までの雨でベスコン……orz



なかしさん、野口さん、粟屋さん、げんさん、なごやんさん、U★S★Aたちとパドックを共にしましたが、アル中のU★S★Aと飲んでる間に体調急降下。
20時過ぎに声が出なくなって鉄人山本さんのテントを一人離脱。



得地さんも同じ風邪でダウンしてました



翌朝は KIDS & TRY の時間中に軽く下見。
会場入り前日まで雨が降った影響で一部ガッツリマディでした。



前転してるライダー多数の沼トラップ

気を抜いてるとズボッとハマるタイプのやつ



全く気乗りしないままレース支度を整えて出走したものの、1周目で激しい体調不良に見舞われてそのままリタイアしてしまいました。
馬場大貴くんのお母さんの純子さんに頂いた OS-1 がとても美味しかったので完全な体調不良でした。本当にお世話になりました……。









その後家庭の事情でほとんどバイクに乗れないまま2ヶ月が過ぎました。
アサマGP300の前週にひっさびさにバイクに乗れることになって千葉県某所で練習しましたが、あまりの暑さに15時頃からしかまともに乗れませんでした。

あまりにもバイクに乗っておらず激烈不安なまま参戦したアサマGP300でしたが、端的に言って最高でした!



軽井沢でBONSAIMOTOの多川さんと合流して現地入り

なんて爽やかなロケーションなんでしょう!

土曜のウッズはマディでしたが最高に気持ちいい!

あんまり楽しくて撮影のてしたさんにVサイン
©てしたさん

今回はアマトリチャーナを作りました

20人近くで12mテントの大所帯でBBQ

この後テキーラおじさんもやってきて1時頃まで宴は続きました

2列目スタートから前を狙います

3周目まで3位で帰還

アサマには俺達が求めていたXCがあった!



6速全開(但し一瞬)にできる高速コーナーから小気味よく続くシングルトレールのウッズまで、とにかく爽快感しかないコースでした。
僕の Beta RR2T 250 ともこれ以上ないくらい仲良くなれました。シンクロ率っつーの?アレがすごく高まってました!



そんな最高 of 最高だったアサマの様子はこちら↓
(鈴蘭はGoProも忘れるくらい意識⤵⤵)
















2003年に岡本商店さんのブログで知ってからいつかは参加したいと思っていたアサマ。
14年の時を経てやっと参加できました。
ちょっと気を抜くとアサマのことばかり思い出してしまうくらい最高でした。

もう10月21、22日のアサマGP9にもエントリー済みです。
アサマ最高!!!


2017年4月30日日曜日

どろんこクラブの作り方(GCEとCloud SQLとCloud StorageでMastodon)

Mastodonインスタンス立ち上げの備忘録として今までこのブログで書いたことが無いIT系のことを書いてみようと思います。



Mastodonとは

Mastodonとは自分でサーバーを作れるTwitterのようなものです。

Mastodonのキャラクター
Twitterの鳥とクジラの両方の役割

サーバーごとにユーザーが管理され、そのサーバーのことをインスタンスと呼びます。
基本的にはインスタンスごとに別々の世界となりますが、別インスタンスのユーザーをフォローしたりフォローされたりできます。
なので分散型とか連合型のミニブログなんて呼ばれたりしています。

ちなみにこっちのMastodonではありません



インフラ環境について

僕も自分でMastodonインスタンス「どろんこクラブ」を立ち上げてみたわけですが、インフラ環境にはここしばらく個人的にいろいろ遊んで面白いと実感していた Google Cloud Platform (GCP)Compute Engine (GCE) と Cloud SQL 、そして Cloud Storage を選びました。

Amazon Web Services (AWS)さくらのクラウド あるいは自前サーバーという選択肢もありますが、GCPはいま12ヶ月+300USドルの無料クレジット付きキャンペーンをやっていてとてもお得です。



向学のためにいっそのことロードバランサーを入れてオートスケール(負荷が上昇すると自動的に追加でサーバーが起動して複数サーバーでアクセスを処理させる仕組み)させてデータベースとRedisもレプリケーションして可用性を高めようなどと考えてみました。
アップロードされたファイルもスケーラブルなインフラに保存です。

可用性が高くアクセス集中につおい環境

でも絶対過疎るしスケールアウトなんてしないはず。
とはいえフルセットを1サーバで動かすのは好みじゃないので、DBだけ分けた最小限の構成にすることにしました。

DBを分けたちょろい構成

これで必然的に Docker は使わない構成となります。
MastodonはDockerコンテナとして提供されています。
Dockerは開発環境構築がものすごく楽で、Docker Compose による環境はチーム開発にも最適です。
ですが基本的に1サーバの中でフルセットを動かす仕組みなので今回の構成では不要となります。



準備について

Mastodonインスタンスを構築するにあたって事前に必要な準備を列挙します。

  1. 独自ドメイン
  2. SSL証明書
  3. メール配信サービス


独自ドメイン

これがないと何も始まりません。
後述のSSL証明書、メール配信サービスのいずれも独自ドメインが登録されていないと設定が進みません。
僕はいつも VALUE-DOMAIN でドメインを登録しています。
doronko.club はキャンペーン中で100円/年くらいでした。

SSL証明書

http ではなく https でアクセスさせるために必要なものです。
でも高いんだよなあやだなあと思っていたら、最近は無料で証明書を発行してくれるサービスがあるんですね!
もちろんオレオレ証明書(自分のサーバで勝手に作る自己証明書)ではなくちゃんとしたものです。

メール配信サービス

自分のサーバーからメールを配信することもできますが、配信数が多くなるとIPウォーミングをしないとスパム配信元として扱われてブラックリストに載せられてしまいます。
大量配信用途のSMTPサーバに特化したサービスが色々とあるのでそれを利用します。
MastodonではMailgunが推奨されているようです。



サーバー構築について

以下の順に作業を進めます。
  1. GCEインスタンスの用意
  2. Mailgunの登録
  3. DNSの設定
  4. Mailgunの設定
  5. Cloud SQLの設定
  6. Cloud Storageの設定
  7. Mastodonサーバの設定

GCEインスタンスの用意

MastodonサーバーとなるGCEインスタンスを起動します。
GCPコンソールからCompute Engineを開いてVMインスタンスを作成します。


マシンタイプは最小のmicroです。
僕はCentOSが一番使い慣れているのでCentOS 7のイメージを選択しています。
(DebianとかUbuntuはよくわかりましぇん)
更にここでローカルストレージにSSDを選択しています。
メモリが0.6GBしか無いのをスワップファイルを作って回避するのですが、SSDだとI/Oが速いのでメモリの少なさを感じさせません。

またネットワーキングの設定から固定の外部IPアドレスを設定します。


エフェメラルは動的IPアドレスのことなので再起動するとIPアドレスが変わってしまう可能性があります。
「新しい静的IPアドレス」を選択しておきます。

Mailgunの登録

メール配信Mailgunに先にアカウントを登録しておきます。
その後ドメインを登録すると本当にドメインの保有者かどうかの確認手続きに入ります。
この確認手続きにDNSの設定が必要となります。
ちなみにここでメール配信用に設定したドメインは mail.doronko.club です。

DNSの設定

VALUE-DOMAIN の管理画面からDNSの設定をします。

a @ GCEのIPアドレス
txt mail v=spf1 include:mailgun.org ~all
txt pic._domainkey.mail k=rsa; p=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
mx mxa.mailgun.org. 10 mail
mx mxb.mailgun.org. 10 mail
cname email.mail mailgun.org.

1行目は https://doronko.club/ でGCEインスタンスにアクセスできるようにするための設定です。
2行目以降は Mailgun を利用できるようにするための設定です。
この設定内容は Mailgun の管理画面に表示されているのでそれを利用する感じです。

こんな感じで書いてあります

僕はMXレコードとCNAMEレコードの記述でミスってしまってなかなか承認されずに困りました。

Mailgunの設定

DNSの設定をしてそれがインターネットに浸透するまで少々時間がかかります。
早ければ10分、遅ければ数10分。
その後Mailgun管理画面からドメインの承認手続きをします。Verificationボタンを押すだけです。
DNSの設定が正しければこれでメール配信の準備が整います。

Cloud SQLの設定

今回GCPを選択した理由の一つはCloud SQLにPostgreSQL版ができたことが大きいです。


バックアップ、セキュリティパッチの適用、ストレージの自動増量などを勝手にやってくれるCloud SQLのサービスは魅力的です。

Cloud SQLもマシンタイプはmicroで
ストレージはもちろんSSDで自動増量を有効化

PostgreSQLは定期的なバキューム処理が必要なので autovacuum を On に。
またMastodonサーバからの接続を許可するために承認済みネットワークにMastodonサーバの外部IPアドレスを設定します。

Cloud Storageの設定

Cloud Storageでユーザーがアップロードしたファイルを管理するようにします。
スケーラブルなインフラなのでサーバがクラッシュしてファイルが無くなっちゃうような事故を防げます。

Storage のメニューから「バケットの作成」を選択して Multi Regional のストレージクラスを選択して作成します。


バケットができたらStorageの設定画面の「相互運用性」からアクセスキーを生成します。
アクセスキーはMastodonサーバの設定ファイルに記載する必要があります。


Mastodonサーバの設定

やっとMastodonサーバの構築です。
基本的にMastodonの公式ドキュメントに従って進めましたが、CentOS 7へのインストールの先達の資料も参考にさせて頂きました。

基本的に上記参考サイトの手順に従って進めましたが、ところどころ異なるので異なる部分だけ抜粋して記載します。



なによりまずはスワップ領域の作成です。
これをしないとMastodonサーバ構築の操作でメモリ不足のエラーが発生します。
dd if=/dev/zero of=/swapfile count=4194304 bs=1K && mkswap /swapfile && swapon /swapfile


PostgreSQLは既に準備済みなのでserverモジュールはインストールしません。
# yum install postgresql96-{contrib,devel}


GCEインスタンスとPostgreSQLのタイムゾーンがUTCなのでJSTに変更しておきます。

GCE側
# timedatectl set-timezone Asia/Tokyo
PostgreSQL側(GCEインスタンスから接続して操作)
# psql -h CloudSQLのIPアドレス -U mastodon -d mastodon
Password for user mastodon:
psql (9.6.2, server 9.6.1)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES128-GCM-SHA256, bits: 128, compression: off)
Type "help" for help.
mastodon=> alter database mastodon set timezone = 'Asia/Tokyo';
ALTER DATABASE
mastodon=> \q


この後Ruby絡みの手順で pg_config が無いと怒られてエラーになります。
パスが通っていないだけなのでパスを通します。
# PATH=$PATH:$HOME/bin:/usr/pgsql-9.6/bin; export PATH


続いてSSL証明書を設定します。
こちらを参考にSSL証明書を作成します。
# wget https://dl.eff.org/certbot-auto
# chmod a+x certbot-auto
# ./certbot-auto
# ./certbot-auto certonly --standalone -d doronko.club --rsa-key-size 4096

続いてこちらを参考にPFSの準備をします。
mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
openssl dhparam 4096 -out dhparam.pem

これで /etc/letsencrypt/live/doronko.club 以下に fullchain.pem と privkey.pem と chain.pem ができ(実際にはシンボリックリンクで元ファイルは別の場所にある)、/etc/nginx/ssl 以下に dhparam.pem ができます。
これらを Nginx の設定ファイルに記載します。
ssl_certificate     /etc/letsencrypt/live/doronko.club/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/doronko.club/privkey.pem;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_trusted_certificate /etc/letsencrypt/live/doronko.club/chain.pem;
ssl_stapling on;
ssl_stapling_verify on;


そしてMastodonの設定ファイル .env.production を編集します。
# Service dependencies
REDIS_HOST=localhost(←これ元ファイルは Redis ってなってるから修正必須!)
REDIS_PORT=6379
# REDIS_DB=0
DB_HOST=(CloudSQLのIPアドレス)
DB_USER=(ユーザー名)
DB_NAME=mastodon
DB_PASS=(パスワード)
DB_PORT=5432
# Federation
LOCAL_DOMAIN=doronko.club
LOCAL_HTTPS=true
# Application secrets
# Generate each with the `rake secret` task (`docker-compose run --rm web rake secret` if you use docker compose)
PAPERCLIP_SECRET=(rake secret 1回目の結果)
SECRET_KEY_BASE=(rake secret 2回目の結果)
OTP_SECRET=(rake secret 3回目の結果)
# Mailgun
SMTP_SERVER=smtp.mailgun.org
SMTP_PORT=2525
SMTP_LOGIN=(MailgunのSMTPログインID)
SMTP_PASSWORD=(MailgunのSMTPパスワード)
SMTP_FROM_ADDRESS=notification@mail.doronko.club
# S3 (optional)
S3_ENABLED=true
S3_BUCKET=(Cloud Storageのバケット名)
AWS_ACCESS_KEY_ID=(先の手順で発行したアクセスキーID)
AWS_SECRET_ACCESS_KEY=(先の手順で発行したシークレットアクセスキー)
S3_PROTOCOL=https
S3_HOSTNAME=storage.googleapis.com
S3_ENDPOINT=https://storage.googleapis.com/


さあこれで起動だぜと思ってアクセスしたら403 Forbiddenに。
MastodonインストールディレクトリのSELinuxコンテキストを修正します。
# setenforce Permissive
# chcon -Rt httpd_sys_content_t /home/mastodon/live/public



これで完成です。
ちなみにデイリージョブを実行するとエラーが発生したので調べたら同じことを解決している人がいたので真似しました。





運用開始後に数人が同時アクセスすると GCE の micro インスタンスだとあっという間にCPUがブン回ってしまうことが判明したので、今は small インスタンスにマシンタイプを上げてあります。




いろいろな記事に助けられたのでこの記事が誰かの参考になりますように。




2017年4月29日土曜日

じょしどきとWEX勝沼とどろんこクラブ

来る5月6日(土)にモトスポーツランドしどきで貸切走行会をやることになりました。その名も「じょしどき」
kwskくんからの提案で「妹やその友達のような女子でも着の身着のままでオフロードライディングを楽しめちゃう会」がコンセプトです。



フルレンタルでベスコンしどきを味わいましょう



今の時点で40人くらい集まっていて、半分くらい女子です。
誰でも参加できます。引き続きエントリー受け付けてますんで興味ある方はゼヒ。






ところで去る3月26日に雪が降る WEX EAST Rd.1 クロスパーク勝沼に参戦したんですが、現場の様子を伝えるこれ以上ない動画が出ていたので動画編集もしていなければブログも書いていません。
いつかのWEXデコボコランドみたいでした。



午前中に雪がこねられて最悪の激重マディに

カチカチツルツルベトベトマディ



居酒屋で一人飲みしてたら泥酔して120Aクラスへのエントリーを煽ってしまったことを深く後悔するとともに、巻き込んでしまった姫丸さん滝澤さんにお詫び申し上げます。






申し訳ございませんでしたあああ!!!






でもってまた別の話。



4月に入ってからTwitterクローンの登場と騒がれていたMastodon
自前でサーバーを構築するのも簡単そうだったんですが、月前半の混乱を見て静観することにしていました。
最近やっと落ち着いて、絵が好きな人向けの pawoo.net やニコ動ユーザー向けの friends.nico など、同じ趣味のコミュニティ毎にインスタンス(サーバー)が立ち上がるようになってきました。

てなわけで僭越ながらオフロードバイク乗りというとても限られた世界の人々向けにMastodonインスタンスを立ち上げてみました。












9割がた僕の好奇心(Google Cloud Platform の利用と Mastodon サーバーの構築)で作ったので運営とか全然考えていません。
Twitterでいいじゃんというのももちろんその通りなんですが、ここに来ればオフ車で楽しんでる人がいるってわかるだけでもいいかなと思ってます。



こんな感じで考えてます



過疎ってる今くらいが気楽でいいけど、個人のお小遣いでできる範囲を超えるくらい人が集まっても楽しそうだなとはちょっと思ってます。
(オートスケールとか試してみたいし)




興味ある人はほとんどいないと思うけど、備忘録的に今回の鯖立て手順を別エントリーで書くつもりです。