https://github.com/bericp1/bitnami-wp-backup
Backup scripts for a bitnami WordPress instance
https://github.com/bericp1/bitnami-wp-backup
backups bitnami s3 wordpress
Last synced: about 1 month ago
JSON representation
Backup scripts for a bitnami WordPress instance
- Host: GitHub
- URL: https://github.com/bericp1/bitnami-wp-backup
- Owner: bericp1
- Created: 2019-12-17T17:38:33.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-12-18T22:41:15.000Z (over 6 years ago)
- Last Synced: 2025-06-16T04:33:03.804Z (12 months ago)
- Topics: backups, bitnami, s3, wordpress
- Language: Shell
- Size: 3.91 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Bitnami WP Backup Scripts
A backup script that can be run on a [Bitnami WordPress server](https://bitnami.com/stack/wordpress) to backup the
default WordPress install (database and files), optionally to AWS S3.
## Prerequisites
- If you want to backup to S3, ensure the `aws` CLI is installed: `sudo apt install awscli`
- [`wp`](https://developer.wordpress.org/cli/) which is installed by default on bitnami instances.
## Setup
### Step 1: Clone and place this repository
1. SSH into your Bitnami WordPress server as the `bitnami` user
2. `cd /opt`
3. `sudo git clone https://github.com/bericp1/bitnami-wp-backup.git wp-backup`
4. `cd wp-backup/`
5. `sudo mkdir logs`
6. `sudo chown -R bitnami:bitnami .`
7. `sudo chmod +x *.sh`
### Step 2 (Optional): Set up S3 backups
1. Create an S3 bucket with no public permissions
2. Create an IAM user with read/write access to that bucket, this policy should work (replace `bucket-name` with the
name of your bucket):
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowAllReadWriteObjectActions",
"Effect": "Allow",
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:GetBucketAcl",
"s3:GetBucketLocation",
"s3:GetBucketPolicy",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:ListMultipartUploadParts",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::bucket-name/*"
]
},
{
"Sid": "AllowRootAndHomeListingOfBucket",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::bucket-name"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"*"
]
}
}
}
]
}
```
3. Place the IAM user's credentials in `/opt/wp-backup/s3creds.sh` (in the double quotes, replacing
`YOUR_ACCESS_KEY_HERE` and `YOUR_SECRET_ACCESS_KEY_HERE`):
```shell script
export AWS_ACCESS_KEY_ID="YOUR_ACCESS_KEY_HERE"
export AWS_SECRET_ACCESS_KEY="YOUR_SECRET_ACCESS_KEY_HERE"
```
4. Change the permissions appropriately:
```shell script
chown bitnami:bitnami /opt/wp-backup/s3creds.sh && chmod 700 /opt/wp-backup/s3creds.sh
```
### Step 3: Test the script
If you are backing up to an S3 bucket, run (replacing `bucket-name` with the name of your bucket from above):
```shell script
source /opt/wp-backup/s3creds.sh && /opt/wp-backup/backup.sh "auto" "auto" "bucket-name"
```
Otherwise simply run:
```shell script
/opt/wp-backup/backup.sh
```
If an error occurs troubleshoot and fix it before continuing.
You may also want to test the cleanup script which deletes old backups
```shell script
/opt/wp-backup/cleanup.sh
```
### Step 4: Schedule the scripts to run daily
These cron jobs will log all output to `/opt/wp-backup/logs/`.
1. `sudo crontab -e -u bitnami` (select an editor if this is your first time running this script, nano is the easiest)
2. Add the following 2 lines to schedule backups for 7:30 AM UTC and cleanups for 8:30 AM UTC:
If you're using S3 (replace `bucket-name` with the name of your bucket from above):
```text
30 7 * * * . /opt/bitnami/scripts/setenv.sh; . /opt/wp-backup/s3creds.sh; /opt/wp-backup/backup.sh "auto" "auto" "bucket-name" >> "/opt/wp-backup/logs/cron-backup-`date -u +\%s`.txt" 2>&1
30 8 * * * . /opt/bitnami/scripts/setenv.sh; . /opt/wp-backup/s3creds.sh; /opt/wp-backup/cleanup.sh >> "/opt/wp-backup/logs/cron-cleanup-`date -u +\%s`.txt" 2>&1
```
Otherwise:
```text
30 7 * * * . /opt/bitnami/scripts/setenv.sh; /opt/wp-backup/backup.sh >> "/opt/wp-backup/logs/cron-backup-`date -u +\%s`.txt" 2>&1
30 8 * * * . /opt/bitnami/scripts/setenv.sh; /opt/wp-backup/cleanup.sh >> "/opt/wp-backup/logs/cron-cleanup-`date -u +\%s`.txt" 2>&1
```
## Manual / Advanced Usage
### `backup.sh [wp-root] [site-name] [s3-bucket]`
Backs up a WordPress install.
If `wp-root` is not provided or is literally `"auto"`, we will use the global `wp` command to determine where the
WordPress install is. This works on bitnami's WordPress stack by default since the global `wp` command is automatically
preconfigured to point to the default WordPress install hosted in `/opt/bitnami/apps/wordpress/htdocs`. You can specify
a root explicitly if needed using this parameter to override this.
`site-name` is used in the names of the backup files and folders. It must be a sanitized string that's safe to be used
in the names of files and folders. If `site-name` is not provided or is literally `"auto"`, we will use the global `wp`
command to generate a site name slug using the following PHP:
```php
echo sanitize_title(get_bloginfo("name"));
```
If `s3-bucket` is provided, the backup will also be stored in s3 in the specified bucket. Ensure the
`AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` environment variables are set in order for the `aws` CLI to
authenticate. The backup script will bail out early if we're unable to write to the backup destination within the
bucket.
### `cleanup.sh`
Cleans up old local backups. Right now this is not configurable and it will always remove any backup anywhere in
`/opt/wp-backup/backups` that hasn't been modified in 1 week.