- Notifications
You must be signed in to change notification settings - Fork6
Hosted Server Backup Service
License
yegor256/threecopies
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
ThreeCopies.com is a hosted service thatregularly archives your server-side resources. We create threecopies: hourly, daily and weekly.
What's interesting is that the entire productis will be written inEO,a truly object-orented programming language.
The logo is made byFreepik fromflaticon.com,licensed byCC 3.0 BY.
Each script is a bash scenario, which you design yourself. ThreeCopiesjust starts it regularly and records its output. These are somerecommendations on how to design the script. There are three parts:input, package, and output. First, you collect some data from your datasources (input). Then, you compress and encrypt the data (package). Finally,you store the package somewhere (output).
We start your script insideyegor256/threecopiesDocker container,here is theDockerfile
.
If you don't want your script to be executed too frequently, you may putthis code in front of it (to skip hourly executions, for example):
if ["${period}"=="hour" ];thenexit 0;fi
To retrieve the data from a MySQL database usemysqldump:
mysqldump --lock-tables=false --host=www.example.com \ --user=username --password=password \ --databases dbname> mysql.sql
Since this would require to open your mysql port to the internet, which is not advisable from a security perspective, you should probably use a ssh tunnel:
cat> file.key<<EOT-----BEGIN RSA PRIVATE KEY-----<your ssh private key here>-----END RSA PRIVATE KEY-----EOTchmod 700 file.keyssh -Nf -i file.key -L3306:localhost:3306 your_user@www.example.comrm file.key
and then connect with the above script:
mysqldump --lock-tables=false --host=localhost ...same as above
To download an entire FTP directory usewget:
wget --mirror --tries=5 --quiet --output-file=/dev/null \ --ftp-user=username --ftp-password=password \ ftp://ftp.example.com/some-directory
To package a directory usetar:
tgz="${period}-$(date"+%Y-%m-%d-%H-%M").tgz"tar czf"${tgz}" some-directory
We recommend to use exactly that name of your.tgz
archives. The${period}
environment variable is provided by our server to yourDocker container, it will either be set tohour
,day
, orweek
.
To upload a file to Amazon S3, usings3cmd:
echo"[default]">~/.s3cfgecho"access_key=AKIAICJKH*****CVLAFA">>~/.s3cfgecho"secret_key=yQv3g3ao654Ns**********H1xQSfZlTkseA0haG">>~/.s3cfgs3cmd --no-progress put"${tgz}""s3://backup.example.com/${tgz}"
Thetc-scripts
table contains all registered scripts:
fields: login/H: GitHub login of the owner name/R: Unique name of the script bash: Bash script hour: Epoch-sec when its recent hourly log was scheduled day: Epoch-sec when its recent daily log was scheduled week: Epoch-sec when its recent weekly log was scheduled
Thetc-logs
table contains all recent logs:
fields: group/H: Concatenated GitHub login and script name, e.g. "yegor256/test" finish/R: Epoch-msec of the script finish (or MAX_LONG if still running) login: GitHub login of the owner period: Either "hour", "day", or "week" ocket: S3 object name for the log ttl: Epoch-sec when the record has to be deleted (by DynamoDB) start: Epoch-msec time of the start container: Docker container name exit: Bash exit code (error if not zero)mine (index): login/H finish/R
Just submit a pull request. Make suremvn -Pqulice install
passes.
About
Hosted Server Backup Service