installation.md 10.5 KB
Newer Older
S
Sytse Sijbrandij 已提交
1
# Important notes
V
Valery Sizov 已提交
2

S
Sytse Sijbrandij 已提交
3
This installation guide was created for and tested on **Debian/Ubuntu** operating systems. Please read [`doc/install/requirements.md`](./requirements.md) for hardware and operating system requirements.
4

S
Sytse Sijbrandij 已提交
5
This is the official installation guide to set up a production server. To set up a **development installation** or for many other installation options please consult [the installation section in the readme](https://github.com/gitlabhq/gitlabhq#installation).
6

S
Sytse Sijbrandij 已提交
7 8 9
The following steps have been known to work. Please **use caution when you deviate** from this guide. Make sure you don't violate any assumptions GitLab makes about its environment.

If you find a bug/error in this guide please **submit a pull request** following the [`contributing guide`](../../CONTRIBUTING.md).
D
Dmitriy Zaporozhets 已提交
10

R
randx 已提交
11
- - -
D
Dmitriy Zaporozhets 已提交
12

R
Riyad Preukschas 已提交
13
# Overview
V
Valery Sizov 已提交
14

P
PaulWagener 已提交
15
The GitLab installation consists of setting up the following components:
16

R
Riyad Preukschas 已提交
17
1. Packages / Dependencies
R
randx 已提交
18
2. Ruby
R
Riyad Preukschas 已提交
19
3. System Users
L
Lele 已提交
20
4. GitLab shell
R
Riyad Preukschas 已提交
21 22 23
5. Database
6. GitLab
7. Nginx
V
Valery Sizov 已提交
24 25


R
Riyad Preukschas 已提交
26
# 1. Packages / Dependencies
V
Valery Sizov 已提交
27

28 29
`sudo` is not installed on Debian by default. Make sure your system is
up-to-date and install it.
R
Robert Speicher 已提交
30

31
    # run as root
32 33 34
    apt-get update
    apt-get upgrade
    apt-get install sudo
V
Valery Sizov 已提交
35

36 37 38 39 40 41 42
**Note:**
Vim is an editor that is used here whenever there are files that need to be
edited by hand. But, you can use any editor you like instead.

    # Install vim
    sudo apt-get install -y vim

R
Riyad Preukschas 已提交
43
Install the required packages:
44

45
    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
46 47 48 49 50 51

Make sure you have the right version of Python installed.

    # Install Python
    sudo apt-get install python

R
Riyad Preukschas 已提交
52
    # Make sure that Python is 2.5+ (3.x is not supported at the moment)
53 54 55 56 57
    python --version

    # If it's Python 3 you might need to install Python 2 separately
    sudo apt-get install python2.7

58
    # Make sure you can access Python via python2
59 60 61 62
    python2 --version

    # If you get a "command not found" error create a link to the python binary
    sudo ln -s /usr/bin/python /usr/bin/python2
63

64 65 66 67 68
**Note:** In order to receive mail notifications, make sure to install a
mail server. By default, Debian is shipped with exim4 whereas Ubuntu
does not ship with one. The recommended mail server is postfix and you can install it with:

	sudo apt-get install postfix 
69

R
Riyad Preukschas 已提交
70
# 2. Ruby
V
Valery Sizov 已提交
71

72 73 74 75
Remove old 1.8 ruby if present

    sudo apt-get remove ruby1.8

76 77
Download and compile it:

78
    mkdir /tmp/ruby && cd /tmp/ruby
79 80
    curl --progress http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p392.tar.gz | tar xz
    cd ruby-1.9.3-p392
V
Valery Sizov 已提交
81 82 83 84
    ./configure
    make
    sudo make install

85 86 87 88
Install the Bundler Gem:

    sudo gem install bundler

V
Valery Sizov 已提交
89

R
Riyad Preukschas 已提交
90 91
# 3. System Users

D
Dmitriy Zaporozhets 已提交
92
Create a `git` user for Gitlab:
93

D
Dmitriy Zaporozhets 已提交
94
    sudo adduser --disabled-login --gecos 'GitLab' git
V
Valery Sizov 已提交
95

96

D
Dmitriy Zaporozhets 已提交
97
# 4. GitLab shell
V
Valery Sizov 已提交
98

99 100
GitLab Shell is a ssh access and repository management software developed specially for GitLab.

101
    # Login as git
D
Dmitriy Zaporozhets 已提交
102
    sudo su git
103

104
    # Go to home directory
105
    cd /home/git
106

107
    # Clone gitlab shell
J
James Newton 已提交
108
    git clone https://github.com/gitlabhq/gitlab-shell.git
109

D
Dmitriy Zaporozhets 已提交
110
    cd gitlab-shell
111 112

    # switch to right version
113
    git checkout v1.4.0
114

D
Dmitriy Zaporozhets 已提交
115
    cp config.yml.example config.yml
116

117
    # Edit config and replace gitlab_url
118 119 120 121
    # with something like 'http://domain.com/'
    vim config.yml

    # Do setup
122
    ./bin/install
V
Valery Sizov 已提交
123

D
Dmitriy Zaporozhets 已提交
124

125
# 5. Database
R
randx 已提交
126

127
To setup the MySQL/PostgreSQL database and dependencies please see [`doc/install/databases.md`](./databases.md).
R
randx 已提交
128 129


R
randx 已提交
130
# 6. GitLab
V
Valery Sizov 已提交
131

D
Dmitriy Zaporozhets 已提交
132 133
    # We'll install GitLab into home directory of the user "git"
    cd /home/git
134

R
Riyad Preukschas 已提交
135
## Clone the Source
R
randx 已提交
136

D
Dmitriy Zaporozhets 已提交
137
    # Clone GitLab repository
D
Dmitriy Zaporozhets 已提交
138
    sudo -u git -H git clone https://github.com/gitlabhq/gitlabhq.git gitlab
D
Dmitriy Zaporozhets 已提交
139

140
    # Go to gitlab dir
D
Dmitriy Zaporozhets 已提交
141
    cd /home/git/gitlab
142

D
Dmitriy Zaporozhets 已提交
143
    # Checkout to stable release
144
    sudo -u git -H git checkout 5-2-stable
145

146
**Note:**
147
You can change `5-2-stable` to `master` if you want the *bleeding edge* version, but
R
Riyad Preukschas 已提交
148
do so with caution!
149

R
Riyad Preukschas 已提交
150
## Configure it
R
randx 已提交
151

D
Dmitriy Zaporozhets 已提交
152
    cd /home/git/gitlab
153

R
Riyad Preukschas 已提交
154
    # Copy the example GitLab config
D
Dmitriy Zaporozhets 已提交
155
    sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml
V
Valery Sizov 已提交
156

157 158
    # Make sure to change "localhost" to the fully-qualified domain name of your
    # host serving GitLab where necessary
D
Dmitriy Zaporozhets 已提交
159
    sudo -u git -H vim config/gitlab.yml
160

R
Riyad Preukschas 已提交
161
    # Make sure GitLab can write to the log/ and tmp/ directories
162 163
    sudo chown -R git log/
    sudo chown -R git tmp/
R
Riyad Preukschas 已提交
164 165 166
    sudo chmod -R u+rwX  log/
    sudo chmod -R u+rwX  tmp/

167
    # Create directory for satellites
D
Dmitriy Zaporozhets 已提交
168
    sudo -u git -H mkdir /home/git/gitlab-satellites
169

170
    # Create directories for sockets/pids and make sure GitLab can write to them
171
    sudo -u git -H mkdir tmp/pids/
172
    sudo -u git -H mkdir tmp/sockets/
173
    sudo chmod -R u+rwX  tmp/pids/
174
    sudo chmod -R u+rwX  tmp/sockets/
175

176
    # Create public/uploads directory otherwise backup will fail
177 178 179
    sudo -u git -H mkdir public/uploads
    sudo chmod -R u+rwX  public/uploads

180
    # Copy the example Puma config
181
    sudo -u git -H cp config/puma.rb.example config/puma.rb
A
Andrey Kumanyaev 已提交
182

183 184 185 186 187
    # Configure Git global settings for git user, useful when editing via web
    # Edit user.email according to what is set in gitlab.yml
    sudo -u git -H git config --global user.name "GitLab"
    sudo -u git -H git config --global user.email "gitlab@localhost"

188
**Important Note:**
189
Make sure to edit both `gitlab.yml` and `puma.rb` to match your setup.
R
Riyad Preukschas 已提交
190

191 192 193
## Configure GitLab DB settings

    # Mysql
D
Dmitriy Zaporozhets 已提交
194
    sudo -u git cp config/database.yml.mysql config/database.yml
195 196

    # PostgreSQL
D
Dmitriy Zaporozhets 已提交
197
    sudo -u git cp config/database.yml.postgresql config/database.yml
198 199 200

Make sure to update username/password in config/database.yml.

R
Riyad Preukschas 已提交
201
## Install Gems
202

D
Dmitriy Zaporozhets 已提交
203
    cd /home/git/gitlab
204

205
    sudo gem install charlock_holmes --version '0.6.9.4'
206

207
    # For MySQL (note, the option says "without")
D
Dmitriy Zaporozhets 已提交
208
    sudo -u git -H bundle install --deployment --without development test postgres
209

210
    # Or for PostgreSQL
D
Dmitriy Zaporozhets 已提交
211
    sudo -u git -H bundle install --deployment --without development test mysql
212

213

R
Riyad Preukschas 已提交
214
## Initialise Database and Activate Advanced Features
215

D
Dmitriy Zaporozhets 已提交
216
    sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production
217 218


219 220 221 222
## Install Init Script

Download the init script (will be /etc/init.d/gitlab):

223
    sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab
224 225 226 227 228 229 230
    sudo chmod +x /etc/init.d/gitlab

Make GitLab start on boot:

    sudo update-rc.d gitlab defaults 21


R
Riyad Preukschas 已提交
231
## Check Application Status
R
Robert Speicher 已提交
232

233
Check if GitLab and its environment are configured correctly:
234

D
Dmitriy Zaporozhets 已提交
235
    sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production
236 237

To make sure you didn't miss anything run a more thorough check with:
238

D
Dmitriy Zaporozhets 已提交
239
    sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production
V
Valery Sizov 已提交
240

241 242
If all items are green, then congratulations on successfully installing GitLab!
However there are still a few steps left.
V
Valery Sizov 已提交
243

244
## Start Your GitLab Instance
V
Valery Sizov 已提交
245

R
randx 已提交
246
    sudo service gitlab start
R
Riyad Preukschas 已提交
247 248
    # or
    sudo /etc/init.d/gitlab restart
249

V
Valery Sizov 已提交
250

R
randx 已提交
251
# 7. Nginx
252

253 254
**Note:**
If you can't or don't want to use Nginx as your web server, have a look at the
255
[`Advanced Setup Tips`](./installation.md#advanced-setup-tips) section.
256

R
Riyad Preukschas 已提交
257
## Installation
258
    sudo apt-get install nginx
259

R
Riyad Preukschas 已提交
260 261 262 263
## Site Configuration

Download an example site config:

264
    sudo cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab
265
    sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
V
Valery Sizov 已提交
266

R
Riyad Preukschas 已提交
267 268
Make sure to edit the config file to match your setup:

C
crazyscience 已提交
269 270 271 272
    # **YOUR_SERVER_FQDN** to the fully-qualified
    # domain name of your host serving GitLab. Also, replace
    # the 'listen' line with the following:
    #   listen 80 default_server;         # e.g., listen 192.168.1.1:80;
273
    sudo vim /etc/nginx/sites-available/gitlab
D
Dmitriy Zaporozhets 已提交
274

R
Riyad Preukschas 已提交
275 276
## Restart

277
    sudo service nginx restart
D
Dmitriy Zaporozhets 已提交
278

279

R
Riyad Preukschas 已提交
280
# Done!
281

R
Riyad Preukschas 已提交
282 283
Visit YOUR_SERVER for your first GitLab login.
The setup has created an admin account for you. You can use it to log in:
V
Valery Sizov 已提交
284

285 286
    admin@local.host
    5iveL!fe
287

288
**Important Note:**
289
Please go over to your profile page and immediately change the password, so
R
Riyad Preukschas 已提交
290 291 292 293
nobody can access your GitLab by using this login information later on.

**Enjoy!**

V
Valery Sizov 已提交
294

R
randx 已提交
295 296
- - -

V
Valery Sizov 已提交
297

298
# Advanced Setup Tips
R
randx 已提交
299

300
## Custom Redis Connection
301 302

If you'd like Resque to connect to a Redis server on a non-standard port or on
R
Riyad Preukschas 已提交
303 304
a different host, you can configure its connection string via the
`config/resque.yml` file.
305

R
Riyad Preukschas 已提交
306
    # example
307
    production: redis://redis.example.tld:6379
308

309 310
## Custom SSH Connection

311
If you are running SSH on a non-standard port, you must change the gitlab user's SSH config.
312

D
Dmitriy Zaporozhets 已提交
313
    # Add to /home/git/.ssh/config
314 315 316 317
    host localhost          # Give your setup a name (here: override localhost)
        user git            # Your remote git user
        port 2222           # Your port number
        hostname 127.0.0.1; # Your server name or IP
318

319
You also need to change the corresponding options (e.g. ssh_user, ssh_host, admin_uri) in the `config\gitlab.yml` file.
320 321 322 323 324 325 326 327 328 329 330 331 332

## LDAP authentication

You can configure LDAP authentication in config/gitlab.yml. Please restart GitLab after editing this file.

## Using Custom Omniauth Providers

GitLab uses [Omniauth](http://www.omniauth.org/) for authentication and already ships with a few providers preinstalled (e.g. LDAP, GitHub, Twitter). But sometimes that is not enough and you need to integrate with other authentication solutions. For these cases you can use the Omniauth provider.

### Steps

These steps are fairly general and you will need to figure out the exact details from the Omniauth provider's documentation.

333
* Add `gem "omniauth-your-auth-provider"` to the [Gemfile](https://github.com/gitlabhq/gitlabhq/blob/5-2-stable/Gemfile#L18)
334
* Run `sudo -u git -H bundle install` to install the new gem(s)
335 336
* Add provider specific configuration options to your `config/gitlab.yml` (you can use the [auth providers section of the example config](https://github.com/gitlabhq/gitlabhq/blob/5-2-stable/config/gitlab.yml.example#L53) as a reference)
* Add icons for the new provider into the [vendor/assets/images/authbuttons](https://github.com/gitlabhq/gitlabhq/tree/5-2-stable/vendor/assets/images/authbuttons) directory (you can find some more popular ones over at https://github.com/intridea/authbuttons)
337 338 339 340 341 342 343
* Restart GitLab

### Examples

If you have successfully set up a provider that is not shipped with GitLab itself, please let us know.
You can help others by reporting successful configurations and probably share a few insights or provide warnings for common errors or pitfalls by sharing your experience [in the public Wiki](https://github.com/gitlabhq/gitlab-public-wiki/wiki/Working-Custom-Omniauth-Provider-Configurations).
While we can't officially support every possible auth mechanism out there, we'd like to at least help those with special needs.