部署本身的gitlab服務器

本文系統:centos 6.5 x64javascript

ip: 172.16.162.130css

GitLab         8.0.5
GitLab         Shell2.6.6
GitLab         APIv3
Ruby           2.2.3p173
Rails          4.1.12

一、安裝依賴包
html

[root@vm1 ~]# yum install gcc* libicu* -y

二、安裝git程序,由於系統自帶版本過低
java

[root@vm1 ~]# mkdir /opt/src /opt/soft
[root@vm1 src]# pwd
/opt/src
[root@vm1 src]# ls
git-2.6.2.tar.xz
[root@vm1 src]# tar xf git-2.6.2.tar.xz 
[root@vm1 src]# cd git-2.6.2
[root@vm1 git-2.6.2]# ./configure --prefix=/opt/soft/git --with-curl --with-expat
[root@vm1 git-2.6.2]#  make && make install
[root@vm1 git-2.6.2]# echo 'export PATH=/opt/soft/git/bin:$PATH' >> /etc/profile 
[root@vm1 git-2.6.2]# source /etc/profile 
[root@vm1 git-2.6.2]# git --version
git version 2.6.2
[root@vm1 git-2.6.2]#

二、安裝ruby
node

[root@vm1 src]# tar xf ruby-2.2.3.tar.gz
[root@vm1 src]# cd ruby-2.2.3
[root@vm1 ruby-2.2.3]# ./configure --prefix=/opt/soft/ruby --disable-install-rdoc
[root@vm1 ruby-2.2.3]# make && make install
[root@vm1 ruby-2.2.3]# echo 'export PATH=/opt/soft/ruby/bin:$PATH' >> /etc/profile
[root@vm1 ruby-2.2.3]# source /etc/profile  
[root@vm1 ruby-2.2.3]# gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/ 
https://ruby.taobao.org/ added to sources
https://rubygems.org/ removed from sources
[root@vm1 ruby-2.2.3]# gem install bundler --no-ri --no-rdoc
Fetching: bundler-1.11.2.gem (100%)
Successfully installed bundler-1.11.2
1 gem installed
[root@vm1 ruby-2.2.3]#

三、安裝nodejsmysql

[root@vm1 src]# tar zxf node-v4.2.2-linux-x64.tar.gz 
[root@vm1 src]# mv node-v4.2.2-linux-x64 /opt/soft/nodejs
[root@vm1 src]# echo 'export PATH=/opt/soft/nodejs/bin:$PATH' >> /etc/profile

四、安裝go
linux

[root@vm1 src]# tar xf go1.5.1.linux-amd64.tar 
[root@vm1 src]# mv go /opt/soft/
[root@vm1 src]# echo 'export GOROOT=/opt/soft/go' >> /etc/profile
[root@vm1 src]# echo 'export GOARCH=amd64' >> /etc/profile
[root@vm1 src]# echo 'export GOOS=linux' >> /etc/profile
[root@vm1 src]# echo 'export GOBIN=$GOROOT/bin' >> /etc/profile
[root@vm1 src]# echo 'export GOPATH=/opt/soft/go/code/go' >> /etc/profile
[root@vm1 src]# echo 'export PATH=$GOBIN:$PATH' >> /etc/profile

五、安裝redis
nginx

[root@vm1 ~]# yum install redis -y
[root@vm1 ~]# /etc/init.d/redis start
啓動 :[肯定]

六、安裝mysql
git

[root@vm1 ~]# yum install mysql-server -y
[root@vm1 ~]# /etc/init.d/mysqld start
[root@node1 ~]# mysql
mysql> create database gitlab;
mysql> grant all privileges on gitlab.* to gitlab@'localhost' identified by 'gitlab';

七、安裝gitlabweb

[root@node1 ~]# useradd -d /opt/git git
[root@node1 ~]# chmod 755 /opt/git
[root@node1 ~]# su - git
[git@node1 ~]$ pwd
/opt/git
[git@node1 ~]$ git clone https://gitlab.com/larryli/gitlab.git -b 8-0-zh gitlab
正克隆到 'gitlab'...
remote: Counting objects: 214761, done.
remote: Compressing objects: 100% (45405/45405), done.
remote: Total 214761 (delta 166493), reused 214623 (delta 166408)
接收對象中: 100% (214761/214761), 111.36 MiB | 74.00 KiB/s, 完成.
處理 delta 中: 100% (166493/166493), 完成.
檢查鏈接... 完成。
[git@node1 ~]$ cd gitlab/
[git@node1 gitlab]$ cp config/gitlab.yml.example config/gitlab.yml
[git@node1 gitlab]$ cp config/secrets.yml.example config/secrets.yml
[git@node1 gitlab]$ cp config/unicorn.rb.example config/unicorn.rb
[git@node1 gitlab]$ cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb
[git@node1 gitlab]$ cp config/resque.yml.example config/resque.yml
[git@node1 gitlab]$ cp config/database.yml.mysql config/database.yml
[git@node1 gitlab]$ mkdir /opt/git/gitlab-satellites/

八、修改配置文件,由於默認是在 git 帳號下的 home 目錄,咱們這裏是在 /opt/git

  • 修改 gitlab.yml 配置,將行host: localhost 修改成本機IP地址或者域名

  • 修改 gitlab.yml ,配置git路徑行 bin_path: /usr/bin/git 爲 bin_path: /opt/soft/git/bin/git

[git@node1 gitlab]$ grep home config/gitlab.yml
    path: /home/git/gitlab-satellites/
    path: /home/git/gitlab-shell/
    repos_path: /home/git/repositories/
    hooks_path: /home/git/gitlab-shell/hooks/
    secret_file: /home/git/gitlab/.gitlab_shell_secret

分別修改成 /opt 下,而且建立相應目錄

[git@node1 gitlab]$ mkdir -p  /opt/git/gitlab-satellites /opt/git/gitlab-shell /opt/git/repositories /opt/git/gitlab-shell/hooks/
[git@node1 gitlab]$ grep home config/unicorn.rb
working_directory "/home/git/gitlab" # available in 0.94.0+
listen "/home/git/gitlab/tmp/sockets/gitlab.socket", :backlog => 1024
pid "/home/git/gitlab/tmp/pids/unicorn.pid"
stderr_path "/home/git/gitlab/log/unicorn.stderr.log"
stdout_path "/home/git/gitlab/log/unicorn.stdout.log"
[git@node1 gitlab]$

九、修改Redis相關配置 config/resque.yml 文件 production: unix:/var/run/redis/redis.sock 爲 production: redis://172.16.162.130:6379

     數據庫配置:

production:
  adapter: mysql2
  encoding: utf8
  collation: utf8_general_ci
  reconnect: false
  database: gitlab
  pool: 10
  username: gitlab
  password: "gitlab"
  # host: localhost
  # socket: /tmp/mysql.sock

十、修改 Gemfile 首行內容 source "https://rubygems.org"  修改成 source "https://ruby.taobao.org"。

安裝mysql包

[git@node1 gitlab]$ bundle install --deployment --without development test postgres aws kerberos

當出現下面問題時:

Installing timers 4.0.4
An error occurred while installing charlock_holmes (0.6.9.4), and Bundler cannot continue.
Make sure that `gem install charlock_holmes -v '0.6.9.4'` succeeds before bundling.
[git@node1 gitlab]$ gem install charlock_holmes -v '0.6.9.4'
ERROR:  While executing gem ... (Gem::RemoteFetcher::FetchError)
    Errno::ECONNRESET: Connection reset by peer - SSL_connect (https://api.rubygems.org/quick/Marshal.4.8/charlock_holmes-0.6.9.4.gemspec.rz)
[git@node1 gitlab]$

先安裝下面的 rpm 包,而後再執行上面的命令

[root@node1 src]# rpm -vhi libicu-devel-4.2.1-9.1.el6_2.x86_64.rpm 
warning: libicu-devel-4.2.1-9.1.el6_2.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 192a7d7d: NOKEY
Preparing...                ########################################### [100%]
   1:libicu-devel           ########################################### [100%]
[root@node1 src]#

當出現下面的問題時:

Installing nokogiri 1.6.6.2 with native extensions
An error occurred while installing rugged (0.22.2), and Bundler cannot continue.
Make sure that `gem install rugged -v '0.22.2'` succeeds before bundling.
[git@node1 gitlab]$

先安裝下面的 rpm 包,而後再執行上面的命令

[root@node1 src]# yum install cmake -y

十一、安裝 gitlab-shell

[git@node1 gitlab]$ bundle exec rake gitlab:shell:install[v2.6.6] REDIS_URL=redis://172.16.162.130:6379 RAILS_ENV=production

當出現以下報錯:

[git@node1 gitlab]$   bundle exec rake gitlab:shell:install[v2.6.6] REDIS_URL=redis://172.16.162.130:6379 RAILS_ENV=production
WARNING: This version of GitLab depends on gitlab-shell 2.6.5, but you're running Unknown. Please update gitlab-shell.
Missing `db_key_base` for 'production' environment. The secrets will be generated and stored in `config/secrets.yml`
fatal: Not a git repository (or any of the parent directories): .git
fatal: Not a git repository (or any of the parent directories): .git
fatal: Not a git repository (or any of the parent directories): .git
rake aborted!
Errno::ENOENT: No such file or directory @ rb_sysopen - /opt/git/.ssh/environment
/opt/git/gitlab/lib/tasks/gitlab/shell.rake:73:in `initialize'
/opt/git/gitlab/lib/tasks/gitlab/shell.rake:73:in `open'
/opt/git/gitlab/lib/tasks/gitlab/shell.rake:73:in `block (3 levels) in <top (required)>'
Tasks: TOP => gitlab:shell:install
(See full trace by running task with --trace)
[git@node1 gitlab]$

安裝以下處理:

[git@node1 ~]$ mkdir /opt/git/.ssh
[git@node1 gitlab]$ bundle exec rake gitlab:shell:install[v2.6.6] REDIS_URL=redis://172.16.162.130:6379 RAILS_ENV=production
WARNING: This version of GitLab depends on gitlab-shell 2.6.5, but you're running Unknown. Please update gitlab-shell.
正克隆到 '/opt/git/gitlab-shell'...
remote: Counting objects: 2558, done.
remote: Compressing objects: 100% (895/895), done.
remote: Total 2558 (delta 1607), reused 2501 (delta 1571)
接收對象中: 100% (2558/2558), 360.62 KiB | 241.00 KiB/s, 完成.
處理 delta 中: 100% (1607/1607), 完成.
檢查鏈接... 完成。
HEAD 如今位於 cdaa9ae Merge branch 'bump_2.6.6' into 'master'
mkdir -p /opt/git/repositories/: OK
mkdir -p /opt/git/.ssh: OK
chmod 700 /opt/git/.ssh: OK
touch /opt/git/.ssh/authorized_keys: OK
chmod 600 /opt/git/.ssh/authorized_keys: OK
chmod ug+rwX,o-rwx /opt/git/repositories/: OK
[git@node1 gitlab]$

十二、安裝gitlab-git-http-server

[git@node1 ~]$ git clone https://gitlab.com/gitlab-org/gitlab-git-http-server.git -b 0.2.14 
正克隆到 'gitlab-git-http-server'...
remote: Counting objects: 418, done.
remote: Compressing objects: 100% (169/169), done.
remote: Total 418 (delta 214), reused 417 (delta 213)
接收對象中: 100% (418/418), 63.16 KiB | 0 bytes/s, 完成.
處理 delta 中: 100% (214/214), 完成.
檢查鏈接... 完成。
Note: checking out '7c63f08f7051348e56b903fc0bbefcfed398fc1c'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
  git checkout -b <new-branch-name>
[git@node1 ~]$
[git@node1 ~]$ cd gitlab-git-http-server/
[git@node1 gitlab-git-http-server]$ ls
githandler.go  LICENSE  main.go  main_test.go  Makefile  README.md  support  test
[git@node1 gitlab-git-http-server]$ make
go build -ldflags "-X main.Version 0.2.14-20160405.151430" -o gitlab-git-http-server
# _/opt/git/gitlab-git-http-server
link: warning: option -X main.Version 0.2.14-20160405.151430 may not work in future releases; use -X main.Version=0.2.14-20160405.151430
[git@node1 gitlab-git-http-server]$

1三、初始化數據庫並激活高級功能  (lansgg123爲 web管理員root的密碼)

[git@node1 gitlab-git-http-server]$ cd ~/gitlab
[git@node1 gitlab]$ bundle exec rake gitlab:setup RAILS_ENV=production GITLAB_ROOT_PASSWORD=lansgg123

1四、複製啓動腳本等內容:

[root@node1 git]# cp gitlab/lib/support/init.d/gitlab /etc/init.d/   
[root@node1 git]# cp gitlab/lib/support/logrotate/gitlab /etc/logrotate.d/
[root@node1 git]# su - git
[git@node1 ~]$ cd gitlab

檢查下應用信息狀態:

[git@node1 gitlab]$ bundle exec rake gitlab:env:info RAILS_ENV=production
System information
System:         RedHatEnterpriseServer 6.5
Current User:   git
Using RVM:      no
Ruby Version:   2.2.3p173
Gem Version:    2.4.5.1
Bundler Version:1.11.2
Rake Version:   10.4.2
Sidekiq Version:3.3.0
GitLab information
Version:        8.0.5
Revision:       a6659af
Directory:      /opt/git/gitlab
DB Adapter:     mysql2
URL:            http://172.16.162.130
HTTP Clone URL: http://172.16.162.130/some-group/some-project.git
SSH Clone URL:  git@172.16.162.130:some-group/some-project.git
Using LDAP:     no
Using Omniauth: no
GitLab Shell
Version:        2.6.6
Repositories:   /opt/git/repositories/
Hooks:          /opt/git/gitlab-shell/hooks/
Git:            /opt/soft/git/bin/git
[git@node1 gitlab]$

編譯靜態文件

[git@node1 gitlab]$ bundle exec rake assets:precompile RAILS_ENV=production

1五、安裝nginx

nginx 安裝 --> 傳送門

1六、編輯配置文件:

[root@node1 conf]# pwd
/opt/soft/nginx/conf
[root@node1 conf]# cat nginx.conf
user  nginx nginx;
worker_processes  auto;
 
error_log  logs/error.log error;
 
pid        logs/nginx.pid;
worker_rlimit_nofile    65536;
 
events
{
    use epoll;
    accept_mutex off;
    worker_connections  65536;
}
 
http
{
    include       mime.types;
    default_type  text/html;
 
    charset UTF-8;
    server_names_hash_bucket_size   128;
    client_header_buffer_size       4k;
    large_client_header_buffers  4 32k;
    client_max_body_size            20m;
 
    open_file_cache max=65536  inactive=60s;
    open_file_cache_valid      80s;
    open_file_cache_min_uses   1;
 
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
    access_log  logs/access.log  main;
 
    sendfile    on;
    server_tokens off;
 
    keepalive_timeout  60;
 
    gzip  on;
    gzip_min_length 1k;
    gzip_buffers  4   64k;
    gzip_http_version   1.1;
    gzip_comp_level 2;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
 
    upstream gitlab 
    {
        server unix:/opt/git/gitlab/tmp/sockets/gitlab.socket fail_timeout=0;
    }
 
    upstream gitlab-git-http-server 
    {
        server unix:/opt/git/gitlab/tmp/sockets/gitlab-git-http-server.socket fail_timeout=0;
    }
 
    server {
        listen      80;
        server_name _;
        root        /opt/git/gitlab/public;
 
        location /
        {
            try_files $uri $uri/index.html $uri.html @gitlab;
        }
 
        location /uploads/
        {
            proxy_read_timeout      300;
            proxy_connect_timeout   300;
            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-Forwarded-Proto   $scheme;
            proxy_set_header    X-Frame-Options     SAMEORIGIN;
            proxy_pass http://gitlab;
        }
 
        location @gitlab
        {
            proxy_read_timeout      300;
            proxy_connect_timeout   300;
            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-Forwarded-Proto   $scheme;
            proxy_set_header    X-Frame-Options     SAMEORIGIN;
            proxy_pass http://gitlab;
        }
 
        location ~ [-\/\w\.]+\.git\/
        {
            proxy_read_timeout      300;
            proxy_connect_timeout   300;
            proxy_redirect          off;
            proxy_buffering 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-Forwarded-Proto   $scheme;
            proxy_pass http://gitlab-git-http-server;
        }
 
        location ~ ^/(assets)/
        {
            root /opt/git/gitlab/public;
            gzip_static on;
            expires max;
            add_header Cache-Control public;
        }
 
        error_page 502 /502.html;
    }
}

1七、啓動服務,測試:

[root@node1 sbin]# ./nginx 
[root@node1 sbin]# pwd
/opt/soft/nginx/sbin
[root@node1 sbin]# 
[root@node1 sbin]# /etc/init.d/gitlab start
Starting GitLab Unicorn
Starting GitLab Sidekiq
Starting gitlab-git-http-server
The GitLab Unicorn web server with pid 10956 is running.
The GitLab Sidekiq job dispatcher with pid 11004 is running.
The gitlab-git-http-server with pid 10987 is running.
GitLab and all its components are up and running.
[root@node1 sbin]#

啓動gitlab前,要修改gitlab的啓動程序。 (下面兩行)

app_user="git"
app_root="/opt/$app_user/gitlab"

訪問地址:http://172.16.162.130/

wKioL1cDinGDR_C-AAMrE5fWsp8825.png

1八、smtp郵件設置,好比用戶註冊,驗證、找回密碼、提交等郵件發送設置。

[git@node1 gitlab]$ vim config/environments/production.rb 
  config.action_mailer.delivery_method = :smtp
[git@node1 gitlab]$ cp config/initializers/smtp_settings.rb.sample config/initializers/smtp_settings.rb
[git@node1 gitlab]$ vim config/initializers/smtp_settings.rb

if Gitlab::Application.config.action_mailer.delivery_method == :smtp
  ActionMailer::Base.smtp_settings = {
    address: "smtp.domain.com",
    port: 587,
    user_name: "mail_username",
    password: "mail_password",
    domain: "domain.com",
    authentication: 'plain', 
    enable_starttls_auto: true 
  }end

Tip: 若是沒用smtp沒有開加密鏈接的話 enable_starttls_auto 的值應該配置爲 false

這裏須要注意一個問題, 若是你的smtp服務器作了權限限制,只能以登錄帳戶的郵件賬號發郵件的話,還須要修改一處地方

編輯 config/gitlab.yml 找到下面兩個字段將內容改爲你的郵件賬戶地址:

    email_from: xxx@xx.com
    email_display_name: GitLab
    email_reply_to: noreply@example.com
相關文章
相關標籤/搜索