keychainというパスフレーズを記憶させるツールを使って記憶させます
shellの初回起動時にパスフレーズを入力させられ、以降多分再起動するまで記憶しておいてくれる気がします
確認環境
| Env | Ver | 
|---|---|
| keychain | 2.8.5 | 
| Ubuntu | 20.04.5 LTS | 
手順
- keychainのインストール
sudo apt install keychain
 - keychainの設定
.zshrcとかに次の行を追加keychain -q --nogui --agents gpg --quick <GPGのkeyid>- GPGのkeyidは
gpg --list-secret-keys --keyid-format=longで取得可能 
- GPGのkeyidは
 
 
トラブルシュート
ssh と gpg 両方記憶させたい
こんな感じで書くと行ける。shell起動時にSSHのPW -> GPGのPWの順で入力ダイアログが出てくる
keychain -q --nogui --agents ssh,gpg --quick $HOME/.ssh/id_ed25519 <GPGのkeyid>
GPG のキーが見つからないエラーが出る
- Warning: can't find DEADBEEF; skipping
 
上記が出た場合
~/.gnupg/gpg.confに対して以下の記述をすることで改善する可能性がある(この対策は不完全かもしれない
keyid-format LONG
IPv6のOCNバーチャルコネクト環境ではwell-known portsが利用出来ずWebサーバーを公開するのに支障がありますが、今回はそれを乗り越えるための手法を紹介します。
自宅サーバーにhttps://service.example.com/のようにポート指定なしのサブドメインでアクセスできるようにするのがゴールです。
構成
自宅サーバーの手前にCDNを挟み、CDNを経由して接続させるようにします。要するに手前にリバプロを生やしておくわけです。
前提
- Google Domainsを利用している
 - ルートドメインを保有している
 - AWSのアカウントがある
 
前準備
DNS レコードに次のドメインを作っておく
| 用途 | ドメイン | レコード | データ | 
|---|---|---|---|
| CDN 用のドメイン | cdn.example.com | A | サーバーの IP | 
| 公開用のドメイン | service.example.com | A | サーバーの IP | 
自宅サーバーを公開可能な状態にする
叩き台程度ならserveを使うのが手っ取り早いですが、Node.jsでサーバー立てるのもありだと思います。今回は叩きなのでHTTPにしていますが本番運用するときはHTTPSにしましょう。
以下サンプル
const http = require('http');
const port = 12345;
const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello world!');
    console.log(req.headers.host, req.socket.remoteAddress);
});
server.listen(port, () => {
    console.log(`Running at http://localhost:${port}`);
});
手順
- CloudFrontを開く
 - 「ディストリビューションを作成」
 - 「オリジンドメイン」に
cdn.example.comを設定 - 「プロトコル」を選ぶ
 cdn.example.comの「ポート」を設定する- 設定までスクロール
 - 「代替ドメイン名 (CNAME) - オプション」で「項目を追加」し
service.example.comを入力 - 「カスタムSSL証明書 - オプション」で「証明書をリクエスト」
 - 「パブリック証明書をリクエスト」
 - 「完全修飾ドメイン名」に
service.example.comを入力し「リクエスト」 - 「証明書を表示」
 - DNSレコードに「CNAME名」で「CNAME値」を追加
 - 「保留中の検証」が終わるのを待つ
 - 「カスタムSSL証明書 - オプション」で作成した「ACM証明書」を選択
 - 「ディストリビューションを作成」
 service.example.comのDNSレコードをCNAMEにし、データを「ディストリビューションドメイン名」に変更https://service.example.com/にアクセスできればOK
参考資料
トラブルシュート
ディストリビューションを削除したい
- ディストリビューションの一覧で消したいのにチェック入れて無効化
 - しばらく待つ
 - 消したいのにチェック入れて削除
 
後書き
副次的効果ですがCDN挟んでキャッシュされてるお陰で連続アクセスしてもサーバーまでリクエスト来ないので感動しました。
CloudFrontには他にも様々な機能があるみたいなので活用できれば便利そうです。
公式のドキュメントには書かれていない気がするがDockerだけあればセットアップ可能。WSL2でのセットアップが面倒なVargantは不要
本記事ではWSL2内のUbuntuの中でDockerとDocker Composeを使った構築法について記述する。Windows向けのDocker Desktopは使用しない
前提
- WSL2のUbuntuにVSCodeで接続して作業
 - 起動してログイン、トゥート、設定と言った最低限の画面操作が可能な程度まで
 
確認環境
| Env | ver | 
|---|---|
| Mastodon | v3.5.3 | 
| Docker | 20.10.21, build baeda1f | 
| Docker Compose | v2.12.2 | 
| Ubuntu | 20.04.5 LTS | 
| WSL2 | 1.0.3.0 | 
| DevContainer | v0.266.1 | 
| VSCode | 1.73.0 | 
手順
git clone https://github.com/mastodon/mastodon.git- 最新版などバージョン指定が必要な場合は追加で
tagをチェックアウトする 
- 最新版などバージョン指定が必要な場合は追加で
 - VSCodeでClone先を開く
 - Reopen Containerする
 - セットアップが走るので暫く待つ
 foreman startを流す- http://localhost:3000/ へアクセス
 
操作方法
ユーザーを作ったりしたい場合、Using the admin CLIが参考になる
一例としてユーザー作成は次の書式で行ける
./bin/tootctl accounts create foo --email foo@example.com --confirmed
トラブルシュート
DB接続エラーが出る
ActiveRecord::ConnectionNotEstablished at /
could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql//.s.PGSQL.5432"?
上記のエラーが出る場合、ビルドしたDockerイメージが壊れてるので以下のコマンドで全て消して作り直すとうまく行く
docker rm -f `docker ps -a -q`
docker rmi `docker images -q`
docker system prune
他のMastodonインスタンスが動かない
複数のMastodonインスタンスのDocker環境を同居させると多分コンフリクトする
