doc/administration/package_information/omnibus_packages.md
{{< details >}}
{{< /details >}}
Below you can find some basic information on why GitLab provides packages and a Docker image that come with bundled dependencies.
These methods are great for physical and virtual machine installations, and simple Docker installations.
We have a few core goals with these packages:
GitLab in its core is a Ruby on Rails project. However, GitLab as a whole application is more complex and has multiple components. If these components are not present or are incorrectly configured, GitLab does not work or it works unpredictably.
The GitLab Architecture Overview in the GitLab development documentation shows some of these components and how they interact. Each of these components needs to be configured and kept up to date.
Most of the components also have external dependencies. For example, the Rails application depends on a number of Ruby gems. Some of these dependencies also have their own external dependencies which need to be present on the Operating System in order for them to function correctly.
Furthermore, GitLab has a monthly release cycle requiring frequent maintenance to stay up to date.
All the things listed previously present a challenge for the user maintaining the GitLab installation.
For applications such as GitLab, external dependencies usually bring the following challenges:
Keep in mind that if a dependency exists on your Operating System, it does not necessarily exist on other supported OSs.
A few benefits of a package with bundled dependencies:
Some drawbacks of a package with bundled dependencies:
The answer can be simplified to: less maintenance required. Instead of handling multiple packages that can break existing functionality if the versions are not compatible, only handle one.
Multiple packages require correct configuration in multiple locations. Keeping configuration in sync can be error prone.
If you have the skill set to maintain all current dependencies and enough time to handle any future dependencies that might get introduced, the previous reasons might not be good enough for you to not use a package from the Linux package.
There are two things to keep in mind before going down this route:
Keep in mind that a non-standard solution like the Linux package might be a better fit when the application has a number of moving parts.
GitLab Docker image is based on the Linux package.
Considering that container spawned from this image contains multiple processes, these types of containers are also referred to as 'fat containers'.
There are reasons for and against an image like this, but they are similar to what was noted previously:
This method is useful for organizations just getting started with containers and schedulers, and may not be ready for a more complex installation. This method is a great introduction, and works well for smaller organizations.