Malvin's Blog

无志者千难万难,有志者千方百计

0%

Centos 6.5 怒装 Gitlab

Git 服务器的可选范围?

假如现在让我重新选,那其实轻量级的gogs其实也不差,因为Gitlab实在实在实在太”重“了。

对机器的要求

  • 2核CPU
  • 4G内存(至少2G)

我的单核CPU+2G内存,Gitlab经常ENOMEM…

安装 gitlab-ce 的源

想直接从 gitlab 官网下载?国内的网络环境你又不是不知道,还是乖乖选择国内源吧,可以选择清华大学源:

cd ~
curl -LJO https://mirror.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-9.2.6-ce.0.el6.x86_64.rpm
rpm -i gitlab-ce-9.2.6-ce.0.el6.x86_64.rpm

安装依赖

sudo yum install curl openssh-server openssh-clients postfix cronie
sudo service postfix start
sudo chkconfig postfix on

安装 gitlab-ce (ce就是社区版的意思哦)

sudo yum install gitlab-ce

配置 gitlab

由于 gitlab 的一键安装是包含以下服务的

  • Nginx
  • PostgreSQL
  • Redis
  • gitlab

你需要先确认你当前机器是否有Nginx & Redis & PostgreSQL 这类服务了,然后,你需要根据自己需要来配置 gitlab:

vim /etc/gitlab/gitlab.rb

假如本来有 Nginx 服务的,可以关于gitlab自带的nginx

nginx['enable'] = false

然后在自己的Nginx 加入配置:

# gitlab socket 文件地址
upstream gitlab {
  server unix://var/opt/gitlab/gitlab-rails/sockets/gitlab.socket;
}

server {
  listen 80;

  server_name git.goodspb.com;   # 请修改为你的域名

  server_tokens off;     # don't show the version number, a security best practice
  root /opt/gitlab/embedded/service/gitlab-rails/public;

  # Increase this if you want to upload large attachments
  # Or if you want to accept large git objects over http
  client_max_body_size 0;

  # individual nginx logs for this gitlab vhost
  access_log  /var/log/gitlab/nginx/gitlab_access.log;
  error_log   /var/log/gitlab/nginx/gitlab_error.log;

  location / {
    # serve static files from defined root folder;.
    # @gitlab is a named location for the upstream fallback, see below
    try_files $uri $uri/index.html $uri.html @gitlab;
  }

  # if a file, which is not found in the root folder is requested,
  # then the proxy pass the request to the upsteam (gitlab unicorn)
  location @gitlab {
    # If you use https make sure you disable gzip compression 
    # to be safe against BREACH attack

    proxy_read_timeout 300; # Some requests take more than 30 seconds.
    proxy_connect_timeout 300; # Some requests take more than 30 seconds.
    proxy_redirect     off;


    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-Frame-Options   SAMEORIGIN;
    proxy_set_header   X-Forwarded-Proto $scheme;

    proxy_pass http://gitlab;
  }

  # Enable gzip compression as per rails guide: http://guides.rubyonrails.org/asset_pipeline.html#gzip-compression
  # WARNING: If you are using relative urls do remove the block below
  # See config/application.rb under "Relative url support" for the list of
  # other files that need to be changed for relative url support
  location ~ ^/(assets)/  {
    root /opt/gitlab/embedded/service/gitlab-rails/public;
    # gzip_static on; # to serve pre-gzipped version
    expires max;
    add_header Cache-Control public;
  }

  error_page 502 /502.html;
}

假如本来就有 Redis 服务,可以:

# 关闭原来redis
redis['enable'] = false

# 配置自己的redis信息
gitlab_rails['redis_host'] = "127.0.0.1"
gitlab_rails['redis_port'] = 6379
gitlab_rails['redis_password'] = nil
gitlab_rails['redis_database'] = 0

### 还需要配置SMTP邮件服务,不然邮件发不出,就不能完成注册了

 # 修改以下配置
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "abc@163.com"
gitlab_rails['smtp_password'] = "xxxxxx"
gitlab_rails['smtp_domain'] = "163.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false

gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'abc@163.com'     # 有些服务商如 163,需要将 gitlab_email_from 和 git_user_email 和 smtp_user_name 设置成相同的
user['git_user_email'] = "abc@163.com"

设置好想调试邮件,可以在命令行执行 gitlab-rails console ,然后再在ruby命令行执行:

Notify.test_email('destination_email@address.com', 'Message Subject', 'Message Body').deliver_now

更多邮件设置,可以查看官方文档

设置时区

gitlab_rails['time_zone'] = 'Asia/Shanghai'

设置域名

external_url 'http://git.goodspb.com/'

假如还是 SSL 的话,好需要配置

nginx['listen_port'] = 80

##! **Override only if your reverse proxy internally communicates over HTTP**
##! Docs: https://docs.gitlab.com/omnibus/settings/nginx.html#supporting-proxied-ssl
 nginx['listen_https'] = false

# nginx['custom_gitlab_server_config'] = "location ^~ /foo-namespace/bar-project/raw/ {\n deny all;\n}\n"
# nginx['custom_nginx_config'] = "include /etc/nginx/conf.d/example.conf;"
# nginx['proxy_read_timeout'] = 3600
# nginx['proxy_connect_timeout'] = 300
 nginx['proxy_set_headers'] = {
#  "Host" => "$http_host_with_default",
#  "X-Real-IP" => "$remote_addr",
#  "X-Forwarded-For" => "$proxy_add_x_forwarded_for",
  "X-Forwarded-Proto" => "https",
  "X-Forwarded-Ssl" => "on",
#  "Upgrade" => "$http_upgrade",
#  "Connection" => "$connection_upgrade"
 }

配置差不多了,可以重启服务了

# 执行命令
sudo gitlab-ctl reconfigure

查看 log

sudo gitlab-ctl tail

Have fun.