LoginSignup
12
13

More than 5 years have passed since last update.

Install Redmine 2.5.1, and GitLab 6.8 on CentOS 6.5 and Apache 2.2

Last updated at Posted at 2014-05-19

Install rbenv

Items to install

  • rbenv 0.4.0-129-g7e0e85b
  • ruby-build 20141210
  • ruby 1.9.3-p551
  • ruby 2.1.5
  • rbenv-rehash
  • bundler

Install dependencies

$ yum install --enablerepo=epel make gcc zlib-devel openssl-devel readline-devel ncurses-devel gdbm-devel db4-devel libffi-devel tk-devel libyaml-devel

Install rbenv and ruby-build

$ su -
$ git clone git://github.com/sstephenson/rbenv.git /usr/local/rbenv
$ mkdir /usr/local/rbenv/shims /usr/local/rbenv/versions
$ groupadd rbenv
$ chgrp -R rbenv /usr/local/rbenv
$ chmod -R g+rwxXs /usr/local/rbenv
$ git clone git://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugins/ruby-build
$ cd /usr/local/rbenv/plugins/ruby-build
$ ./install.sh
$ cat >> /etc/profile.d/rbenv.sh << EOF
export RBENV_ROOT="/usr/local/rbenv"
export PATH="/usr/local/rbenv/bin:$PATH"
eval "$(rbenv init -)"

EOF
$ source /etc/profile.d/rbenv.sh
$ rbenv -v
rbenv 0.4.0-129-g7e0e85b
$ ruby-build --version
ruby-build 20141210

Install Ruby

$ rbenv install --list
$ rbenv install 1.9.3-p551 && rbenv install 2.1.5
$ rbenv versions
* system (set by /usr/local/rbenv/version)
  1.9.3-p551
  2.1.5

Install rbenv-rehash and bundler

$ rbenv global 1.9.3-p551
$ gem --version
1.8.23.2
$ gem update --system
$ gem --version
2.4.5
$ gem install rbenv-rehash --no-rdoc --no-ri
$ gem install bundler --no-rdoc --no-ri
$ gem install rails --no-rdoc --no-ri
$ rbenv rehash

$ rbenv global 2.1.5
$ gem --version
2.2.2
$ gem update --system
$ gem --version
2.4.5
$ gem install rbenv-rehash --no-rdoc --no-ri
$ gem install bundler --no-rdoc --no-ri
$ gem install rails --no-rdoc --no-ri
$ rbenv rehash

Create a mysql database and user

$ mysql -u root -p
mysql> create database redmine default character set utf8;
mysql> grant all on redmine.* to redmine@localhost identified by '********';
mysql> flush privileges;
mysql> exit;

Install GitLab

Items to install

  • git 1.9.4
  • gitlab 6.8
  • gitlab-shell 1.9.8

Install git

$ yum install perl-ExtUtils-MakeMaker
$ cd ~/download && wget https://www.kernel.org/pub/software/scm/git/git-1.9.4.tar.gz && tar zxvf git-1.9.4.tar.gz && cd git-1.9.4
$ ./configure --prefix=/usr/local && make prefix=/usr/local all && make prefix=/usr/local install
$ git version
git version 1.9.4

Install modules

$ sudo gem install charlock_holmes --version '0.6.9'

Create git user

$ useradd -c 'GitLab' -s /bin/bash git
$ su - git
$ cd /home/git
$ mkdir .ssh
$ touch .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys
$ chmod 700 .ssh
$ git config --global user.name  "GitLab"
$ git config --global user.email "gitlab@example.com"

Install gitlab-shell

$ cd /home/git
$ git clone https://github.com/gitlabhq/gitlab-shell.git
$ cd gitlab-shell
$ git checkout v1.9.8
$ git checkout -b v1.9.8
$ cp /home/git/gitlab-shell/config.yml.example /home/git/gitlab-shell/config.yml
$ vi /home/git/gitlab-shell/config.yml
$ diff /home/git/gitlab-shell/config.yml{.example,}
5c5
< gitlab_url: "http://localhost/"
---
> gitlab_url: "https://git.example.com/"
12c12
<   self_signed_cert: false
---
>   self_signed_cert: true
$ ./bin/install
$ exit

Install gitlab

$ su - git
$ git clone https://github.com/gitlabhq/gitlabhq.git gitlab
$ cd gitlab
$ git checkout 6-8-stable
$ cp config/gitlab.yml.example config/gitlab.yml
$ vi config/gitlab.yml
$ diff config/gitlab.yml{.example,}
18c18
<     host: localhost
---
>     host: git.example.com
38c38
<     email_from: gitlab@localhost
---
>     email_from: gitlab@example.com
41c41
<     support_email: support@localhost
---
>     support_email: gitlab@example.com
227c227
<     bin_path: /usr/bin/git
---
>     bin_path: /usr/local/bin/git
$ cp config/unicorn.rb.example config/unicorn.rb
$ mkdir /home/git/gitlab-satellites
$ chmod 750 /home/git/gitlab-satellites

Install bundle modules

$ cd /home/git/gitlab
$ bundle install --deployment --without development test postgres

Configure mysql database

$ mysql -u root -p
mysql> create user 'gitlab'@'localhost' identified by '*********';
mysql> create database if not exists `gitlabhq_production` default character set `utf8` collate `utf8_unicode_ci`;
mysql> grant all on `gitlabhq_production`.* to 'gitlab'@'localhost';
mysql> exit;
$ cd /home/git/gitlab
$ cp config/database.yml.mysql config/database.yml
$ vi config/database.yml
$ diff config/database.yml{.mysql,}
10,11c10,11
<   username: git
<   password: "secure password"
---
>   username: gitlab
>   password: "*********"
24,25c24,25
<   username: root
<   password: "secure password"
---
>   username: gitlab
>   password: "*********"
37,38c37,38
<   username: root
<   password:
---
>   username: gitlab
>   password: "*********"

Initialize database

$ bundle exec rake gitlab:setup RAILS_ENV=production

Create self certificates

$ cd /etc/pki/tls/certs/
$ sed -i 's/365/3650/g' Makefile
$ make example.com.crt
umask 77 ; \
  /usr/bin/openssl genrsa -aes128 2048 > example.com.key
Generating RSA private key, 2048 bit long modulus
.........+++
...................................+++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
umask 77 ; \
  /usr/bin/openssl req  -new -key example.com.key -x509 -days 3650 -out example.com.crt -set_serial 0
Enter pass phrase for example.com.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Kanagawa
Locality Name (eg, city) [Default City]:Yokohama
Organization Name (eg, company) [Default Company Ltd]:Example Company
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server hostname) []:*.example.com
Email Address []:admin@example.com

$ openssl rsa -in example.com.key -out example.com.key

Install initScript

$ exit
$ cp /home/git/gitlab/lib/support/init.d/gitlab /etc/init.d/gitlab
$ cp /home/git/gitlab/lib/support/init.d/gitlab.default.example /etc/default/gitlab
$ chmod +x /etc/init.d/gitlab

Make gitlab start after httpd

$ vi /etc/init.d/gitlab
$ diff /home/git/gitlab/lib/support/init.d/gitlab /etc/init.d/gitlab
6a7,8
> # chkconfig: - 86 15
>
$ chkconfig --add gitlab
$ chkconfig gitlab on
$ ls -l /etc/rc.d/rc3.d/ | grep "httpd\|gitlab"
lrwxrwxrwx  1 root root 15 Apr 21 11:57 S85httpd -> ../init.d/httpd
lrwxrwxrwx  1 root root 16 May 19 11:12 S86gitlab -> ../init.d/gitlab

Configure logrotation

$ cp /home/git/gitlab/lib/support/logrotate/gitlab /etc/logrotate.d/gitlab

Build asset

$ cd /home/git/gitlab
$ bundle exec rake assets:precompile RAILS_ENV=production

Check status

$ cd /home/git/gitlab
$ bundle exec rake gitlab:check RAILS_ENV=production

Configure Apache

$ wget -O /etc/httpd/conf.d/vhost_git.example.com.conf https://gitlab.com/gitlab-org/gitlab-recipes/raw/master/web-server/apache/gitlab-ssl.conf
$ vi /etc/httpd/conf.d/vhost_git.example.com.conf

#This configuration has been tested on GitLab 6.0.0 and GitLab 6.0.1
#Note this config assumes unicorn is listening on default port 8080.
#Module dependencies
#  mod_rewrite
#  mod_ssl
#  mod_proxy
#  mod_proxy_http
#  mod_headers

# This section is only needed if you want to redirect http traffic to https.
# You can live without it but clients will have to type in https:// to reach gitlab.
<VirtualHost *:80>
  ServerName git.example.com
  ServerSignature Off

  RewriteEngine on
  RewriteCond %{HTTPS} !=on
  RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [NE,R,L]
</VirtualHost>

<VirtualHost *:443>
  SSLEngine on
  #strong encryption ciphers only
  #see ciphers(1) http://www.openssl.org/docs/apps/ciphers.html
  SSLCipherSuite SSLv3:TLSv1:+HIGH:!SSLv2:!MD5:!MEDIUM:!LOW:!EXP:!ADH:!eNULL:!aNULL
  SSLCertificateFile    /etc/pki/tls/certs/example.com.crt
  SSLCertificateKeyFile /etc/pki/tls/certs/example.com.key
  #SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt

  ServerName git.example.com
  ServerSignature Off

  ProxyPreserveHost On

  <Location />
    Order deny,allow
    Allow from all

    ProxyPassReverse http://127.0.0.1:8080
    ProxyPassReverse http://git.example.com/
  </Location>

  #apache equivalent of nginx try files
  # http://serverfault.com/questions/290784/what-is-apaches-equivalent-of-nginxs-try-files
  # http://stackoverflow.com/questions/10954516/apache2-proxypass-for-rails-app-gitlab
  RewriteEngine on
  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
  RewriteRule .* http://127.0.0.1:8080%{REQUEST_URI} [P,QSA]
  RequestHeader set X_FORWARDED_PROTO 'https'

  # needed for downloading attachments
  DocumentRoot /home/git/gitlab/public

  #Set up apache error documents, if back end goes down (i.e. 503 error) then a maintenance/deploy page is thrown up.
  ErrorDocument 404 /404.html
  ErrorDocument 422 /422.html
  ErrorDocument 500 /500.html
  ErrorDocument 503 /deploy.html

  LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common_forwarded
  ErrorLog  /var/log/httpd/git.example.com-error.log
  CustomLog /var/log/httpd/git.example.com-forwarded.log common_forwarded
  CustomLog /var/log/httpd/git.example.com-access.log combined env=!dontlog
  CustomLog /var/log/httpd/git.example.com.log combined

</VirtualHost>

Install Redmine

Install Redmine 2.5.1 on Ruby 2.1.5

$ wget http://www.redmine.org/releases/redmine-2.5.1.tar.gz
$ tar zxf redmine-2.5.1.tar.gz
$ mv redmine-2.5.1 /var/lib/redmine
$ cat >> /var/lib/redmine/config/database.yml<< EOF
production:
  adapter: mysql2
  database: db_redmine
  host: localhost
  username: user_redmine
  password: ********
  encoding: utf8

EOF

$ cat >> /var/lib/redmine/config/configuration.yml<< EOF
production:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      address: "localhost"
      port: 25
      domain: 'example.com'

  rmagick_font_path: /usr/share/fonts/ipa-pgothic/ipagp.ttf

EOF

$ rbenv global 2.1.5
$ cd /var/lib/redmine/
$ bundle install --without development test
$ bundle exec rake generate_secret_token
$ RAILS_ENV=production bundle exec rake db:migrate
$ gem install passenger --no-rdoc --no-ri
$ passenger-install-apache2-module
$ cat >> /etc/httpd/conf.d/passenger.conf << EOF

LoadModule passenger_module /usr/local/rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/passenger-4.0.42/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /usr/local/rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/passenger-4.0.42
  PassengerDefaultRuby /usr/local/rbenv/versions/2.0.0-p481/bin/ruby
</IfModule>


Header always unset "X-Powered-By"
Header always unset "X-Rack-Cache"
Header always unset "X-Content-Digest"
Header always unset "X-Runtime"

PassengerMaxPoolSize 20
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 3600
PassengerHighPerformance on
PassengerStatThrottleRate 10
PassengerSpawnMethod smart
RailsAppSpawnerIdleTime 86400
PassengerMaxPreloaderIdleTime 0

RackBaseURI /redmine

#<VirtualHost *:80>
#   ServerName redmine.example.com
#   # !!! Be sure to point DocumentRoot to 'public'!
#   DocumentRoot /var/lib/redmine/public
#   <Directory /var/lib/redmine/public>
#       # This relaxes Apache security settings.
#       AllowOverride all
#       # MultiViews must be turned off.
#       Options -MultiViews
#       # Uncomment this if you're on Apache >= 2.4:
#       #Require all granted
#   </Directory>
#</VirtualHost>

EOF

$ cat >> /etc/httpd/conf.d/vhost_redmine.example.com.conf << EOF
<VirtualHost *:80>
        ServerName redmine.example.com
        ServerSignature Off

        RewriteEngine on
        RewriteCond %{HTTPS} !=on
        RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [NE,R,L]
</VirtualHost>

<VirtualHost *:443>
        ServerName redmine.example.com
        ServerSignature Off

        SSLEngine on
        SSLCertificateFile    /etc/ssl/certs/example.com.crt
        SSLCertificateKeyFile /etc/ssl/certs/example.com.key

        DocumentRoot /var/lib/redmine/public

        <Directory /var/lib/redmine/public>
                AllowOverride all
                Options -MultiViews
                #Require all granted
        </Directory>

        <IfModule mod_passenger.c>
                PassengerUser www-data
                PassengerGroup apache
        </IfModule>

        LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common_forwarded
        ErrorLog  /var/log/httpd/redmine.example.com-error.log
        CustomLog /var/log/httpd/redmine.example.com-forwarded.log common_forwarded
        CustomLog /var/log/httpd/redmine.example.com-access.log combined env=!dontlog
        CustomLog /var/log/httpd/redmine.example.com.log combined
</VirtualHost>

EOF

$ ln -s /var/lib/redmine/public /var/www/html/redmine.example.com
$ chown -R www-data:apache /var/lib/redmine
$ service httpd restart

Integrate GitLab with Redmine

Join apache user (www-data) in git group

$ groups www-data
www-data : apache
$ usermod -a -G git www-data
$ groups www-data
www-data : apache git

Make git home directory accessible

$ chmod g+rx /home/git/

Create Redmine project and new repository

redmine0.jpg

redmine1.jpg

12
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
13