From 57002df9a5d3d8147f616bc7cfec775e1129e972 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis <axilleas@axilleas.me> Date: Fri, 22 Jul 2016 12:03:54 +0000 Subject: [PATCH] Merge branch 'doc-refactor-storage-path' into 'master' Refactor repository storages documentation Use detailed information on using the multiple repository storage feature See merge request !589 --- doc/README.md | 1 + .../img/repository_storages_admin_ui.png | Bin 0 -> 17081 bytes doc/administration/repository_storages.md | 81 ++++++++++++++++-- 3 files changed, 73 insertions(+), 9 deletions(-) create mode 100644 doc/administration/img/repository_storages_admin_ui.png diff --git a/doc/README.md b/doc/README.md index 07421db9ba2b9..1fddf3046024c 100644 --- a/doc/README.md +++ b/doc/README.md @@ -64,6 +64,7 @@ - [Sidekiq Troubleshooting](administration/troubleshooting/sidekiq.md) Debug when Sidekiq appears hung and is not processing jobs. - [High Availability](administration/high_availability/README.md) Configure multiple servers for scaling or high availability. - [Container Registry](administration/container_registry.md) Configure Docker Registry with GitLab. +- [Multiple mountpoints for the repositories storage](administration/repository_storages.md) Define multiple repository storage paths to distribute the storage load. ## Contributor documentation diff --git a/doc/administration/img/repository_storages_admin_ui.png b/doc/administration/img/repository_storages_admin_ui.png new file mode 100644 index 0000000000000000000000000000000000000000..599350bc098052df2b51da8cb065f246463d8031 GIT binary patch literal 17081 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 C0zV7@ literal 0 HcmV?d00001 diff --git a/doc/administration/repository_storages.md b/doc/administration/repository_storages.md index 81bfe173151eb..a9e22e2bdaae4 100644 --- a/doc/administration/repository_storages.md +++ b/doc/administration/repository_storages.md @@ -1,18 +1,81 @@ # Repository storages -GitLab allows you to define repository storage paths to enable distribution of -storage load between several mount points. - -## For installations from source +> [Introduced][ce-4578] in GitLab 8.10. -Add your repository storage paths in your `gitlab.yml` under repositories -> storages, using key -> value pairs. +GitLab allows you to define multiple repository storage paths to distribute the +storage load between several mount points. >**Notes:** +> - You must have at least one storage path called `default`. +- The paths are defined in key-value pairs. The key is an arbitrary name you + can pick to name the file path. +- The target directories and any of its subpaths must not be a symlink. + +## Configure GitLab + +>**Warning:** - In order for backups to work correctly the storage path must **not** be a -mount point and the GitLab user should have correct permissions for the parent -directory of the path. + mount point and the GitLab user should have correct permissions for the parent + directory of the path. + +Edit the configuration files and add the full paths of the alternative repository +storage paths. In the example below we added two more mountpoints that we named +`nfs` and `cephfs` respectively. + +**For installations from source** + +1. Edit `gitlab.yml` and add the storage paths: + + ```yaml + repositories: + # Paths where repositories can be stored. Give the canonicalized absolute pathname. + # NOTE: REPOS PATHS MUST NOT CONTAIN ANY SYMLINK!!! + storages: # You must have at least a 'default' storage path. + default: /home/git/repositories + nfs: /mnt/nfs/repositories + cephfs: /mnt/cephfs/repositories + ``` + +1. [Restart GitLab] for the changes to take effect. + +The `gitlab_shell: repos_path` entry in `gitlab.yml` will be deprecated and +replaced by `repositories: storages` in the future, so if you are upgrading +from a version prior to 8.10, make sure to add the configuration as described +in the step above. After you make the changes and confirm they are working, +you can remove: + +```yaml +repos_path: /home/git/repositories +``` + +which is located under the `gitlab_shell` section. + +--- + +**For Omnibus installations** + +1. Edit `/etc/gitlab/gitlab.rb` by appending the rest of the paths to the + default one: + + ```ruby + git_data_dirs({ + "default" => "/var/opt/gitlab/git-data", + "nfs" => "/mnt/nfs/git-data", + "cephfs" => "/mnt/cephfs/git-data" + }) + ``` + + Note that Omnibus stores the repositories in a `repositories` subdirectory + of the `git-data` directory. + +## Choose where new project repositories will be stored + +Once you set the multiple storage paths, you can choose where new projects will +be stored via the **Application Settings** in the Admin area. -## For omnibus installations + -Follow the instructions at https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/configuration.md#storing-git-data-in-an-alternative-directory +[ce-4578]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/4578 +[restart gitlab]: restart_gitlab.md#installations-from-source +[reconfigure gitlab]: restart_gitlab.md#omnibus-gitlab-reconfigure -- GitLab