Ubuntu搭建自己的gitlab

Posted by hiho on January 25, 2019

注:本次使用Ubuntu18.04服务器

1.安装依赖包,运行命令

1.1 运行命令安装

sudo apt-get update
sudo apt-get install curl openssh-server ca-certificates

1.2 接下来,安装Postfix以发送通知电子邮件。如果要使用其他解决方案发送电子邮件,请跳过此步骤并 在安装GitLab后配置外部SMTP服务器

sudo apt-get install -y postfix

执行完成后,出现邮件配置,选择Internet Site,连续两次回车ok 1.png

2.png

2.安装gitlab-ce

添加清华大学源

首先信任 GitLab 的 GPG 公钥:

curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null

Debian/Ubuntu 版本,文本框中内容写进 /etc/apt/sources.list.d/gitlab-ce.list

deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu xenial main

接下来,安装GitLab包。

sudo apt-get install gitlab-ce

3.png

修改/etc/gitlab/gitlab.rb中的external_url配置访问页面,我这里是本地机子ip是192.168.8.254

sudo vim  /etc/gitlab/gitlab.rb
sudo gitlab-ctl reconfigure

reconfigure 错误

在reconfigure后发现报错

    ================================================================================
    Error executing action `run` on resource 'bash[migrate gitlab-rails database]'
    ================================================================================

查看一下下面提示的错误发现

ArgumentError: could not find a temporary directory

执行命令

chmod +t /tmp

具体问题可以参考https://stackoverflow.com/questions/21117878/ruby-could-not-find-a-temporary-directory

检查GitLab是否安装好并且已经正确运行,输入下面的命令(查看gitlab的状态)

sudo gitlab-ctl status

修改端口

由于本机已经安装有nginx监听了80端口,而gitlab自带启动的nginx也是80端口会冲突

1.先关闭gitlab服务

 sudo gitlab-ctl stop

2.修改gitlab自带的nginx监听端口

# 修改配置 
sudo vim /etc/gitlab/gitlab.rb

nginx['listen_port'] = nil(默认80)改为nginx['listen_port'] = 4567

4.png

修改为自己需要监听的端口,我这里是修改成4567

# 重新加载配置
sudo gitlab-ctl reconfigure
# 重新启动
sudo gitlab-ctl restart

3.浏览到主机名并登录

3.1 设置初始密码

访问你配置的gitlab链接,我这里是http://192.168.8.254:4567,第一次访问会重定向到密码重置页面,然后设置一下超级管理员的账号的密码,超级管理员账号用户名为root

5.png

输入两次密码后,点击Change your password就可以

3.2 登录

登录使用root和你刚刚设置的密码

6.png

使用非gitlab的nginx

因为本来机子已经有一个nginx,不想一台机子跑两个nginx服务,

官网参考文档: https://blog.csdn.net/pujiaolin/article/details/80709299

1.修改配置文件,禁用内嵌 nginx

sudo vim /etc/gitlab/gitlab.rb

修改一下配置

# 关闭nginx服务
nginx['enable'] = false
# 修改web服务用户,我这里是www
web_server['external_users'] = ['www']

7.png

# 重新加载配置
sudo gitlab-ctl reconfigure
# 重新启动
sudo gitlab-ctl restart

8.png

可以看到没有启动nginx服务

2.可以参考官网文档修改配置nginx https://docs.gitlab.com/omnibus/settings/nginx.html#vhost-server-block

修改nginx配置

# 添加upstream指向gitlab
upstream gitlab-workhorse {
  server unix:/var/opt/gitlab/gitlab-workhorse/socket  fail_timeout=0;
}

# 在server中添加
server
{

    ......

    location / {
        	# serve static files from defined root folder;.
        	# @gitlab-workhorse is a named location for the upstream fallback, see below
        	try_files $uri $uri/index.html $uri.html @gitlab-workhorse;
    }
    
    location @gitlab-workhorse {
        	# If you use https make sure you disable gzip compression 
        	# to be safe against BREACH attack
     
            proxy_read_timeout 300; # Some requests take more than 30 seconds.
            proxy_connect_timeout 300; # Some requests take more than 30 seconds.
            proxy_redirect     off;
    
            proxy_set_header   X-Forwarded-Proto $scheme;
            proxy_set_header   Host              $http_host;
            proxy_set_header   X-Real-IP         $remote_addr;
            proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
            proxy_set_header   X-Frame-Options   SAMEORIGIN;
     
        	proxy_pass http://gitlab-workhorse;
    }

    location ~ ^/(assets)/  {
        	root /opt/gitlab/embedded/service/gitlab-rails/public;
        	# gzip_static on; # to serve pre-gzipped version
        	expires max;
        	add_header Cache-Control public;
    }

    .....
}

重启后就可以访问nginx配置可以顺利进入

9.png

配置gitlab邮箱

1.开启QQ邮箱的smtp服务

设置–》账户–》smtp–》密保验证–》验证成功返回一串字符串,形状如(ausdixersybgcgid)

10.png

2.修改gitlab配置

vim /etc/gitlab/gitlab.rb
# 按 / 后输入smtp_enable,找到下面这一串文本,进行修改

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"//qq smtp 邮箱
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "xxxxx@qq.com" //自己的邮箱
gitlab_rails['smtp_password'] = "开通smtp时返回的字符"//如 (mcgzkoruwuxvbggj)
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
/git_user_email找到
user['git_user_email'] = "xxx@qq.com" //自己的邮箱
/gitlab_email_from 找到
gitlab_rails['gitlab_email_from']-'自己的邮箱'


按esc退出到命令行模式
之后:wq 保存并退出
gitlab-ctl reconfigure//重新启动配置

测试邮件服务是否正常

gitlab-rails console
Notify.test_email('接收方邮件地址','邮件标题','邮件内容').deliver_now

按回车,测试发送。

11.png 12.png

## 使用frp将本地gitlab代理到外网

由于gitlab使用机器配置需要比较大,所以打算将gitlab搭建在本地机子上,使用frp做内网穿透,然后通过外网代理到本地机子的gitlab上

这样的好处是:

  • 1.线上的服务器可以配置低一点都可以
  • 2.gitlab搭建在本地,在内网时候可以通过本地网络,速度飞快
  • 3.本地机子随便弄点高配置也很便宜
  • 4.本地仓库好管理

1.部署服务端

1.服务端部署frp server

下载frp到服务器上,并解压

wget https://github.com/fatedier/frp/releases/download/v0.29.0/frp_0.29.0_linux_amd64.tar.gz
tar -zxvf frp_0.29.0_linux_amd64.tar.gz
# 编辑配置文件
cd frp_0.29.0_linux_amd64/
vim frps.ini

编辑配置

[common]
bind_port = 7000 # frp server和客户端通信端口
token = hihozhou # frp server和客户端通信验证token,安全
vhost_http_port = 8000 # 外部访问端口,http服务,可以设置nginx代理到这个端口

启动frp server端服务

nohup ./frps -c ./frps.ini &

2.配置服务端nginx转发到frp server


server {

    ......

    location / {
        client_max_body_size 0;
        gzip off;
    
        proxy_read_timeout      300;
        proxy_connect_timeout   300;
        proxy_redirect          off;
    
        proxy_http_version 1.1;
    
        proxy_set_header    Host                $http_host;
        proxy_set_header    X-Real-IP           $remote_addr;
        proxy_set_header    X-Forwarded-Ssl     on;
        proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto   $scheme;
        proxy_pass http://127.0.0.1:8000;#刚刚frp设置的http端口
    }

    ......

}


访问一下配置的域名

13.png

可以看到nginx成功代理到frp了,这里会提示错误,因为我们还没配置frp客户端

2.部署本地

同样要想下载解压frp

wget https://github.com/fatedier/frp/releases/download/v0.29.0/frp_0.29.0_linux_amd64.tar.gz
tar -zxvf frp_0.29.0_linux_amd64.tar.gz

不过这次是需要配置frp客户端

cd frp_0.29.0_linux_amd64
vim frpc.ini
[common]
server_addr = xxx.xxxx.xxx.xxx # frp server端ip
server_port = 7000 # 配置通信的端口
token = hihozhou # 服务端设置的token


[gitlab]
type = http # 协议
local_port = 80 #转发给本地的端口
custom_domains = gitlab.xxxx.com #域名

启动frp 客户端端服务

nohup ./frpc -c ./frpc.ini &

大功告成

14.png

—End—

迭代

  • 2019年01月25日 19:58 初稿

参考