2014-05-27 08:12:15 -04:00
# Backup restore
2014-06-27 09:02:07 -04:00
![backup banner ](backup_hrz.png )
2014-04-24 18:48:22 -04:00
## Create a backup of the GitLab system
2012-12-02 07:56:04 -05:00
2014-07-25 05:12:17 -04:00
A backup creates an archive file that contains the database, all repositories and all attachments.
This archive will be saved in backup_path (see `config/gitlab.yml` ).
2012-12-02 07:56:04 -05:00
The filename will be `[TIMESTAMP]_gitlab_backup.tar` . This timestamp can be used to restore an specific backup.
2014-09-19 11:39:25 -04:00
You can only restore a backup to exactly the same version of GitLab that you created it on, for example 7.2.1.
2012-12-02 07:56:04 -05:00
```
2014-09-29 06:55:15 -04:00
# use this command if you've installed GitLab with the Omnibus package
2014-06-23 04:38:22 -04:00
sudo gitlab-rake gitlab:backup:create
2014-09-28 16:56:47 -04:00
# if you've installed GitLab from source or using the cookbook
2013-01-05 16:36:04 -05:00
bundle exec rake gitlab:backup:create RAILS_ENV=production
2012-12-02 07:56:04 -05:00
```
Example output:
```
Dumping database tables:
- Dumping table events... [DONE]
- Dumping table issues... [DONE]
- Dumping table keys... [DONE]
- Dumping table merge_requests... [DONE]
- Dumping table milestones... [DONE]
- Dumping table namespaces... [DONE]
- Dumping table notes... [DONE]
- Dumping table projects... [DONE]
- Dumping table protected_branches... [DONE]
- Dumping table schema_migrations... [DONE]
- Dumping table services... [DONE]
- Dumping table snippets... [DONE]
- Dumping table taggings... [DONE]
- Dumping table tags... [DONE]
- Dumping table users... [DONE]
- Dumping table users_projects... [DONE]
- Dumping table web_hooks... [DONE]
- Dumping table wikis... [DONE]
Dumping repositories:
- Dumping repository abcd... [DONE]
Creating backup archive: $TIMESTAMP_gitlab_backup.tar [DONE]
Deleting tmp directories...[DONE]
Deleting old backups... [SKIPPING]
```
2014-09-29 09:02:39 -04:00
## Upload backups to remote (cloud) storage
2014-09-30 02:56:16 -04:00
Starting with GitLab 7.4 you can let the backup script upload the '.tar' file it creates.
It uses the [Fog library ](http://fog.io/ ) to perform the upload.
In the example below we use Amazon S3 for storage.
But Fog also lets you use [other storage providers ](http://fog.io/storage/ ).
2014-09-29 09:02:39 -04:00
For omnibus packages:
```ruby
gitlab_rails['backup_upload_connection'] = {
'provider' => 'AWS',
2014-09-30 06:02:37 -04:00
'region' => 'eu-west-1',
2014-09-29 09:02:39 -04:00
'aws_access_key_id' => 'AKIAKIAKI',
'aws_secret_access_key' => 'secret123'
}
gitlab_rails['backup_upload_remote_directory'] = 'my.s3.bucket'
```
For installations from source:
```yaml
backup:
# snip
upload:
# Fog storage connection settings, see http://fog.io/storage/ .
connection:
provider: AWS
2014-09-30 06:02:37 -04:00
region: eu-west-1
2014-09-29 09:02:39 -04:00
aws_access_key_id: AKIAKIAKI
aws_secret_access_key: 'secret123'
# The remote 'directory' to store your backups. For S3, this would be the bucket name.
remote_directory: 'my.s3.bucket'
```
If you are uploading your backups to S3 you will probably want to create a new
IAM user with restricted access rights. To give the upload user access only for
2014-09-30 06:03:44 -04:00
uploading backups create the following IAM profile, replacing `my.s3.bucket`
2014-09-29 09:02:39 -04:00
with the name of your bucket:
```json
{
2014-09-30 06:03:44 -04:00
"Version": "2012-10-17",
2014-09-29 09:02:39 -04:00
"Statement": [
{
2014-09-30 06:03:44 -04:00
"Sid": "Stmt1412062044000",
2014-09-29 09:02:39 -04:00
"Effect": "Allow",
"Action": [
"s3:AbortMultipartUpload",
"s3:GetBucketAcl",
"s3:GetBucketLocation",
"s3:GetObject",
"s3:GetObjectAcl",
2014-09-30 06:03:44 -04:00
"s3:ListBucketMultipartUploads",
2014-09-29 09:02:39 -04:00
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::my.s3.bucket/*"
]
2014-09-30 06:03:44 -04:00
},
2014-09-29 09:02:39 -04:00
{
2014-09-30 06:03:44 -04:00
"Sid": "Stmt1412062097000",
2014-09-29 09:02:39 -04:00
"Effect": "Allow",
"Action": [
2014-09-30 06:03:44 -04:00
"s3:GetBucketLocation",
"s3:ListAllMyBuckets"
2014-09-29 09:02:39 -04:00
],
"Resource": [
"*"
]
2014-09-30 06:03:44 -04:00
},
2014-09-29 09:02:39 -04:00
{
2014-09-30 06:03:44 -04:00
"Sid": "Stmt1412062128000",
2014-09-29 09:02:39 -04:00
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::my.s3.bucket"
]
}
]
}
```
2014-07-25 05:12:17 -04:00
## Storing configuration files
Please be informed that a backup does not store your configuration files.
2014-09-28 16:56:47 -04:00
If you use an Omnibus package please see the [instructions in the readme to backup your configuration ](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md#backup-and-restore-omnibus-gitlab-configuration ).
2014-07-25 05:12:17 -04:00
If you have a cookbook installation there should be a copy of your configuration in Chef.
2014-08-04 16:32:41 -04:00
If you have a manual installation please consider backing up your gitlab.yml file and any SSL keys and certificates.
2014-07-25 05:12:17 -04:00
2014-04-24 18:48:22 -04:00
## Restore a previously created backup
2012-12-02 07:56:04 -05:00
2014-09-19 11:39:25 -04:00
You can only restore a backup to exactly the same version of GitLab that you created it on, for example 7.2.1.
2012-12-02 07:56:04 -05:00
```
2014-09-29 06:55:15 -04:00
# Omnibus package installation
2014-06-23 04:38:22 -04:00
sudo gitlab-rake gitlab:backup:restore
# installation from source or cookbook
2013-01-05 16:36:04 -05:00
bundle exec rake gitlab:backup:restore RAILS_ENV=production
2012-12-02 07:56:04 -05:00
```
Options:
```
BACKUP=timestamp_of_backup (required if more than one backup exists)
```
Example output:
```
Unpacking backup... [DONE]
Restoring database tables:
-- create_table("events", {:force=>true})
-> 0.2231s
[...]
- Loading fixture events...[DONE]
- Loading fixture issues...[DONE]
- Loading fixture keys...[SKIPPING]
- Loading fixture merge_requests...[DONE]
- Loading fixture milestones...[DONE]
- Loading fixture namespaces...[DONE]
- Loading fixture notes...[DONE]
- Loading fixture projects...[DONE]
- Loading fixture protected_branches...[SKIPPING]
- Loading fixture schema_migrations...[DONE]
- Loading fixture services...[SKIPPING]
- Loading fixture snippets...[SKIPPING]
- Loading fixture taggings...[SKIPPING]
- Loading fixture tags...[SKIPPING]
- Loading fixture users...[DONE]
- Loading fixture users_projects...[DONE]
- Loading fixture web_hooks...[SKIPPING]
- Loading fixture wikis...[SKIPPING]
Restoring repositories:
- Restoring repository abcd... [DONE]
Deleting tmp directories...[DONE]
```
2014-01-27 12:54:28 -05:00
2014-04-24 18:48:22 -04:00
## Configure cron to make daily backups
2014-01-27 12:54:28 -05:00
2014-09-29 06:55:15 -04:00
For Omnibus package installations, see https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md#scheduling-a-backup .
2014-06-23 04:38:22 -04:00
2014-09-28 16:56:47 -04:00
For installation from source or cookbook:
2014-01-27 12:54:28 -05:00
```
cd /home/git/gitlab
sudo -u git -H editor config/gitlab.yml # Enable keep_time in the backup section to automatically delete old backups
sudo -u git crontab -e # Edit the crontab for the git user
```
Add the following lines at the bottom:
```
2014-09-25 03:36:01 -04:00
# Create a full backup of the GitLab repositories and SQL database every day at 4am
0 4 * * * cd /home/git/gitlab && PATH=/usr/local/bin:/usr/bin:/bin bundle exec rake gitlab:backup:create RAILS_ENV=production
2014-01-27 12:54:28 -05:00
```