ボツ
github pages / deploy (push) Successful in 2m30s
Details
github pages / deploy (push) Successful in 2m30s
Details
This commit is contained in:
parent
1a580a3961
commit
a5fb5f99b4
|
@ -0,0 +1,120 @@
|
||||||
|
---
|
||||||
|
author: usbharu
|
||||||
|
draft: true
|
||||||
|
categories:
|
||||||
|
- ボツ記事
|
||||||
|
date: 2024-12-26T15:05:47+09:00
|
||||||
|
tags:
|
||||||
|
- Kubernetes
|
||||||
|
- Docker
|
||||||
|
keywords:
|
||||||
|
- Kubernetes
|
||||||
|
- Docker
|
||||||
|
title: ボツ記事 k8s内に構築したPostgreSQLをCronJobでバックアップする
|
||||||
|
relpermalink: posts/2024-12-26/
|
||||||
|
url: posts/2024-12-26/
|
||||||
|
decription: k8s内に構築したPostgreSQLをCronJobでバックアップする
|
||||||
|
---
|
||||||
|
|
||||||
|
[おうちk8sでMisskeyとNowPlayingを動かし始めたよ · usbharu - blog](https://blog.usbharu.dev/posts/2024-12-01/)でCloudNative PostgreSQLをやめ、k8s内で普通のPostgreSQLを動かし始めました。同時にバックアップ手段も失ったので、今回は自動バックアップを構築する記事です。
|
||||||
|
|
||||||
|
## やりたいこと
|
||||||
|
|
||||||
|
k8sのCronJobでPostgreSQLをバックアップのpg_dumpを作成してオブジェクトストレージにアップロードしたい。
|
||||||
|
|
||||||
|
## 出来上がったもの
|
||||||
|
|
||||||
|
[usbharu/pg_backup_job - pg_backup_job - Gitea for usbharu](https://git.usbharu.dev/usbharu/pg_backup_job)
|
||||||
|
|
||||||
|
今回ほとんどChatGPTに作ってもらいました。これぐらいなら余裕ですね!
|
||||||
|
コメント等もほぼChatGPTが出力したままです。
|
||||||
|
|
||||||
|
```Dockerfile
|
||||||
|
# ベースイメージにPostgreSQL 15の公式クライアントを使用
|
||||||
|
FROM postgres:16
|
||||||
|
|
||||||
|
# 必要なツールをインストール
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
curl \
|
||||||
|
awscli \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# 作業ディレクトリ
|
||||||
|
WORKDIR /backup
|
||||||
|
|
||||||
|
# スクリプトをコピー
|
||||||
|
COPY backup.sh /backup/backup.sh
|
||||||
|
|
||||||
|
# 実行権限を付与
|
||||||
|
RUN chmod +x /backup/backup.sh
|
||||||
|
|
||||||
|
# エントリーポイントを設定
|
||||||
|
ENTRYPOINT ["/backup/backup.sh"]
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# 必須環境変数リスト
|
||||||
|
REQUIRED_VARS=(
|
||||||
|
PG_HOST
|
||||||
|
PG_PORT
|
||||||
|
PG_USER
|
||||||
|
PG_PASSWORD
|
||||||
|
PG_DATABASE
|
||||||
|
S3_BUCKET
|
||||||
|
AWS_ACCESS_KEY_ID
|
||||||
|
AWS_SECRET_ACCESS_KEY
|
||||||
|
)
|
||||||
|
|
||||||
|
# 未設定の環境変数をチェック
|
||||||
|
for VAR in "${REQUIRED_VARS[@]}"; do
|
||||||
|
if [ -z "${!VAR}" ]; then
|
||||||
|
echo "エラー: 必須環境変数 '${VAR}' が設定されていません。" >&2
|
||||||
|
MISSING_ENV=true
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$MISSING_ENV" = true ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 環境変数の設定
|
||||||
|
export AWS_ACCESS_KEY_ID="${AWS_ACCESS_KEY_ID}"
|
||||||
|
export AWS_SECRET_ACCESS_KEY="${AWS_SECRET_ACCESS_KEY}"
|
||||||
|
export AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION:-us-east-1}"
|
||||||
|
|
||||||
|
# ダンプファイル名
|
||||||
|
DUMP_FILE="dump_$(date +%Y%m%d%H%M%S).sql"
|
||||||
|
|
||||||
|
# pg_dumpを実行
|
||||||
|
export PGPASSWORD="${PG_PASSWORD}"
|
||||||
|
pg_dump -h "${PG_HOST}" -p "${PG_PORT}" -U "${PG_USER}" -d "${PG_DATABASE}" -F c -b -v -f "${DUMP_FILE}"
|
||||||
|
|
||||||
|
# S3にアップロード
|
||||||
|
if [[ -n "${S3_ENDPOINT}" ]]; then
|
||||||
|
# カスタムエンドポイント指定時
|
||||||
|
aws --endpoint-url "${S3_ENDPOINT}" s3 cp "${DUMP_FILE}" "s3://${S3_BUCKET}/${DUMP_FILE}"
|
||||||
|
else
|
||||||
|
# デフォルトエンドポイント
|
||||||
|
aws s3 cp "${DUMP_FILE}" "s3://${S3_BUCKET}/${DUMP_FILE}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ローカルのダンプファイルを削除
|
||||||
|
rm -f "${DUMP_FILE}"
|
||||||
|
|
||||||
|
echo "バックアップとアップロードが完了しました。"
|
||||||
|
```
|
||||||
|
|
||||||
|
こっちの方もちょっと変わっていて、CronJobとそれに必要なSecretが追加されています。
|
||||||
|
|
||||||
|
[usbharu/usbharu-lab at e067db4ea302c3d3ee63c375d5058e1c2c6bedf1](https://github.com/usbharu/usbharu-lab/tree/e067db4ea302c3d3ee63c375d5058e1c2c6bedf1)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
- ボツ理由:ChatGPTで生成したんなら記事各意味なくね?
|
||||||
|
- 状態:書きかけ
|
Loading…
Reference in New Issue