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://gitlab.torproject.org/assets/no_avatar-849f9c04a3a0d0cea2424ae97b27447dc64a7dbfae83c036c45b403392f0e8ba.png";gon.max_file_size=5;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=null;gon.gitlab_url="https://gitlab.torproject.org";gon.promo_url="https://about.gitlab.com";gon.forum_url="https://forum.gitlab.com";gon.docs_url="https://docs.gitlab.com";gon.revision="8a31863db02";gon.feature_category="not_owned";gon.gitlab_logo="/assets/gitlab_logo-2957169c8ef64c58616a1ac3f4fc626e8a35ce4eb3ed31bb0d873712f2a041a0.png";gon.secure=true;gon.sprite_icons="/assets/icons-8791a66659d025e0a4c801978c79a1fbd82db1d27d85f044a35728ea7cf0ae80.svg";gon.sprite_file_icons="/assets/file_icons/file_icons-7cd3d6c3b29a6d972895f36472978a4b5adb4b37f9b5d0716a380e82389f7e0e.svg";gon.emoji_sprites_css_path="/assets/emoji_sprites-d746ae2450a3e9c626d338d77a101b84ff33a47c0c281b676d75c4a6ed2948a4.css";gon.emoji_backend_version=4;gon.gridstack_css_path="/assets/lazy_bundles/gridstack-5fcfd4ffbea1db04eaf7f16521bcab19ae3af042c8b4afe8d16781eda5a70799.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=1;gon.time_display_relative=true;gon.time_display_format=0;gon.ee=false;gon.jh=false;gon.dot_com=false;gon.uf_error_prefix="UF";gon.pat_prefix="";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}; //]]> </script> <link rel="stylesheet" href="/assets/application-2e69a08e74e113997b5ba7fc5cd3e020a6f407d9ad552675adc6d78c2b23d0f7.css" /> <link rel="stylesheet" href="/assets/page_bundles/commit_description-1e2cba4dda3c7b30dd84924809020c569f1308dea51520fe1dd5d4ce31403195.css" /><link rel="stylesheet" href="/assets/page_bundles/work_items-cbc6a2e1633c4e847a617e35cc4833b85b80816db688d3d6dd3cd31d4251bc53.css" /><link rel="stylesheet" href="/assets/page_bundles/notes_shared-caf98f77b75b4b5399bdde69c069ee023fefdaa986d687c937e8010218785f51.css" /> <link rel="stylesheet" href="/assets/application_utilities-0bfb919a8a7eb0e89544dfe328e69461ccb276a565685fdb6ae3b14f3db3f41b.css" /> <link rel="stylesheet" href="/assets/tailwind-016e83140c37d97dbdff0cef9c063fcd43d214866665fb783774776747928853.css" /> <link rel="stylesheet" href="/assets/fonts-fae5d3f79948bd85f18b6513a025f863b19636e85b09a1492907eb4b1bb0557b.css" /> <link rel="stylesheet" href="/assets/highlight/themes/white-5ffbb706faebead681b01c8b52e92c6c0d35ad5b1c11d39012c90bcaf7892ca8.css" /> <link rel="preload" href="/assets/application_utilities-0bfb919a8a7eb0e89544dfe328e69461ccb276a565685fdb6ae3b14f3db3f41b.css" as="style" type="text/css"> <link rel="preload" href="/assets/application-2e69a08e74e113997b5ba7fc5cd3e020a6f407d9ad552675adc6d78c2b23d0f7.css" as="style" type="text/css"> <link rel="preload" href="/assets/highlight/themes/white-5ffbb706faebead681b01c8b52e92c6c0d35ad5b1c11d39012c90bcaf7892ca8.css" as="style" type="text/css"> <script src="/assets/webpack/runtime.507390f4.bundle.js" defer="defer"></script> <script src="/assets/webpack/main.a4c9ae4f.chunk.js" defer="defer"></script> <script src="/assets/webpack/commons-pages.admin.abuse_reports.show-pages.admin.topics.edit-pages.admin.topics.new-pages.dashboar-c8f1318b.54872cef.chunk.js" defer="defer"></script> <script src="/assets/webpack/commons-pages.admin.abuse_reports.show-pages.dashboard.issues-pages.dashboard.milestones.show-pages.-13e11bbf.1a73330b.chunk.js" defer="defer"></script> <script src="/assets/webpack/commons-pages.admin.abuse_reports.show-pages.dashboard.issues-pages.groups.boards-pages.groups.issue-8dfa5f96.20262e8b.chunk.js" defer="defer"></script> <script src="/assets/webpack/commons-pages.admin.abuse_reports.show-pages.dashboard.issues-pages.groups.boards-pages.groups.issue-f804d6c2.d4f467df.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.800b02b5.chunk.js" defer="defer"></script> <script src="/assets/webpack/commons-pages.search.show-super_sidebar.98a5daf8.chunk.js" defer="defer"></script> <script src="/assets/webpack/super_sidebar.839aed14.chunk.js" defer="defer"></script> <script src="/assets/webpack/default.700474e1.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 Tor Project&#39;s Gitlab" property="og:description"> <meta content="https://gitlab.torproject.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://gitlab.torproject.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 Tor Project&#39;s Gitlab" property="twitter:description"> <meta content="https://gitlab.torproject.org/assets/twitter_card-570ddb06edf56a2312253c5872489847a0f385112ddbcd71ccfa1570febab5d2.jpg" property="twitter:image"> <meta name="csrf-param" content="authenticity_token" /> <meta name="csrf-token" content="PmoP3rzfSmHjDWYo_t5UqeYXgBw-GARrj6hfKvvaZrD5KVRrndgZZKadsTEIkN_DrVKpcHlVeb48X6D2JmMouQ" /> <meta name="csp-nonce" /> <meta name="action-cable-url" content="/-/cable" /> <link href="/-/manifest.json" rel="manifest"> <link rel="icon" type="image/png" href="/uploads/-/system/appearance/favicon/1/favicon.ico" id="favicon" data-original-href="/uploads/-/system/appearance/favicon/1/favicon.ico" /> <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 Tor Project&#39;s Gitlab" 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="/"><img class="brand-header-logo lazy" alt="" data-src="/uploads/-/system/appearance/header_logo/1/purple.svg" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /> </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> </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://support.torproject.org/&quot;,&quot;docs_path&quot;:&quot;/help/docs&quot;,&quot;display_whats_new&quot;:false,&quot;show_version_check&quot;:false,&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-8791a66659d025e0a4c801978c79a1fbd82db1d27d85f044a35728ea7cf0ae80.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"> <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-8791a66659d025e0a4c801978c79a1fbd82db1d27d85f044a35728ea7cf0ae80.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://gitlab.torproject.org/help"},{"@type":"ListItem","position":2,"name":"Help","item":"https://gitlab.torproject.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;<p data-sourcepos="3:1-5:26" dir="auto">DETAILS:&#x000A;<strong data-sourcepos="4:1-4:9">Tier:</strong> Free, Premium, Ultimate&#x000A;<strong data-sourcepos="5:1-5:13">Offering:</strong> Self-managed</p>&#x000A;<p data-sourcepos="7:1-7:79" dir="auto">This page contains information about the system requirements to install GitLab.</p>&#x000A;<h2 data-sourcepos="9:1-9:10" dir="auto">&#x000A;<a href="#storage" aria-hidden="true" class="anchor" id="user-content-storage"></a>Storage</h2>&#x000A;<p data-sourcepos="11:1-12: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="14:1-16: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="18:1-19:114" dir="auto">Because file system performance might affect the overall performance of GitLab, you should&#x000A;<a data-sourcepos="19:1-19: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="21:1-21:6" dir="auto">&#x000A;<a href="#cpu" aria-hidden="true" class="anchor" id="user-content-cpu"></a>CPU</h2>&#x000A;<p data-sourcepos="23:1-24: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="26:1-28:82" 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="28:5-28:81" href="../administration/reference_architectures/index.md">reference architectures</a>.</p>&#x000A;<h2 data-sourcepos="30:1-30:9" dir="auto">&#x000A;<a href="#memory" aria-hidden="true" class="anchor" id="user-content-memory"></a>Memory</h2>&#x000A;<p data-sourcepos="32:1-33: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="35:1-37:82" 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="37:5-37:81" href="../administration/reference_architectures/index.md">reference architectures</a>.</p>&#x000A;<p data-sourcepos="39:1-41: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="41:1-41: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="43:1-43:13" dir="auto">&#x000A;<a href="#postgresql" aria-hidden="true" class="anchor" id="user-content-postgresql"></a>PostgreSQL</h2>&#x000A;<p data-sourcepos="45:1-47:52" dir="auto"><a data-sourcepos="45:1-45: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="46:21-46: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="47:1-47:51" href="#postgresql-tuning">which must be tuned correctly</a>.</p>&#x000A;<p data-sourcepos="49:1-50:34" dir="auto">Depending on the <a data-sourcepos="49:18-49:86" href="../administration/reference_architectures/index.md">number of users</a>,&#x000A;the PostgreSQL server should have:</p>&#x000A;<ul data-sourcepos="52:1-55:0" dir="auto">&#x000A;<li data-sourcepos="52:1-52:59">For most GitLab instances, at least 5 to 10 GB of storage</li>&#x000A;<li data-sourcepos="53:1-55: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="56:1-56:68" dir="auto">For the following versions of GitLab, use these PostgreSQL versions:</p>&#x000A;<table data-sourcepos="58:1-63:159" dir="auto">&#x000A;<thead>&#x000A;<tr data-sourcepos="58:1-58:76">&#x000A;<th data-sourcepos="58:2-58:17">GitLab version</th>&#x000A;<th data-sourcepos="58:19-58:46">Minimum PostgreSQL version</th>&#x000A;<th data-sourcepos="58:48-58:75">Maximum PostgreSQL version</th>&#x000A;</tr>&#x000A;</thead>&#x000A;<tbody>&#x000A;<tr data-sourcepos="60:1-60:123">&#x000A;<td data-sourcepos="60:2-60:17">18.x</td>&#x000A;<td data-sourcepos="60:19-60:103">16.x (proposed in <a data-sourcepos="60:38-60:101" href="https://gitlab.com/groups/gitlab-org/-/epics/12172" rel="nofollow noreferrer noopener" target="_blank">epic 12172</a>)</td>&#x000A;<td data-sourcepos="60:105-60:122">To be determined</td>&#x000A;</tr>&#x000A;<tr data-sourcepos="61:1-61:158">&#x000A;<td data-sourcepos="61:2-61:17">17.x</td>&#x000A;<td data-sourcepos="61:19-61:46">14.x</td>&#x000A;<td data-sourcepos="61:48-61:157">16.x (<a data-sourcepos="61:55-61: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="62:1-62:157">&#x000A;<td data-sourcepos="62:2-62:17">16.x</td>&#x000A;<td data-sourcepos="62:19-62:46">13.6</td>&#x000A;<td data-sourcepos="62:48-62:156">15.x (<a data-sourcepos="62:55-62: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="63:1-63:159">&#x000A;<td data-sourcepos="63:2-63:17">15.x</td>&#x000A;<td data-sourcepos="63:19-63:46">12.10</td>&#x000A;<td data-sourcepos="63:48-63:158">14.x (<a data-sourcepos="63:55-63: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="65:1-67:95" dir="auto">Minor PostgreSQL releases <a data-sourcepos="65:27-65: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="67:27-67:94" href="https://gitlab.com/gitlab-org/gitlab/-/issues/364763" rel="nofollow noreferrer noopener" target="_blank">issue 364763</a>.</p>&#x000A;<p data-sourcepos="69:1-70:108" dir="auto">To use a later major version of PostgreSQL than specified, check if a&#x000A;<a data-sourcepos="70:1-70: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="72:1-73:85" dir="auto">You must also ensure some extensions are loaded into every GitLab database.&#x000A;For more information, see <a data-sourcepos="73:27-73:84" href="postgresql_extensions.md">managing PostgreSQL extensions</a>.</p>&#x000A;<h3 data-sourcepos="75:1-75: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="77:1-80:62" dir="auto">For <a data-sourcepos="77:5-77:48" href="../administration/geo/index.md">GitLab Geo</a>, you should use the Linux package or&#x000A;<a data-sourcepos="78:1-78:120" 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="82:1-82:118" dir="auto">For more information, see <a data-sourcepos="82:27-82:117" href="../administration/geo/index.md#requirements-for-running-geo">requirements for running Geo</a>.</p>&#x000A;<h3 data-sourcepos="84:1-84: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="86:1-90:9" dir="auto">When you change locale data in <code data-sourcepos="86:33-86: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="89:1-89: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="92:1-95:0" dir="auto">&#x000A;<li data-sourcepos="92:1-92:46">Move binary PostgreSQL data between servers.</li>&#x000A;<li data-sourcepos="93:1-93:34">Upgrade your Linux distribution.</li>&#x000A;<li data-sourcepos="94:1-95:0">Update or change third-party container images.</li>&#x000A;</ul>&#x000A;<p data-sourcepos="96:1-96:117" dir="auto">For more information, see <a data-sourcepos="96:27-96:116" href="../administration/postgresql/upgrading_os.md">upgrading operating systems for PostgreSQL</a>.</p>&#x000A;<h3 data-sourcepos="98:1-98: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="100:1-102:94" dir="auto">You should create or use databases exclusively for GitLab, <a data-sourcepos="100:60-100:96" href="../administration/geo/index.md">Geo</a>,&#x000A;<a data-sourcepos="101:1-101: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="104:1-106:0" dir="auto">&#x000A;<li data-sourcepos="104:1-104:40">Procedures in the GitLab documentation</li>&#x000A;<li data-sourcepos="105:1-106:0">The directions of GitLab Support or engineers</li>&#x000A;</ul>&#x000A;<p data-sourcepos="107:1-107:47" dir="auto">The main GitLab application uses three schemas:</p>&#x000A;<ul data-sourcepos="109:1-112:0" dir="auto">&#x000A;<li data-sourcepos="109:1-109:29">The default <code data-sourcepos="109:16-109:21">public</code> schema</li>&#x000A;<li data-sourcepos="110:1-110:52">&#x000A;<code data-sourcepos="110:4-110:27">gitlab_partitions_static</code> (created automatically)</li>&#x000A;<li data-sourcepos="111:1-112:0">&#x000A;<code data-sourcepos="111:4-111:28">gitlab_partitions_dynamic</code> (created automatically)</li>&#x000A;</ul>&#x000A;<p data-sourcepos="113:1-115:75" 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="115:27-115:63" href="../update/index.md">GitLab upgrades</a> might fail.</p>&#x000A;<h3 data-sourcepos="117:1-117: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="119:1-119:76" dir="auto">Here are some required settings for externally managed PostgreSQL instances.</p>&#x000A;<table data-sourcepos="121:1-126:190" dir="auto">&#x000A;<thead>&#x000A;<tr data-sourcepos="121:1-121:62">&#x000A;<th data-sourcepos="121:2-121:25" align="left">Tunable setting</th>&#x000A;<th data-sourcepos="121:27-121:42" align="left">Required value</th>&#x000A;<th data-sourcepos="121:44-121:61" align="left">More information</th>&#x000A;</tr>&#x000A;</thead>&#x000A;<tbody>&#x000A;<tr data-sourcepos="123:1-123:177">&#x000A;<td data-sourcepos="123:2-123:25" align="left"><code data-sourcepos="123:4-123:11">work_mem</code></td>&#x000A;<td data-sourcepos="123:27-123:42" align="left">minimum <code data-sourcepos="123:37-123:39">8MB</code>&#x000A;</td>&#x000A;<td data-sourcepos="123:44-123: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="124:1-124:169">&#x000A;<td data-sourcepos="124:2-124:25" align="left"><code data-sourcepos="124:4-124:23">maintenance_work_mem</code></td>&#x000A;<td data-sourcepos="124:27-124:42" align="left">minimum <code data-sourcepos="124:37-124:40">64MB</code>&#x000A;</td>&#x000A;<td data-sourcepos="124:44-124:168" align="left">You require <a data-sourcepos="124:57-124: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="125:1-125:146">&#x000A;<td data-sourcepos="125:2-125:25" align="left"><code data-sourcepos="125:4-125:17">shared_buffers</code></td>&#x000A;<td data-sourcepos="125:27-125:42" align="left">minimum <code data-sourcepos="125:37-125:39">2GB</code>&#x000A;</td>&#x000A;<td data-sourcepos="125:44-125: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="126:1-126:190">&#x000A;<td data-sourcepos="126:2-126:25" align="left"><code data-sourcepos="126:4-126:20">statement_timeout</code></td>&#x000A;<td data-sourcepos="126:27-126:42" align="left">maximum 1 min</td>&#x000A;<td data-sourcepos="126:44-126: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="128:1-128:7" dir="auto">&#x000A;<a href="#puma" aria-hidden="true" class="anchor" id="user-content-puma"></a>Puma</h2>&#x000A;<p data-sourcepos="130:1-131:60" dir="auto">The recommended <a data-sourcepos="130:17-130:40" href="https://puma.io/" rel="nofollow noreferrer noopener" target="_blank">Puma</a> settings depend on your <a data-sourcepos="130:66-130:99" href="install_methods.md">installation</a>.&#x000A;By default, the Linux package uses the recommended settings.</p>&#x000A;<p data-sourcepos="133:1-133:24" dir="auto">To adjust Puma settings:</p>&#x000A;<ul data-sourcepos="135:1-138:0" dir="auto">&#x000A;<li data-sourcepos="135:1-135:83">For the Linux package, see <a data-sourcepos="135:30-135:82" href="../administration/operations/puma.md">Puma settings</a>.</li>&#x000A;<li data-sourcepos="136:1-138:0">For the GitLab Helm chart, see the&#x000A;<a data-sourcepos="137:3-137:90" href="https://docs.gitlab.com/charts/charts/gitlab/webservice/index.html" rel="nofollow noreferrer noopener" target="_blank"><code data-sourcepos="137:5-137:14">webservice</code> chart</a>.</li>&#x000A;</ul>&#x000A;<h3 data-sourcepos="139:1-139:11" dir="auto">&#x000A;<a href="#workers" aria-hidden="true" class="anchor" id="user-content-workers"></a>Workers</h3>&#x000A;<p data-sourcepos="141:1-144: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="144:5-144: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="144:7-144:13">puma.rb</code></a>.</p>&#x000A;<p data-sourcepos="146:1-147: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="149:1-154:0" dir="auto">&#x000A;<li data-sourcepos="149:1-149:48">Two workers for 2 CPU cores and 8 GB of memory</li>&#x000A;<li data-sourcepos="150:1-150:48">Two workers for 4 CPU cores and 4 GB of memory</li>&#x000A;<li data-sourcepos="151:1-151:49">Four workers for 4 CPU cores and 8 GB of memory</li>&#x000A;<li data-sourcepos="152:1-152:48">Six workers for 8 CPU cores and 8 GB of memory</li>&#x000A;<li data-sourcepos="153:1-154:0">Eight workers for 8 CPU cores and 16 GB of memory</li>&#x000A;</ul>&#x000A;<p data-sourcepos="155:1-156:115" dir="auto">By default, each Puma worker is limited to 1.2 GB of memory.&#x000A;You can <a data-sourcepos="156:9-156:87" href="../administration/operations/puma.md#reducing-memory-use">adjust this setting</a> in <code data-sourcepos="156:93-156:113">/etc/gitlab/gitlab.rb</code>.</p>&#x000A;<p data-sourcepos="158:1-160: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="160:60-160:93" href="install_methods.md">installation</a>.</p>&#x000A;<h3 data-sourcepos="162:1-162:11" dir="auto">&#x000A;<a href="#threads" aria-hidden="true" class="anchor" id="user-content-threads"></a>Threads</h3>&#x000A;<p data-sourcepos="164:1-165:18" dir="auto">The recommended number of Puma threads depends on total system memory.&#x000A;A node should use:</p>&#x000A;<ul data-sourcepos="167:1-169:0" dir="auto">&#x000A;<li data-sourcepos="167:1-167:69">One thread for an operating system with a maximum of 2 GB of memory</li>&#x000A;<li data-sourcepos="168:1-169:0">Four threads for an operating system with more than 2 GB of memory</li>&#x000A;</ul>&#x000A;<p data-sourcepos="170:1-170:68" dir="auto">More threads would lead to excessive swapping and lower performance.</p>&#x000A;<h2 data-sourcepos="172:1-172:8" dir="auto">&#x000A;<a href="#redis" aria-hidden="true" class="anchor" id="user-content-redis"></a>Redis</h2>&#x000A;<p data-sourcepos="174:1-175:45" dir="auto"><a data-sourcepos="174:1-174: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="177:1-179: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="179:1-179: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="181:1-181:10" dir="auto">For Redis:</p>&#x000A;<ul data-sourcepos="183:1-186:0" dir="auto">&#x000A;<li data-sourcepos="183:1-184:33">Use a standalone instance (with or without high availability).&#x000A;Redis Cluster is not supported.</li>&#x000A;<li data-sourcepos="185:1-186:0">Set the <a data-sourcepos="185:11-185: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="187:1-187:10" dir="auto">&#x000A;<a href="#sidekiq" aria-hidden="true" class="anchor" id="user-content-sidekiq"></a>Sidekiq</h2>&#x000A;<p data-sourcepos="189:1-191:45" dir="auto"><a data-sourcepos="189:1-189: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="193:1-194: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="196:1-196:13" dir="auto">&#x000A;<a href="#prometheus" aria-hidden="true" class="anchor" id="user-content-prometheus"></a>Prometheus</h2>&#x000A;<p data-sourcepos="198:1-199:55" dir="auto">By default, <a data-sourcepos="198:13-198: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="201:1-202:86" dir="auto">For more information, see&#x000A;<a data-sourcepos="202:1-202:85" href="../administration/monitoring/prometheus/index.md">monitoring GitLab with Prometheus</a>.</p>&#x000A;<h2 data-sourcepos="204:1-204: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="206:1-206:43" dir="auto">GitLab supports the following web browsers:</p>&#x000A;<ul data-sourcepos="208:1-213:0" dir="auto">&#x000A;<li data-sourcepos="208:1-208:63"><a data-sourcepos="208:3-208:63" href="https://www.mozilla.org/en-US/firefox/new/" rel="nofollow noreferrer noopener" target="_blank">Mozilla Firefox</a></li>&#x000A;<li data-sourcepos="209:1-209:49"><a data-sourcepos="209:3-209:49" href="https://www.google.com/chrome/" rel="nofollow noreferrer noopener" target="_blank">Google Chrome</a></li>&#x000A;<li data-sourcepos="210:1-210:68"><a data-sourcepos="210:3-210:68" href="https://www.chromium.org/getting-involved/dev-channel/" rel="nofollow noreferrer noopener" target="_blank">Chromium</a></li>&#x000A;<li data-sourcepos="211:1-211:47"><a data-sourcepos="211:3-211:47" href="https://www.apple.com/safari/" rel="nofollow noreferrer noopener" target="_blank">Apple Safari</a></li>&#x000A;<li data-sourcepos="212:1-213:0"><a data-sourcepos="212:3-212: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="214:1-214:16" dir="auto">GitLab supports:</p>&#x000A;<ul data-sourcepos="216:1-218:0" dir="auto">&#x000A;<li data-sourcepos="216:1-216:54">The two most recent major versions of these browsers</li>&#x000A;<li data-sourcepos="217:1-218:0">The current minor version of a supported major version</li>&#x000A;</ul>&#x000A;<p data-sourcepos="219:1-219:75" dir="auto">Running GitLab with JavaScript disabled in these browsers is not supported.</p>&#x000A;<h2 data-sourcepos="221:1-221: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="223:1-224:50" dir="auto">&#x000A;<li data-sourcepos="223:1-223:66"><a data-sourcepos="223:3-223:66" href="https://docs.gitlab.com/runner/install/" rel="nofollow noreferrer noopener" target="_blank">Install GitLab Runner</a></li>&#x000A;<li data-sourcepos="224:1-224:50"><a data-sourcepos="224:3-224:50" 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