托管服务器
托管服务器
在远程仓库中,有许多优秀的第三方代码托管商可以使用,这对于开源项目而言可能足够使用,但是对于公司或者企业内部,就不能使用第三方的代码托管了,为此我们需要自行搭建代码托管服务器,好在市面上有许多开源的自建解决方案,比如bitbucket,gitlab等。
Gitlab
gitlab是一个采用Ruby开发的开源代码管理平台,支持web管理界面,下面会演示如何自己搭建一个GitLab服务器,演示的操作系统为Ubuntu。
关于gitlab更详细的文档可以前往GitLab Docs | GitLab,本文只是一个简单的介绍与基本使用。
提示
gitlab要求服务器的最小内存为4g,低于这个值可能会无法正常运行。
安装
首先更新一下索引
$ sudo apt update
然后安装几个软件包
$ apt install curl openssh-server ca-certificates postfix gnupg
前往gitlab/gitlab-ce - Packages · packages.gitlab.com官方安装包网站,选择属于你自己对应版本的软件包,这里选择的是ubuntu/focal
进入该版本,用curl拉取并执行脚本,或者你也可以复制脚本到本地执行
$ curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
然后用apt再安装
sudo apt-get install gitlab-ce=16.3.2-ce.0
或者你也可以wget把安装包下载到本地手动安装
安装过程可能会有点久,安装包大概有一两个G,当你看到如下输出时就说明安装成功了。
It looks like GitLab has not been configured yet; skipping the upgrade script.
*. *.
*** ***
***** *****
.****** *******
******** ********
,,,,,,,,,***********,,,,,,,,,
,,,,,,,,,,,*********,,,,,,,,,,,
.,,,,,,,,,,,*******,,,,,,,,,,,,
,,,,,,,,,*****,,,,,,,,,.
,,,,,,,****,,,,,,
.,,,***,,,,
,*,.
_______ __ __ __
/ ____(_) /_/ / ____ _/ /_
/ / __/ / __/ / / __ `/ __ \
/ /_/ / / /_/ /___/ /_/ / /_/ /
\____/_/\__/_____/\__,_/_.___/
Thank you for installing GitLab!
GitLab was unable to detect a valid hostname for your instance.
Please configure a URL for your GitLab instance by setting `external_url`
configuration in /etc/gitlab/gitlab.rb file.
Then, you can start your GitLab instance by running the following command:
sudo gitlab-ctl reconfigure
For a comprehensive list of configuration options please see the Omnibus GitLab readme
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md
Help us improve the installation experience, let us know how we did with a 1 minute survey:
https://gitlab.fra1.qualtrics.com/jfe/form/SV_6kVqZANThUQ1bZb?installation=omnibus&release=16-3
配置
gitlab安装完毕后,我们需要做一些初始化的配置。上面的输出configuration in /etc/gitlab/gitlab.rb file
已经告知配置文件的地址
$ vim /etc/gitlab/gitlab.rb
第一点就是修改外部URL,格式为schema://host:port
,端口不填默认为80端口。
## GitLab URL
##! URL on which GitLab will be reachable.
##! For more details on configuring external_url see:
##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
##!
##! Note: During installation/upgrades, the value of the environment variable
##! EXTERNAL_URL will be used to populate/replace this value.
##! On AWS EC2 instances, we also attempt to fetch the public hostname/IP
##! address from AWS. For more details, see:
##! https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html
external_url 'http://your.example.com'
修改完后运行,让gitlab重新加载配置。
$ gitlab-ctl reconfigure
最后会有这么一段输出
Notes:
Default admin account has been configured with following details:
Username: root
Password: You didn't opt-in to print initial root password to STDOUT.
Password stored to /etc/gitlab/initial_root_password. This file will be cleaned up in first reconfigure run after 24 hours.
默认密码存放在指定文件中,且24小时后会自动删除,所以建议及时修改,在浏览器中输入external_url
,并输入默认的账号密码,访问gitlab。
在Admin Area中,访问users模块
这里的stranger就是默认的管理账号,点击edit修改账号名称和密码。
至此,基础的使用配置就完成了,可以开始使用了。如果阅读英文有障碍的话,可以前往Admin Area/Settings/Preferences/Localization
调整默认的语言设置,支持简繁中。
邮箱
gitlab大大小小的通知都要用邮箱来进行,邮箱不配置的话,默认发信人就是gitlab@服务IP地址
,主要部分在配置文件的这一块。
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.example.com"
gitlab_rails['smtp_port'] = 666
gitlab_rails['smtp_user_name'] = "gitlab@example.com
gitlab_rails['smtp_password'] = "123456"
gitlab_rails['smtp_domain'] = "smtp.example.com"
gitlab_rails['smtp_authentication'] = "login"
# gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
# gitlab_rails['smtp_pool'] = false
###! **Can be: 'none', 'peer', 'client_once', 'fail_if_no_peer_cert'**
###! Docs: http://api.rubyonrails.org/classes/ActionMailer/Base.html
# gitlab_rails['smtp_openssl_verify_mode'] = 'none'
# gitlab_rails['smtp_ca_path'] = "/etc/ssl/certs"
# gitlab_rails['smtp_ca_file'] = "/etc/ssl/certs/ca-certificates.crt"
### Email Settings
# gitlab_rails['gitlab_email_enabled'] = true
##! If your SMTP server does not like the default 'From: gitlab@gitlab.example.com'
##! can change the 'From' with this setting.
gitlab_rails['gitlab_email_from'] = 'gitlab@example.com'
gitlab_rails['gitlab_email_display_name'] = 'gitlab'
# gitlab_rails['gitlab_email_reply_to'] = 'noreply@example.com'
# gitlab_rails['gitlab_email_subject_suffix'] = ''
# gitlab_rails['gitlab_email_smime_enabled'] = false
# gitlab_rails['gitlab_email_smime_key_file'] = '/etc/gitlab/ssl/gitlab_smime.key'
# gitlab_rails['gitlab_email_smime_cert_file'] = '/etc/gitlab/ssl/gitlab_smime.crt'
# gitlab_rails['gitlab_email_smime_ca_certs_file'] = '/etc/gitlab/ssl/gitlab_smime_cas.crt'
配置完后,使用gitlab-ctl reconfigure
重新加载配置,通过命令gitlab-rails console
打开控制台,执行
Notify.test_email('XXXXXX@example.com','test Gitlab Email','Test').deliver_now
测试下能否正常发送邮件,成功就说明配置正常。
优化
由于gitlab是ruby写的,这个语言最大的问题就是耗内存和性能低,在写这篇文章的时候,我用的是腾讯云活动打折买整的3年2c4g的云服务器,有时候内存爆满访问502,体验比较糟糕,但是服务器价格不菲,升级的费用相当昂贵。为了能够让贫民机器也能够运行,下面讲一下怎么去做一些简单的优化,让gitlab能够在大多数情况下正常运行。整体就两个思路
- 开启交换内存
- 关闭一些不必要的插件和功能,节省资源、
第一种方法开启交换内存就是内存不够用了拿磁盘来凑,建议自己去了解,不属于本文要讲的内容。下面主要讲一下哪些功能是可以关闭的。
1.Gravatar,这是一个公共的头像托管平台,头像这种功能没什么太大的必要,建议关闭,设置的地方在Admin Area/Setting/General/Account and limit/
下
关闭后,用户头像就会变成文字而非图像。
2.关闭Prometheus监控,这是一个gitlab的监控组件,如果只是个人使用可以关闭来节省资源,在配置文件中
prometheus_monitoring['enable'] = false
导入
下面要开启一个很有用的特性,就是让gitlab支持从github导入项目,还支持其它的平台,主要有
- Github
- BitBucket Cloud
- FogBugz
- Gitea
也支持url导入,想从什么来源导入就需要去设置里面专门开启
然后在github中创建一个personal token,需要勾选repo部分,在创建新项目的时候选择导入
选择github,输入你的personal token,然后就会进入导入页面
进入到导入页面后,就可以自己选择要导入哪些仓库了。
其它
gitlab总体来说使用起来跟github非常相似,分为三个大的部分,如下图
- Your work,就是工作区,仓库的创建,组织的管理等等。
- Explore,就类似探索广场,如果你只是自己使用,这个部分没啥太大的用处。
- Admin Area,就是后台管理负责的部分,包括用户管理,语言管理,配置管理等等关于这个网站大大小小的细节。
到目前为止已经可以基本使用了,介绍的话真要一个个介绍得写到猴年马月,其它具体怎么使用建议看官方文档。gitlab功能很全,但也比较笨重,它更适合中大型的公司项目,有几百上千人的规模。(光是在我的服务器上搭建测试gitlab,就已经卡死机四五次了)
Gogs
开源地址:gogs/gogs: Gogs is a painless self-hosted Git service (github.com)
文档:Gogs: A painless self-hosted Git service
如果你只是一个独立开发者,或是一个小团队,我建议使用Gogs,它很小巧,同时也是用go语言进行开发的,所以配置要求相当低,不会像gitlab一样动辄要求2c4g以上的服务器才能运行,即便是在树莓派上也能跑,比较适合小团队。
可以前往在线体验 - Gogs体验一下功能,页面和功能都相当简洁。
Gitea
开源地址:go-gitea/gitea
Gitea是由Gogs fork发展而来的,两者的目标都是为了构建尽量小巧的代码托管平台,但是功能要比Gogs更加丰富,属于是Gogs的加强版,个人比较推荐使用这个。
前期准备
gitea比gitlab小巧很多,所以很多东西需要我们自己进行配置。gitea的orm是XORM,所以XORM支持的数据库基本上都支持,这里使用的是Mysql,通过docker进行搭建。
$ docker run -p 3306:3306/tcp --name mysql8 \
--restart=always \
--privileged=true \
-v /root/data/mysql/conf/:/etc/mysql/conf.d \
-v /root/data/mysql/data/:/var/lib/mysql \
-v /root/data/mysql/log/:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=giteadb \
-d mysql:8.0.27
然后创建一个名为gitea的用户
CREATE USER 'gitea' IDENTIFIED BY 'gitea';
然后授权
GRANT ALL PRIVILEGES ON giteadb.* TO 'gitea';
FLUSH PRIVILEGES;
最后测试连接
mysql -u gitea -p giteadb
确保你的git版本大于等2.0,然后还要创建用户
$ adduser \
--system \
--shell /bin/bash \
--gecos 'Git Version Control' \
--group \
--disabled-password \
--home /home/git \
git
创建工作路径
mkdir -p /var/lib/gitea/{custom,data,log}
chown -R git:git /var/lib/gitea/
chmod -R 750 /var/lib/gitea/
mkdir /etc/gitea
chown root:git /etc/gitea
chmod 770 /etc/gitea
导出环境变量
export GITEA_WORK_DIR=/var/lib/gitea/
使用wget下载文件
wget -O gitea https://dl.gitea.com/gitea/1.20.4/gitea-1.20.4-linux-amd64
chmod +x gitea
创建软连接
ln -s /home/git/gitea /usr/local/bin/gitea
配置文件
配置文件地址在/var/lib/gitea/custom/conf/app.ini
,如果没有需要自行创建,配置文件模板地址在gitea/custom/conf/app.example.ini。Gitea的配置项相当的多,且不像Gitalb那样支持热加载,总体来说分为
- 数据库配置
- 站点设置
- 服务器设置
- 邮箱设置
- 三方服务设置
- 初始管理员设置
刚开始的话配置好数据库就行了,其它配置gitea后面会有UI界面进行引导,端口默认为3000。
[database]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Database to use. Either "mysql", "postgres", "mssql" or "sqlite3".
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; MySQL Configuration
;;
DB_TYPE = mysql
HOST = 127.0.0.1:3306 ; can use socket e.g. /var/run/mysqld/mysqld.sock
NAME = gitea
USER = gitea
PASSWD = wyh246859 ;Use PASSWD = `your password` for quoting if you use special characters in the password.
;SSL_MODE = false ; either "false" (default), "true", or "skip-verify"
CHARSET = utf8mb4 ;either "utf8" or "utf8mb4", default is "utf8mb4".
定义Linux服务
service文件源地址在gitea/contrib/systemd/gitea.service at release/v1.20 · go-gitea/gitea (github.com)
[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
[Service]
RestartSec=2s
Type=notify
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
WatchdogSec=30s
[Install]
WantedBy=multi-user.target
将上述内容复制到/etc/systemd/system/gitea.service
,然后启动服务
sudo systemctl enable gitea
sudo systemctl start gitea
初始配置
然后访问地址,根据gitea的引导进行初始化配置,gitea并不会像gitlab一样可以热加载配置,gitea所有的配置都需要修配置文件。
你也可以在初始化时设置管理员账号,或者也可以在后续注册,第一个用户默认为管理员,其它的配置自己根据需求来定。
记得确保当前用户具有修改配置文件的权限,然后点击安装,加载几秒后就可以了。
然后进入到主页面就可以使用了
运行后相当的流畅,这里放一张性能图。
导入仓库
导入的话支持以下几个仓库
还是以github为例,拿到自己的personal token,输入想要导入的url
这些操作基本上跟gtilab一致。