概述
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个功能,然后重启计算机:
使用 WSL 安装 Linux 发行版
以管理员身份打开cmd或PowerShell,然后检查可通过微软商店安装的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/…