diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..4e42810 --- /dev/null +++ b/.env.example @@ -0,0 +1,67 @@ +### Database +DB_HOST= +DB_PORT=3306 +DB_USERNAME= +DB_PASSWORD= +DB_NAME= +TZ=Europe/Paris + +### Database Migration +#TARGET_DB_HOST= +#TARGET_DB_PORT=3306 +#TARGET_DB_NAME= +#TARGET_DB_USERNAME= +#TARGET_DB_PASSWORD= + +### Backup restoration +#FILE_NAME= +### AWS S3 Storage +#ACCESS_KEY= +#SECRET_KEY= +#AWS_S3_BUCKET_NAME= +#AWS_S3_ENDPOINT= +#AWS_REGION= +#AWS_S3_PATH= +#AWS_DISABLE_SSL=false +#AWS_FORCE_PATH_STYLE=true + +### Backup Cron Expression +#BACKUP_CRON_EXPRESSION=@midnight + +####SSH Storage +#SSH_HOST_NAME= +#SSH_PORT=22 +#SSH_USER= +#SSH_PASSWORD= +#SSH_IDENTIFY_FILE=/tmp/id_ed25519 + +####FTP Storage +#FTP_PASSWORD= +#FTP_HOST_NAME= +#FTP_USER= +#FTP_PORT=21 +#REMOTE_PATH= +#### Backup encryption +#GPG_PUBLIC_KEY=/config/public_key.asc +#GPG_PRIVATE_KEY=/config/private_key.asc +#GPG_PASSPHRASE=Your strong passphrase +## For multiple database backup on Docker or Docker in Swarm mode +#BACKUP_CONFIG_FILE=/config/config.yaml +### Database restoration +#FILE_NAME= +### Notification +#BACKUP_REFERENCE=K8s/Paris cluster +## Telegram +#TG_TOKEN= +#TG_CHAT_ID= +### Email +#MAIL_HOST= +#MAIL_PORT= +#MAIL_USERNAME= +#MAIL_PASSWORD= +#MAIL_FROM=Backup Jobs +#MAIL_TO=backup@example.com,me@example.com,team@example.com +#MAIL_SKIP_TLS=false + + + diff --git a/Dockerfile b/Dockerfile index 0eec7c3..42cf6f9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,48 +10,16 @@ RUN go mod download RUN CGO_ENABLED=0 GOOS=linux go build -o /app/mysql-bkup FROM alpine:3.20.3 -ENV DB_HOST="" -ENV DB_NAME="" -ENV DB_USERNAME="" -ENV DB_PASSWORD="" -ENV DB_PORT=3306 -ENV STORAGE=local -ENV AWS_S3_ENDPOINT="" -ENV AWS_S3_BUCKET_NAME="" -ENV AWS_ACCESS_KEY="" -ENV AWS_SECRET_KEY="" -ENV AWS_S3_PATH="" -ENV AWS_REGION="us-west-2" -ENV AWS_DISABLE_SSL="false" -ENV AWS_FORCE_PATH_STYLE="true" -ENV GPG_PASSPHRASE="" -ENV SSH_USER="" -ENV SSH_PASSWORD="" -ENV SSH_HOST="" -ENV SSH_IDENTIFY_FILE="" -ENV SSH_PORT=22 -ENV REMOTE_PATH="" -ENV FTP_HOST="" -ENV FTP_PORT=21 -ENV FTP_USER="" -ENV FTP_PASSWORD="" -ENV TARGET_DB_HOST="" -ENV TARGET_DB_PORT=3306 -ENV TARGET_DB_NAME="" -ENV TARGET_DB_USERNAME="" -ENV TARGET_DB_PASSWORD="" -ENV BACKUP_CRON_EXPRESSION="" -ENV TG_TOKEN="" -ENV TG_CHAT_ID="" ENV TZ=UTC ARG WORKDIR="/config" ARG BACKUPDIR="/backup" ARG BACKUP_TMP_DIR="/tmp/backup" ARG TEMPLATES_DIR="/config/templates" -ARG appVersion="v1.2.12" +ARG appVersion="" ENV VERSION=${appVersion} LABEL author="Jonas Kaninda" LABEL version=${appVersion} +LABEL github="github.com/jkaninda/mysql-bkup" RUN apk --update add --no-cache mysql-client mariadb-connector-c tzdata ca-certificates RUN mkdir $WORKDIR diff --git a/README.md b/README.md index 2451d3b..2a636a6 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,7 @@ networks: -e "DB_HOST=hostname" \ -e "DB_USERNAME=user" \ -e "DB_PASSWORD=password" \ - jkaninda/mysql-bkup backup -d dbName --cron-expression "@every 1m" + jkaninda/mysql-bkup backup -d dbName --cron-expression "@every 15m" #@midnight ``` See: https://jkaninda.github.io/mysql-bkup/reference/#predefined-schedules diff --git a/docs/index.md b/docs/index.md index e26e2ac..bddd915 100644 --- a/docs/index.md +++ b/docs/index.md @@ -91,7 +91,7 @@ networks: -e "DB_HOST=hostname" \ -e "DB_USERNAME=user" \ -e "DB_PASSWORD=password" \ - jkaninda/mysql-bkup backup -d dbName --cron-expression "@every 1m" + jkaninda/mysql-bkup backup -d dbName --cron-expression "@every 15m" #@midnight ``` See: https://jkaninda.github.io/mysql-bkup/reference/#predefined-schedules diff --git a/pkg/config.go b/pkg/config.go index 2eb4454..c227ca9 100644 --- a/pkg/config.go +++ b/pkg/config.go @@ -154,11 +154,11 @@ func initAWSConfig() *AWSConfig { aConfig.region = os.Getenv("AWS_REGION") disableSsl, err := strconv.ParseBool(os.Getenv("AWS_DISABLE_SSL")) if err != nil { - utils.Fatal("Unable to parse AWS_DISABLE_SSL env var: %s", err) + disableSsl = false } forcePathStyle, err := strconv.ParseBool(os.Getenv("AWS_FORCE_PATH_STYLE")) if err != nil { - utils.Fatal("Unable to parse AWS_FORCE_PATH_STYLE env var: %s", err) + forcePathStyle = false } aConfig.disableSsl = disableSsl aConfig.forcePathStyle = forcePathStyle @@ -253,7 +253,7 @@ func initRestoreConfig(cmd *cobra.Command) *RestoreConfig { func initTargetDbConfig() *targetDbConfig { tdbConfig := targetDbConfig{} tdbConfig.targetDbHost = os.Getenv("TARGET_DB_HOST") - tdbConfig.targetDbPort = os.Getenv("TARGET_DB_PORT") + tdbConfig.targetDbPort = utils.EnvWithDefault("TARGET_DB_PORT", "3306") tdbConfig.targetDbName = os.Getenv("TARGET_DB_NAME") tdbConfig.targetDbUserName = os.Getenv("TARGET_DB_USERNAME") tdbConfig.targetDbPassword = os.Getenv("TARGET_DB_PASSWORD") diff --git a/utils/utils.go b/utils/utils.go index b57e064..18e2b2f 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -180,3 +180,10 @@ func GetIntEnv(envName string) int { } return ret } +func EnvWithDefault(envName string, defaultValue string) string { + value := os.Getenv(envName) + if value == "" { + return defaultValue + } + return value +}