GitLab 服务器搭建

GitLab 服务器搭建

2018.1.18 第一版
2018.2.9 添加备份与还原内容

需求

为了代码安全,防止因机器故障而导致代码源程序丢失,造成严重后果,搭建了功能强大主流的代码托管平台 git,同时为了满足以下需求,选择 GitLab git管理平台,需求如下:
1. 提供 git 基础功能,git push,git pull …
2. 提供界面友好的 web 界面,便于代码审查,项目管理等;
3. 提供类似于 github,gitee 等其它 git 服务商的各类服务。

服务器搭建

搭建环境

搭建 GitLab 需要以下要求:

  • 64bit Operating System
  • 64bit CPU

因条件限制,现在本人所属电脑上进行服务器搭建,主要配置如下:

  • CPU: Pentium Dual-Core CPU E6600 @ 3.06GHz 3.07GHz
  • RAM: 6.00 GB
  • System: Windows 7 64bit

基本可满足 GitLab 搭建要求。

本服务器使用 “ Win7 + VMware12 + Debian9.3 + docker + GitLab ” 架构。

虚拟机(VMware 12)

虚拟机选择

在服务器搭建初期,由于条件限制以及版权原因,选择了 Oracle Virtual Box 5.2.4(vbox),但是在搭建后期,考虑到该虚拟机是运行在本人所属电脑上,在虚拟机运行的同时,需要在宿主机上进行 OA 邮件收发等工作,而服务器连接的网络(wireless)与 OA (wire) 处于两个不同的局域网当中,网络环境比较复杂(设置静态比较麻烦),所以时常需要在不同的网络当中进行切换(对无线网卡和有线网卡进行 启用/禁用 切换),但是对网络进行切换的时候会产生网络连接不上的问题,原因不明,所以想到的解决的方案是在添加一个 USB无线网卡,将 无线网卡 挂载在虚拟机 Debian里面,使 Debian 通过 无线网卡 连接到目的网络,而当在配置完网络参数,试图让 vbox 虚拟机运行自动挂在无线网卡是却出现问题—— vbox 开机不能自动挂载 无线网卡,需要重新拔插 USB无线网卡,使 vbox 获取 设备的控制权才能成功挂载。
最后,通过网友的提醒,VMware Workstation(VM) 则不会出现次问题,所以重新下载安装 VM 后在淘宝购买激活码进行激活,将原先在 vbox 创建的虚拟机迁移到 VM 上去,经过验证,成功实现 USB无线网卡自动挂载。
VM最新版本——14.要求 2011年及以后的CPU而本机开始使用时间为 2010,所以只能使用 VM 12.0——CPU (64bit, 1.3Ghz, VT-x )。

虚拟机迁移1

VirtualBox 和 VMware 使用不同的虚拟机格式,不过他们都支持标准的开放式虚拟化格式。将已经存在的虚拟机转换为 OVF/OVA 格式就可以导入其他的虚拟机程序。
不幸的是,这并不总是奏效。因为 VirtualBox 和 VMware 看起来使用些许不同的 OVA/OVF 实现方式,因此也不完全兼容。如果这不奏效,你可能需要重新安装虚拟机的客户机操作系统了。

VirtualBox 转换到 VMware

在迁移 Virtualbox(以下简称 Vbox —— 译者注) 虚拟机到 VMware 之前,确保在 Vbox 中虚拟机“已关闭”——而不是挂起。如果是挂起状态,启动虚拟机然后关掉它。
![Figure 1](./figures/GitLab服务器搭建/Figure 1.png)

点击 Vbox 管理菜单,选择导出虚拟电脑。
![Figure 2](./figures/GitLab服务器搭建/Figure 2.png)

选择要导出的虚拟机并选择文件保存位置(选择 OVF 1.0,其它版本可能会导入失败)。
![Figure 3](./figures/GitLab服务器搭建/Figure 3.png)

Vbox 会创建一个开放式虚拟化格式包(OVA 文件)使得 VMware 可以导入。根据虚拟机磁盘文件的大小,此过程需稍等一段时间。
![Figure 4](./figures/GitLab服务器搭建/Figure 4.png)

要将此 OVA 文件导入 VMware,点击打开虚拟机选项并找到你的 OVA 文件。
![Figure 5](./figures/GitLab服务器搭建/Figure 5.png)

VirtualBox 和 VMware 不是完美兼容,所以你可能会看到一个警告信息,告诉你文件“不能通过OVF规格一致性验证”——不过如果你点击重试,可能会导入并成功运行虚拟机。
![Figure 6](./figures/GitLab服务器搭建/Figure 6.png)

过程结束之后,你可以在在 VMware 中启动虚拟机,在虚拟机控制面板中卸载 Vbox 增强功能(VirtualBox Guest Additions)(http://blog.csdn.net/suixinpiaodang/article/details/8795585),在虚拟机菜单中安装 VMware 工具。

Debian

打开 Debian下载地址,选择 64-bit 下载。
在使用虚拟机安装系统时,需要设置各中虚拟硬件参数,比如cpu,内存,以及硬盘等。安装虚拟机,创建 Debian 系统是为了安装 GitLab,并向部门提供 git 服务,虽然使用的是 Docker+GitLab 方案,但在硬件要求方面,参考了 GitLab 官方建议。
SSE软件部门现有18人,按照 GitLab 官方指导文档2,虚拟机硬件配置。

![Figure 7](./figures/GitLab服务器搭建/Figure 7.png)

安装 VMware Tools

为了更加方便时用 vm虚拟机,需要安装 vm虚拟机工具,Linux 安装指引如下链接:

VMware Tools (ubuntu系统)安装详细过程与使用 - 小宝鸽

安装之后,关闭 Debian 虚拟机,设置 USB兼容性—— 编辑虚拟机设置 - 硬件 - USB 控制器 - USB 兼容性 - USB 2.0。

网络连接

由于虚拟机条件限制,在虚拟机运行 Debian 使用的是外置 USB 无线网卡(TL-WN823N 1.0),并使用该网卡为 Debian 提供网络连接。

将 USB无线网卡插入主机,并在虚拟机窗口底部状态栏找到 USB设备图标,名为:Realtek USB WLAN。

![Figure 8](./figures/GitLab服务器搭建/Figure 8.png)

点击右键,选择“连接主机”,使无线网卡从宿主机弹出并连接到虚拟机,为虚拟机独占使用。随后,在第二次开启 Debian 的时候,在提示弹窗上勾选确认每次运行自动加载该 USB设备。

Debian 的内核为大部分常见的无线网卡提供了驱动,假如插入之后找不到驱动文件,可以手动搜索相关驱动进行安装。

首先查看网卡信息,运行 lsusb 得到如下信息:

Bus 001 Device 002: ID 0bda:8178 Realtek Semiconductor Corp.
  • 1

Google 一下发现网卡使用的是 RTL8192CU 芯片,于是继续 Google “debian RTL8192CU”,随后可找到驱动软件包:

软件包: firmware-realtek (0.43)

下载,并手动安装:

linux系统下怎么安装.deb文件? - 杨战美

安装完毕完毕之后重启。

重启完之后,执行sudo ifconfig,查看当前网卡状态,假如插入的无线网卡成功驱动的话,可以找到无线网卡的相关信息3,如下:

...
Wlx[mac address]: ...
...
  • 1
  • 2
  • 3

Debian 默认支持使用 ”WEP“ 加密的无线网口,但是这种加密方式安全性较低,而现在使用比较广泛的加密方式为 ”WPA“,需要安装 wifi 连接工具—— wpa_supplicant4

安装完毕,连接无线网络步骤:
1. iwlist5 wlxXXXXXXXX scanning 扫描无线网络信号列表
2. wpa_passphrase WIFI-ESSID WIFI-PASSWORD > /etc/wpa_supplicant/wpa_supplicant.conf 将密码写入配置文件
3. wpa_supplicant -Dwext -iwlxXXXXXXXX -c /etc/wpa_supplicant/wpa_supplicant.conf -B 建立连接
4. dhclient wlxXXXXXXXX DHCP获取地址

开机自动连接并设置固定IP步骤:
1. 连接配置文件

ctrl_interface=/var/run/wpa_supplicant

network={
         ssid="ESSID"
         scan_ssid=1
         key_mgmt=WPA-PSK
         proto=WPA
         pairwise=TKIP
         group=TKIP

         psk=[执行 `wpa_passphrase WIFI-ESSID WIFI-PASSWORD` 后生成的密码]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

保存为 “wpa_psk.conf”。

  1. 开机运行脚本
/* 在 root 下 */
#cd /etc/init.d/
#vim wpa_supplicant

/* ---- 以下是 wpa_supplicant 脚本文件内容 ---- */

#! /bin/sh

wpa_supplicant=YES
wpa_supplicant_flags="-iwlxXXXXXXXX -c/etc/wpa_psk.conf"

/* ----------------------------------------- */

#chmod 755 wpa_supplicant   // 设置可执行权限
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  1. 设置固定IP
/* 在 root 下 */

#vim /etc/network/interfaces

/* ---- 以下是 interfaces 文件追加内容 ---- */

auto wlxXXXXXXXX
iface wlxXXXXXXXX inet static
address IP
netmask MASK
wireless-essid ESSID
gateway GATEWAY-IP

dns-nameservers DNS-IP DNS-IP ...

pre-up wpa_supplicant -B -iwlxXXXXXXXX -c/etc/wpa_psk.conf
post-down killall -q wpa_supplicant

/* ----------------------------------------- */
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

Docker

Docker是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制6

简单来讲,Docker 可以在 Linux 系统下,创建多个沙盒实例,每个沙盒运行一个程序。

Get Docker CE for Debian7

系统要求

安装 Docker CE 需要以下 Debian 或 Raspbian 的任意一个 64位 发行版本:
* Buster 10 (Docker CE 17.11 Edge only)
* Stretch 9 (stable) / Raspbian Stretch
* Jessie 8 (LTS) / Raspbian Jessie
* Wheezy 7.7 (LTS)
Docker CE 同时支持 x86_64amd64 架构 CPU,以及在 Jessie 和 Stretch 中,支持 armhf 架构。

卸载旧版本

如果已安装了旧版本,需要先将旧版本的 Docker 卸载,旧版本的名字叫 dockerdocker-engine,执行以下命令卸载:

$ sudo apt-get remove docker docker-engine docker.io
  • 1

假如卸载完成,系统不存在 Docker 的话,apt-get 会报告以上程序包有没有被安装(none of these packages are installed)。

卸载之后,除了 Docker 程序相关的内容被删除之外,其它,诸如映像(images),容器(containers),卷(volumes)和网络(networks)都会被保留下来,路径为:/var/lib/docker,而新版本的 Docker CE 包现在命名为:docker-ce

安装 Docker CE

安装 Docker CE 有多中方法,这里使用的是通过软件库来安装:
1. 更新 apt 软件库索引

$ sudo apt-get update
  • 1
  1. 安装必备软件包,以允许 apt 通过 HTTPS 方式来访问软件库
$ sudo apt-get install \
        apt-transport-https \
        ca-certificates \
        curl \
        gnupg2 \
        software-properties-common
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 添加 Docker 官方 GPG8 key:
$ curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | sudo apt-key add -
  • 1

搜索密钥后8个字符,查看验证于 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 是否符合:

$ sudo apt-key fingerprint 0EBFCD88

pub   4096R/0EBFCD88 2017-02-22
        Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid                  Docker Release (CE deb) <[email protected]>
sub   4096R/F273FCD8 2017-02-22
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 添加 Docker CE 稳定版仓库
    注意:在命令中添加 lsb_release -cs 是为了让系统返回当先 Debian 系统的版本,比如”Stretch“。
    • x86_64 / amd64
$ sudo add-apt-repository \
  "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
  $(lsb_release -cs) \
  stable"
  • 1
  • 2
  • 3
  • 4
  • armhf
$ echo "deb [arch=armhf] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
    $(lsb_release -cs) stable" | \
   sudo tee /etc/apt/sources.list.d/docker.list
  • 1
  • 2
  • 3
  1. 安装 Docker CE

    1. 更新 apt 包索引

      $ sudo apt-get update
      • 1
    2. 安装最新稳定版 Docker CE:

      $ sudo apt-get install docker-ce
      • 1

    假如系统保存有多个 Docker 软件库,没有指定版本安装的话 ,直接使用 apt-get installapt-get update 会自动安装最新版本,但是最新版本对于生产环境来说并不一定是最适合的,而是需要根据需求,指定适合的版本,在这里,使用的是最新版本,获取可用版本列表命令如下:

    $ apt-cache madison docker-ce
    
    docker-ce | 17.12.0~ce-0~debian | https://download.docker.com/linux/debian jessie/stable amd64 Packages
    • 1
    • 2
    • 3

    安装指定版本:

    $ sudo apt-get install docker-ce=<VERSION_STRING>
    • 1
  2. 安装完毕之后,运行 hello-world 验证是否安装成功:

    • x86_64
$ sudo docker run hello-world
  • 1
  • armhf:
$ sudo docker run armhf/hello-world
  • 1
  1. 新版本更新
    执行 sudo apt-get update,随后根据此篇文章更新。

  2. Docker 其它设置 - Post-installation steps for Linux - docker docs

GitLab

安装 GitlLab Docker images

执行 docker pull gitlab/gitlab-ce 进行安装。

运行,配置9

运行

运行命令如下:

sudo docker run --detach \
    --hostname gitlab.example.com \
    --publish 443:443 --publish 80:80 --publish 22:22 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这条命令包含了一些设置参数:
* --hostname:在 gitlab 显示仓库的地址。
* pushlish:对外提供的端口号,443 - HTTPS,80 - HTTP,22 - SSH。
* name:创建 Docker 示例命名。
* restart:系统重启之后,该示例会自动运行
* volume:实例卷映射

运行成功之后,打开 http://localhost/ 进行访问。

GitLab 数据保存

本地位置 实例内位置 用途
/srv/gitlab/data var/opt/gitlab 存储应用数据
/srv/gitlab/logs /var/log/gitlab 存储运行日志logs
/srv/gitlab/config /etc/gitlab 存储 GitLab 配置文件

配置GitLab

该实例使用时官方映像包——Omnibus GitLab,所以所有的相关配置都放在一个独特的文件里面,路径为 /etc/gitlab/gitlab.rb

如果想要编辑 gitlab.rb 有两种方法:
1. 访问 Docker 实例,再访问,命令如下:

sudo docker exec -it gitlab /bin/bash
  • 1
  1. 假如只是为了编辑 /etc/gitlab/gitlab.rb 的,可以运行以下命令:
sudo docker exec -it gitlab vi /etc/gitlab/gitlab.rb
  • 1

在配置文件中,可以配置各种参数,其中 external_url 是用于设置仓库地址,应该指向一个可访问合法地址,初次之外,也可以配置 SMTP10 邮箱,用于 GitLab 收发邮件,以及启动 HTTPS11 访问等。

配置完之后,重启 gitlab 实例生效:

sudo docker restart gitlab
  • 1

注:无论 gitlab 实例何时启动,GitLab 都会启动后按照配置文件重新配置启动。

更多配置参数选项详见 —— Configuration options - GitLab Documentation

更新

更新 GitLab 步骤如下:
1. 停止运行 gitlab 实例:

sudo docker stop gitlab
  • 1
  1. 删除已存在 gitlab 实例:
sudo docker rm gitlab
  • 1
  1. 重新下载安装最新版本:
sudo docker pull gitlab/gitlab-ce:latest
  • 1
  1. 重新创建实例,添加和之前一样的配置参数:
sudo docker run --detach \
    --hostname gitlab.example.com \
    --publish 443:443 --publish 80:80 --publish 22:22 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

运行之后,gitlab 实例将会开始运行,并自动重新配置参数。

GitLab 备份与还原12

创建备份

gitlab-rake gitlab:backup:create
  • 1

执行完备份命令后会在/var/opt/gitlab/backups目录下生成备份后的文件,如1500809139_2017_07_23_gitlab_backup.tar。1500809139是一个时间戳,从1970年1月1日0时到当前时间的秒数。这个压缩包包含Gitlab所有数据(例如:管理员、普通账户以及仓库等等)。

从备份恢复

重要提醒:必须备份/etc/gitlab/gitlab.rb以及相关文件(例如:SSL证书)。

将备份文件拷贝到 /var/opt/gitlab/backups 下(备份和恢复的GitLab版本需保持一致)。

停止相关数据连接服务

sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
  • 1
  • 2

从备份恢复
从指定时间戳的备份恢复(backups目录下有多个备份文件时):

sudo gitlab-rake gitlab:backup:restore BACKUP=1500809139
  • 1

从默认备份恢复(backups目录下只有一个备份文件时):

sudo gitlab-rake gitlab:backup:restore
  • 1

启动Gitlab

sudo gitlab-ctl start
sudo gitlab-ctl reconfigure
  • 1
  • 2

修改默认备份目录【可选】

你也可以通过修改 /etc/gitlab/gitlab.rb 来修改默认存放备份文件的目录:

gitlab_rails['backup_path'] = '/home/backup'
  • 1

/home/backup 修改为你想存放备份的目录即可, 修改完成之后使用 gitlab-ctl reconfigure 命令重载配置文件即可。

GitLab via Docker

上述备份与恢复需进入容器后操作

sudo docker exec -it gitlab /bin/bash
  • 1
  • 备份与恢复的版本不一致时会出现错误,需要相同版本的GitLab才可恢复,如果想要使用最新版,可以先恢复后更新。
docker pull gitlab/gitlab-ce:tag
  • 1

GitLab tag 列表:gitlab/gitlab-ce - Docker Hub

  • 恢复备份后更新可能会出现 500 错误,可以尝试在容器内执行以下命令修复13
gitlab-rake db:migrate
gitlab-rake cache:clear
  • 1
  • 2

关于端口号

GitLab默认在实例内占用以下端口号:
* 80 (HTTP)
* 443 (假如开启了HTTPS)
* 8080 (用于 Unicorn)
* 22 (SSH)

创建实例配置端口使用的参数格式为 --publish hostPort:containerPort ,通过参数,使示例的端口与宿主机进行映射。

假如配置了 --publish 3384:80 参数,那么访问 http://localhost:3384 就会映射到访问实例内的 http://localhost:80

而相对应的,需要对配置文件 gitlab.rb 的仓库地址进行修改,如下:

# For HTTP
external_url "http://gitlab.example.com:8929"

or

# For HTTPS (notice the https)
external_url "https://gitlab.example.com:8929"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

同时,也可以使用 docker-compose14 进行配置。

故障排查

通过查看实例的 logs 进行排查:

sudo docker logs gitlab
  • 1

或者

sudo docker exec -it gitlab /bin/bash
  • 1

另附:Linux查看程序端口占用情况

设置定时关机

根据公司环境,公司将会在21点左右断电,所以将虚拟机设置为20点自动关机。

使用 crontab 设置定时任务15crontab 服务会开机后自动运行。

直接执行 sudo crontab -e 后追加任务,如下:

00 20 * * * /root/sh/auto-shutdown-timing.sh > /var/log/crontab-log.log 2>&1
  • 1

auto-shutdown-timing.sh

#! /bin/sh
...

/sbin/shutdown -h +1 &

...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

<全文完>

Rusan


Linux安装无线网卡驱动,实现Linux无线上网 - asd011016

Ubuntu下添加开机自动脚本 - Lei YU

猜你喜欢

转载自blog.csdn.net/weinichendian/article/details/80959028
今日推荐