一人丼なMastodonを公式のDockerで走らせていたのだが、.env.production
のバックアップを取ろうとした際に誤って上書きして内容を失ってしまった。
残念ながら現在のDockerfileではこのファイルはコンテナ内にはコピーされていないため復元は不可能ではなかったが一手間必要だった。
あくまでも「当該envを使っているコンテナが実行中であること」を前提とする。
実行中のコンテナに入り、環境変数を取り出す
exec
を使ってコンテナに入る。とりあえずシェルを起動すればいろいろ作業しやすいだろう。
$ docker exec -it mastodon_web_1 sh
Dockerコマンドを直接叩いたがdockr-compose
からでも良かった。
$ docker-compose exec web sh
いずれかを叩けば実行中のコンテナ内でシェルセッションを開始できる。
とりあえずどんな方法でもいいのでコンテナから環境変数を取り出そう。慌ててたのであまり考えずに行ったが、コピペしやすいenv
を扱いやすいようにソートした。
# env|sort -d
実行中のコンテナに設定されている環境変数が取得できたのでとりあえずこれをメモっておく。
コンテナからはexit
とかなんとかで脱出しておk.
.env.production
を一から作る
取り出したenvは.env.production
に書くべきでない余計な項目が含まれてい、順番もバラバラになってしまっているのでそのままではもちろん使い物にならない。
最新の.env.production.sampleを用意して重複項目を反映していく。まあ最初に設定したときの編集箇所を覚えていればそれを。
最低限編集が必要なのは
-
LOCAL_DOMAIN
,LOCAL_HTTPS
- secret 3つ
- メールサーバー周り
あとは必要に応じてS3やCDN周りの設定となる。
(DB,Redisは通常そのままのはず)
自分は確認のしやすさと万が一を考慮してローカルで作業したが別に自信があるならば直接やっても死なないんじゃないかな……
編集したものを.env.production
として元の場所に保存する。
コンテナ再起動
コンテナを再起動して正常に動作している(既存データ、TL、フェデレーション送受信、ユーザー登録、画像アップロードなど)ことが確認できればおそらく復元完了。
二度同じ失敗をやらかしてしまわないためにほかディレクトリにコピーしたりしてS3とかにもrcloneとかでバックアップを取っておくといいでしょう。
Q. 生きてるコンテナが無い状態でやらかしたんだけど
知らん、諦めろ(手はあるの?教えて山田先生)