installation.md 8.1 KB
Newer Older
D
Dmitriy Zaporozhets 已提交
1
## Platform requirements: 
V
Valery Sizov 已提交
2

D
Dmitriy Zaporozhets 已提交
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
**The project is designed for the Linux operating system. **

It may work on FreeBSD and Mac OS, but we don't test our application for these systems and can't guarantee stability and full functionality.

We officially support next Linux Distributions:

- Ubuntu
- Debian

It should work on:

- Fedora
- CentOs
- Red Hat

It can work on:

 - Mac Os
 - FreeBSD

It 100% **wont** work on  Windows


## This installation guide created for Debian/Ubuntu and properly tested. 

The installation consists of 6 steps:
V
Valery Sizov 已提交
29 30 31 32 33 34 35 36

1. install packeges.
2. install ruby
3. install gitolite
4. install gitlab and configuration. Check status configuration.
5. server up.
6. run resque process (for processing queue).

D
Dmitriy Zaporozhets 已提交
37
** Before submit an installation issue - please check if you followed all steps **
V
Valery Sizov 已提交
38

D
Dmitriy Zaporozhets 已提交
39 40 41 42 43 44 45 46 47 48 49
> - - -
> First 3 steps can be easily skipped with simply install script:
> 
>     # Install curl and sudo 
>     apt-get install curl sudo
>     
>     # 3 steps in 1 command :)
>     curl http://dl.dropbox.com/u/936096/debian_ubuntu.sh | sh
> 
> Now you can go to step 4"
> - - -
V
Valery Sizov 已提交
50 51 52

# 1. Install packages

D
Dmitriy Zaporozhets 已提交
53
*Keep in mind that `sudo` is not installed for debian by default. You should install it with as root:*     **apt-get update && apt-get upgrade && apt-get install sudo**
V
Valery Sizov 已提交
54 55 56 57 58 59 60 61 62

    sudo apt-get update
    sudo apt-get upgrade

    sudo apt-get install -y git-core wget curl gcc checkinstall libxml2-dev libxslt-dev sqlite3 libsqlite3-dev libcurl4-openssl-dev libreadline-dev libc6-dev libssl-dev libmysql++-dev make build-essential zlib1g-dev libicu-dev redis-server openssh-server git-core python-dev python-pip sendmail

# 2. Install ruby

    wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p290.tar.gz
63
    tar xfv ruby-1.9.2-p290.tar.gz
V
Valery Sizov 已提交
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
    cd ruby-1.9.2-p290
    ./configure
    make
    sudo make install

# 3. Install gitolite

Create user for git:
    
    sudo adduser \
      --system \
      --shell /bin/sh \
      --gecos 'git version control' \
      --group \
      --disabled-password \
      --home /home/git \
      git

    

Create user for gitlab:
85

V
Valery Sizov 已提交
86 87 88 89
    # ubuntu/debian
    sudo adduser --disabled-login --gecos 'gitlab system' gitlab    

Add your user to git group:
90

V
Valery Sizov 已提交
91 92 93
    sudo usermod -a -G git gitlab

Generate key:
94

V
Valery Sizov 已提交
95 96
    sudo -H -u gitlab ssh-keygen -q -N '' -t rsa -f /home/gitlab/.ssh/id_rsa

D
Dmitriy Zaporozhets 已提交
97
Get gitolite source code:
98

V
Valery Sizov 已提交
99 100 101 102
    cd /home/git
    sudo -H -u git git clone git://github.com/gitlabhq/gitolite /home/git/gitolite    

Setup:
103

V
Valery Sizov 已提交
104 105 106 107 108 109
    sudo -u git -H /home/git/gitolite/src/gl-system-install
    sudo cp /home/gitlab/.ssh/id_rsa.pub /home/git/gitlab.pub
    sudo chmod 777 /home/git/gitlab.pub

    sudo -u git -H sed -i 's/0077/0007/g' /home/git/share/gitolite/conf/example.gitolite.rc
    sudo -u git -H sh -c "PATH=/home/git/bin:$PATH; gl-setup -q /home/git/gitlab.pub"
110
    
V
Valery Sizov 已提交
111
Permissions:
112

V
Valery Sizov 已提交
113 114 115 116 117 118 119 120 121 122 123 124
    sudo chmod -R g+rwX /home/git/repositories/
    sudo chown -R git:git /home/git/repositories/

#### CHECK: Logout & login again to apply git group to your user
    
    # clone admin repo to add localhost to known_hosts
    # & be sure your user has access to gitolite
    sudo -u gitlab -H git clone git@localhost:gitolite-admin.git /tmp/gitolite-admin 

    # if succeed  you can remove it
    sudo rm -rf /tmp/gitolite-admin 

D
Dmitriy Zaporozhets 已提交
125 126
** IMPORTANT! If you cant clone `gitolite-admin` repository - DONT PROCEED INSTALLATION**

V
Valery Sizov 已提交
127 128 129 130 131 132 133 134 135 136 137 138 139 140

# 4. Install gitlab and configuration. Check status configuration.

    sudo gem install charlock_holmes
    sudo pip install pygments
    sudo gem install bundler
    cd /home/gitlab
    sudo -H -u gitlab git clone git://github.com/gitlabhq/gitlabhq.git gitlab
    cd gitlab

    # Rename config files
    sudo -u gitlab cp config/gitlab.yml.example config/gitlab.yml

#### Select db you want to use
141

V
Valery Sizov 已提交
142 143 144 145 146 147
    # SQLite
    sudo -u gitlab cp config/database.yml.sqlite config/database.yml

    # Or 
    # Mysql
    sudo -u gitlab cp config/database.yml.example config/database.yml
D
Dmitriy Zaporozhets 已提交
148
    # Change username/password of config/database.yml  to real one
V
Valery Sizov 已提交
149 150

#### Install gems
151

V
Valery Sizov 已提交
152 153 154
    sudo -u gitlab -H bundle install --without development test --deployment

#### Setup DB
155

V
Valery Sizov 已提交
156 157 158 159
    sudo -u gitlab bundle exec rake db:setup RAILS_ENV=production
    sudo -u gitlab bundle exec rake db:seed_fu RAILS_ENV=production
    
Checking status:
160

V
Valery Sizov 已提交
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
    sudo -u gitlab bundle exec rake gitlab_status


    # OUTPUT EXAMPLE
    Starting diagnostic
    config/database.yml............exists
    config/gitlab.yml............exists
    /home/git/repositories/............exists
    /home/git/repositories/ is writable?............YES
    remote: Counting objects: 603, done.
    remote: Compressing objects: 100% (466/466), done.
    remote: Total 603 (delta 174), reused 0 (delta 0)
    Receiving objects: 100% (603/603), 53.29 KiB, done.
    Resolving deltas: 100% (174/174), done.
    Can clone gitolite-admin?............YES
    UMASK for .gitolite.rc is 0007? ............YES

D
Dmitriy Zaporozhets 已提交
178
If you got all YES - congrats! You can go to next step.  
V
Valery Sizov 已提交
179 180 181

# 5. Server up

D
Dmitriy Zaporozhets 已提交
182
Application can be started with next command:
183

D
Dmitriy Zaporozhets 已提交
184
    # For test purposes 
V
Valery Sizov 已提交
185 186
    sudo -u gitlab bundle exec rails s -e production

D
Dmitriy Zaporozhets 已提交
187 188
    # As daemon
    sudo -u gitlab bundle exec rails s -e production -d
V
Valery Sizov 已提交
189 190 191 192 193 194 195 196 197

#  6. Run resque process (for processing queue).

    # Manually
    sudo -u gitlab bundle exec rake environment resque:work QUEUE=* RAILS_ENV=production BACKGROUND=yes

    # Gitlab start script
    ./resque.sh

D
Dmitriy Zaporozhets 已提交
198 199 200 201

** Ok - we have a working application now. **
** But keep going - there are some thing that should be done **

V
Valery Sizov 已提交
202 203 204 205 206 207 208
# Nginx && Unicorn

### Install Nginx

    sudo apt-get install nginx

## Unicorn
209

V
Valery Sizov 已提交
210 211
    cd /home/gitlab/gitlab
    sudo -u gitlab cp config/unicorn.rb.orig config/unicorn.rb
V
Valeriy Sizov 已提交
212
    sudo -u gitlab bundle exec unicorn_rails -c config/unicorn.rb -E production -D
V
Valery Sizov 已提交
213

D
Dmitriy Zaporozhets 已提交
214 215
Edit /etc/nginx/nginx.conf. Add next code to **http** section:

V
Valery Sizov 已提交
216 217 218 219 220 221 222
    upstream gitlab {
        server unix:/tmp/gitlab.socket;
    }

    server {
        listen 80;
        server_name mygitlab.com;
223 224 225 226 227
        root /home/gitlab/gitlab/public;
        try_files $uri $uri/index.html $uri.html @gitlab;
        
        location @gitlab {
          proxy_pass http://gitlab;
V
Valery Sizov 已提交
228 229 230 231 232
        }

    }

mygitlab.com - change to your domain.
D
Dmitriy Zaporozhets 已提交
233

V
Valery Sizov 已提交
234
Restart nginx:
235

V
Valery Sizov 已提交
236
    /etc/init.d/nginx restart
D
Dmitriy Zaporozhets 已提交
237

V
Valery Sizov 已提交
238
Create init script in /etc/init.d/gitlab:
239

V
Valery Sizov 已提交
240 241 242 243 244 245 246 247 248 249 250 251 252 253 254
    #! /bin/bash
    ### BEGIN INIT INFO
    # Provides:          unicorn
    # Required-Start:    $local_fs $remote_fs $network $syslog
    # Required-Stop:     $local_fs $remote_fs $network $syslog
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: starts the unicorn web server
    # Description:       starts unicorn
    ### END INIT INFO
    
    DAEMON_OPTS="-c /home/gitlab/gitlab/config/unicorn.rb -E production -D"
    NAME=unicorn
    DESC="Gitlab service"
    PID=/home/gitlab/gitlab/tmp/pids/unicorn.pid
255
    RESQUE_PID=/home/gitlab/gitlab/tmp/pids/resque_worker.pid
V
Valery Sizov 已提交
256 257 258 259 260

    case "$1" in
      start)
            CD_TO_APP_DIR="cd /home/gitlab/gitlab"
            START_DAEMON_PROCESS="bundle exec unicorn_rails $DAEMON_OPTS"
D
Dmitriy Zaporozhets 已提交
261
            START_RESQUE_PROCESS="./resque.sh"
V
Valery Sizov 已提交
262 263 264

            echo -n "Starting $DESC: "
            if [ `whoami` = root ]; then
D
Dmitriy Zaporozhets 已提交
265
              sudo -u gitlab sh -c "$CD_TO_APP_DIR > /dev/null 2>&1 && $START_DAEMON_PROCESS && $START_RESQUE_PROCESS"
V
Valery Sizov 已提交
266
            else
267
              $CD_TO_APP_DIR > /dev/null 2>&1 && $START_DAEMON_PROCESS && $START_RESQUE_PROCESS
V
Valery Sizov 已提交
268 269 270 271 272 273
            fi
            echo "$NAME."
            ;;
      stop)
            echo -n "Stopping $DESC: "
            kill -QUIT `cat $PID`
274
            kill -QUIT `cat $RESQUE_PID`
V
Valery Sizov 已提交
275 276 277 278 279
            echo "$NAME."
            ;;
      restart)
            echo -n "Restarting $DESC: "
            kill -USR2 `cat $PID`
280
            kill -USR2 `cat $RESQUE_PID`
V
Valery Sizov 已提交
281 282 283 284 285
            echo "$NAME."
            ;;
      reload)
            echo -n "Reloading $DESC configuration: "
            kill -HUP `cat $PID`
286
            kill -HUP `cat $RESQUE_PID`
V
Valery Sizov 已提交
287 288 289 290 291 292 293 294 295 296
            echo "$NAME."
            ;;
      *)
            echo "Usage: $NAME {start|stop|restart|reload}" >&2
            exit 1
            ;;
    esac

    exit 0

V
Valery Sizov 已提交
297
Adding permission:
298

V
Valery Sizov 已提交
299 300
    sudo chmod +x /etc/init.d/gitlab

V
Valery Sizov 已提交
301
When server is rebooted then gitlab must starting:
302

V
Valery Sizov 已提交
303 304
    sudo update-rc.d gitlab defaults

D
Dmitriy Zaporozhets 已提交
305
Now you can start/restart/stop gitlab like:
306

D
Dmitriy Zaporozhets 已提交
307
    sudo /etc/init.d/gitlab restart