Alain's Blog

  1. 首页
  2. Git
  3. 正文

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

2022年4月17日 232点热度 4人点赞 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

面板安装脚本的一些小问题

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

没有创建目录的错误

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

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

宝塔Gitlba安装代码

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

# 创建目录
mkdir -p /www/server/panel/static/img/soft_ico
# 修改目录权限
chmod 600 /www/server/panel/static -R

修改内置nginx名称导致重新配置出现问题

这里还没开始正式安装,可以作为一个记录看一下。

宝塔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

  1. 停止Gitlba的运行
# 停止 Gitlab
gitlab-ctl stop
  1. 修改配置
# 修改配置
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"
  1. 重新启动Gitlab
# 停止 Gitlab
gitlab-ctl start

从面板安装Gitlab

从上面可以看到,宝塔安装脚本并没有什么太大的问题,就是有点折腾人。从软件商店中安装Gitlab,Emmm,如果面板没有正常下载,则点一下修复面板...它会自己启动安装的

宝塔软件商店安装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'] = "{你想要的邮件标题}"
  1. 在完成配置并执行了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

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

  1. 暂停Gitlab
gitlab-ctl stop
  1. 再次进入配置文件
# 备份前面的配置文件
cp /etc/Gitlab/Gitlab.rb /etc/Gitlab/Gitlab.rb.bak
# 修改配置
nano /etc/Gitlab/Gitlab.rb
  1. 修改nginx['enable']为false
nginx['enable'] = false
  1. 指定外部的nginx用户
web_server['external_users'] = ['www']
  1. 在面板新增一个网站,输入与你前面配置的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;
}
  1. 再次刷新配置
gitlab-ctl reconfigure
  1. 再次启动Gitlab
gitlab-ctl start
  1. 输入你的域名去尽情享受全新安装的Gitlab吧

Gitlab登陆页面

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

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

Alain

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

打赏 点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

Alain

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

分类
  • Android
  • Git
  • Linux
  • NAS
  • Openwrt
  • PHP
  • Proxmox VE
  • 虚拟机
  • 软件工具

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

THEME KRATOS MADE BY VTROIS