LoginSignup
1
1

More than 5 years have passed since last update.

Mastodon+Dockerで.envを紛失してしまったので頑張って復元

Posted at

一人丼な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. 生きてるコンテナが無い状態でやらかしたんだけど

知らん、諦めろ(手はあるの?教えて山田先生)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1