[{"data":1,"prerenderedAt":1329},["ShallowReactive",2],{"/blog/getting-started-with-gitlab-and-digitalocean":3,"navigation-en-us":544,"banner-en-us":971,"footer-en-us":981,"blog-post-authors-en-us-Achilleas Pipinellis":1224,"blog-related-posts-en-us-getting-started-with-gitlab-and-digitalocean":1239,"blog-promotions-en-us":1265,"next-steps-en-us":1319},{"id":4,"title":5,"authors":6,"body":8,"category":501,"date":502,"description":503,"extension":504,"externalUrl":505,"faq":505,"featured":506,"heroImage":507,"meta":508,"navigation":532,"path":533,"seo":534,"slug":538,"stem":539,"tags":540,"template":542,"updatedDate":505,"__hash__":543},"blogPosts/en-us/blog/getting-started-with-gitlab-and-digitalocean.md","Getting started with GitLab and DigitalOcean",[7],"Achilleas Pipinellis",{"type":9,"value":10,"toc":490},"minimark",[11,25,30,38,41,52,57,72,80,84,87,90,97,100,106,109,115,118,124,127,131,134,143,157,160,170,177,183,203,209,218,221,227,242,245,251,254,258,261,267,270,276,279,285,289,292,295,301,308,314,317,320,323,329,332,336,343,375,378,393,405,409,412,419,426,429,440,442,452,454,468,486],[12,13,14],"p",{},[15,16,17,18,24],"em",{},"This tutorial is adapted from the ",[19,20,23],"a",{"href":21,"rel":22},"https://www.digitalocean.com/community/tutorials/how-to-use-the-gitlab-one-click-install-image-to-manage-git-repositories",[],"How To Use the GitLab One-Click Install\nImage to Manage Git Repositories"," tutorial on DigitalOcean.",[26,27,29],"h3",{"id":28},"introduction","Introduction",[12,31,32,33,37],{},"Collaborating on projects, keeping track of source changes, and maintaining a\nclean code repository are some great reasons to use a ",[19,34,36],{"href":35},"/topics/version-control/","version control"," system.\nVersion control is now considered an essential tool in software development.",[12,39,40],{},"Git is the most popular distributed version control system. GitLab is a Git\nrepository management server that can be used to host repositories and set up\ncontrol structures for git within a clean web interface. It is built on Ruby on\nRails.",[12,42,43,47,48,51],{},[44,45,46],"span",{},"DigitalOcean"," has created a GitLab application image that can be used to\ninstantly deploy GitLab Community Edition on a DigitalOcean Ubuntu 14.04 x86-64\ndroplet using the ",[44,49,50],{},"Omnibus installer",". You can have your own repository system\nup and running in minutes.",[53,54,56],"h2",{"id":55},"requirements","Requirements",[12,58,59,60,65,66,71],{},"The ",[19,61,64],{"href":62,"rel":63},"https://docs.gitlab.com/ce/install/requirements/#hardware-requirements",[],"GitLab documentation recommends a minimum of 2GB of RAM and 2 CPU cores","\nfor optimum performance. If your projects are small (fewer than 100 users total),\n1GB of RAM and 1 CPU core may be sufficient, but make sure you have at least 1GB\nswap. You can follow the ",[19,67,70],{"href":68,"rel":69},"https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04",[],"How To Add Swap on Ubuntu 14.04"," tutorial.",[12,73,74,75,79],{},"Low memory may result in ",[76,77,78],"code",{},"500"," server errors (\"cannot allocate memory\"), so make\nsure you add enough RAM according to your needs.",[53,81,83],{"id":82},"step-one-create-a-gitlab-droplet","Step One – Create a GitLab Droplet",[12,85,86],{},"Before you begin using GitLab, you need to spin up a DigitalOcean droplet using\nthe provided image.",[12,88,89],{},"From the Control Panel, click on the \"Create Droplet\" button that is visible\nfrom any page:",[12,91,92],{},[93,94],"img",{"alt":95,"src":96},"Create Droplet","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398313/blog/Content%20Images/getting-started-with-gitlab-and-digitalocean/create-droplet-shadow.png",[12,98,99],{},"Under the \"Choose an image\" section, select the \"One-click Apps\" tab and click\nthe \"GitLab\" image (the version might differ).",[12,101,102],{},[93,103],{"alt":104,"src":105},"Droplet app","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398314/blog/Content%20Images/getting-started-with-gitlab-and-digitalocean/select_gitlab_app-shadow.png",[12,107,108],{},"The next step is to choose the droplet size and the region you would like to use.",[12,110,111],{},[93,112],{"alt":113,"src":114},"Hardware","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398314/blog/Content%20Images/getting-started-with-gitlab-and-digitalocean/hardware-shadow.png",[12,116,117],{},"Add any SSH Keys, select any settings you'd like to use, and click \"Create\" at\nthe bottom.",[12,119,120],{},[93,121],{"alt":122,"src":123},"Finalize creation","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398313/blog/Content%20Images/getting-started-with-gitlab-and-digitalocean/finalize-shadow.png",[12,125,126],{},"Your GitLab droplet will be created and available in a few minutes!",[53,128,130],{"id":129},"step-two-configure-domain-names-and-emails","Step Two – Configure Domain Names and Emails",[12,132,133],{},"We still need to configure just a few things first to utilize our environment.",[12,135,136,137,142],{},"Begin by setting up the domain name you would like to use for your GitLab\ninstance. Learn ",[19,138,141],{"href":139,"rel":140},"https://www.digitalocean.com/community/articles/how-to-set-up-a-host-name-with-digitalocean",[],"how to set up domain names on DigitalOcean"," if you\nwant to use DigitalOcean's nameservers.",[144,145,146],"blockquote",{},[12,147,148,152,153,156],{},[149,150,151],"strong",{},"Note:","\nIf you don't have a domain name at your disposal, you can just use your\ndroplet's IP address, but GitLab will ",[15,154,155],{},"not"," be able to send emails without\nusing an SMTP server.",[12,158,159],{},"Once your domain name is configured correctly, you need to adjust some values\non the actual VPS instance. Log into your droplet as root through SSH, and open\nthe GitLab configuration file with your text editor:",[161,162,168],"pre",{"className":163,"code":165,"language":166,"meta":167},[164],"language-text","vim /etc/gitlab/gitlab.rb\n","text","",[76,169,165],{"__ignoreMap":167},[12,171,172,173,176],{},"Uncomment and adjust the ",[76,174,175],{},"external_url"," parameter to match your domain name:",[161,178,181],{"className":179,"code":180,"language":166,"meta":167},[164],"external_url \"http://your_domain.com/\"\n",[76,182,180],{"__ignoreMap":167},[12,184,185,186,191,192,195,196,198,199,202],{},"If you have ",[19,187,190],{"href":188,"rel":189},"https://www.digitalocean.com/community/tutorials/how-to-install-an-ssl-certificate-from-a-commercial-certificate-authority",[],"generated an SSL certificate"," for your domain, you can\nconfigure GitLab to use it in this file as well. The following settings set the\nlocations of the SSL certificates and instruct the NGINX web server to redirect\nthe HTTP traffic to HTTPS. Note that for HTTPS to work, you ",[149,193,194],{},"must"," set the URL\nscheme in ",[76,197,175],{}," as ",[76,200,201],{},"https",":",[161,204,207],{"className":205,"code":206,"language":166,"meta":167},[164],"external_url \"https://your_domain.com/\"\n\nnginx['ssl_certificate'] = \"/etc/gitlab/ssl/your_domain.com.crt\"\nnginx['ssl_certificate_key'] = \"/etc/gitlab/ssl/your_domain.com.key\"\nnginx['redirect_http_to_https'] = true\n",[76,208,206],{"__ignoreMap":167},[12,210,211,212,217],{},"GitLab uses its own bundled NGINX web server. You can find more information like\nusing your own external web server, changing the ports NGINX listens to, etc.,\nin the ",[19,213,216],{"href":214,"rel":215},"https://docs.gitlab.com/omnibus/settings/nginx/",[],"official documentation",".",[12,219,220],{},"While we're in this file, we can adjust the email settings that GitLab will use\nin the \"From:\" field in automated emails, and the email display name, respectively:",[161,222,225],{"className":223,"code":224,"language":166,"meta":167},[164],"gitlab_rails['gitlab_email_from'] = \"gitlab@your_domain.com\"\ngitlab_rails['gitlab_email_display_name'] = 'Example'\n",[76,226,224],{"__ignoreMap":167},[12,228,229,230,235,236,241],{},"The GitLab One-Click application is configured to use a local postfix server\nfor sending emails. If you wish to use it with GitLab you might want to set it\nup correctly. Follow the \"",[19,231,234],{"href":232,"rel":233},"https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-postfix-as-a-send-only-smtp-server-on-ubuntu-14-04",[],"How To Install and Configure Postfix as a Send-Only\nSMTP Server on Ubuntu 14.04","\" tutorial for more information. For a\nproduction site, you will likely want to use an external service such as\nMandrill or SendGrid. If so, you can ",[19,237,240],{"href":238,"rel":239},"https://docs.gitlab.com/omnibus/settings/smtp/",[],"configure the SMTP settings"," here\nas well.",[12,243,244],{},"After saving and closing the file, we just need to reconfigure the service:",[161,246,249],{"className":247,"code":248,"language":166,"meta":167},[164],"gitlab-ctl reconfigure\n",[76,250,248],{"__ignoreMap":167},[12,252,253],{},"This should be done whenever you make configuration changes in order for them to\ntake effect.",[53,255,257],{"id":256},"step-three-log-into-gitlab","Step Three – Log into GitLab",[12,259,260],{},"When you connect to your GitLab instance via SSH or the DigitalOcean web console,\nyou will see the message of the day (MOTD) which contains your randomly generated\nGitLab password. It will look like this:",[161,262,265],{"className":263,"code":264,"language":166,"meta":167},[164],"------------------------------------------------------------------------------\nThank you for using DigitalOcean's GitLab Application.\nYour GitLab instance can be accessed at http://xxx.xxx.xxx.xxx/\nThe default credentials for GitLab are:\nUsername: root\nPassword: e0wXRM4fLmb6\n\nYou can find more information on using this image at: http://do.co/gitlabapp\n------------------------------------------------------------------------------\n",[76,266,264],{"__ignoreMap":167},[12,268,269],{},"Next, open a web browser and navigate to your domain name (or the IP address of\nyour Droplet if you did not set up a domain name). You will be able to log in\nusing the credentials you found above.",[12,271,272],{},[93,273],{"alt":274,"src":275},"Login","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398314/blog/Content%20Images/getting-started-with-gitlab-and-digitalocean/login-shadow.png",[12,277,278],{},"You now have a full GitLab server configured and at your disposal to manage your\nrepositories.",[12,280,281],{},[93,282],{"alt":283,"src":284},"Landing","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398314/blog/Content%20Images/getting-started-with-gitlab-and-digitalocean/landing-shadow.png",[53,286,288],{"id":287},"step-four-modify-account-information","Step Four – Modify Account Information",[12,290,291],{},"It would probably be more helpful if the account you're using, more accurately\nreflected your information. This will allow you to receive email updates and\nwill display your information to other users. The root account is the first one\ncreated by default, and it contains some predefined values for \"Name\", \"Username\"\nand \"Email\". You can change all that from the \"Admin Area\".",[12,293,294],{},"Let's navigate to the \"Admin Area\" by clicking the wrench icon in the top-right\ncorner.",[12,296,297],{},[93,298],{"alt":299,"src":300},"Admin","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398313/blog/Content%20Images/getting-started-with-gitlab-and-digitalocean/admin_button-shadow.png",[12,302,303,304,307],{},"In the left sidebar click ",[149,305,306],{},"Users",". This should only contain one user, the\nAdministrator account you are logged into.",[12,309,310],{},[93,311],{"alt":312,"src":313},"Users area","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398313/blog/Content%20Images/getting-started-with-gitlab-and-digitalocean/admin_users-shadow.png",[12,315,316],{},"Click on the \"Edit\" button and change the account information at the top.",[12,318,319],{},"The \"Name\" field will be your name as displayed to other users. The \"Username\"\ncan be used to log in and it defines the owner of your projects. The \"Email\"\nis where alerts will be sent.",[12,321,322],{},"It is important to at least change the email field.",[12,324,325],{},[93,326],{"alt":327,"src":328},"Account edit","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398312/blog/Content%20Images/getting-started-with-gitlab-and-digitalocean/account-shadow.png",[12,330,331],{},"Click \"Save changes\" at the bottom for the changes to take effect.",[53,333,335],{"id":334},"updating-to-newer-releases","Updating to Newer Releases",[12,337,338,339,342],{},"The GitLab One-Click application is configured to use the GitLab Apt repository.\n[Updating to the most recent version]",[44,340,341],{},"update-doc"," is as simple as running:",[161,344,348],{"className":345,"code":346,"language":347,"meta":167,"style":167},"language-shell shiki shiki-themes github-light","sudo apt-get update\nsudo apt-get upgrade\n","shell",[76,349,350,365],{"__ignoreMap":167},[44,351,354,358,362],{"class":352,"line":353},"line",1,[44,355,357],{"class":356},"s7eDp","sudo",[44,359,361],{"class":360},"sYBdl"," apt-get",[44,363,364],{"class":360}," update\n",[44,366,368,370,372],{"class":352,"line":367},2,[44,369,357],{"class":356},[44,371,361],{"class":360},[44,373,374],{"class":360}," upgrade\n",[12,376,377],{},"Before upgrading to a new release, GitLab automatically backups the database.\nIf you wish to make a full back up of your existing installation, run:",[161,379,381],{"className":345,"code":380,"language":347,"meta":167,"style":167},"sudo gitlab-rake gitlab:backup:create\n",[76,382,383],{"__ignoreMap":167},[44,384,385,387,390],{"class":352,"line":353},[44,386,357],{"class":356},[44,388,389],{"class":360}," gitlab-rake",[44,391,392],{"class":360}," gitlab:backup:create\n",[12,394,395,396,399,400,217],{},"The resulting backup will be located in: ",[76,397,398],{},"/var/opt/gitlab/backups",". You can read\nmore in the ",[19,401,404],{"href":402,"rel":403},"https://docs.gitlab.com/omnibus/settings/backups/",[],"Omnibus backup documentation",[53,406,408],{"id":407},"conclusion","Conclusion",[12,410,411],{},"You should now have a server configured to handle your team's Git projects. You\ncan easily manage user access, configure both public and private repositories,\nand get an overview of your projects' issues and commits.",[12,413,414,415,418],{},"GitLab has a great help system accessible from within the user interface\n(visit ",[76,416,417],{},"https://your_domain.com/help","). In a future article, we will discuss\nhow to manage repositories and users and effectively take advantage of the\ninterface.",[12,420,421,422,217],{},"For further information on configuring your GitLab Omnibus installation, check\nout the ",[19,423,216],{"href":424,"rel":425},"https://docs.gitlab.com/omnibus/",[],[427,428],"hr",{},[12,430,431,432,435,436,217],{},"If you already have GitLab installed and want to use the [integrated CI]",[44,433,434],{},"glci","\nfor your projects, check our other tutorial on\n",[19,437,439],{"href":438},"/blog/how-to-set-up-gitlab-runner-on-digitalocean/","setting up GitLab Runner on DigitalOcean",[427,441],{},[12,443,444],{},[19,445,448],{"href":446,"rel":447},"https://www.digitalocean.com/features/one-click-apps/gitlab/",[],[93,449],{"alt":450,"src":451},"Powered by DigitalOcean","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398861/blog/Content%20Images/powered-by-do-badge-gray.png",[427,453],{},[12,455,456],{},[15,457,458,459,463,464,467],{},"Photo credits: ",[19,460,461],{"href":461,"rel":462},"https://flic.kr/p/9RAQ2J",[]," ([CC BY-NC 2.0]",[44,465,466],{},"cc",")",[12,469,470,472,473,475,476,480,475,482],{},[44,471,434],{},": /solutions/continuous-integration/ ",[44,474,466],{},": ",[19,477,478],{"href":478,"rel":479},"https://creativecommons.org/licenses/by-nc/2.0/",[],[44,481,341],{},[19,483,484],{"href":484,"rel":485},"https://docs.gitlab.com/omnibus/update/README/#updating-using-the-official-repositories",[],[487,488,489],"style",{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":167,"searchDepth":367,"depth":367,"links":491},[492,494,495,496,497,498,499,500],{"id":28,"depth":493,"text":29},3,{"id":55,"depth":367,"text":56},{"id":82,"depth":367,"text":83},{"id":129,"depth":367,"text":130},{"id":256,"depth":367,"text":257},{"id":287,"depth":367,"text":288},{"id":334,"depth":367,"text":335},{"id":407,"depth":367,"text":408},"engineering","2016-04-27","This tutorial is adapted from the How To Use the GitLab One-Click Install Image to Manage Git Repositories tutorial on DigitalOcean.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672941/Blog/Hero%20Images/sharks-paper.jpg",{"excerpt":509},{"type":9,"value":510},[511,518,520,524,526],[12,512,513],{},[15,514,17,515,24],{},[19,516,23],{"href":21,"rel":517},[],[26,519,29],{"id":28},[12,521,32,522,37],{},[19,523,36],{"href":35},[12,525,40],{},[12,527,528,47,530,51],{},[44,529,46],{},[44,531,50],{},true,"/en-us/blog/getting-started-with-gitlab-and-digitalocean",{"title":5,"description":503,"ogTitle":5,"ogDescription":503,"noIndex":506,"ogImage":507,"ogUrl":535,"ogSiteName":536,"ogType":537,"canonicalUrls":535},"https://about.gitlab.com/blog/getting-started-with-gitlab-and-digitalocean","https://about.gitlab.com","article","getting-started-with-gitlab-and-digitalocean","en-us/blog/getting-started-with-gitlab-and-digitalocean",[541],"integrations","BlogPost","YRuJCPRbEo1lOnQgVTqX__Fo9y3OdA_f6t4rSgQbx-U",{"logo":545,"freeTrial":550,"sales":555,"login":560,"items":565,"search":891,"minimal":922,"duo":941,"switchNav":950,"pricingDeployment":961},{"config":546},{"href":547,"dataGaName":548,"dataGaLocation":549},"/","gitlab logo","header",{"text":551,"config":552},"Get free trial",{"href":553,"dataGaName":554,"dataGaLocation":549},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":556,"config":557},"Request a demo",{"href":558,"dataGaName":559,"dataGaLocation":549},"/sales/?contact-topic=request-demo","sales",{"text":561,"config":562},"Sign in",{"href":563,"dataGaName":564,"dataGaLocation":549},"https://gitlab.com/users/sign_in/","sign in",[566,595,695,700,813,869],{"text":567,"config":568,"menu":570},"Platform",{"dataNavLevelOne":569},"platform",{"type":571,"columns":572},"cards",[573,579,587],{"title":567,"description":574,"link":575},"The intelligent orchestration platform for DevSecOps",{"text":576,"config":577},"Explore our Platform",{"href":578,"dataGaName":569,"dataGaLocation":549},"/platform/",{"title":580,"description":581,"link":582},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":583,"config":584},"Meet GitLab Duo",{"href":585,"dataGaName":586,"dataGaLocation":549},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":588,"description":589,"link":590},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":591,"config":592},"Learn more",{"href":593,"dataGaName":594,"dataGaLocation":549},"/why-gitlab/","why gitlab",{"text":596,"left":532,"config":597,"menu":599},"Product",{"dataNavLevelOne":598},"solutions",{"type":600,"link":601,"columns":605,"feature":674},"lists",{"text":602,"config":603},"View all Solutions",{"href":604,"dataGaName":598,"dataGaLocation":549},"/solutions/",[606,630,653],{"title":607,"description":608,"link":609,"items":614},"Automation","CI/CD and automation to accelerate deployment",{"config":610},{"icon":611,"href":612,"dataGaName":613,"dataGaLocation":549},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[615,619,622,626],{"text":616,"config":617},"CI/CD",{"href":618,"dataGaLocation":549,"dataGaName":616},"/solutions/continuous-integration/",{"text":580,"config":620},{"href":585,"dataGaLocation":549,"dataGaName":621},"gitlab duo agent platform - product menu",{"text":623,"config":624},"Source Code Management",{"href":625,"dataGaLocation":549,"dataGaName":623},"/solutions/source-code-management/",{"text":627,"config":628},"Automated Software Delivery",{"href":612,"dataGaLocation":549,"dataGaName":629},"Automated software delivery",{"title":631,"description":632,"link":633,"items":638},"Security","Deliver code faster without compromising security",{"config":634},{"href":635,"dataGaName":636,"dataGaLocation":549,"icon":637},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[639,643,648],{"text":640,"config":641},"Application Security Testing",{"href":635,"dataGaName":642,"dataGaLocation":549},"Application security testing",{"text":644,"config":645},"Software Supply Chain Security",{"href":646,"dataGaLocation":549,"dataGaName":647},"/solutions/supply-chain/","Software supply chain security",{"text":649,"config":650},"Software Compliance",{"href":651,"dataGaName":652,"dataGaLocation":549},"/solutions/software-compliance/","software compliance",{"title":654,"link":655,"items":660},"Measurement",{"config":656},{"icon":657,"href":658,"dataGaName":659,"dataGaLocation":549},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[661,665,669],{"text":662,"config":663},"Visibility & Measurement",{"href":658,"dataGaLocation":549,"dataGaName":664},"Visibility and Measurement",{"text":666,"config":667},"Value Stream Management",{"href":668,"dataGaLocation":549,"dataGaName":666},"/solutions/value-stream-management/",{"text":670,"config":671},"Analytics & Insights",{"href":672,"dataGaLocation":549,"dataGaName":673},"/solutions/analytics-and-insights/","Analytics and insights",{"title":675,"type":600,"items":676},"GitLab for",[677,683,689],{"text":678,"config":679},"Enterprise",{"icon":680,"href":681,"dataGaLocation":549,"dataGaName":682},"Building","/enterprise/","enterprise",{"text":684,"config":685},"Small Business",{"icon":686,"href":687,"dataGaLocation":549,"dataGaName":688},"Work","/small-business/","small business",{"text":690,"config":691},"Public Sector",{"icon":692,"href":693,"dataGaLocation":549,"dataGaName":694},"Organization","/solutions/public-sector/","public sector",{"text":696,"config":697},"Pricing",{"href":698,"dataGaName":699,"dataGaLocation":549,"dataNavLevelOne":699},"/pricing/","pricing",{"text":701,"config":702,"menu":704},"Resources",{"dataNavLevelOne":703},"resources",{"type":600,"link":705,"columns":709,"feature":802},{"text":706,"config":707},"View all resources",{"href":708,"dataGaName":703,"dataGaLocation":549},"/resources/",[710,742,769],{"title":711,"items":712},"Getting started",[713,718,723,728,733,738],{"text":714,"config":715},"Install",{"href":716,"dataGaName":717,"dataGaLocation":549},"/install/","install",{"text":719,"config":720},"Quick start guides",{"href":721,"dataGaName":722,"dataGaLocation":549},"/get-started/","quick setup checklists",{"text":724,"config":725},"Learn",{"href":726,"dataGaLocation":549,"dataGaName":727},"https://university.gitlab.com/","learn",{"text":729,"config":730},"Product documentation",{"href":731,"dataGaName":732,"dataGaLocation":549},"https://docs.gitlab.com/","product documentation",{"text":734,"config":735},"Best practice videos",{"href":736,"dataGaName":737,"dataGaLocation":549},"/getting-started-videos/","best practice videos",{"text":739,"config":740},"Integrations",{"href":741,"dataGaName":541,"dataGaLocation":549},"/integrations/",{"title":743,"items":744},"Discover",[745,750,755,760,764],{"text":746,"config":747},"Customer success stories",{"href":748,"dataGaName":749,"dataGaLocation":549},"/customers/","customer success stories",{"text":751,"config":752},"Blog",{"href":753,"dataGaName":754,"dataGaLocation":549},"/blog/","blog",{"text":756,"config":757},"Demo Hub",{"href":758,"dataGaName":759,"dataGaLocation":549},"/demo-hub/","demo hub",{"text":761,"config":762},"The Source",{"href":763,"dataGaName":754,"dataGaLocation":549},"/the-source/",{"text":765,"config":766},"Remote",{"href":767,"dataGaName":768,"dataGaLocation":549},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":770,"items":771},"Connect",[772,777,782,787,792,797],{"text":773,"config":774},"GitLab Services",{"href":775,"dataGaName":776,"dataGaLocation":549},"/services/","services",{"text":778,"config":779},"Contribute",{"href":780,"dataGaName":781,"dataGaLocation":549},"https://contributors.gitlab.com","contribute",{"text":783,"config":784},"Community",{"href":785,"dataGaName":786,"dataGaLocation":549},"/community/","community",{"text":788,"config":789},"Forum",{"href":790,"dataGaName":791,"dataGaLocation":549},"https://forum.gitlab.com/","forum",{"text":793,"config":794},"Events",{"href":795,"dataGaName":796,"dataGaLocation":549},"/events/","events",{"text":798,"config":799},"Partners",{"href":800,"dataGaName":801,"dataGaLocation":549},"/partners/","partners",{"config":803,"title":806,"text":807,"link":808},{"background":804,"textColor":805},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","What’s new in GitLab","Stay updated with our latest features and improvements.",{"text":809,"config":810},"Read the latest",{"href":811,"dataGaName":812,"dataGaLocation":549},"/whats-new/","whats new",{"text":814,"config":815,"menu":817},"Company",{"dataNavLevelOne":816},"company",{"type":600,"columns":818},[819],{"items":820},[821,826,832,834,839,844,849,854,859,864],{"text":822,"config":823},"About",{"href":824,"dataGaName":825,"dataGaLocation":549},"/company/","about",{"text":827,"config":828,"footerGa":831},"Jobs",{"href":829,"dataGaName":830,"dataGaLocation":549},"/jobs/","jobs",{"dataGaName":830},{"text":793,"config":833},{"href":795,"dataGaName":796,"dataGaLocation":549},{"text":835,"config":836},"Leadership",{"href":837,"dataGaName":838,"dataGaLocation":549},"/company/team/e-group/","leadership",{"text":840,"config":841},"Handbook",{"href":842,"dataGaName":843,"dataGaLocation":549},"https://handbook.gitlab.com/","handbook",{"text":845,"config":846},"Investor relations",{"href":847,"dataGaName":848,"dataGaLocation":549},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":850,"config":851},"Trust Center",{"href":852,"dataGaName":853,"dataGaLocation":549},"/security/","trust center",{"text":855,"config":856},"AI Transparency Center",{"href":857,"dataGaName":858,"dataGaLocation":549},"/ai-transparency-center/","ai transparency center",{"text":860,"config":861},"Newsletter",{"href":862,"dataGaName":863,"dataGaLocation":549},"/company/contact/#contact-forms","newsletter",{"text":865,"config":866},"Press",{"href":867,"dataGaName":868,"dataGaLocation":549},"/press/","press",{"text":870,"config":871,"menu":872},"Contact us",{"dataNavLevelOne":816},{"type":600,"columns":873},[874],{"items":875},[876,881,886],{"text":877,"config":878},"Talk to sales",{"href":879,"dataGaName":880,"dataGaLocation":549},"/sales/","talk to sales",{"text":882,"config":883},"Support portal",{"href":884,"dataGaName":885,"dataGaLocation":549},"https://support.gitlab.com/hc/en-us","support portal",{"text":887,"config":888},"Customer portal",{"href":889,"dataGaName":890,"dataGaLocation":549},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":892,"login":893,"suggestions":900},"Close",{"text":894,"link":895},"To search repositories and projects, login to",{"text":896,"config":897},"gitlab.com",{"href":563,"dataGaName":898,"dataGaLocation":899},"search login","search",{"text":901,"default":902},"Suggestions",[903,905,909,911,915,919],{"text":580,"config":904},{"href":585,"dataGaName":580,"dataGaLocation":899},{"text":906,"config":907},"Code Suggestions (AI)",{"href":908,"dataGaName":906,"dataGaLocation":899},"/solutions/code-suggestions/",{"text":616,"config":910},{"href":618,"dataGaName":616,"dataGaLocation":899},{"text":912,"config":913},"GitLab on AWS",{"href":914,"dataGaName":912,"dataGaLocation":899},"/partners/technology-partners/aws/",{"text":916,"config":917},"GitLab on Google Cloud",{"href":918,"dataGaName":916,"dataGaLocation":899},"/partners/technology-partners/google-cloud-platform/",{"text":920,"config":921},"Why GitLab?",{"href":593,"dataGaName":920,"dataGaLocation":899},{"freeTrial":923,"mobileIcon":928,"desktopIcon":933,"secondaryButton":936},{"text":924,"config":925},"Start free trial",{"href":926,"dataGaName":554,"dataGaLocation":927},"https://gitlab.com/-/trials/new/","nav",{"altText":929,"config":930},"Gitlab Icon",{"src":931,"dataGaName":932,"dataGaLocation":927},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":929,"config":934},{"src":935,"dataGaName":932,"dataGaLocation":927},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":937,"config":938},"Get Started",{"href":939,"dataGaName":940,"dataGaLocation":927},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":942,"mobileIcon":946,"desktopIcon":948},{"text":943,"config":944},"Learn more about GitLab Duo",{"href":585,"dataGaName":945,"dataGaLocation":927},"gitlab duo",{"altText":929,"config":947},{"src":931,"dataGaName":932,"dataGaLocation":927},{"altText":929,"config":949},{"src":935,"dataGaName":932,"dataGaLocation":927},{"button":951,"mobileIcon":956,"desktopIcon":958},{"text":952,"config":953},"/switch",{"href":954,"dataGaName":955,"dataGaLocation":927},"#contact","switch",{"altText":929,"config":957},{"src":931,"dataGaName":932,"dataGaLocation":927},{"altText":929,"config":959},{"src":960,"dataGaName":932,"dataGaLocation":927},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":962,"mobileIcon":967,"desktopIcon":969},{"text":963,"config":964},"Back to pricing",{"href":698,"dataGaName":965,"dataGaLocation":927,"icon":966},"back to pricing","GoBack",{"altText":929,"config":968},{"src":931,"dataGaName":932,"dataGaLocation":927},{"altText":929,"config":970},{"src":935,"dataGaName":932,"dataGaLocation":927},{"title":972,"titleMobile":973,"button":974,"config":979},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":591,"config":975},{"href":976,"dataGaName":977,"dataGaLocation":978},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":980,"disabled":506},"release",{"data":982},{"text":983,"source":984,"edit":990,"contribute":995,"config":1000,"items":1005,"minimal":1213},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":985,"config":986},"View page source",{"href":987,"dataGaName":988,"dataGaLocation":989},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":991,"config":992},"Edit this page",{"href":993,"dataGaName":994,"dataGaLocation":989},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":996,"config":997},"Please contribute",{"href":998,"dataGaName":999,"dataGaLocation":989},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1001,"facebook":1002,"youtube":1003,"linkedin":1004},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1006,1053,1105,1149,1181],{"title":696,"links":1007,"subMenu":1022},[1008,1012,1017],{"text":1009,"config":1010},"View plans",{"href":698,"dataGaName":1011,"dataGaLocation":989},"view plans",{"text":1013,"config":1014},"Why Premium?",{"href":1015,"dataGaName":1016,"dataGaLocation":989},"/pricing/premium/","why premium",{"text":1018,"config":1019},"Why Ultimate?",{"href":1020,"dataGaName":1021,"dataGaLocation":989},"/pricing/ultimate/","why ultimate",[1023],{"title":1024,"links":1025},"Contact Us",[1026,1029,1031,1033,1038,1043,1048],{"text":1027,"config":1028},"Contact sales",{"href":879,"dataGaName":559,"dataGaLocation":989},{"text":882,"config":1030},{"href":884,"dataGaName":885,"dataGaLocation":989},{"text":887,"config":1032},{"href":889,"dataGaName":890,"dataGaLocation":989},{"text":1034,"config":1035},"Status",{"href":1036,"dataGaName":1037,"dataGaLocation":989},"https://status.gitlab.com/","status",{"text":1039,"config":1040},"Terms of use",{"href":1041,"dataGaName":1042,"dataGaLocation":989},"/terms/","terms of use",{"text":1044,"config":1045},"Privacy statement",{"href":1046,"dataGaName":1047,"dataGaLocation":989},"/privacy/","privacy statement",{"text":1049,"config":1050},"Cookie preferences",{"dataGaName":1051,"dataGaLocation":989,"id":1052,"isOneTrustButton":532},"cookie preferences","ot-sdk-btn",{"title":596,"links":1054,"subMenu":1063},[1055,1059],{"text":1056,"config":1057},"DevSecOps platform",{"href":578,"dataGaName":1058,"dataGaLocation":989},"devsecops platform",{"text":1060,"config":1061},"AI-Assisted Development",{"href":585,"dataGaName":1062,"dataGaLocation":989},"ai-assisted development",[1064],{"title":1065,"links":1066},"Topics",[1067,1072,1077,1082,1085,1090,1095,1100],{"text":1068,"config":1069},"CICD",{"href":1070,"dataGaName":1071,"dataGaLocation":989},"/topics/ci-cd/","cicd",{"text":1073,"config":1074},"GitOps",{"href":1075,"dataGaName":1076,"dataGaLocation":989},"/topics/gitops/","gitops",{"text":1078,"config":1079},"DevOps",{"href":1080,"dataGaName":1081,"dataGaLocation":989},"/topics/devops/","devops",{"text":1083,"config":1084},"Version Control",{"href":35,"dataGaName":36,"dataGaLocation":989},{"text":1086,"config":1087},"DevSecOps",{"href":1088,"dataGaName":1089,"dataGaLocation":989},"/topics/devsecops/","devsecops",{"text":1091,"config":1092},"Cloud Native",{"href":1093,"dataGaName":1094,"dataGaLocation":989},"/topics/cloud-native/","cloud native",{"text":1096,"config":1097},"AI for Coding",{"href":1098,"dataGaName":1099,"dataGaLocation":989},"/topics/devops/ai-for-coding/","ai for coding",{"text":1101,"config":1102},"Agentic AI",{"href":1103,"dataGaName":1104,"dataGaLocation":989},"/topics/agentic-ai/","agentic ai",{"title":1106,"links":1107},"Solutions",[1108,1110,1112,1117,1121,1124,1128,1131,1133,1136,1139,1144],{"text":640,"config":1109},{"href":635,"dataGaName":640,"dataGaLocation":989},{"text":629,"config":1111},{"href":612,"dataGaName":613,"dataGaLocation":989},{"text":1113,"config":1114},"Agile development",{"href":1115,"dataGaName":1116,"dataGaLocation":989},"/solutions/agile-delivery/","agile delivery",{"text":1118,"config":1119},"SCM",{"href":625,"dataGaName":1120,"dataGaLocation":989},"source code management",{"text":1068,"config":1122},{"href":618,"dataGaName":1123,"dataGaLocation":989},"continuous integration & delivery",{"text":1125,"config":1126},"Value stream management",{"href":668,"dataGaName":1127,"dataGaLocation":989},"value stream management",{"text":1073,"config":1129},{"href":1130,"dataGaName":1076,"dataGaLocation":989},"/solutions/gitops/",{"text":678,"config":1132},{"href":681,"dataGaName":682,"dataGaLocation":989},{"text":1134,"config":1135},"Small business",{"href":687,"dataGaName":688,"dataGaLocation":989},{"text":1137,"config":1138},"Public sector",{"href":693,"dataGaName":694,"dataGaLocation":989},{"text":1140,"config":1141},"Education",{"href":1142,"dataGaName":1143,"dataGaLocation":989},"/solutions/education/","education",{"text":1145,"config":1146},"Financial services",{"href":1147,"dataGaName":1148,"dataGaLocation":989},"/solutions/finance/","financial services",{"title":701,"links":1150},[1151,1153,1155,1157,1160,1162,1165,1167,1169,1171,1173,1175,1177,1179],{"text":714,"config":1152},{"href":716,"dataGaName":717,"dataGaLocation":989},{"text":719,"config":1154},{"href":721,"dataGaName":722,"dataGaLocation":989},{"text":724,"config":1156},{"href":726,"dataGaName":727,"dataGaLocation":989},{"text":729,"config":1158},{"href":731,"dataGaName":1159,"dataGaLocation":989},"docs",{"text":751,"config":1161},{"href":753,"dataGaName":754,"dataGaLocation":989},{"text":1163,"config":1164},"What's new",{"href":811,"dataGaName":812,"dataGaLocation":989},{"text":746,"config":1166},{"href":748,"dataGaName":749,"dataGaLocation":989},{"text":765,"config":1168},{"href":767,"dataGaName":768,"dataGaLocation":989},{"text":773,"config":1170},{"href":775,"dataGaName":776,"dataGaLocation":989},{"text":778,"config":1172},{"href":780,"dataGaName":781,"dataGaLocation":989},{"text":783,"config":1174},{"href":785,"dataGaName":786,"dataGaLocation":989},{"text":788,"config":1176},{"href":790,"dataGaName":791,"dataGaLocation":989},{"text":793,"config":1178},{"href":795,"dataGaName":796,"dataGaLocation":989},{"text":798,"config":1180},{"href":800,"dataGaName":801,"dataGaLocation":989},{"title":814,"links":1182},[1183,1185,1187,1189,1191,1193,1197,1202,1204,1206,1208],{"text":822,"config":1184},{"href":824,"dataGaName":816,"dataGaLocation":989},{"text":827,"config":1186},{"href":829,"dataGaName":830,"dataGaLocation":989},{"text":835,"config":1188},{"href":837,"dataGaName":838,"dataGaLocation":989},{"text":840,"config":1190},{"href":842,"dataGaName":843,"dataGaLocation":989},{"text":845,"config":1192},{"href":847,"dataGaName":848,"dataGaLocation":989},{"text":1194,"config":1195},"Sustainability",{"href":1196,"dataGaName":1194,"dataGaLocation":989},"/sustainability/",{"text":1198,"config":1199},"Diversity, inclusion and belonging (DIB)",{"href":1200,"dataGaName":1201,"dataGaLocation":989},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":850,"config":1203},{"href":852,"dataGaName":853,"dataGaLocation":989},{"text":860,"config":1205},{"href":862,"dataGaName":863,"dataGaLocation":989},{"text":865,"config":1207},{"href":867,"dataGaName":868,"dataGaLocation":989},{"text":1209,"config":1210},"Modern Slavery Transparency Statement",{"href":1211,"dataGaName":1212,"dataGaLocation":989},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1214},[1215,1218,1221],{"text":1216,"config":1217},"Terms",{"href":1041,"dataGaName":1042,"dataGaLocation":989},{"text":1219,"config":1220},"Cookies",{"dataGaName":1051,"dataGaLocation":989,"id":1052,"isOneTrustButton":532},{"text":1222,"config":1223},"Privacy",{"href":1046,"dataGaName":1047,"dataGaLocation":989},[1225],{"id":1226,"title":7,"body":505,"config":1227,"content":1229,"description":505,"extension":1233,"meta":1234,"navigation":532,"path":1235,"seo":1236,"stem":1237,"__hash__":1238},"blogAuthors/en-us/blog/authors/achilleas-pipinellis.yml",{"template":1228},"BlogAuthor",{"name":7,"config":1230},{"headshot":1231,"ctfId":1232},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749671703/Blog/Author%20Headshots/axil-headshot.jpg","Achilleas-Pipinellis","yml",{},"/en-us/blog/authors/achilleas-pipinellis",{},"en-us/blog/authors/achilleas-pipinellis","vSsnKACisBQ6cIWVfVkuQ4WeAp0ylxXfqK5oJMhxEEg",[1240,1249,1257],{"title":1241,"description":1242,"heroImage":1243,"category":501,"date":1244,"authors":1245,"slug":1248,"externalUrl":505},"Confidential AI for GitLab Self-Hosted","Give developers AI coding agents in GitLab Duo without source code leaving a hardware-encrypted boundary — no GPUs needed.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1773866173/vte9qh8rriznvyclhkes.png","2026-08-06",[1246,1247],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":1250,"description":1251,"heroImage":1252,"category":501,"date":1253,"authors":1254,"slug":1256,"externalUrl":505},"Green DevOps: Why carbon measurement belongs in your CI/CD pipeline","CI/CD pipelines have a hidden carbon cost. Here's why measuring it matters, and how you can get started with Eco CI and Carmen in GitLab.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png","2026-07-09",[1255],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":1258,"description":1259,"heroImage":1260,"category":501,"date":1261,"authors":1262,"slug":1264,"externalUrl":505},"How to build CI/CD observability at scale","This practical guide to GitLab pipeline analytics helps self-managed users gain operational insights using Prometheus and Grafana.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1774465167/n5hlvrsrheadeccyr1oz.png","2026-04-28",[1263],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":1266},[1267,1281,1293,1305],{"id":1268,"categories":1269,"header":1271,"text":1272,"button":1273,"image":1278},"ai-modernization",[1270],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1274,"config":1275},"Get your AI maturity score",{"href":1276,"dataGaName":1277,"dataGaLocation":754},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1279},{"src":1280},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1282,"categories":1283,"header":1285,"text":1272,"button":1286,"image":1290},"devops-modernization",[1284,1089],"product","Are you just managing tools or shipping innovation?",{"text":1287,"config":1288},"Get your DevOps maturity score",{"href":1289,"dataGaName":1277,"dataGaLocation":754},"/assessments/devops-modernization-assessment/",{"config":1291},{"src":1292},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1294,"categories":1295,"header":1297,"text":1272,"button":1298,"image":1302},"security-modernization",[1296],"security","Are you trading speed for security?",{"text":1299,"config":1300},"Get your security maturity score",{"href":1301,"dataGaName":1277,"dataGaLocation":754},"/assessments/security-modernization-assessment/",{"config":1303},{"src":1304},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1306,"paths":1307,"header":1310,"text":1311,"button":1312,"image":1317},"github-azure-migration",[1308,1309],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Is your team ready for GitHub's Azure move?","GitHub is already rebuilding around Azure. Find out what it means for you.",{"text":1313,"config":1314},"See how GitLab compares to GitHub",{"href":1315,"dataGaName":1316,"dataGaLocation":754},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1318},{"src":1292},{"header":1320,"blurb":1321,"button":1322,"secondaryButton":1327},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1323,"config":1324},"Get your free trial",{"href":1325,"dataGaName":554,"dataGaLocation":1326},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":1027,"config":1328},{"href":879,"dataGaName":559,"dataGaLocation":1326},1786803747371]