转载请注明出处,本文仅用于学习交流,不对之处,恳请指正 ,部分图片摘取网络,如有侵权请联系
使用宝塔安装Gitlab,解决未找到相关配置,Gitlab可能已损坏的问题,并使用外部的Nginx,修改时区,配置SMTP邮箱,设置备份目录,获取初始化密码。
起因
最近想在自己家里的测试服务器里面安装个Gitlab来做一些代码管理,因为原来的测试服务器安装了宝塔面板。所以自然而然的便选择了它来安装Gitlab,在这个过程中发生了很多比较神奇的事情。
前置条件
设备环境
本人的设备并不具备IPv4公网环境,故采用FRP这种比较迂回的方式来实现外网访问。不过具备IPv6的公网环境,不过根据国家的法律法规,家庭宽带是不允许搭建任何web服务的,简单的NAS访问倒是可以。所以我的Gitlab以及Web服务主要是通过FRP来进行访问的。
软件环境
- 系统环境:Debian 11
因为CentOS 8的生命周期忽然结束,所以我一不做二不休直接将系统更改为Debian11
- 软件环境:LNMP+宝塔
为了方便测试需求,所以我已经安装了宝塔,并完成安装LNMP。
需求
- 使用内部的smb/nfs网络存储来做备份
- 在宝塔的环境中安装Gitlab
- 使用外部的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
-
没有创建目录的错误
在正常安装Gitlab的过程中,可能在安装日志中会出现这个错误日志,这时候点击Gitlab的时候,会提示损坏。
cp: cannot create regular file ‘/www/server/panel/static/img/soft_ico/ico-gitlab.png’: No such file or directory
我简单的看了下安装的代码,在这段代码中看到,宝塔会默认拷贝icon去到
这个目录,但是面板默认是没有这个目录的,截止2022年04月05日的面板安装脚本,该脚本没有帮我们创建。会导致安装过程中报错,故我们自己来手动创建该目录。/www/server/panel/static/img/soft_ico
修复方法:
# 创建目录 mkdir -p /www/server/panel/static/img/soft_ico # 修改目录权限 chmod 600 /www/server/panel/static -R
-
宝塔安装Gitlab后,修改内置nginx名称导致reconfigure出现问题
这里还没开始正式安装,因为看到代码有这部分内容,所以也做个记录。
从这段代码中可以看到,宝塔在安装完成之后,替我们修改 /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,如果面板没有正常下载,则点一下修复面板...它会自己启动安装的
安装完成后,面板还是无法正常打开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邮箱
-
在配置文件中查找以下内容并进行修改
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'] = "{你想要的邮件标题}"
-
在完成配置并执行了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的正常信息了。
修改使用外部的Nginx
如果要使用Gitlab内置的letsencrypt获取https证书,则以下配置无效
-
暂停Gitlab
gitlab-ctl stop
-
再次进入配置文件
# 备份前面的配置文件 cp /etc/Gitlab/Gitlab.rb /etc/Gitlab/Gitlab.rb.bak # 修改配置 nano /etc/Gitlab/Gitlab.rb ```
-
修改nginx['enable']为false
nginx['enable'] = false
-
指定外部的nginx用户
web_server['external_users'] = ['www']
-
在面板新增一个网站,输入与你前面配置的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; } -
再次刷新配置
gitlab-ctl reconfigure
-
再次启动Gitlab
gitlab-ctl start
-
输入你的域名去尽情享受全新安装的Gitlab吧
嗯,我还发现宝塔面板的密码是不对的
# 获取初始化密码
cat /etc/Gitlab/initial_root_password
文章评论