使用宝塔安装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
面板安装脚本的一些小问题
我们可以从/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去到/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名称导致重新配置出现问题
这里还没开始正式安装,可以作为一个记录看一下。
从这段代码中可以看到,宝塔在安装完成之后,替我们修改 /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
- 停止Gitlba的运行
# 停止 Gitlab
gitlab-ctl stop
- 修改配置
# 修改配置
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"
- 重新启动Gitlab
# 停止 Gitlab
gitlab-ctl start
从面板安装Gitlab
从上面可以看到,宝塔安装脚本并没有什么太大的问题,就是有点折腾人。从软件商店中安装Gitlab,Emmm,如果面板没有正常下载,则点一下修复面板...它会自己启动安装的
安装完成后,面板还是无法正常打开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
如果要使用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
文章评论