GitLab CE Installation and Version Deployment Architecture

The deployment of GitLab Community Edition (CE) represents a sophisticated orchestration of software installation that varies significantly depending on the chosen hosting environment and the underlying operating system. Whether a technician is deploying a fresh instance on a modern Ubuntu server, managing a legacy CentOS environment, or leveraging containerized orchestration via Docker, the process requires a precise sequence of dependency resolution and repository configuration. The transition from a bare-metal or virtual machine installation to a self-hosted server involves not only the execution of installation scripts but also the strategic management of system resources and network security protocols to ensure the application remains accessible and performant.

Operating System Compatibility and Lifecycle Management

Selecting the correct operating system is the most critical prerequisite for a successful GitLab CE deployment. The relationship between the OS version and the supported GitLab release is strict, as evidenced by the End-of-Life (EOL) schedules maintained by the community and official support channels.

The alignment of OS versions with GitLab releases ensures that the underlying kernel and system libraries are compatible with the Omnibus package. For instance, those utilizing legacy systems must be aware of the following definitive support boundaries:

Operating System End of Life Date Last Supported GitLab Version
CentOS 6 and RHEL 6 November 2020 GitLab CE / GitLab EE 13.6
CentOS 7 and RHEL 7 June 2024 GitLab CE / GitLab EE 17.7
CentOS 8 December 2021 GitLab CE / GitLab EE 14.6
Oracle Linux 7 December 2024 GitLab CE / GitLab EE 17.7
Scientific Linux 7 June 2024 GitLab CE / GitLab EE 17.7
Debian 7 Wheezy May 2018 GitLab CE / GitLab EE 11.6
Debian 8 Jessie June 2020 GitLab CE / GitLab EE 13.3
Debian 9 Stretch June 2022 GitLab CE / GitLab EE 15.2
Debian 10 Buster June 2024 GitLab CE / GitLab EE 17.5
OpenSUSE 42.1 May 2017 GitLab CE / GitLab EE 9.3
OpenSUSE 42.2 January 2018 GitLab CE / GitLab EE 10.4
OpenSUSE 42.3 July 2019 GitLab CE / GitLab EE 12.1
OpenSUSE 13.2 January 2017 GitLab CE / GitLab EE 9.1
OpenSUSE 15.0 December 2019 GitLab CE / GitLab EE 12.5
OpenSUSE 15.1 November 2020 GitLab CE / GitLab EE 13.12
OpenSUSE 15.2 December 2021 GitLab CE / GitLab EE 14.7
OpenSUSE 15.3 December 2022 GitLab CE / GitLab EE 15.10
OpenSUSE 15.4 December 2023 GitLab CE / GitLab EE 16.7
OpenSUSE 15.5 December 2024 GitLab CE / GitLab EE 17.8
SLES 15 SP2 December 2024 GitLab EE 18.1
Raspbian Wheezy May 2015 GitLab CE 8.17
Raspbian Jessie May 2017 GitLab CE 11.7
Raspbian Stretch June 2020 GitLab CE 13.3
Raspberry Pi OS Buster June 2024 GitLab CE 17.7
Ubuntu 12.04 April 2017 GitLab CE / GitLab EE 9.1
Ubuntu 14.04 April 2019 GitLab CE / GitLab EE 11.10
Ubuntu 16.04 April 2021 GitLab CE / GitLab EE 13.12
Ubuntu 18.04 June 2023 GitLab CE / GitLab EE 16.11
Ubuntu 20.04 May 2025 GitLab CE / GitLab EE 18.11

The impact of these dates is absolute; attempting to install a version of GitLab beyond the last supported release on an EOL operating system will likely lead to catastrophic installation failure or runtime instability. This creates a restrictive environment where users must upgrade their OS to access newer GitLab features.

Future-Proofing and Modern OS Support

For users deploying on current or future hardware, the support matrix extends into the late 2020s and early 2030s. This longevity allows enterprises to plan their infrastructure cycles with confidence.

The following table details the architecture and proposed support windows for modern distributions:

Operating System First Supported Version Architecture OS EOL Proposed Last Version
AlmaLinux 8 GitLab CE/EE 14.5.0 x86_64, aarch64 March 2029 GitLab CE/EE 21.10.0
AlmaLinux 9 GitLab CE/EE 16.0.0 x86_64, aarch64 May 2032 GitLab CE/EE 25.0.0
AlmaLinux 10 GitLab CE/EE 18.6.0 x86_64, aarch64 May 2035 GitLab CE/EE 28.0.0
Amazon Linux 2 GitLab CE/EE 14.9.0 amd64, arm64 June 2026 GitLab CE/EE 19.1.0
Amazon Linux 2023 GitLab CE/EE 16.3.0 amd64, arm64 June 2029 GitLab CE/EE 22.1.0
Debian 11 GitLab CE/EE 14.6.0 amd64, arm64 Aug 2026 GitLab CE/EE 19.3.0
Debian 12 GitLab CE/EE 16.1.0 amd64, arm64 June 2028 GitLab CE/EE 19.3.0
Debian 13 GitLab CE/EE 18.5.0 amd64, arm64 June 2030 GitLab CE/EE 23.1.0
openSUSE Leap 15.6 GitLab CE/EE 17.6.0 x86_64, aarch64 Dec 2025 TBD
SLES 12 GitLab EE 9.0.0 x86_64 Oct 2027 TBD

A critical technical detail for ARM-based deployments is that the terms arm64 and aarch64 are interchangeable and refer to the same CPU architecture. However, users should be cautioned that known issues exist when running GitLab on ARM, which may impact performance or stability. Furthermore, 32-bit support has been deprecated; GitLab 17.11 was the final version available for the 32-bit Raspberry Pi OS (Raspbian) platform.

Ubuntu Server Deployment Workflow

Installing GitLab CE on Ubuntu requires a structured approach that begins with the preparation of the system environment to ensure all prerequisite libraries are present.

The initial phase involves updating the local package index to ensure the latest metadata is retrieved from the Ubuntu repositories:

sudo apt update

Following the update, the system must be equipped with essential dependencies. These tools are leveraged both during the initial installation process and for the ongoing operation of the server:

sudo apt install ca-certificates curl openssh-server postfix tzdata perl

During the installation of postfix, the user will be prompted to select a configuration. The recommended choice is "Internet Site," which allows the server to send mail directly. At this stage, the user must provide the server's domain name to properly configure the mail system.

Once the dependencies are verified, the installation process transitions to the GitLab-specific repository configuration. This is achieved by downloading a shell script that automates the repository setup:

cd /tmp

curl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh

For security-conscious administrators, it is recommended to inspect the script's contents before execution using the less command:

less /tmp/script.deb.sh

After verification, the script is executed to configure the system to use the official GitLab maintained repositories:

sudo bash /tmp/script.deb.sh

The final step in the Ubuntu installation is the execution of the actual package installation via the apt package manager:

sudo apt install gitlab-ce

CentOS 8 and Specific Version Control

In environments like CentOS 8, the installation process utilizes the rpm based system. A common challenge for administrators is the need to install a specific version of GitLab rather than the latest release.

The standard installation script for CentOS 8 is executed as follows:

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash

This script manages the deployment of GitLab and its associated dependency packages. However, the script itself is designed to set up the repository; it does not dictate the version installed. To install a specific version, the administrator must use the package manager (dnf) after the repository has been added.

To identify which versions are available in the repository, the following command is used:

dnf search gitlab-ee*

Once the specific version string is identified, the installation is performed by specifying that version. For example, to install version 13.5.1, the command would be:

dnf install gitlab-ce-13.5.1-ee.0.el8

This granular control over the version is essential for organizations that need to match their GitLab version with specific plugin requirements or to follow a staged multi-step upgrade path as outlined in the official Omnibus documentation.

Dockerized Deployment for Local Environments

For developers who require a local testing environment or prefer an isolated deployment, GitLab CE can be launched as a container. This method bypasses the need for OS-level dependency management and repository scripts, instead relying on a pre-configured image.

The deployment is initiated using the docker run command with specific flags to manage networking, storage, and persistence:

docker run --detach --hostname localhost --publish 8443:443 --publish 8080:80 --publish 6022:22 --name gitlab --restart always --volume code/gitlab/config:/etc/gitlab --volume code/gitlab/logs:/var/log/gitlab --volume code/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce

The configuration of this container involves several key parameters:

  • Hostname: The --hostname localhost flag is used, which is sufficient for local development and testing.
  • Port Mapping:
    • Port 8080 on the host is mapped to port 80 in the container (HTTP).
    • Port 8443 on the host is mapped to port 443 in the container (HTTPS).
    • Port 6022 on the host is mapped to port 22 in the container (SSH).
  • Persistence: Three volumes are mapped to ensure that configuration, logs, and application data survive container restarts or updates:
    • /etc/gitlab for configuration.
    • /var/log/gitlab for system logs.
    • /var/opt/gitlab for the primary application data.

Network Security and Firewall Configuration

Regardless of the installation method, GitLab is a web application that requires specific network ports to be open to function. On Ubuntu systems using the ufw (Uncomplicated Firewall), the current status must be verified:

sudo ufw status

A typical secure configuration may only allow SSH traffic. However, GitLab requires HTTP and HTTPS traffic to be permitted. Since GitLab provides the ability to request free TLS/SSL certificates from Let's Encrypt, both port 80 and port 443 must be opened.

The protocol to port mapping is defined in the /etc/services file, allowing administrators to authorize traffic by name or by port number to ensure that web users can access the GitLab interface and that the Let's Encrypt validation process can complete successfully.

Community-Supported Installation Alternatives

While the official Omnibus and Docker methods are recommended, the wider GitLab community provides several unofficial installation methods. These are provided "as-is" and are not supported by GitLab official support channels.

The following community-driven methods exist for specialized environments:

  • Debian native packages, maintained by Pirate Praveen.
  • FreeBSD packages, maintained by Torsten Zühlsdorff.
  • Arch Linux packages, provided by the Arch Linux community.
  • Puppet modules, provided by Vox Pupuli.
  • Ansible playbooks, provided by Jeff Geerling.
  • GitLab virtual appliances for KVM, provided by OpenNebula.
  • Cloudron App Library installations via Cloudron.

These alternatives are useful for users operating in environments where the Omnibus package is not feasible, though they carry the risk of lacking official support and updates.

Conclusion

The deployment of GitLab Community Edition is a multi-faceted process that requires a deep understanding of the target operating system's lifecycle and architectural constraints. From the stringent EOL requirements of legacy Debian and CentOS systems to the flexible, volume-mapped nature of Docker containers, the installation path is determined by the need for stability, scalability, and version control. The use of official repository scripts ensures a streamlined update path, while the ability to specify versions via dnf or apt provides the necessary control for complex enterprise upgrades. Ultimately, the success of a GitLab CE installation depends on the correct alignment of dependencies, the proper configuration of network firewalls to allow HTTP/HTTPS traffic, and the strategic selection of a supported OS architecture, such as x86_64 or aarch64.

Sources

  1. GitLab Forum
  2. GitLab Official Documentation
  3. DigitalOcean Community Tutorials
  4. Dev.to - Ishmam Abir

Related Posts