added TEXT to readme file, and remove old readme
This commit is contained in:
parent
ce46415a89
commit
26595574b5
155
README.md
155
README.md
|
|
@ -0,0 +1,155 @@
|
||||||
|
# Forgejo Backup & Restore Scripts
|
||||||
|
|
||||||
|
Automated backup and restore scripts for Forgejo Docker installations with safety features and cleanup.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- **Automated backups** with timestamps
|
||||||
|
- **Consistent snapshots** (stops containers during backup)
|
||||||
|
- **Safety-first restore** (creates pre-restore backup)
|
||||||
|
- **Automatic cleanup** (keeps last 7 backups)
|
||||||
|
- **Flexible restore** (latest or specific backup file)
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- Docker and Docker Compose installed
|
||||||
|
- Forgejo running via `docker-compose.yml`
|
||||||
|
- Bash shell environment
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
1. Save both scripts in your Forgejo project root directory
|
||||||
|
2. Make them executable:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
chmod +x backup.sh restore.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Backup Script
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./backup.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### What it does
|
||||||
|
|
||||||
|
1. Stops Forgejo containers (brief downtime)
|
||||||
|
2. Creates compressed archive of:
|
||||||
|
- `forgejo/` directory (data)
|
||||||
|
- `docker-compose.yml`
|
||||||
|
- `.gitignore`
|
||||||
|
- `README.md`
|
||||||
|
- `.git/` (optional, errors ignored)
|
||||||
|
3. Restarts Forgejo containers
|
||||||
|
4. Removes backups older than the last 7
|
||||||
|
|
||||||
|
### Backup location
|
||||||
|
|
||||||
|
Backups are saved to `backup/forgejo-backup-YYYY-MM-DD_HH-MM-SS.tar.gz`
|
||||||
|
|
||||||
|
### Automation
|
||||||
|
|
||||||
|
Add to crontab for automatic backups:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Daily backup at 2 AM
|
||||||
|
0 2 * * * /path/to/forgejo/backup.sh >> /path/to/forgejo/backup/backup.log 2>&1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Restore Script
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Restore from latest backup
|
||||||
|
./restore.sh
|
||||||
|
|
||||||
|
# Restore from specific backup file
|
||||||
|
./restore.sh forgejo-backup-2025-01-15_14-30-00.tar.gz
|
||||||
|
|
||||||
|
# Restore from full path
|
||||||
|
./restore.sh /path/to/backup/forgejo-backup-2025-01-15_14-30-00.tar.gz
|
||||||
|
```
|
||||||
|
|
||||||
|
### What it does
|
||||||
|
|
||||||
|
1. Prompts for confirmation (destructive operation)
|
||||||
|
2. Stops Forgejo containers
|
||||||
|
3. Creates safety backup of current state
|
||||||
|
4. Moves current data to `forgejo.old-TIMESTAMP`
|
||||||
|
5. Extracts selected backup
|
||||||
|
6. Restarts Forgejo containers
|
||||||
|
|
||||||
|
### Safety features
|
||||||
|
|
||||||
|
- **Interactive confirmation** required
|
||||||
|
- **Pre-restore backup** created automatically
|
||||||
|
- **Current data preserved** as `forgejo.old-TIMESTAMP`
|
||||||
|
- **Config files backed up** as `*.old-TIMESTAMP`
|
||||||
|
|
||||||
|
## File Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
forgejo-project/
|
||||||
|
├── backup.sh # Backup script
|
||||||
|
├── restore.sh # Restore script
|
||||||
|
├── docker-compose.yml
|
||||||
|
├── forgejo/ # Forgejo data directory
|
||||||
|
└── backup/ # Backup storage (auto-created)
|
||||||
|
├── forgejo-backup-2025-11-25_10-00-00.tar.gz
|
||||||
|
├── forgejo-backup-2025-11-24_10-00-00.tar.gz
|
||||||
|
└── forgejo-pre-restore-2025-11-25_11-30-00.tar.gz
|
||||||
|
```
|
||||||
|
|
||||||
|
## Important Notes
|
||||||
|
|
||||||
|
- **Downtime**: Brief downtime occurs during backup/restore operations
|
||||||
|
- **Disk space**: Backups can be large; monitor available space
|
||||||
|
- **Testing**: Test restore procedure before relying on backups
|
||||||
|
- **Permissions**: Scripts must be run from Forgejo project root
|
||||||
|
|
||||||
|
## Recovery Example
|
||||||
|
|
||||||
|
If you need to recover from a failed restore:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Stop containers
|
||||||
|
docker compose down
|
||||||
|
|
||||||
|
# Restore the pre-restore backup
|
||||||
|
./restore.sh forgejo-pre-restore-YYYY-MM-DD_HH-MM-SS.tar.gz
|
||||||
|
|
||||||
|
# Or manually restore old directory
|
||||||
|
rm -rf forgejo
|
||||||
|
mv forgejo.old-TIMESTAMP forgejo
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### "No backups found"
|
||||||
|
- Check that `backup/` directory exists and contains `*.tar.gz` files
|
||||||
|
- Run `backup.sh` first to create a backup
|
||||||
|
|
||||||
|
### "Permission denied"
|
||||||
|
- Ensure scripts are executable: `chmod +x backup.sh restore.sh`
|
||||||
|
- Check Docker permissions for your user
|
||||||
|
|
||||||
|
### "tar: Removing leading `/` from member names"
|
||||||
|
- This is normal behavior when using absolute paths
|
||||||
|
- The warning can be safely ignored
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT License - feel free to modify and use as needed.
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Improvements welcome! Consider adding:
|
||||||
|
- Remote backup support (rsync, S3, etc.)
|
||||||
|
- Encryption for sensitive data
|
||||||
|
- Email notifications
|
||||||
|
- Database-only backups for faster operations
|
||||||
|
- Backup verification tests
|
||||||
155
readme.md
155
readme.md
|
|
@ -1,155 +0,0 @@
|
||||||
# Forgejo Backup & Restore Scripts
|
|
||||||
|
|
||||||
Automated backup and restore scripts for Forgejo Docker installations with safety features and cleanup.
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
- **Automated backups** with timestamps
|
|
||||||
- **Consistent snapshots** (stops containers during backup)
|
|
||||||
- **Safety-first restore** (creates pre-restore backup)
|
|
||||||
- **Automatic cleanup** (keeps last 7 backups)
|
|
||||||
- **Flexible restore** (latest or specific backup file)
|
|
||||||
|
|
||||||
## Prerequisites
|
|
||||||
|
|
||||||
- Docker and Docker Compose installed
|
|
||||||
- Forgejo running via `docker-compose.yml`
|
|
||||||
- Bash shell environment
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
1. Save both scripts in your Forgejo project root directory
|
|
||||||
2. Make them executable:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
chmod +x backup.sh restore.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
## Backup Script
|
|
||||||
|
|
||||||
### Usage
|
|
||||||
|
|
||||||
```bash
|
|
||||||
./backup.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
### What it does
|
|
||||||
|
|
||||||
1. Stops Forgejo containers (brief downtime)
|
|
||||||
2. Creates compressed archive of:
|
|
||||||
- `forgejo/` directory (data)
|
|
||||||
- `docker-compose.yml`
|
|
||||||
- `.gitignore`
|
|
||||||
- `README.md`
|
|
||||||
- `.git/` (optional, errors ignored)
|
|
||||||
3. Restarts Forgejo containers
|
|
||||||
4. Removes backups older than the last 7
|
|
||||||
|
|
||||||
### Backup location
|
|
||||||
|
|
||||||
Backups are saved to `backup/forgejo-backup-YYYY-MM-DD_HH-MM-SS.tar.gz`
|
|
||||||
|
|
||||||
### Automation
|
|
||||||
|
|
||||||
Add to crontab for automatic backups:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Daily backup at 2 AM
|
|
||||||
0 2 * * * /path/to/forgejo/backup.sh >> /path/to/forgejo/backup/backup.log 2>&1
|
|
||||||
```
|
|
||||||
|
|
||||||
## Restore Script
|
|
||||||
|
|
||||||
### Usage
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Restore from latest backup
|
|
||||||
./restore.sh
|
|
||||||
|
|
||||||
# Restore from specific backup file
|
|
||||||
./restore.sh forgejo-backup-2025-01-15_14-30-00.tar.gz
|
|
||||||
|
|
||||||
# Restore from full path
|
|
||||||
./restore.sh /path/to/backup/forgejo-backup-2025-01-15_14-30-00.tar.gz
|
|
||||||
```
|
|
||||||
|
|
||||||
### What it does
|
|
||||||
|
|
||||||
1. Prompts for confirmation (destructive operation)
|
|
||||||
2. Stops Forgejo containers
|
|
||||||
3. Creates safety backup of current state
|
|
||||||
4. Moves current data to `forgejo.old-TIMESTAMP`
|
|
||||||
5. Extracts selected backup
|
|
||||||
6. Restarts Forgejo containers
|
|
||||||
|
|
||||||
### Safety features
|
|
||||||
|
|
||||||
- **Interactive confirmation** required
|
|
||||||
- **Pre-restore backup** created automatically
|
|
||||||
- **Current data preserved** as `forgejo.old-TIMESTAMP`
|
|
||||||
- **Config files backed up** as `*.old-TIMESTAMP`
|
|
||||||
|
|
||||||
## File Structure
|
|
||||||
|
|
||||||
```
|
|
||||||
forgejo-project/
|
|
||||||
├── backup.sh # Backup script
|
|
||||||
├── restore.sh # Restore script
|
|
||||||
├── docker-compose.yml
|
|
||||||
├── forgejo/ # Forgejo data directory
|
|
||||||
└── backup/ # Backup storage (auto-created)
|
|
||||||
├── forgejo-backup-2025-11-25_10-00-00.tar.gz
|
|
||||||
├── forgejo-backup-2025-11-24_10-00-00.tar.gz
|
|
||||||
└── forgejo-pre-restore-2025-11-25_11-30-00.tar.gz
|
|
||||||
```
|
|
||||||
|
|
||||||
## Important Notes
|
|
||||||
|
|
||||||
- **Downtime**: Brief downtime occurs during backup/restore operations
|
|
||||||
- **Disk space**: Backups can be large; monitor available space
|
|
||||||
- **Testing**: Test restore procedure before relying on backups
|
|
||||||
- **Permissions**: Scripts must be run from Forgejo project root
|
|
||||||
|
|
||||||
## Recovery Example
|
|
||||||
|
|
||||||
If you need to recover from a failed restore:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Stop containers
|
|
||||||
docker compose down
|
|
||||||
|
|
||||||
# Restore the pre-restore backup
|
|
||||||
./restore.sh forgejo-pre-restore-YYYY-MM-DD_HH-MM-SS.tar.gz
|
|
||||||
|
|
||||||
# Or manually restore old directory
|
|
||||||
rm -rf forgejo
|
|
||||||
mv forgejo.old-TIMESTAMP forgejo
|
|
||||||
docker compose up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
## Troubleshooting
|
|
||||||
|
|
||||||
### "No backups found"
|
|
||||||
- Check that `backup/` directory exists and contains `*.tar.gz` files
|
|
||||||
- Run `backup.sh` first to create a backup
|
|
||||||
|
|
||||||
### "Permission denied"
|
|
||||||
- Ensure scripts are executable: `chmod +x backup.sh restore.sh`
|
|
||||||
- Check Docker permissions for your user
|
|
||||||
|
|
||||||
### "tar: Removing leading `/` from member names"
|
|
||||||
- This is normal behavior when using absolute paths
|
|
||||||
- The warning can be safely ignored
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT License - feel free to modify and use as needed.
|
|
||||||
|
|
||||||
## Contributing
|
|
||||||
|
|
||||||
Improvements welcome! Consider adding:
|
|
||||||
- Remote backup support (rsync, S3, etc.)
|
|
||||||
- Encryption for sensitive data
|
|
||||||
- Email notifications
|
|
||||||
- Database-only backups for faster operations
|
|
||||||
- Backup verification tests
|
|
||||||
Loading…
Reference in a new issue