Commit edc8e3df by Ali Arshad

initial setup

parent 623679fe
FROM alpine
###################################################### Update APK #######################################################
RUN apk update
###################################################### Install zip mailx & cron #######################################################
RUN apk add --update \
mysql-client \
zip \
bash \
curl \
openssl \
heirloom-mailx \
postgresql \
postgresql-client
#################################################### Setting up backups ####################################################
ADD backup.sh /backup.sh
RUN chmod u+x /backup.sh
RUN touch /var/log/cron.log
RUN echo "0 8 * * 1 bash /backup.sh >> /var/log/cron.log 2>&1 \n\
" >> /crontab.txt
RUN /usr/bin/crontab /crontab.txt
#################################################### Setting up cron ####################################################
CMD /usr/sbin/crond && tail -f /var/log/cron.log
#!/bin/bash
function encodeURL()
{
local -r url="${1}"
local i=0
local walker=''
for ((i = 0; i < ${#url}; i++))
do
walker="${url:i:1}"
case "${walker}" in
[a-zA-Z0-9.~_-])
printf "${walker}"
;;
' ')
printf +
;;
*)
printf '%%%X' "'${walker}"
;;
esac
done
}
function trimString()
{
local -r string="${1}"
sed 's,^[[:blank:]]*,,' <<< "${string}" | sed 's,[[:blank:]]*$,,'
}
function isEmptyString()
{
local -r string="${1}"
if [[ "$(trimString "${string}")" = '' ]]
then
echo 'true'
else
echo 'false'
fi
}
#Project name
project="restyaboard"
project_dir="/var/www/"
#S3 info
S3KEY="AKIAISAUYAT4BMFLKVFA"
S3SECRET="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"
bucket='vqode-clients-backups'
# Database credentials
user=${MYSQL_USER}
password=${MYSQL_PASSWORD}
host=${MYSQL_HOST}
db_name=${MYSQL_DATABASE}
# Email SMTP
mail_user="no-reply@byghazala.com"
mail_password="yVa1u1jlySUj"
mail_host="mx.vqode.com"
mail_port="25"
mail_to="ali.arshad.gem@gmail.com"
# Other options
backup_path="/var/www/dbBackups"
date=$(date +"%a-%d-%b-%Y-%T")
mkdir -p $backup_path
# Set default file permissions
umask 177
# Deleting old backups
find $backup_path/* -exec rm {} \;
# Dump database into SQL file
echo "Generating SQL Backup"
export PGPASSWORD="$password"
pg_dump -U $user -h $host $db_name > $backup_path/$db_name-$date.sql
# Delete files older than 30 days
# find $backup_path/* -mtime +30 -exec rm {} \;
#make the archive
echo "Creating zip"
zip -r $project-$date.zip $project_dir/*
#Lets upload to s3
function putS3
{
path=$1
file=$2
aws_path=$3
date_aws=$(date +"%a, %d %b %Y %T %z")
acl="x-amz-acl:private"
content_type='application/zip'
string="PUT\n\n$content_type\n$date_aws\n$acl\n/$bucket$aws_path$file"
signature=$(echo -en "${string}" | openssl sha1 -hmac "${S3SECRET}" -binary | base64)
curl -X PUT -T "$path/$file" \
-H "Host: $bucket.s3.amazonaws.com" \
-H "Date: $date_aws" \
-H "Content-Type: $content_type" \
-H "$acl" \
-H "Authorization: AWS ${S3KEY}:$signature" \
"https://$bucket.s3.amazonaws.com$aws_path$file"
}
echo "Uploading to S3"
putS3 "." "$project-$date.zip" "/backups/$project/"
#Lets generate signed URL
function generateSignURL()
{
awsAccessKeyID=${S3KEY}
awsSecretAccessKey=${S3SECRET}
region="us-east-1"
local -r filePath="${1}"
local -r method="GET"
local -r minuteExpire=2880
if [[ "${region}" = 'us-east-1' ]]
then
region=''
fi
local -r endPoint="$("$(isEmptyString "${region}")" = 'true' && echo 's3.amazonaws.com' || echo "s3-${region}.amazonaws.com")"
local -r expire="$(($(date +'%s') + minuteExpire * 60))"
local -r signature="$(
echo -en "${method}\n\n\n${expire}\n/${bucket}/${filePath}" |
openssl dgst -sha1 -binary -hmac "${awsSecretAccessKey}" |
openssl base64
)"
local -r query="AWSAccessKeyId=$(encodeURL "${awsAccessKeyID}")&Expires=${expire}&Signature=$(encodeURL "${signature}")"
signed_url="https://${endPoint}/${bucket}/${filePath}?${query}"
}
generateSignURL "backups/$project/$project-$date.zip"
#Lets remove the zip
echo "Removing zip file"
rm $project-$date.zip
echo "Sending notification email"
body="Backup ($project-$date.zip) generated and uploaded to S3. Download link: $signed_url"
subject="$project backup generated"
(echo $body) | mailx -v -s "$subject" -S smtp-use-starttls -S smtp="$mail_host:$mail_port" -S smtp-auth="login" -S smtp-auth-user=$mail_user -S smtp-auth-password=$mail_password -S from=$mail_user $mail_to
FROM alpine:3.5
ENV RESTYABOARD_VERSION=v0.5 \
ENV RESTYABOARD_VERSION=v0.6.5 \
ROOT_DIR=/usr/share/nginx/html \
CONF_DIR=/etc/nginx/conf.d \
SMTP_DOMAIN=localhost \
......
version: '2'
services:
restyaboard:
build: .
build: ./Restyaboard
ports:
- 1234:80
- 40080:80
volumes:
- /var/opt/restya/media:/usr/share/nginx/html/media
- ./media:/usr/share/nginx/html/media
links:
- postgres
environment:
- POSTGRES_HOST=postgres
- POSTGRES_USER=admin
- POSTGRES_PASSWORD=admin
- POSTGRES_PASSWORD=mXzon@9691
- POSTGRES_DB=restyaboard
- SMTP_DOMAIN=domain
- SMTP_USERNAME=user
- SMTP_PASSWORD=pass
- SMTP_SERVER=server
- SMTP_DOMAIN=gmail.com
- SMTP_USERNAME=vQodee@gmail.com
- SMTP_PASSWORD=aliarshad
- SMTP_SERVER=smtp.gmail.com
- SMTP_PORT=465
- TZ=Etc/UTC
- TZ=Asia/Karachi
depends_on:
- postgres
restart: always
postgres:
image: kiasaki/alpine-postgres
ports:
- 5432:5432
image: postgres
volumes:
- ./DB:/var/lib/postgresql/data
environment:
- POSTGRES_HOST=postgres
- POSTGRES_USER=admin
- POSTGRES_PASSWORD=admin
- POSTGRES_PASSWORD=mXzon@9691
- POSTGRES_DB=restyaboard
restart: always
cron:
build:
context: ./BACKUP
depends_on:
- postgres
- restyaboard
hostname: mail.vqode.com
links:
- postgres
volumes:
- ./media:/var/www/html
environment:
- MYSQL_HOST=postgres
- MYSQL_DATABASE=restyaboard
- MYSQL_USER=admin
- MYSQL_PASSWORD=mXzon@9691
restart: unless-stopped
container_name: restyaboard_backup_service
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment