CINXE.COM

Requirements 路 Install 路 Help 路 GitLab

<!DOCTYPE html> <html class="gl-light ui-neutral with-top-bar with-header " lang="en"> <head prefix="og: http://ogp.me/ns#"> <meta charset="utf-8"> <meta content="IE=edge" http-equiv="X-UA-Compatible"> <meta content="width=device-width, initial-scale=1" name="viewport"> <title>Requirements 路 Install 路 Help 路 GitLab</title> <script> //<![CDATA[ window.gon={};gon.api_version="v4";gon.default_avatar_url="https://git.openldap.org/assets/no_avatar-849f9c04a3a0d0cea2424ae97b27447dc64a7dbfae83c036c45b403392f0e8ba.png";gon.max_file_size=10;gon.asset_host=null;gon.webpack_public_path="/assets/webpack/";gon.relative_url_root="";gon.user_color_mode="gl-light";gon.user_color_scheme="white";gon.markdown_surround_selection=null;gon.markdown_automatic_lists=null;gon.math_rendering_limits_enabled=true;gon.recaptcha_api_server_url="https://www.recaptcha.net/recaptcha/api.js";gon.recaptcha_sitekey="6LfUn_oUAAAAAJfeg1RkE6gd8iumyQShel95_SE-";gon.gitlab_url="https://git.openldap.org";gon.promo_url="https://about.gitlab.com";gon.forum_url="https://forum.gitlab.com";gon.docs_url="https://docs.gitlab.com";gon.revision="56dedd4cf9e";gon.feature_category="not_owned";gon.gitlab_logo="/assets/gitlab_logo-2957169c8ef64c58616a1ac3f4fc626e8a35ce4eb3ed31bb0d873712f2a041a0.png";gon.secure=true;gon.sprite_icons="/assets/icons-aa2c8ddf99d22b77153ca2bb092a23889c12c597fc8b8de94b0f730eb53513f6.svg";gon.sprite_file_icons="/assets/file_icons/file_icons-59d148c7ea628b0ec3975493002fa45de1d4d8c15b2bf59775965ab9d67d62ab.svg";gon.emoji_sprites_css_path="/assets/emoji_sprites-bd26211944b9d072037ec97cb138f1a52cd03ef185cd38b8d1fcc963245199a1.css";gon.emoji_backend_version=4;gon.gridstack_css_path="/assets/lazy_bundles/gridstack-4cd1da7c8adb8553e78a4f5545a8ab57a46258e091e6ac0382e6de79bca5ea3c.css";gon.test_env=false;gon.disable_animations=false;gon.suggested_label_colors={"#cc338b":"Magenta-pink","#dc143c":"Crimson","#c21e56":"Rose red","#cd5b45":"Dark coral","#ed9121":"Carrot orange","#eee600":"Titanium yellow","#009966":"Green-cyan","#8fbc8f":"Dark sea green","#6699cc":"Blue-gray","#e6e6fa":"Lavender","#9400d3":"Dark violet","#330066":"Deep violet","#36454f":"Charcoal grey","#808080":"Gray"};gon.first_day_of_week=0;gon.time_display_relative=true;gon.time_display_format=0;gon.ee=true;gon.jh=false;gon.dot_com=false;gon.uf_error_prefix="UF";gon.pat_prefix="glpat-";gon.keyboard_shortcuts_enabled=true;gon.diagramsnet_url="https://embed.diagrams.net";gon.features={"sourceEditorToolbar":false,"vscodeWebIde":true,"uiForOrganizations":false,"organizationSwitching":false,"findAndReplace":false,"removeMonitorMetrics":true,"workItemsViewPreference":false,"searchButtonTopRight":false,"markdownPasteUrl":false,"mergeRequestDashboard":false,"duoChatDynamicDimension":true,"duoChatMultiThread":false,"advancedContextResolver":true,"vulnerabilityReportTypeScannerFilter":false};gon.roadmap_epics_limit=1000; //]]> </script> <link rel="stylesheet" href="/assets/application-61901f0326d988f31e7216b84669e4fa62cd86a0de409e286e83cd639cc996d4.css" /> <link rel="stylesheet" href="/assets/page_bundles/commit_description-1e2cba4dda3c7b30dd84924809020c569f1308dea51520fe1dd5d4ce31403195.css" /><link rel="stylesheet" href="/assets/page_bundles/work_items-22a76cdd1fe2ae5431b7ff603f86212acaf81b49c4a932f19e3b3222dc1881ee.css" /><link rel="stylesheet" href="/assets/page_bundles/notes_shared-30de79203a0836dddd3a4cf7364d63afb16a0f2deb0bbc654b00692872696739.css" /> <link rel="stylesheet" href="/assets/application_utilities-58bec0f2dc46133fc9e8548af9854688398e9d7263cc0fd95ec5739f2a069dec.css" /> <link rel="stylesheet" href="/assets/tailwind-5a00dff8ce8fc18c18a3c6b73b419c326b11e7dafe7cb551d38642da788f5e8f.css" /> <link rel="stylesheet" href="/assets/fonts-fae5d3f79948bd85f18b6513a025f863b19636e85b09a1492907eb4b1bb0557b.css" /> <link rel="stylesheet" href="/assets/highlight/themes/white-99cce4f4b362f6840d7134d4129668929fde49c4da11d6ebf17f99768adbd868.css" /> <link rel="preload" href="/assets/application_utilities-58bec0f2dc46133fc9e8548af9854688398e9d7263cc0fd95ec5739f2a069dec.css" as="style" type="text/css"> <link rel="preload" href="/assets/application-61901f0326d988f31e7216b84669e4fa62cd86a0de409e286e83cd639cc996d4.css" as="style" type="text/css"> <link rel="preload" href="/assets/highlight/themes/white-99cce4f4b362f6840d7134d4129668929fde49c4da11d6ebf17f99768adbd868.css" as="style" type="text/css"> <script src="/assets/webpack/runtime.c0f2325e.bundle.js" defer="defer"></script> <script src="/assets/webpack/main.a61010e6.chunk.js" defer="defer"></script> <script src="/assets/webpack/commons-pages.groups.analytics.dashboards-pages.groups.harbor.repositories-pages.groups.iteration_ca-fae0f519.5b107e61.chunk.js" defer="defer"></script> <script src="/assets/webpack/commons-pages.groups.new-pages.import.gitlab_projects.new-pages.import.manifest.new-pages.projects.n-44c6c18e.77d582f4.chunk.js" defer="defer"></script> <script src="/assets/webpack/commons-pages.search.show-super_sidebar.3f577741.chunk.js" defer="defer"></script> <script src="/assets/webpack/super_sidebar.07831d6d.chunk.js" defer="defer"></script> <script src="/assets/webpack/default.dfda7414.chunk.js" defer="defer"></script> <meta content="object" property="og:type"> <meta content="GitLab" property="og:site_name"> <meta content="Requirements 路 Install 路 Help 路 GitLab" property="og:title"> <meta content="Welcome to the OpenLDAP Gitlab instance" property="og:description"> <meta content="https://git.openldap.org/assets/twitter_card-570ddb06edf56a2312253c5872489847a0f385112ddbcd71ccfa1570febab5d2.jpg" property="og:image"> <meta content="64" property="og:image:width"> <meta content="64" property="og:image:height"> <meta content="https://git.openldap.org/help/install/requirements.md" property="og:url"> <meta content="summary" property="twitter:card"> <meta content="Requirements 路 Install 路 Help 路 GitLab" property="twitter:title"> <meta content="Welcome to the OpenLDAP Gitlab instance" property="twitter:description"> <meta content="https://git.openldap.org/assets/twitter_card-570ddb06edf56a2312253c5872489847a0f385112ddbcd71ccfa1570febab5d2.jpg" property="twitter:image"> <meta name="csrf-param" content="authenticity_token" /> <meta name="csrf-token" content="rGlKhti0ukhn5rug5sNyiBBsApCDqnUu4DD4iS3ymdwjITDkB4Zuh4d_0tVBZQJc_Hmbsq0fvF7WITlUYlY8sA" /> <meta name="csp-nonce" /> <meta name="action-cable-url" content="/-/cable" /> <link href="/-/manifest.json" rel="manifest"> <link rel="icon" type="image/png" href="/assets/favicon-72a2cad5025aa931d6ea56c3201d1f18e68a8cd39788c7c80d5b2b82aa5143ef.png" id="favicon" data-original-href="/assets/favicon-72a2cad5025aa931d6ea56c3201d1f18e68a8cd39788c7c80d5b2b82aa5143ef.png" /> <link rel="apple-touch-icon" type="image/x-icon" href="/assets/apple-touch-icon-b049d4bc0dd9626f31db825d61880737befc7835982586d015bded10b4435460.png" /> <link href="/search/opensearch.xml" rel="search" title="Search GitLab" type="application/opensearchdescription+xml"> <meta content="Welcome to the OpenLDAP Gitlab instance" name="description"> <meta content="#ececef" name="theme-color"> </head> <body class="tab-width-8 gl-browser-ie gl-platform-windows" data-page="help:show"> <script> //<![CDATA[ gl = window.gl || {}; gl.client = {"isIe":true,"isWindows":true}; //]]> </script> <header class="header-logged-out" data-testid="navbar"> <a class="gl-sr-only gl-accessibility" href="#content-body">Skip to content</a> <div class="container-fluid"> <nav aria-label="Explore GitLab" class="header-logged-out-nav gl-flex gl-gap-3 gl-justify-between"> <div class="gl-flex gl-items-center gl-gap-1"> <span class="gl-sr-only">GitLab</span> <a title="Homepage" id="logo" class="header-logged-out-logo has-tooltip" aria-label="Homepage" href="/"><svg aria-hidden="true" role="img" class="tanuki-logo" width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="tanuki-shape tanuki" d="m24.507 9.5-.034-.09L21.082.562a.896.896 0 0 0-1.694.091l-2.29 7.01H7.825L5.535.653a.898.898 0 0 0-1.694-.09L.451 9.411.416 9.5a6.297 6.297 0 0 0 2.09 7.278l.012.01.03.022 5.16 3.867 2.56 1.935 1.554 1.176a1.051 1.051 0 0 0 1.268 0l1.555-1.176 2.56-1.935 5.197-3.89.014-.01A6.297 6.297 0 0 0 24.507 9.5Z" fill="#E24329"/> <path class="tanuki-shape right-cheek" d="m24.507 9.5-.034-.09a11.44 11.44 0 0 0-4.56 2.051l-7.447 5.632 4.742 3.584 5.197-3.89.014-.01A6.297 6.297 0 0 0 24.507 9.5Z" fill="#FC6D26"/> <path class="tanuki-shape chin" d="m7.707 20.677 2.56 1.935 1.555 1.176a1.051 1.051 0 0 0 1.268 0l1.555-1.176 2.56-1.935-4.743-3.584-4.755 3.584Z" fill="#FCA326"/> <path class="tanuki-shape left-cheek" d="M5.01 11.461a11.43 11.43 0 0 0-4.56-2.05L.416 9.5a6.297 6.297 0 0 0 2.09 7.278l.012.01.03.022 5.16 3.867 4.745-3.584-7.444-5.632Z" fill="#FC6D26"/> </svg> </a></div> <ul class="gl-list-none gl-p-0 gl-m-0 gl-flex gl-gap-3 gl-items-center gl-grow"> <li class="header-logged-out-nav-item"> <a class="" href="/explore">Explore</a> </li> </ul> <ul class="gl-list-none gl-p-0 gl-m-0 gl-flex gl-gap-3 gl-items-center gl-justify-end"> <li class="header-logged-out-nav-item"> <a href="/users/sign_in?redirect_to_referer=yes">Sign in</a> </li> <li class="header-logged-out-nav-item"> <a class="gl-button btn btn-md btn-confirm !gl-inline-flex" href="/users/sign_up"><span class="gl-button-text"> Register </span> </a></li> </ul> </nav> </div> </header> <div class="layout-page page-with-super-sidebar"> <aside class="js-super-sidebar super-sidebar super-sidebar-loading" data-command-palette="{}" data-force-desktop-expanded-sidebar="true" data-is-saas="false" data-root-path="/" data-sidebar="{&quot;is_logged_in&quot;:false,&quot;context_switcher_links&quot;:[{&quot;title&quot;:&quot;Explore&quot;,&quot;link&quot;:&quot;/explore&quot;,&quot;icon&quot;:&quot;compass&quot;}],&quot;current_menu_items&quot;:[{&quot;id&quot;:&quot;projects_menu&quot;,&quot;title&quot;:&quot;Projects&quot;,&quot;icon&quot;:&quot;project&quot;,&quot;avatar_shape&quot;:&quot;rect&quot;,&quot;link&quot;:&quot;/explore/projects/starred&quot;,&quot;is_active&quot;:false,&quot;items&quot;:[],&quot;separated&quot;:false},{&quot;id&quot;:&quot;groups_menu&quot;,&quot;title&quot;:&quot;Groups&quot;,&quot;icon&quot;:&quot;group&quot;,&quot;avatar_shape&quot;:&quot;rect&quot;,&quot;link&quot;:&quot;/explore/groups&quot;,&quot;is_active&quot;:false,&quot;items&quot;:[],&quot;separated&quot;:false},{&quot;id&quot;:&quot;catalog_menu&quot;,&quot;title&quot;:&quot;CI/CD Catalog&quot;,&quot;icon&quot;:&quot;catalog-checkmark&quot;,&quot;avatar_shape&quot;:&quot;rect&quot;,&quot;link&quot;:&quot;/explore/catalog&quot;,&quot;is_active&quot;:false,&quot;items&quot;:[],&quot;separated&quot;:false},{&quot;id&quot;:&quot;topics_menu&quot;,&quot;title&quot;:&quot;Topics&quot;,&quot;icon&quot;:&quot;labels&quot;,&quot;avatar_shape&quot;:&quot;rect&quot;,&quot;link&quot;:&quot;/explore/projects/topics&quot;,&quot;is_active&quot;:false,&quot;items&quot;:[],&quot;separated&quot;:false},{&quot;id&quot;:&quot;snippets_menu&quot;,&quot;title&quot;:&quot;Snippets&quot;,&quot;icon&quot;:&quot;snippet&quot;,&quot;avatar_shape&quot;:&quot;rect&quot;,&quot;link&quot;:&quot;/explore/snippets&quot;,&quot;is_active&quot;:false,&quot;items&quot;:[],&quot;separated&quot;:false}],&quot;current_context_header&quot;:&quot;Explore&quot;,&quot;support_path&quot;:&quot;https://about.gitlab.com/get-help/&quot;,&quot;docs_path&quot;:&quot;/help/docs&quot;,&quot;display_whats_new&quot;:false,&quot;show_version_check&quot;:null,&quot;search&quot;:{&quot;search_path&quot;:&quot;/search&quot;,&quot;issues_path&quot;:&quot;/dashboard/issues&quot;,&quot;mr_path&quot;:&quot;/dashboard/merge_requests&quot;,&quot;autocomplete_path&quot;:&quot;/search/autocomplete&quot;,&quot;settings_path&quot;:&quot;/search/settings&quot;,&quot;search_context&quot;:{&quot;for_snippets&quot;:null}},&quot;panel_type&quot;:null,&quot;shortcut_links&quot;:[{&quot;title&quot;:&quot;Snippets&quot;,&quot;href&quot;:&quot;/explore/snippets&quot;,&quot;css_class&quot;:&quot;dashboard-shortcuts-snippets&quot;},{&quot;title&quot;:&quot;Groups&quot;,&quot;href&quot;:&quot;/explore/groups&quot;,&quot;css_class&quot;:&quot;dashboard-shortcuts-groups&quot;},{&quot;title&quot;:&quot;Projects&quot;,&quot;href&quot;:&quot;/explore/projects/starred&quot;,&quot;css_class&quot;:&quot;dashboard-shortcuts-projects&quot;}],&quot;terms&quot;:null}"></aside> <div class="content-wrapper"> <div class="broadcast-wrapper"> </div> <div class="alert-wrapper alert-wrapper-top-space gl-flex gl-flex-col gl-gap-3 container-fluid container-limited"> <div class="gl-alert gl-alert-danger gl-alert-not-dismissible" role="alert"> <div class="gl-alert-icon-container"> <svg class="s16 gl-alert-icon gl-alert-icon-no-title" data-testid="error-icon"><use href="/assets/icons-aa2c8ddf99d22b77153ca2bb092a23889c12c597fc8b8de94b0f730eb53513f6.svg#error"></use></svg> </div> <div class="gl-alert-content" role="alert"> <div class="gl-alert-body"> GitLab may not work properly, because you are using an outdated web browser. <br> Please install a <a target="_blank" rel="noopener noreferrer" href="/help/install/requirements.md#supported-web-browsers">supported web browser</a> for a better experience. </div> </div> </div> </div> <div class="top-bar-fixed container-fluid" data-testid="top-bar"> <div class="top-bar-container gl-flex gl-items-center gl-gap-2"> <div class="gl-grow gl-basis-0 gl-flex gl-items-center gl-justify-start gl-gap-3"> <button class="gl-button btn btn-icon btn-md btn-default btn-default-tertiary js-super-sidebar-toggle-expand super-sidebar-toggle -gl-ml-3" aria-controls="super-sidebar" aria-expanded="false" aria-label="Primary navigation sidebar" type="button"><svg class="s16 gl-icon gl-button-icon " data-testid="sidebar-icon"><use href="/assets/icons-aa2c8ddf99d22b77153ca2bb092a23889c12c597fc8b8de94b0f730eb53513f6.svg#sidebar"></use></svg> </button> <script type="application/ld+json"> {"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Help","item":"https://git.openldap.org/help"},{"@type":"ListItem","position":2,"name":"Help","item":"https://git.openldap.org/help/install/requirements.md"}]} </script> <div data-testid="breadcrumb-links" id="js-vue-page-breadcrumbs-wrapper"> <div data-breadcrumbs-json="[{&quot;text&quot;:&quot;Help&quot;,&quot;href&quot;:&quot;/help&quot;,&quot;avatarPath&quot;:null},{&quot;text&quot;:&quot;Help&quot;,&quot;href&quot;:&quot;/help/install/requirements.md&quot;,&quot;avatarPath&quot;:null}]" id="js-vue-page-breadcrumbs"></div> <div id="js-injected-page-breadcrumbs"></div> </div> </div> <div class="gl-flex-none gl-flex gl-items-center gl-justify-center"> <div id="js-advanced-search-modal"></div> </div> <div class="gl-grow gl-basis-0 gl-flex gl-items-center gl-justify-end"> <div id="js-work-item-feedback"></div> </div> </div> </div> <div class="container-fluid container-limited limit-container-width"> <main class="content" id="content-body"> <div class="flash-container flash-container-page sticky" data-testid="flash-container"> <div id="js-global-alerts"></div> </div> <div class="md gl-text-lg gl-mt-3"> <h1 data-sourcepos="1:1-1:34" dir="auto">&#x000A;<a href="#gitlab-installation-requirements" aria-hidden="true" class="anchor" id="user-content-gitlab-installation-requirements"></a>GitLab installation requirements</h1>&#x000A;<ul data-sourcepos="3:1-5:0" dir="auto">&#x000A;<li data-sourcepos="3:1-3:31">Tier: Free, Premium, Ultimate</li>&#x000A;<li data-sourcepos="4:1-5:0">Offering: GitLab Self-Managed</li>&#x000A;</ul>&#x000A;<p data-sourcepos="6:1-6:79" dir="auto">This page contains information about the system requirements to install GitLab.</p>&#x000A;<h2 data-sourcepos="8:1-8:10" dir="auto">&#x000A;<a href="#storage" aria-hidden="true" class="anchor" id="user-content-storage"></a>Storage</h2>&#x000A;<p data-sourcepos="10:1-11:94" dir="auto">The necessary storage space largely depends on the size of the repositories you want to have in GitLab.&#x000A;As a guideline, you should have at least as much free space as all your repositories combined.</p>&#x000A;<p data-sourcepos="13:1-15:101" dir="auto">The Linux package requires about 2.5 GB of storage space for installation.&#x000A;For storage flexibility, consider mounting your hard drive through logical volume management.&#x000A;You should have a hard drive with at least 7,200 RPM or a solid-state drive to reduce response times.</p>&#x000A;<p data-sourcepos="17:1-18:114" dir="auto">Because file system performance might affect the overall performance of GitLab, you should&#x000A;<a data-sourcepos="18:1-18:113" href="../administration/nfs.md#avoid-using-cloud-based-file-systems">avoid using cloud-based file systems for storage</a>.</p>&#x000A;<h2 data-sourcepos="20:1-20:6" dir="auto">&#x000A;<a href="#cpu" aria-hidden="true" class="anchor" id="user-content-cpu"></a>CPU</h2>&#x000A;<p data-sourcepos="22:1-23:97" dir="auto">CPU requirements depend on the number of users and expected workload.&#x000A;The workload includes your users' activity, use of automation and mirroring, and repository size.</p>&#x000A;<p data-sourcepos="25:1-27:83" dir="auto">For a maximum of 20 requests per second or 1,000 users, you should have 8 vCPU.&#x000A;For more users or higher workload,&#x000A;see <a data-sourcepos="27:5-27:82" href="../administration/reference_architectures/_index.md">reference architectures</a>.</p>&#x000A;<h2 data-sourcepos="29:1-29:9" dir="auto">&#x000A;<a href="#memory" aria-hidden="true" class="anchor" id="user-content-memory"></a>Memory</h2>&#x000A;<p data-sourcepos="31:1-32:97" dir="auto">Memory requirements depend on the number of users and expected workload.&#x000A;The workload includes your users' activity, use of automation and mirroring, and repository size.</p>&#x000A;<p data-sourcepos="34:1-36:83" dir="auto">For a maximum of 20 requests per second or 1,000 users, you should have 16 GB of memory.&#x000A;For more users or higher workload,&#x000A;see <a data-sourcepos="36:5-36:82" href="../administration/reference_architectures/_index.md">reference architectures</a>.</p>&#x000A;<p data-sourcepos="38:1-40:124" dir="auto">In some cases, GitLab can run with at least 8 GB of memory.&#x000A;For more information, see&#x000A;<a data-sourcepos="40:1-40:123" href="https://docs.gitlab.com/omnibus/settings/memory_constrained_envs.html" rel="nofollow noreferrer noopener" target="_blank">running GitLab in a memory-constrained environment</a>.</p>&#x000A;<h2 data-sourcepos="42:1-42:13" dir="auto">&#x000A;<a href="#postgresql" aria-hidden="true" class="anchor" id="user-content-postgresql"></a>PostgreSQL</h2>&#x000A;<p data-sourcepos="44:1-46:52" dir="auto"><a data-sourcepos="44:1-44:41" href="https://www.postgresql.org/" rel="nofollow noreferrer noopener" target="_blank">PostgreSQL</a> is the only supported database and is bundled with the Linux package.&#x000A;You can also use an <a data-sourcepos="45:21-45:165" href="https://docs.gitlab.com/omnibus/settings/database.html#using-a-non-packaged-postgresql-database-management-server" rel="nofollow noreferrer noopener" target="_blank">external PostgreSQL database</a>&#x000A;<a data-sourcepos="46:1-46:51" href="#postgresql-tuning">which must be tuned correctly</a>.</p>&#x000A;<p data-sourcepos="48:1-49:34" dir="auto">Depending on the <a data-sourcepos="48:18-48:87" href="../administration/reference_architectures/_index.md">number of users</a>,&#x000A;the PostgreSQL server should have:</p>&#x000A;<ul data-sourcepos="51:1-54:0" dir="auto">&#x000A;<li data-sourcepos="51:1-51:59">For most GitLab instances, at least 5 to 10 GB of storage</li>&#x000A;<li data-sourcepos="52:1-54:0">For GitLab Ultimate, at least 12 GB of storage&#x000A;(1 GB of vulnerability data must be imported)</li>&#x000A;</ul>&#x000A;<p data-sourcepos="55:1-55:68" dir="auto">For the following versions of GitLab, use these PostgreSQL versions:</p>&#x000A;<table data-sourcepos="57:1-62:159" dir="auto">&#x000A;<thead>&#x000A;<tr data-sourcepos="57:1-57:76">&#x000A;<th data-sourcepos="57:2-57:17">GitLab version</th>&#x000A;<th data-sourcepos="57:19-57:46">Minimum PostgreSQL version</th>&#x000A;<th data-sourcepos="57:48-57:75">Maximum PostgreSQL version</th>&#x000A;</tr>&#x000A;</thead>&#x000A;<tbody>&#x000A;<tr data-sourcepos="59:1-59:123">&#x000A;<td data-sourcepos="59:2-59:17">18.x</td>&#x000A;<td data-sourcepos="59:19-59:103">16.x (proposed in <a data-sourcepos="59:38-59:101" href="https://gitlab.com/groups/gitlab-org/-/epics/12172" rel="nofollow noreferrer noopener" target="_blank">epic 12172</a>)</td>&#x000A;<td data-sourcepos="59:105-59:122">To be determined</td>&#x000A;</tr>&#x000A;<tr data-sourcepos="60:1-60:158">&#x000A;<td data-sourcepos="60:2-60:17">17.x</td>&#x000A;<td data-sourcepos="60:19-60:46">14.x</td>&#x000A;<td data-sourcepos="60:48-60:157">16.x (<a data-sourcepos="60:55-60:155" href="https://gitlab.com/gitlab-org/gitlab/-/merge_requests/145298" rel="nofollow noreferrer noopener" target="_blank">tested against GitLab 16.10 and later</a>)</td>&#x000A;</tr>&#x000A;<tr data-sourcepos="61:1-61:157">&#x000A;<td data-sourcepos="61:2-61:17">16.x</td>&#x000A;<td data-sourcepos="61:19-61:46">13.6</td>&#x000A;<td data-sourcepos="61:48-61:156">15.x (<a data-sourcepos="61:55-61:154" href="https://gitlab.com/gitlab-org/gitlab/-/merge_requests/119344" rel="nofollow noreferrer noopener" target="_blank">tested against GitLab 16.1 and later</a>)</td>&#x000A;</tr>&#x000A;<tr data-sourcepos="62:1-62:159">&#x000A;<td data-sourcepos="62:2-62:17">15.x</td>&#x000A;<td data-sourcepos="62:19-62:46">12.10</td>&#x000A;<td data-sourcepos="62:48-62:158">14.x (<a data-sourcepos="62:55-62:150" href="https://gitlab.com/gitlab-org/gitlab/-/merge_requests/114624" rel="nofollow noreferrer noopener" target="_blank">tested against GitLab 15.11 only</a>), 13.x</td>&#x000A;</tr>&#x000A;</tbody>&#x000A;</table>&#x000A;<p data-sourcepos="64:1-66:95" dir="auto">Minor PostgreSQL releases <a data-sourcepos="64:27-64:111" href="https://www.postgresql.org/support/versioning/" rel="nofollow noreferrer noopener" target="_blank">include only bug and security fixes</a>.&#x000A;Always use the latest minor version to avoid known issues in PostgreSQL.&#x000A;For more information, see <a data-sourcepos="66:27-66:94" href="https://gitlab.com/gitlab-org/gitlab/-/issues/364763" rel="nofollow noreferrer noopener" target="_blank">issue 364763</a>.</p>&#x000A;<p data-sourcepos="68:1-69:108" dir="auto">To use a later major version of PostgreSQL than specified, check if a&#x000A;<a data-sourcepos="69:1-69:107" href="http://gitlab-org.gitlab.io/omnibus-gitlab/licenses.html" rel="nofollow noreferrer noopener" target="_blank">later version is bundled with the Linux package</a>.</p>&#x000A;<p data-sourcepos="71:1-72:85" dir="auto">You must also ensure some extensions are loaded into every GitLab database.&#x000A;For more information, see <a data-sourcepos="72:27-72:84" href="postgresql_extensions.md">managing PostgreSQL extensions</a>.</p>&#x000A;<h3 data-sourcepos="74:1-74:14" dir="auto">&#x000A;<a href="#gitlab-geo" aria-hidden="true" class="anchor" id="user-content-gitlab-geo"></a>GitLab Geo</h3>&#x000A;<p data-sourcepos="76:1-79:62" dir="auto">For <a data-sourcepos="76:5-76:49" href="../administration/geo/_index.md">GitLab Geo</a>, you should use the Linux package or&#x000A;<a data-sourcepos="77:1-77:121" href="../administration/reference_architectures/_index.md#recommended-cloud-providers-and-services">validated cloud providers</a>&#x000A;to install GitLab.&#x000A;Compatibility with other external databases is not guaranteed.</p>&#x000A;<p data-sourcepos="81:1-81:119" dir="auto">For more information, see <a data-sourcepos="81:27-81:118" href="../administration/geo/_index.md#requirements-for-running-geo">requirements for running Geo</a>.</p>&#x000A;<h3 data-sourcepos="83:1-83:24" dir="auto">&#x000A;<a href="#locale-compatibility" aria-hidden="true" class="anchor" id="user-content-locale-compatibility"></a>Locale compatibility</h3>&#x000A;<p data-sourcepos="85:1-89:9" dir="auto">When you change locale data in <code data-sourcepos="85:33-85:37">glibc</code>, PostgreSQL database files are&#x000A;no longer fully compatible between different operating systems.&#x000A;To avoid index corruption,&#x000A;<a data-sourcepos="88:1-88:128" href="../administration/geo/replication/troubleshooting/common.md#check-os-locale-data-compatibility">check for locale compatibility</a>&#x000A;when you:</p>&#x000A;<ul data-sourcepos="91:1-94:0" dir="auto">&#x000A;<li data-sourcepos="91:1-91:46">Move binary PostgreSQL data between servers.</li>&#x000A;<li data-sourcepos="92:1-92:34">Upgrade your Linux distribution.</li>&#x000A;<li data-sourcepos="93:1-94:0">Update or change third-party container images.</li>&#x000A;</ul>&#x000A;<p data-sourcepos="95:1-95:117" dir="auto">For more information, see <a data-sourcepos="95:27-95:116" href="../administration/postgresql/upgrading_os.md">upgrading operating systems for PostgreSQL</a>.</p>&#x000A;<h3 data-sourcepos="97:1-97:18" dir="auto">&#x000A;<a href="#gitlab-schemas" aria-hidden="true" class="anchor" id="user-content-gitlab-schemas"></a>GitLab schemas</h3>&#x000A;<p data-sourcepos="99:1-101:94" dir="auto">You should create or use databases exclusively for GitLab, <a data-sourcepos="99:60-99:97" href="../administration/geo/_index.md">Geo</a>,&#x000A;<a data-sourcepos="100:1-100:54" href="../administration/gitaly/praefect.md">Gitaly Cluster</a>, or other components.&#x000A;Do not create or modify databases, schemas, users, or other properties except when you follow:</p>&#x000A;<ul data-sourcepos="103:1-105:0" dir="auto">&#x000A;<li data-sourcepos="103:1-103:40">Procedures in the GitLab documentation</li>&#x000A;<li data-sourcepos="104:1-105:0">The directions of GitLab Support or engineers</li>&#x000A;</ul>&#x000A;<p data-sourcepos="106:1-106:47" dir="auto">The main GitLab application uses three schemas:</p>&#x000A;<ul data-sourcepos="108:1-111:0" dir="auto">&#x000A;<li data-sourcepos="108:1-108:29">The default <code data-sourcepos="108:16-108:21">public</code> schema</li>&#x000A;<li data-sourcepos="109:1-109:52">&#x000A;<code data-sourcepos="109:4-109:27">gitlab_partitions_static</code> (created automatically)</li>&#x000A;<li data-sourcepos="110:1-111:0">&#x000A;<code data-sourcepos="110:4-110:28">gitlab_partitions_dynamic</code> (created automatically)</li>&#x000A;</ul>&#x000A;<p data-sourcepos="112:1-114:76" dir="auto">During Rails database migrations, GitLab might create or modify schemas or tables.&#x000A;Database migrations are tested against the schema definition in the GitLab codebase.&#x000A;If you modify any schema, <a data-sourcepos="114:27-114:64" href="../update/_index.md">GitLab upgrades</a> might fail.</p>&#x000A;<h3 data-sourcepos="116:1-116:21" dir="auto">&#x000A;<a href="#postgresql-tuning" aria-hidden="true" class="anchor" id="user-content-postgresql-tuning"></a>PostgreSQL tuning</h3>&#x000A;<p data-sourcepos="118:1-118:76" dir="auto">Here are some required settings for externally managed PostgreSQL instances.</p>&#x000A;<table data-sourcepos="120:1-125:190" dir="auto">&#x000A;<thead>&#x000A;<tr data-sourcepos="120:1-120:62">&#x000A;<th data-sourcepos="120:2-120:25" align="left">Tunable setting</th>&#x000A;<th data-sourcepos="120:27-120:42" align="left">Required value</th>&#x000A;<th data-sourcepos="120:44-120:61" align="left">More information</th>&#x000A;</tr>&#x000A;</thead>&#x000A;<tbody>&#x000A;<tr data-sourcepos="122:1-122:177">&#x000A;<td data-sourcepos="122:2-122:25" align="left"><code data-sourcepos="122:4-122:11">work_mem</code></td>&#x000A;<td data-sourcepos="122:27-122:42" align="left">minimum <code data-sourcepos="122:37-122:39">8MB</code>&#x000A;</td>&#x000A;<td data-sourcepos="122:44-122:176" align="left">This value is the Linux package default. In large deployments, if queries create temporary files, you should increase this setting.</td>&#x000A;</tr>&#x000A;<tr data-sourcepos="123:1-123:169">&#x000A;<td data-sourcepos="123:2-123:25" align="left"><code data-sourcepos="123:4-123:23">maintenance_work_mem</code></td>&#x000A;<td data-sourcepos="123:27-123:42" align="left">minimum <code data-sourcepos="123:37-123:40">64MB</code>&#x000A;</td>&#x000A;<td data-sourcepos="123:44-123:168" align="left">You require <a data-sourcepos="123:57-123:166" href="https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/8377#note_1728173087" rel="nofollow noreferrer noopener" target="_blank">more for larger database servers</a>.</td>&#x000A;</tr>&#x000A;<tr data-sourcepos="124:1-124:146">&#x000A;<td data-sourcepos="124:2-124:25" align="left"><code data-sourcepos="124:4-124:17">shared_buffers</code></td>&#x000A;<td data-sourcepos="124:27-124:42" align="left">minimum <code data-sourcepos="124:37-124:39">2GB</code>&#x000A;</td>&#x000A;<td data-sourcepos="124:44-124:145" align="left">You require more for larger database servers. The Linux package default is set to 25% of server RAM.</td>&#x000A;</tr>&#x000A;<tr data-sourcepos="125:1-125:190">&#x000A;<td data-sourcepos="125:2-125:25" align="left"><code data-sourcepos="125:4-125:20">statement_timeout</code></td>&#x000A;<td data-sourcepos="125:27-125:42" align="left">maximum 1 min</td>&#x000A;<td data-sourcepos="125:44-125:189" align="left">A statement timeout prevents runaway issues with locks and the database rejecting new clients. One minute matches the Puma rack timeout setting.</td>&#x000A;</tr>&#x000A;</tbody>&#x000A;</table>&#x000A;<h2 data-sourcepos="127:1-127:7" dir="auto">&#x000A;<a href="#puma" aria-hidden="true" class="anchor" id="user-content-puma"></a>Puma</h2>&#x000A;<p data-sourcepos="129:1-130:60" dir="auto">The recommended <a data-sourcepos="129:17-129:40" href="https://puma.io/" rel="nofollow noreferrer noopener" target="_blank">Puma</a> settings depend on your <a data-sourcepos="129:66-129:99" href="install_methods.md">installation</a>.&#x000A;By default, the Linux package uses the recommended settings.</p>&#x000A;<p data-sourcepos="132:1-132:24" dir="auto">To adjust Puma settings:</p>&#x000A;<ul data-sourcepos="134:1-137:0" dir="auto">&#x000A;<li data-sourcepos="134:1-134:83">For the Linux package, see <a data-sourcepos="134:30-134:82" href="../administration/operations/puma.md">Puma settings</a>.</li>&#x000A;<li data-sourcepos="135:1-137:0">For the GitLab Helm chart, see the&#x000A;<a data-sourcepos="136:3-136:80" href="https://docs.gitlab.com/charts/charts/gitlab/webservice/" rel="nofollow noreferrer noopener" target="_blank"><code data-sourcepos="136:5-136:14">webservice</code> chart</a>.</li>&#x000A;</ul>&#x000A;<h3 data-sourcepos="138:1-138:11" dir="auto">&#x000A;<a href="#workers" aria-hidden="true" class="anchor" id="user-content-workers"></a>Workers</h3>&#x000A;<p data-sourcepos="140:1-143:146" dir="auto">The recommended number of Puma workers largely depends on CPU and memory capacity.&#x000A;By default, the Linux package uses the recommended number of workers.&#x000A;For more information about how this number is calculated,&#x000A;see <a data-sourcepos="143:5-143:145" href="https://gitlab.com/gitlab-org/omnibus-gitlab/-/blob/master/files/gitlab-cookbooks/gitlab/libraries/puma.rb?ref_type=heads#L46-69" rel="nofollow noreferrer noopener" target="_blank"><code data-sourcepos="143:7-143:13">puma.rb</code></a>.</p>&#x000A;<p data-sourcepos="145:1-146:32" dir="auto">A node must never have fewer than two Puma workers.&#x000A;For example, a node should have:</p>&#x000A;<ul data-sourcepos="148:1-153:0" dir="auto">&#x000A;<li data-sourcepos="148:1-148:48">Two workers for 2 CPU cores and 8 GB of memory</li>&#x000A;<li data-sourcepos="149:1-149:48">Two workers for 4 CPU cores and 4 GB of memory</li>&#x000A;<li data-sourcepos="150:1-150:49">Four workers for 4 CPU cores and 8 GB of memory</li>&#x000A;<li data-sourcepos="151:1-151:48">Six workers for 8 CPU cores and 8 GB of memory</li>&#x000A;<li data-sourcepos="152:1-153:0">Eight workers for 8 CPU cores and 16 GB of memory</li>&#x000A;</ul>&#x000A;<p data-sourcepos="154:1-155:115" dir="auto">By default, each Puma worker is limited to 1.2 GB of memory.&#x000A;You can <a data-sourcepos="155:9-155:87" href="../administration/operations/puma.md#reducing-memory-use">adjust this setting</a> in <code data-sourcepos="155:93-155:113">/etc/gitlab/gitlab.rb</code>.</p>&#x000A;<p data-sourcepos="157:1-159:94" dir="auto">You can also increase the number of Puma workers, provided enough CPU and memory capacity is available.&#x000A;More workers would reduce response times and improve the ability to handle parallel requests.&#x000A;Run tests to verify the optimal number of workers for your <a data-sourcepos="159:60-159:93" href="install_methods.md">installation</a>.</p>&#x000A;<h3 data-sourcepos="161:1-161:11" dir="auto">&#x000A;<a href="#threads" aria-hidden="true" class="anchor" id="user-content-threads"></a>Threads</h3>&#x000A;<p data-sourcepos="163:1-164:18" dir="auto">The recommended number of Puma threads depends on total system memory.&#x000A;A node should use:</p>&#x000A;<ul data-sourcepos="166:1-168:0" dir="auto">&#x000A;<li data-sourcepos="166:1-166:69">One thread for an operating system with a maximum of 2 GB of memory</li>&#x000A;<li data-sourcepos="167:1-168:0">Four threads for an operating system with more than 2 GB of memory</li>&#x000A;</ul>&#x000A;<p data-sourcepos="169:1-169:68" dir="auto">More threads would lead to excessive swapping and lower performance.</p>&#x000A;<h2 data-sourcepos="171:1-171:8" dir="auto">&#x000A;<a href="#redis" aria-hidden="true" class="anchor" id="user-content-redis"></a>Redis</h2>&#x000A;<p data-sourcepos="173:1-174:45" dir="auto"><a data-sourcepos="173:1-173:26" href="https://redis.io/" rel="nofollow noreferrer noopener" target="_blank">Redis</a> stores all user sessions and background tasks&#x000A;and requires about 25 kB per user on average.</p>&#x000A;<p data-sourcepos="176:1-178:103" dir="auto">In GitLab 16.0 and later, Redis 6.x or 7.x is required.&#x000A;For more information about end-of-life dates, see the&#x000A;<a data-sourcepos="178:1-178:102" href="https://redis.io/docs/latest/operate/rs/installing-upgrading/product-lifecycle/" rel="nofollow noreferrer noopener" target="_blank">Redis documentation</a>.</p>&#x000A;<p data-sourcepos="180:1-180:10" dir="auto">For Redis:</p>&#x000A;<ul data-sourcepos="182:1-185:0" dir="auto">&#x000A;<li data-sourcepos="182:1-183:33">Use a standalone instance (with or without high availability).&#x000A;Redis Cluster is not supported.</li>&#x000A;<li data-sourcepos="184:1-185:0">Set the <a data-sourcepos="184:11-184:117" href="../administration/redis/replication_and_failover_external.md#setting-the-eviction-policy">eviction policy</a> as appropriate.</li>&#x000A;</ul>&#x000A;<h2 data-sourcepos="186:1-186:10" dir="auto">&#x000A;<a href="#sidekiq" aria-hidden="true" class="anchor" id="user-content-sidekiq"></a>Sidekiq</h2>&#x000A;<p data-sourcepos="188:1-190:45" dir="auto"><a data-sourcepos="188:1-188:31" href="https://sidekiq.org/" rel="nofollow noreferrer noopener" target="_blank">Sidekiq</a> uses a multi-threaded process for background jobs.&#x000A;This process initially consumes more than 200 MB of memory&#x000A;and might grow over time due to memory leaks.</p>&#x000A;<p data-sourcepos="192:1-193:59" dir="auto">On a very active server with more than 10,000 billable users,&#x000A;the Sidekiq process might consume more than 1 GB of memory.</p>&#x000A;<h2 data-sourcepos="195:1-195:13" dir="auto">&#x000A;<a href="#prometheus" aria-hidden="true" class="anchor" id="user-content-prometheus"></a>Prometheus</h2>&#x000A;<p data-sourcepos="197:1-198:55" dir="auto">By default, <a data-sourcepos="197:13-197:47" href="https://prometheus.io" rel="nofollow noreferrer noopener" target="_blank">Prometheus</a> and its related exporters are enabled to monitor GitLab.&#x000A;These processes consume approximately 200 MB of memory.</p>&#x000A;<p data-sourcepos="200:1-201:87" dir="auto">For more information, see&#x000A;<a data-sourcepos="201:1-201:86" href="../administration/monitoring/prometheus/_index.md">monitoring GitLab with Prometheus</a>.</p>&#x000A;<h2 data-sourcepos="203:1-203:25" dir="auto">&#x000A;<a href="#supported-web-browsers" aria-hidden="true" class="anchor" id="user-content-supported-web-browsers"></a>Supported web browsers</h2>&#x000A;<p data-sourcepos="205:1-205:43" dir="auto">GitLab supports the following web browsers:</p>&#x000A;<ul data-sourcepos="207:1-212:0" dir="auto">&#x000A;<li data-sourcepos="207:1-207:63"><a data-sourcepos="207:3-207:63" href="https://www.mozilla.org/en-US/firefox/new/" rel="nofollow noreferrer noopener" target="_blank">Mozilla Firefox</a></li>&#x000A;<li data-sourcepos="208:1-208:49"><a data-sourcepos="208:3-208:49" href="https://www.google.com/chrome/" rel="nofollow noreferrer noopener" target="_blank">Google Chrome</a></li>&#x000A;<li data-sourcepos="209:1-209:68"><a data-sourcepos="209:3-209:68" href="https://www.chromium.org/getting-involved/dev-channel/" rel="nofollow noreferrer noopener" target="_blank">Chromium</a></li>&#x000A;<li data-sourcepos="210:1-210:47"><a data-sourcepos="210:3-210:47" href="https://www.apple.com/safari/" rel="nofollow noreferrer noopener" target="_blank">Apple Safari</a></li>&#x000A;<li data-sourcepos="211:1-212:0"><a data-sourcepos="211:3-211:68" href="https://www.microsoft.com/en-us/edge?form=MA13QK" rel="nofollow noreferrer noopener" target="_blank">Microsoft Edge</a></li>&#x000A;</ul>&#x000A;<p data-sourcepos="213:1-213:16" dir="auto">GitLab supports:</p>&#x000A;<ul data-sourcepos="215:1-217:0" dir="auto">&#x000A;<li data-sourcepos="215:1-215:54">The two most recent major versions of these browsers</li>&#x000A;<li data-sourcepos="216:1-217:0">The current minor version of a supported major version</li>&#x000A;</ul>&#x000A;<p data-sourcepos="218:1-218:75" dir="auto">Running GitLab with JavaScript disabled in these browsers is not supported.</p>&#x000A;<h2 data-sourcepos="220:1-220:17" dir="auto">&#x000A;<a href="#related-topics" aria-hidden="true" class="anchor" id="user-content-related-topics"></a>Related topics</h2>&#x000A;<ul data-sourcepos="222:1-223:51" dir="auto">&#x000A;<li data-sourcepos="222:1-222:66"><a data-sourcepos="222:3-222:66" href="https://docs.gitlab.com/runner/install/" rel="nofollow noreferrer noopener" target="_blank">Install GitLab Runner</a></li>&#x000A;<li data-sourcepos="223:1-223:51"><a data-sourcepos="223:3-223:51" href="../security/_index.md">Secure your installation</a></li>&#x000A;</ul> </div> </main> </div> </div> </div> <script> //<![CDATA[ if ('loading' in HTMLImageElement.prototype) { document.querySelectorAll('img.lazy').forEach(img => { img.loading = 'lazy'; let imgUrl = img.dataset.src; // Only adding width + height for avatars for now if (imgUrl.indexOf('/avatar/') > -1 && imgUrl.indexOf('?') === -1) { const targetWidth = img.getAttribute('width') || img.width; imgUrl += `?width=${targetWidth}`; } img.src = imgUrl; img.removeAttribute('data-src'); img.classList.remove('lazy'); img.classList.add('js-lazy-loaded'); img.dataset.testid = 'js-lazy-loaded-content'; }); } //]]> </script> <script> //<![CDATA[ gl = window.gl || {}; gl.experiments = {}; //]]> </script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10