> ## Content Index
> Fetch the complete content index at: https://huizhou92.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# How To Set Up a GitLab Environment Locally on MacBook Pro
- URL: https://huizhou92.com/01jcsw6tpwcvwz75ptpkt7mem7/
- Published: 2024-11-16T06:57:45.000Z
- Updated: 2026-09-06T11:40:59.000Z
- Description: How To Set Up a GitLab Environment Locally on MacBook Pro. Recently, I decided to explore infrastructure concepts more deeply and set up a personal learnin。
- Author: huizhou92
- Tags: tech, gitlab, ci/cd, #lang-en

Recently, I decided to explore infrastructure concepts more deeply and set up a personal learning environment. To build the environment, I used my MacBook Pro 2021 with Docker without access to additional hardware. The initial setup went smoothly.

## Installing GitLab

The M1 chip in MacBooks uses the ARM architecture, so I used the `yrzr/gitlab-ce-arm64v8:latest` Docker image.

### Create Required Directories

First, create three working directories for GitLab: `etc`, `log`, and `opt`. Otherwise, errors will occur. Modify the `volumes` section in the Docker Compose configuration to point to these directories. Two ports, `9922` and `9980`, are exposed. Since this setup is for local use, `443` is not enabled.

```yaml
version: "3.8"
services:
  gitlab-ce:
    image: yrzr/gitlab-ce-arm64v8:latest
    container_name: gitlab-ce
    privileged: true
    restart: always
    ports:
      - "9922:22"
      - "9980:9980"
    volumes:
      - /Users/hxzhouh/tools/gitlab/etc:/etc/gitlab:z
      - /Users/hxzhouh/tools/gitlab/log:/var/log/gitlab:z
      - /Users/hxzhouh/tools/gitlab/opt:/var/opt/gitlab:z
    deploy:
      resources:
        limits:
          memory: 4096M
    tty: true
    stdin_open: true

```

**Note:** Exposing port `9980` avoids issues like [this one](https://stackoverflow.com/questions/66961517/gitlab-http-clone-url-is-wrong-port-8022-missing?ref=huizhou92.com).

### Update GitLab Configuration

Once the container is running, modify the GitLab configuration file:

```shell
docker exec -it gitlab-ce /bin/bash
vi /etc/gitlab/gitlab.rb

```

Add the following lines at the end:

```ruby
external_url 'http://127.0.0.1:9980'
gitlab_rails['gitlab_ssh_host'] = '127.0.0.1'
gitlab_rails['gitlab_shell_ssh_port'] = 9922

```

### Change the Default Password

Run the following commands to update the root password:

```shell
gitlab-rails console -e production
user = User.where(id: 1).first
user.password = 'AIl+mVN(:bk\#5%c'
user.save!

```

![Changing GitLab Password](https://images.hxzhouh.com/blog-images/2024/11/206bce475d6a1187781d951abe7b9d5f.png)

Finally, reconfigure and restart GitLab:

```shell
gitlab-ctl reconfigure
gitlab-ctl restart

```

![Restarting GitLab](https://images.hxzhouh.com/blog-images/2024/11/bde6e5a84f0345dcc5a0b8b82c2f2c18.png)

#### Access GitLab

Visit `http://127.0.0.1:9980` in your browser. The default root username and the password you just set should work.

#### Adding SSH

To enable SSH-based access like `GitHub`, create an SSH key pair and add the public key to GitLab, and update your local SSH configuration in `~/.ssh/config`:

```plaintext
Host 127.0.0.1
HostName 127.0.0.1
Port 9922
IdentityFile ~/.ssh/ssh
PreferredAuthentications publickey
User root

```

Test the connection:

```shell
ssh -T git@127.0.0.1

```

You should see:

```plaintext
Welcome to GitLab, @root!

```

Create a new project and clone it

```shell
git clone ssh://git@127.0.0.1:9922/root/hello-world.git
some modify 
.....
git push origin --force

```

![GitLab Project Created](https://images.hxzhouh.com/blog-images/2024/11/6ad393764a9ebae0a318b56a3b6d8b95.png)

```shell
➜  hello-world git:(main) git push origin --force
To ssh://127.0.0.1:9922/root/hello-world.git
   b4dd724..e45f213  main -> main

```

## Configuring GitLab Runners

Go to **Settings** \-> **CI/CD** \-> **Runners**, and follow the instructions under "Show runner installation and registration instructions."  
![Pasted image 20241116093057](https://images.hxzhouh.com/blog-images/2024/11/13c7a9bd637afeb702db0501dd25516d.png)

### Install and Register the Runner

```shell
sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-arm64
sudo chmod +x /usr/local/bin/gitlab-runner
gitlab-runner install
gitlab-runner start
gitlab-runner register --url http://127.0.0.1:9980 --registration-token GR13489416KQ-jitR3JhfMgr8f-9G

```

![GitLab Runner Registration](https://images.hxzhouh.com/blog-images/2024/11/cef07bfe42add42139d51c58161d7612.png)

**Key Points:**

1. **Tags:** Use tags to specify runner tasks in `.gitlab-ci.yml`.
2. **Executor:** For this example, use the `shell` executor.

For more information about GitLab Runner, please refer to the article on the [official website](https://docs.gitlab.com/runner/?ref=huizhou92.com), which will not be expanded here.

#### Testing CI/CD Pipeline

Create a `.gitlab-ci.yml` file in your project:

```yaml
stages:  
  - build  
build_job:  
  stage: build  
  tags:  
    - golang-local-shell  
  script:  
    - go build -o myapp  
  only:  
    - main  
    - tags  
  artifacts:  
    paths:  
      - myapp

```

Push the code to GitLab, and the build pipeline should execute automatically.

![Pipeline Results](https://images.hxzhouh.com/blog-images/2024/11/a3bcee17f3a7c7bd1b118917b8e35ded.png)

Artifacts can be found at:

```
http://127.0.0.1:9980/root/hello-world/-/artifacts

```

![Build Artifacts](https://images.hxzhouh.com/blog-images/2024/11/e6cb483cd8d0a25652936e637fba2a3c.png)

## Next Steps

This setup concludes the local GitLab environment. In the next article, I’ll demonstrate setting up a local Kubernetes cluster and automating Docker image deployment from GitLab to Kubernetes for a complete CI/CD pipeline.