first commit
build and deploy / build (push) Successful in 1m29s
Details
build and deploy / build (push) Successful in 1m29s
Details
This commit is contained in:
commit
e740a5d93d
|
@ -0,0 +1,36 @@
|
|||
name: build and deploy
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: catthehacker/ubuntu:act-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
- uses: docker/setup-buildx-action@v3
|
||||
- uses: docker/login-action@v3
|
||||
with:
|
||||
registry: git.usbharu.dev
|
||||
username: usbharu
|
||||
password: ${{ secrets.PUBLIC_REPOSITORY_PACKAGE_WRITE_TOKEN }}
|
||||
- name: metadata
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: git.usbharu.dev/usbharu/pg_backup_job
|
||||
tags: |
|
||||
type=raw,value=latest
|
||||
type=sha,prefix=,suffix=,format=short
|
||||
- name: build
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
file: ./Dockerfile
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
|
@ -0,0 +1,8 @@
|
|||
# デフォルトの無視対象ファイル
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# エディターベースの HTTP クライアントリクエスト
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
||||
<data-source source="LOCAL" name="postgres@localhost" uuid="da0cdc63-ec5f-4210-aa59-8ae07b84b63f">
|
||||
<driver-ref>postgresql</driver-ref>
|
||||
<synchronize>true</synchronize>
|
||||
<jdbc-driver>org.postgresql.Driver</jdbc-driver>
|
||||
<jdbc-url>jdbc:postgresql://localhost:5432/postgres</jdbc-url>
|
||||
<jdbc-additional-properties>
|
||||
<property name="com.intellij.clouds.kubernetes.db.host.port" />
|
||||
<property name="com.intellij.clouds.kubernetes.db.enabled" value="false" />
|
||||
<property name="com.intellij.clouds.kubernetes.db.container.port" />
|
||||
</jdbc-additional-properties>
|
||||
<working-dir>$ProjectFileDir$</working-dir>
|
||||
</data-source>
|
||||
</component>
|
||||
</project>
|
|
@ -0,0 +1,25 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="JsonSchemaMappingsProjectConfiguration">
|
||||
<state>
|
||||
<map>
|
||||
<entry key="docker-compose.yml">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="name" value="docker-compose.yml" />
|
||||
<option name="relativePathToSchema" value="https://raw.githubusercontent.com/compose-spec/compose-spec/master/schema/compose-spec.json" />
|
||||
<option name="applicationDefined" value="true" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="path" value="docker-compose.yml" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
</map>
|
||||
</state>
|
||||
</component>
|
||||
</project>
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/pg_backup_job.iml" filepath="$PROJECT_DIR$/pg_backup_job.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
|
@ -0,0 +1,20 @@
|
|||
# ベースイメージにPostgreSQL 15の公式クライアントを使用
|
||||
FROM postgres:15
|
||||
|
||||
# 必要なツールをインストール
|
||||
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"]
|
|
@ -0,0 +1,34 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# 必須環境変数のチェック
|
||||
if [[ -z "${PG_HOST}" || -z "${PG_PORT}" || -z "${PG_USER}" || -z "${PG_PASSWORD}" || -z "${PG_DATABASE}" || -z "${S3_BUCKET}" || -z "${AWS_ACCESS_KEY_ID}" || -z "${AWS_SECRET_ACCESS_KEY}" ]]; then
|
||||
echo "必須環境変数が設定されていません。"
|
||||
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 "バックアップとアップロードが完了しました。"
|
|
@ -0,0 +1,62 @@
|
|||
version: '3.8'
|
||||
|
||||
services:
|
||||
db:
|
||||
image: postgres:15
|
||||
container_name: postgres_db
|
||||
environment:
|
||||
POSTGRES_USER: testuser
|
||||
POSTGRES_PASSWORD: testpassword
|
||||
POSTGRES_DB: testdb
|
||||
ports:
|
||||
- "5435:5432"
|
||||
volumes:
|
||||
- db_data:/var/lib/postgresql/data
|
||||
|
||||
|
||||
pg_dump_uploader:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
container_name: pg_dump_uploader
|
||||
environment:
|
||||
PG_HOST: db
|
||||
PG_PORT: 5432
|
||||
PG_USER: testuser
|
||||
PG_PASSWORD: testpassword
|
||||
PG_DATABASE: testdb
|
||||
S3_BUCKET: test-bucket
|
||||
AWS_ACCESS_KEY_ID: test-access-key
|
||||
AWS_SECRET_ACCESS_KEY: test-secret-key
|
||||
AWS_DEFAULT_REGION: us-east-1
|
||||
S3_ENDPOINT: http://minio:9000
|
||||
depends_on:
|
||||
- db
|
||||
- minio
|
||||
|
||||
minio:
|
||||
image: minio/minio
|
||||
container_name: minio
|
||||
command: server /data --console-address ":9001"
|
||||
environment:
|
||||
MINIO_ROOT_USER: test-access-key
|
||||
MINIO_ROOT_PASSWORD: test-secret-key
|
||||
ports:
|
||||
- "9000:9000"
|
||||
- "9001:9001"
|
||||
volumes:
|
||||
- minio_data:/data
|
||||
createbuckets:
|
||||
image: minio/mc
|
||||
depends_on:
|
||||
- minio
|
||||
entrypoint: >
|
||||
/bin/sh -c "
|
||||
until (/usr/bin/mc config host add myminio http://minio:9000 test-access-key test-secret-key) do echo '...waiting...' && sleep 1; done;
|
||||
/usr/bin/mc mb myminio/test-bucket;
|
||||
/usr/bin/mc policy download myminio/test-bucket;
|
||||
exit 0;
|
||||
"
|
||||
volumes:
|
||||
db_data:
|
||||
minio_data:
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="GENERAL_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
Loading…
Reference in New Issue