Alain's Blog

  1. 首页
  2. Git
  3. 正文

宝塔安装Gitlab,解决未找到相关配置,Gitlab可能已损坏等问题

2022年4月17日 2911点热度 7人点赞 0条评论

Gitlab

转载请注明出处,本文仅用于学习交流,不对之处,恳请指正 ,部分图片摘取网络,如有侵权请联系

使用宝塔安装Gitlab,解决未找到相关配置,Gitlab可能已损坏的问题,并使用外部的Nginx,修改时区,配置SMTP邮箱,设置备份目录,获取初始化密码。

起因

最近想在自己家里的测试服务器里面安装个Gitlab来做一些代码管理,因为原来的测试服务器安装了宝塔面板。所以自然而然的便选择了它来安装Gitlab,在这个过程中发生了很多比较神奇的事情。

前置条件

设备环境

本人的设备并不具备IPv4公网环境,故采用FRP这种比较迂回的方式来实现外网访问。不过具备IPv6的公网环境,不过根据国家的法律法规,家庭宽带是不允许搭建任何web服务的,简单的NAS访问倒是可以。所以我的Gitlab以及Web服务主要是通过FRP来进行访问的。

网络拓扑

软件环境

  1. 系统环境:Debian 11

因为CentOS 8的生命周期忽然结束,所以我一不做二不休直接将系统更改为Debian11

  1. 软件环境:LNMP+宝塔

为了方便测试需求,所以我已经安装了宝塔,并完成安装LNMP。

需求

  1. 使用内部的smb/nfs网络存储来做备份
  2. 在宝塔的环境中安装Gitlab
  3. 使用外部的nginx,并关闭Gitlab内部的nginx

挂载SMB网络磁盘

可能有的朋友会说为什么不用NFS这种性能较高的方式,本来我是想用NFS来做仓库存储位置的,后面发现官方已经在新版中将这个功能取消了。而如果只是用来备份的话,性能无需要求太高,仅需要注意权限问题即可

安装cifs

apt-get install cifs-utils -y

创建挂载目录

mkdir -p /mnt/{你想要的目录路径}

设置启动时挂载

nano /etc/fstab

追加以下内容

# samba
//你的Samba服务器IP/{你的目录路径} /mnt/{你想要的目录路径} cifs defaults,uid=git,gid=git,dir_mode=0700,file_mode=0700,username={你的用户名},password={你的密码},vers=2.1 0 0

这里面要特别注意,我们需要将git设置为该目录的所有者,且目录权限只能是0700,否则Gitlab会报错。因为我已经配置好了,所以这里就不放错误日志了。道友们可以自行尝试,有什么新的发现可以通过评论或者邮箱与我分享。

至此,已经配置好备份目录,记住目录名,后面需要用到。

安装Gitlab

宝塔面板安装Gitlab的一些小问题

我们可以从/www/server/panel/install路径中找到Gitlab的安装脚本,我这里是new_gitlab.sh

  1. 没有创建目录的错误

    在正常安装Gitlab的过程中,可能在安装日志中会出现这个错误日志,这时候点击Gitlab的时候,会提示损坏。

    cp: cannot create regular file ‘/www/server/panel/static/img/soft_ico/ico-gitlab.png’: No such file or directory

    我简单的看了下安装的代码,在这段代码中看到,宝塔会默认拷贝icon去到/www/server/panel/static/img/soft_ico这个目录,但是面板默认是没有这个目录的,截止2022年04月05日的面板安装脚本,该脚本没有帮我们创建。会导致安装过程中报错,故我们自己来手动创建该目录。

    宝塔Gitlba安装代码

    修复方法:

    # 创建目录
    mkdir -p /www/server/panel/static/img/soft_ico
    # 修改目录权限
    chmod 600 /www/server/panel/static -R
  2. 宝塔安装Gitlab后,修改内置nginx名称导致reconfigure出现问题

    这里还没开始正式安装,因为看到代码有这部分内容,所以也做个记录。

    宝塔Gitlba安装代码

    从这段代码中可以看到,宝塔在安装完成之后,替我们修改 /opt/Gitlab/service/nginx/run 文件,然后把 /opt/Gitlab/embedded/sbin/nginx 重命名为 /opt/Gitlab/embedded/sbin/gitlab-web 。当我们执行gitlab-ctl reconfigure进行重新配置的时候,这部分修改就失效了,Gitlab就会找不到它自己的nginx,当然我们最终还是希望可以外部的nginx来搭配食用。所以这里仅仅作为一个记录。

    如果我们希望可以使用内部的nginx,那么我们需要在执行gitlab-ctl reconfigure之后,重新修改这个文件/opt/Gitlab/service/nginx/run

    2-1. 停止Gitlba的运行

    # 停止 Gitlab
    gitlab-ctl stop

    2-2. 修改配置

    # 修改配置
    nano /opt/Gitlab/service/nginx/run

    修改为以下内容

    # exec chpst -P /opt/Gitlab/embedded/sbin/nginx -p /var/opt/Gitlab/nginx"
    exec chpst -P /opt/Gitlab/embedded/sbin/gitlab-web -p /var/opt/Gitlab/nginx"

    2-3. 重新启动Gitlab

    # 启动 Gitlab
    gitlab-ctl start

从面板安装Gitlab

修改完成后,我们从软件商店中安装Gitlab,如果面板没有正常下载,则点一下修复面板...它会自己启动安装的

宝塔软件商店安装Gitlba

安装完成后,面板还是无法正常打开Gitlab的,经过实验发现,我们需要对Gitlab进行配置之后,面板才可以正常控制Gitlab

宝塔Gitlab提示损坏

配置Gitlab

进入配置文件

# 暂停Gitlab
gitlab-ctl stop

# 备份初始化配置文件
cp /etc/Gitlab/Gitlab.rb /etc/Gitlab/Gitlab.rb.bak

# 修改配置文件
nano /etc/Gitlab/Gitlab.rb

修改绑定域名

# 搜索 external_url
external_url 'https://{你想要的域名}'

自动获取https证书

启动letsencrypt获取https证书会导致内部的nginx强制启动,如果使用内部的nginx则可以打开。因为我是想用外部的nginx来代理Gitlab的,所以我这里暂时不用,仅仅作为一个记录。

# letsencrypt['enable'] = true
# letsencrypt['contact_emails'] = ['alainlam.1993@gmail.com'] # This should be an array of email addresses to add as contac>
# letsencrypt['group'] = 'root'
# letsencrypt['key_size'] = 2048
# letsencrypt['owner'] = 'root'
# letsencrypt['wwwroot'] = '/var/opt/Gitlab/nginx/www'
# See http://docs.Gitlab.com/omnibus/settings/ssl.html#automatic-renewal for more on these sesttings
# letsencrypt['auto_renew'] = true
# letsencrypt['auto_renew_hour'] = 2
# letsencrypt['auto_renew_minute'] = 0 # Should be a number or cron expression, if specified.
# letsencrypt['auto_renew_day_of_month'] = "*/7"
# letsencrypt['auto_renew_log_directory'] = '/var/log/Gitlab/lets-encrypt'

修改时区

# gitlab_rails['time_zone'] = 'Asia/Hong_Kong'
gitlab_rails['time_zone'] = 'Asia/Hong_Kong'

配置SMTP邮箱

  1. 在配置文件中查找以下内容并进行修改

    gitlab_rails['smtp_enable'] = true
    gitlab_rails['smtp_address'] = "{你邮箱的smtp服务器}"
    gitlab_rails['smtp_port'] = "{你邮箱的smtp服务器端口}"
    gitlab_rails['smtp_user_name'] = "{你的邮箱}"
    gitlab_rails['smtp_password'] = "{你的密码}"
    gitlab_rails['smtp_domain'] = "{你邮箱的smtp服务器}"
    gitlab_rails['smtp_authentication'] = "login"
    gitlab_rails['smtp_enable_starttls_auto'] = false
    gitlab_rails['smtp_tls'] = true
    gitlab_rails['gitlab_email_from'] = "{你的邮箱}"
    gitlab_rails['gitlab_email_display_name'] = "{你想要的邮件标题}"
  2. 在完成配置并执行了gitlab-ctl reconfigure,而且使用执行了gitlab-ctl start启动Gitlab之后。你可以根据以下方式来测试邮件的配置是否成功。(这一段放在最后的话,会不会比较按照流程来?)

    # 进入Gitlab控制台
    gitlab-rails console

    执行以下代码,然后我就可以收到你的邮件了!当然,还是把我的邮箱修改成你自己的吧,如果正常收到邮件,则配置成功。

    # --------------------------------------------------------------------------------
    #  Ruby:         ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-linux]
    #  Gitlab:       14.9.2 (56bec66a79f) FOSS
    #  Gitlab Shell: 13.24.0
    #  PostgreSQL:   12.7
    # ------------------------------------------------------------[ booted in 15.01s ]
    # Loading production environment (Rails 6.1.4.6)
    # irb(main):001:0>
    
    Notify.test_email('alainlam.1993@gmail.com','测试','我正在阅读Alain的博客').deliver_now

设置备份目录

个人还是比较推荐使用外挂设备进行备份,比如私有云的Webdav等。毕竟一般分给服务器的容量不会太大。

# gitlab_rails['backup_path'] ="/var/opt/Gitlab/backups"
# 备份目录
gitlab_rails['backup_path'] ="mnt/{前面配置SAMBA的目录}"
# ...
# 备份时长,单位秒
gitlab_rails['backup_keep_time'] = 604800
# ...

然后我们就可以在Gitlab配置成功且正常运行的时候,使用以下命令来执行备份了。当然,我们可以通过一些脚本来进行定时备份。

gitlab-rake gitlab:backup:create

生成配置

现在我们就需要行进行生成Gitlab的配置了,有的小可爱可能会问:“你不是要配置外部Nginx吗,为什么不等配置使用外部的Nginx之后再进行配置文件呢?”这就又涉及到宝塔安装Gitlab另一个很神奇的地方了。如我们不先启动内部的Nginx,宝塔就拿不到Gitlab的配置信息...,那么我们先执行一下生成吧。

# 重新配置Gitlab
gitlab-ctl reconfigure

# 启动Gitlab
gitlab-ctl start

这个时候我们回到面板,点击Gitlab,应该是能够看到Gitlab的正常信息了。

宝塔查看Gitlab信息

修改使用外部的Nginx

如果要使用Gitlab内置的letsencrypt获取https证书,则以下配置无效

  1. 暂停Gitlab

    gitlab-ctl stop
  2. 再次进入配置文件

    
    # 备份前面的配置文件
    cp /etc/Gitlab/Gitlab.rb /etc/Gitlab/Gitlab.rb.bak
    # 修改配置
    nano /etc/Gitlab/Gitlab.rb
    ```
  3. 修改nginx['enable']为false

    nginx['enable'] = false
  4. 指定外部的nginx用户

    web_server['external_users'] = ['www']
  5. 在面板新增一个网站,输入与你前面配置的Gitlab域名一致的域名。然后修改其配置文件为

    ## Gitlab 8.3+
    ##
    ## Lines starting with two hashes (##) are comments with information.
    ## Lines starting with one hash (#) are configuration parameters that can be uncommented.
    ##
    ##################################
    ##        CONTRIBUTING          ##
    ##################################
    ##
    ## If you change this file in a Merge Request, please also create
    ## a Merge Request on https://Gitlab.com/gitlab-org/omnibus-Gitlab/merge_requests
    ##
    ###################################
    ##         configuration         ##
    ###################################
    ##
    ## See installation.md#using-https for additional HTTPS configuration details.
    
    upstream gitlab-workhorse {
        # On Gitlab versions before 13.5, the location is
        # /var/opt/Gitlab/gitlab-workhorse/socket. Change the following line
        # accordingly.
        server unix:/var/opt/Gitlab/gitlab-workhorse/sockets/socket;
    }
    
    server {
        listen 80;
        server_name 你!的!域!名!;
        server_tokens off;
    
        root /opt/Gitlab/embedded/service/gitlab-rails/public;
    
        #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
        #error_page 404/404.html;
        #SSL-END
    
        #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
        #error_page 404 /404.html;
        #error_page 502 /502.html;
        #ERROR-PAGE-END
        #PHP-INFO-START  PHP引用配置,可以注释或修改
        include enable-php-00.conf;
        #PHP-INFO-END
    
        #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
        include /www/server/panel/vhost/rewrite/你!的!域!名!.conf;
        #REWRITE-END
    
        location / {
            client_max_body_size 0;
            gzip off;
    
            ## https://github.com/Gitlabhq/Gitlabhq/issues/694
            ## Some requests take more than 30 seconds.
            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-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
    
            proxy_pass http://gitlab-workhorse;
        }
    
        access_log /www/wwwlogs/Gitlab.alainlam.cn.log;
        error_log /www/wwwlogs/Gitlab.alainlam.cn.error.log;
    }
  6. 再次刷新配置

    gitlab-ctl reconfigure
  7. 再次启动Gitlab

    gitlab-ctl start
  8. 输入你的域名去尽情享受全新安装的Gitlab吧

Gitlab登陆页面

嗯,我还发现宝塔面板的密码是不对的

# 获取初始化密码
cat /etc/Gitlab/initial_root_password
标签: Git Gitlab 宝塔
最后更新:2022年11月16日

Alain

看了我的文,就是我的人,点个赞再走成不成

点赞
< 上一篇
下一篇 >

文章评论

取消回复

文章目录
  • 起因
  • 前置条件
    • 设备环境
    • 软件环境
  • 需求
  • 挂载SMB网络磁盘
    • 安装cifs
    • 创建挂载目录
    • 设置启动时挂载
  • 安装Gitlab
    • 宝塔面板安装Gitlab的一些小问题
    • 从面板安装Gitlab
    • 配置Gitlab
    • 修改使用外部的Nginx
    • 嗯,我还发现宝塔面板的密码是不对的

COPYRIGHT © 2022 Alain's Blog. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang