托管服务器

寒江蓑笠翁大约 19 分钟gitVCSGit

托管服务器

在远程仓库中,有许多优秀的第三方代码托管商可以使用,这对于开源项目而言可能足够使用,但是对于公司或者企业内部,就不能使用第三方的代码托管了,为此我们需要自行搭建代码托管服务器,好在市面上有许多开源的自建解决方案,比如bitbucket,gitlab等。

Gitlab

gitlab是一个采用Ruby开发的开源代码管理平台,支持web管理界面,下面会演示如何自己搭建一个GitLab服务器,演示的操作系统为Ubuntu。

关于gitlab更详细的文档可以前往GitLab Docs | GitLabopen in new window,本文只是一个简单的介绍与基本使用。

开源镜像地址:gitlabhq/gitlabhq: GitLab CE Mirror | Please open new issues in our issue tracker on GitLab.com (github.com)open in new window

提示

gitlab要求服务器的最小内存为4g,低于这个值可能会无法正常运行。

安装

首先更新一下索引

$ sudo apt update

然后安装几个软件包

$ apt install curl openssh-server ca-certificates postfix gnupg

前往gitlab/gitlab-ce - Packages · packages.gitlab.comopen in new window官方安装包网站,选择属于你自己对应版本的软件包,这里选择的是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. 开启交换内存
  2. 关闭一些不必要的插件和功能,节省资源、

第一种方法开启交换内存就是内存不够用了拿磁盘来凑,建议自己去了解,不属于本文要讲的内容。下面主要讲一下哪些功能是可以关闭的。

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)open in new window

文档:Gogs: A painless self-hosted Git serviceopen in new window

如果你只是一个独立开发者,或是一个小团队,我建议使用Gogsopen in new window,它很小巧,同时也是用go语言进行开发的,所以配置要求相当低,不会像gitlab一样动辄要求2c4g以上的服务器才能运行,即便是在树莓派上也能跑,比较适合小团队。

可以前往在线体验 - Gogsopen in new window体验一下功能,页面和功能都相当简洁。

Gitea

开源地址:go-gitea/giteaopen in new window

文档地址:文档 | Gitea Documentationopen in new window

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.iniopen in new window。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)open in new window

[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一致。

上次编辑于:
贡献者: 246859