介绍
Git和GitHub是令人敬畏的工具,使管理和管理大量的Git仓库及其相关的权限变得轻而易举。 这是非常好的,如果你写的开源软件,但当写封闭源代码软件,你可能不想相信你的代码到第三方服务器。 那么如何才能获得Github或BitBucket之类的东西的控制,灵活性和易用性,而无需在您的控制之外的服务器上托管您的git存储库呢?
输入GitLab。 GitLab为您的Git仓库提供了一个简单但强大的基于Web的界面,只有您可以将其托管在您自己的云服务器上,根据您的需要控制访问,并且repo大小仅受您的服务器有多少存储空间的限制。 本教程将引导您将DigitalOcean VPS设置为GitLab服务器。
注:本教程介绍了如何从源代码安装GitLab。 当最初写的时候,这是唯一的选择。 今天,它是更简单使用运行得到它,并GitLab的“综合性”包 。 您也可以发动对DigitalOcean一个GitLabDroplet的点击与我们的应用图像 。
本教程假设您使用的是全新的Ubuntu 12.04 VPS。 我们将安装使GitLab工作所需的所有必要软件。 如果你使用一个现有的VPS(Droplet)或不同的Linux发行版,你可能有问题,特别是与不兼容的Python和Ruby版本。 确保在开始之前安装了Ruby 2.0和Python 2.7。
第一步是安装一些必需的软件包:
sudo apt-get update
sudo apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl git-core openssh-server redis-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev
确保你没有安装Ruby 1.8(在默认的Ubuntu 12.04 VPS它不会)。
安装Ruby 2.0(这将需要一段时间):
mkdir /tmp/ruby && cd /tmp/ruby
curl --progress ftp://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p247.tar.gz | tar xz
cd ruby-2.0.0-p247
./configure
make
sudo make install
当它完成后,你可以检查,以确保你有Ruby 2(不是1.8)安装通过做:
ruby --version
如果输出看起来像下面那么你是好的:
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]
现在我们需要安装BundlerGem:
sudo gem install bundler --no-ri --no-rdoc
并创建一个Git用户GitLab使用:
sudo adduser --disabled-login --gecos 'GitLab' git
安装GitLab Shell
使用以下命令下载GitLab shell:
cd /home/git
sudo -u git -H git clone https://github.com/gitlabhq/gitlab-shell.git
cd gitlab-shell
sudo -u git -H git checkout v1.7.0
sudo -u git -H cp config.yml.example config.yml
你现在有GitLabShell1.7.0的副本,示例config.yml
已经准备就绪。
如果你有一个域名在这个VPS指出,那么你应该花时间来编辑config.yml
使用该域名。
nano config.yml
在顶部附近将有一条线看起来像:
gitlab_url: "http://localhost/"
更改http://localhost/
部分匹配您的域名。 所以,如果您的域名是www.YOURDOMAIN.com行应该是这样的:
gitlab_url: "http://www.YOURDOMAIN.com/"
现在你可以运行GitLab shell安装程序:
sudo -u git -H ./bin/install
数据库设置
我们将设置GitLab来使用MySQL后端。 第一步是使用下面的命令安装MySQL。 在安装过程中,它会要求您设置一个MySQL root密码。 设置为任何你喜欢的,但记下它,因为你将需要它为后续步骤。
sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev
现在安装MySQL,并将root密码设置为您在上一步中选择的值。 我们现在需要创建一个MySQL用户,供GitLab使用。 为此,我们首先将必要的SQL查询保存到临时文件。 类型:
nano tempfile
粘贴在下面,改变$password
上的第一行到真正的密码。 跟踪此密码,因为这将是您的GitLab的数据库密码。
CREATE USER 'gitlab'@'localhost' IDENTIFIED BY '$password';
CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'gitlab'@'localhost';
现在保存文件并执行以下命令(从提示的第一步输入MySQL root密码)让MySQL执行您的查询:
cat tempfile | mysql -u root -p
为了确保您的新的MySQL用户已成功创建,让我们登录到mysql
使用gitlab
用户:
mysql -u gitlab -p
如果您看到一些文字后跟一个:
mysql>
然后一切工作成功。 前往并输入:
exit;
在mysql>
提示符下退出MySQL和删除tempfile
文件,因为它包含一个密码:
rm tempfile
在这一点上,我们有一切配置成成功安装GitLab,所以让我们继续安装:
cd /home/git
sudo -u git -H git clone https://github.com/gitlabhq/gitlabhq.git gitlab
cd /home/git/gitlab
sudo -u git -H git checkout 6-0-stable
sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml
就像我们与GitLab外壳确实成立,如果你有一个域配置为您的VPS,我们需要编辑config.yml
使用该域名。
sudo -u git -H nano config/gitlab.yml
在文件顶部附近应该有一个文本块,如下所示:
gitlab:
## Web server settings
host: localhost
port: 80
https: false
更改host:
项匹配您的域名。 如果您的域名是www.YOURDOMAIN.com ,那么就应该是这样的:
gitlab:
## Web server settings
host: www.YOURDOMAIN.com
port: 80
https: false
我们还设置了一些Linux的文件权限,配置git
用户的Git的配置,并设置了一些GitLab配置和目录为git
用户:
cd /home/git/gitlab
sudo chown -R git log/
sudo chown -R git tmp/
sudo chmod -R u+rwX log/
sudo chmod -R u+rwX tmp/
sudo -u git -H mkdir /home/git/gitlab-satellites
sudo -u git -H mkdir tmp/pids/
sudo -u git -H mkdir tmp/sockets/
sudo chmod -R u+rwX tmp/pids/
sudo chmod -R u+rwX tmp/sockets/
sudo -u git -H mkdir public/uploads
sudo chmod -R u+rwX public/uploads
sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb
sudo -u git -H git config --global user.name "GitLab"
sudo -u git -H git config --global user.email "gitlab@localhost"
sudo -u git -H git config --global core.autocrlf input
sudo -u git cp config/database.yml.mysql config/database.yml
现在,我们需要告诉GitLab使用gitlab
之前设置MySQL用户。 要做到这一点,编辑config/database.yml
文件:
sudo -u git -H nano config/database.yml
靠近顶部会有一段名为production:
其中将包含username
和password
的条目。 默认情况下,它看起来像这样:
production:
adapter: mysql2
encoding: utf8
reconnect: false
database: gitlabhq_production
pool: 10
username: root
password: "secure password"
更改username
和password
输入到我们之前设置的GitLab数据库用户匹配。 因此,如果您用于GitLab的MySQL用户的密码是$password
编辑的文件应该是这样的:
production:
adapter: mysql2
encoding: utf8
reconnect: false
database: gitlabhq_production
pool: 10
username: gitlab
password: "$password"
保存文件,我们会保护该文件,以便服务器的其他用户看不到密码:
sudo -u git -H chmod o-rwx config/database.yml
让我们安装一些更多需要的gems(这一步可能需要一段时间):
cd /home/git/gitlab
sudo gem install charlock_holmes --version '0.6.9.4'
sudo -u git -H bundle install --deployment --without development test postgres aws
并运行一些最终设置(当它询问您是否要继续时输入yes):
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production
在此之后完成,将屏幕打印大量的信息,并在年底将显示Administrator account created
并给你的管理员凭据。 它应该看起来像下面:
Administrator account created:
login.........admin@local.host
password......5iveL!fe
现在让我们设置GitLab在服务器启动时启动:
sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab
sudo chmod +x /etc/init.d/gitlab
sudo update-rc.d gitlab defaults 21
运行以下操作以确保一切正常:
sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production
如果没有错误消息,并且该命令输出的数据看起来正确,那么您的GitLab安装正在工作。 就快结束了! 使用此命令启动GitLab:
sudo service gitlab start
设置NGINX
默认情况下,GitLab与nginx Web服务器配合使用。 如果您已经有自己的Web服务器(如Apache),那么这些步骤不适用。 看看这些Recipe ,了解如何与其他Web服务器配置GitLab信息。 否则,请按照以下说明安装和配置nginx以使用GitLab:
sudo apt-get -y install nginx
cd /home/git/gitlab
sudo cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab
sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
编辑/etc/nginx/sites-available/gitlab
使用你的域名:
sudo nano /etc/nginx/sites-available/gitlab
从文件的顶部一个小方法,你会看到一个条目server_name
被设置为YOUR_SERVER_FQDN
。 由于在前面的步骤,更换YOUR_SERVER_FQDN
与您的域名。 原文件如下:
server {
listen *:80 default_server; # e.g., listen 192.168.1.1:80; In most cases *:80 is a good idea
server_name YOUR_SERVER_FQDN; #
如果您的域名是www.YOURDOMAIN.com那么你应该改变它看起来像这样:
server {
listen *:80 default_server; # e.g., listen 192.168.1.1:80; In most cases *:80 is a good idea
server_name www.YOURDOMAIN.com; #
并重启nginx:
sudo service nginx restart
Voila! 你完成了。 通过使用管理员登录Web浏览器和密码从上面连接到GitLab(默认用户: admin@local.host
,道: 5iveL!fe
)和享受GitLab。
如果您使用的是512MB的VPS则由于GitLab的内存要求它很可能你会碰到一个502 Bad Gateway
错误。 如果是这样,请阅读...
故障排除
502网关错误
在一个完美的世界GitLab现在将完美运行。 不幸的是,GitLab具有令人惊讶的高内存需求,所以在第一次登录时经常窒息的512MB VPSs。这是因为GitLab在第一次登录时使用了大量内存。 由于Ubuntu 12.04 VPS没有交换空间,当超过内存时,GitLab的部分被终止。 不用说,当GitLab的一部分意外终止时,它运行不好。
最简单的解决方案只是为您的VPS分配更多的内存,至少对于第一次登录。如果您不想这样做,另一个选项是增加交换空间。 DigitalOcean已经对如何做到这一点提供一个完整的教程在这里 (虽然我会建议将不仅仅是512MB交换的更多)。 快速修复是运行以下:
sudo dd if=/dev/zero of=/swapfile bs=1024 count=1024k
sudo mkswap /swapfile
sudo swapon /swapfile
您的交换文件现在正在运行和积极的,但设置它,以便它在我们需要编辑每次开机启动/etc/fstab
:
sudo nano /etc/fstab
将以下内容粘贴到文件的底部:
/swapfile none swap sw 0 0
现在重新启动您的VPS:
sudo restart
等待一两分钟,让VPS重新启动,然后再次尝试GitLab。 如果它第一次不工作,刷新Bad Gateway页面几次,您很快就会看到GitLab登录页面。
参考文献: