别再为Gitlab找Linux主机了,Windows上如何快速搭建Gitlab全攻略!

3,779 阅读4分钟

概述

Gitlab 是一款功能强大的 git 仓库管理系统,与 Github 类似。Gitlab 社区版是基于MIT许可证的开源免费软件,可以由个人、团队或公司私有化部署。 gitlab 使用 Linux 系统开发,仅支持 Linux 和 MacOS,不支持 Windows 系统。 因此要在 Windows 系统上部署需要选择虚拟化方案,本文选择轻量,性能和兼容性优良的 WSL2

硬件要求

  • x86_64/amd 64 架构的CPU
  • 至少 8GB 内存
  • 足够的存储空间

操作系统要求

  • Windows 10 专业版 19041 以上版本(或Windows 11)
  • Windows Server 2019 以上版本

软件与环境搭建

安装前准备

环境检查

使用 cmd 或 PowerShell 键入命令

systemInfo.exe

检查软件信息是否符合要求:

  • 操作系统版本
  • 是否开启了 BIOS 虚拟化
  • 是否启用了 WSL

开启 BIOS 虚拟化

查询计算机主板厂商的虚拟化开启方法,进入BIOS面板,打开虚拟化选项。

开启 WSL 功能

进入控制面板 - 程序 - 启用或关闭 Windows 功能,开启下面2个功能,然后重启计算机: image.png

使用 WSL 安装 Linux 发行版

以管理员身份打开cmdPowerShell,然后检查可通过微软商店安装的Linux发行版:

wsl --list --online

安装 Ubuntu-22.04(最新稳定版)

wsl --install Ubuntu-22.04

初始过程会安装到C:\下,因为虚拟化需要消耗大量存储空间,如果空间不够充足则需要转移到其他磁盘下,此处以D:\为例:

# 导出刚才安装的发行版到D:/
wsl --export Ubuntu-22.04 D:/pack.tar

# 注销已安装的linux发行版
wsl --unregister Ubuntu-22.04

# 导入并设置安装目录和WSL2版本(WSL目录需要手动创建)
wsl --import Ubuntu-22.04 D:/WSL/Ubuntu D:/pack.tar --version 2

# 启动默认WSL会话
wsl

如果启动后出现错误,可能需要重置winsock - issue9331

netsh winsock reset

设置 WSL 虚拟内存

为了防止一些情况下(比如接下来的大文件解压缩场景)物理内存耗尽,需要开启swap

打开windows资源管理器,在地址栏输入%USERNAME%进入到当前用户目录。 创建两个配置文件:.wslconfig wsl.conf.wslconfig 中写入以下内容:

# 设置应用于所有运行在 WSL2 上的 Linux 发行版
[wsl2]

# 设置4GB虚拟内存
swap=4GB

# 设置交换区临时文件位置(不存在的目录需要手动创建)
# 默认位置在 %USERPROFILE%\AppData\Local\Temp\swap.vhdx
swapfile=D:\\WSL\\temp\\wsl-swap.vhdx

重启WSL后,配置才会生效

# 关闭WSL
wsl --shutdown

# 启动
wsl

Linux 子系统部分

安装 Docker

Docker 容器包装了运行所需的所有软件环境(web系统,数据库,nginx等),极大方便了集中管理和部署操作。

更新 apt 索引

# 移除旧版本的 Docker 依赖
sudo apt-get remove docker docker-engine docker.io containerd runc

# 更新apt包索引
sudo apt-get update

# 安装依赖并允许apt通过HTTPS使用存储库
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg

添加 Docker 的官方 GPG 密钥

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 为所有用户添加密钥读权限
sudo chmod a+r /etc/apt/keyrings/docker.gpg

设置 Docker 存储库

echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

安装 Docker Engine 工具集

# 更新包索引
sudo apt-get update

# 安装最新版本的Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

启动 Docker 后端服务

service docker start

验证安装是否成功

# 安装并运行Demo容器
sudo docker run hello-world

如果运行成功,可移除 Demo 容器:

# 列出所有Docker容器
docker ps -a

# 移除指定容器及其卷标
docker rm -vf <containerId>

安装 gitlab 容器

目前为止,Windows 系统,WSL 和 docker 容器三者构成了两层结构的嵌套虚拟化环境。 为表述无歧义,以下称 Windows 系统为物理机,Linux 子系统为宿主机,gitlab docker容器简称为容器

设置卷位置

设置环境变量GITLAB_HOME指向需要存放配置、日志和数据文件所在的目录:

export GITLAB_HOME=/srv/gitlab

创建 docker-compose 配置文件

在 Linux 子系统中编辑有诸多不便,可以选择在 Windows 系统内创建配置文件,然后复制到子系统。 在物理机D:\WSL\下创建文件docker-compose.yml,向其中写入内容:

version: '3.6'
services:
  web:
    image: 'registry.gitlab.cn/omnibus/gitlab-jh:latest'
    restart: always
    hostname: 'gitlab.example.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://gitlab.example.com'
        # Add any other gitlab.rb configuration here, each on its own line
    ports:
      # 容器内的端口映射到Linux子系统的端口
      # 而Linux子系统的端口又会自动映射到物理机端口
      # 第一个是gitlab的web端口配置
      - '80:80'
      - '443:443'
      - '22:22'
    volumes:
      # 将容器的配置、日志和数据文件挂载到Linux子系统卷
      - '$GITLAB_HOME/config:/etc/gitlab'
      - '$GITLAB_HOME/logs:/var/log/gitlab'
      - '$GITLAB_HOME/data:/var/opt/gitlab'
    shm_size: '256m'

启动 gitlab 容器

# 从物理机拷贝配置文件到/home/gitlab下
cp /mnt/d/WSL/docker-compose.yml /home/gitlab/

# 这会拉取docker容器并启动
cd /home/gitlab/ && docker compose up -d

配置 gitlab

# 查看容器列表
docker ps

# 进入正在运行的容器
sudo docker exec -it <gitlab容器ID> /bin/bash

在容器内部的操作:

# 找到配置文件,进入编辑模式
vi /etc/gitlab/gitlab.rb

# 设置 external_url 字段,必须为之前容器设置的端口
external_url "http://localhost:80"

# 重新配置使之生效
gitlab-ctl reconfigure

备份根用户密码

根用户密码会在容器初次启动一天后被系统自动删除,故而需要备份。

# 使用指令退出容器交互模式(也可以使用 Ctrl+D 快捷键)
exit

拷贝容器挂载卷(此处的配置)中的管理员密码到物理机:

cp /srv/gitlab/config/initial_root_password /mnt/d/WSL/

开始使用

在 Windows 中打开浏览器,访问 http://localhost/ 使用文件中的密码登录根用户开始使用

参考资料

微软 WSL 手册: learn.microsoft.com/zh-cn/windo…

github issue社区:github.com/microsoft/W…

docker 官方文档:docs.docker.com/engine/inst…

gitlab 官方文档:docs.gitlab.cn/jh/install/…