Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/yegor256/threecopies
Hosted Server Backup Service
https://github.com/yegor256/threecopies
backup eolang java mysql web-service
Last synced: 2 months ago
JSON representation
Hosted Server Backup Service
- Host: GitHub
- URL: https://github.com/yegor256/threecopies
- Owner: yegor256
- License: mit
- Created: 2017-06-25T08:56:13.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2024-10-28T12:06:10.000Z (2 months ago)
- Last Synced: 2024-10-28T15:35:30.350Z (2 months ago)
- Topics: backup, eolang, java, mysql, web-service
- Language: Java
- Homepage: https://www.threecopies.com
- Size: 534 KB
- Stars: 35
- Watchers: 5
- Forks: 6
- Open Issues: 22
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
[![Managed by Zerocracy](https://www.0crat.com/badge/C3RFVLU72.svg)](https://www.0crat.com/p/C3RFVLU72)
[![DevOps By Rultor.com](http://www.rultor.com/b/yegor256/threecopies)](http://www.rultor.com/p/yegor256/threecopies)[![Availability at SixNines](https://www.sixnines.io/b/5c94)](https://www.sixnines.io/h/5c94)
[![mvn](https://github.com/yegor256/threecopies/actions/workflows/mvn.yml/badge.svg)](https://github.com/yegor256/threecopies/actions/workflows/mvn.yml)
[![PDD status](http://www.0pdd.com/svg?name=yegor256/threecopies)](http://www.0pdd.com/p?name=yegor256/threecopies)
[![codecov](https://codecov.io/gh/yegor256/threecopies/branch/master/graph/badge.svg)](https://codecov.io/gh/yegor256/threecopies)## What does it do?
[ThreeCopies.com](http://www.threecopies.com) is a hosted service that
regularly archives your server-side resources. We create three
copies: hourly, daily and weekly.What's interesting is that the entire product
iswill be written in [EO](http://www.eolang.org),
a truly object-orented programming language.The logo is made by [Freepik](http://www.freepik.com) from [flaticon.com](http://www.flaticon.com),
licensed by [CC 3.0 BY](http://creativecommons.org/licenses/by/3.0/).## How to configure
Each script is a bash scenario, which you design yourself. ThreeCopies
just starts it regularly and records its output. These are some
recommendations on how to design the script. There are three parts:
input, package, and output. First, you collect some data from your data
sources (input). Then, you compress and encrypt the data (package). Finally,
you store the package somewhere (output).We start your script inside
[yegor256/threecopies](https://hub.docker.com/r/yegor256/threecopies-image/)
Docker container,
here is the
[`Dockerfile`](https://github.com/yegor256/threecopies-image/blob/master/Dockerfile).If you don't want your script to be executed too frequently, you may put
this code in front of it (to skip hourly executions, for example):```bash
if [ "${period}" == "hour" ]; then exit 0; fi
```### 1. Input
To retrieve the data from a MySQL database use [mysqldump](https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html):
```bash
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:```bash
cat > file.key <
-----END RSA PRIVATE KEY-----
EOT
chmod 700 file.key
ssh -Nf -i file.key -L3306:localhost:3306 [email protected]
rm file.key
```
and then connect with the above script:```bash
mysqldump --lock-tables=false --host=localhost ...same as above
```To download an entire FTP directory use [wget](https://www.gnu.org/software/wget/):
```bash
wget --mirror --tries=5 --quiet --output-file=/dev/null \
--ftp-user=username --ftp-password=password \
ftp://ftp.example.com/some-directory
```### 2. Package
To package a directory use [tar](https://help.ubuntu.com/community/BackupYourSystem/TAR):
```bash
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 your
Docker container, it will either be set to `hour`, `day`, or `week`.### 3. Output
To upload a file to Amazon S3, using [s3cmd](http://s3tools.org/s3cmd):
```bash
echo "[default]" > ~/.s3cfg
echo "access_key=AKIAICJKH*****CVLAFA" >> ~/.s3cfg
echo "secret_key=yQv3g3ao654Ns**********H1xQSfZlTkseA0haG" >> ~/.s3cfg
s3cmd --no-progress put "${tgz}" "s3://backup.example.com/${tgz}"
```## DynamoDB Schema
The `tc-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
```The `tc-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
```## How to contribute?
Just submit a pull request. Make sure `mvn -Pqulice install` passes.