- Notifications
You must be signed in to change notification settings - Fork5
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
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Uh oh!
There was an error while loading.Please reload this page.
Contributors6
Uh oh!
There was an error while loading.Please reload this page.