CentOS redmine git

From 흡혈양파의 인터넷工房
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
CentOS 7 에서 nginx + thin + redmine 3.4 + postgresql + redmine_git_hosting 사용하기

개요

이 문서는 CentOS 7.4 에서 redmine 과 postgresql 을 설치하는 내용을 다룬다. 각 OS 에 대한 특징인 부분은 설명하지 않는다.

이 문서는 *설치* 및 *최소한의 세팅* 에 대해서만 다루고 있다. redmine 설치 이후의 plugin 사용등에 대한 내용은 인터넷을 참고하도록 한다.


요구 사항

이 문서의 내용은 다음과 같은 software 및 환경을 전제로 하고 있다.

  • CentOS 7.4 가 설치된 시스템
  • selinux disable
  • ruby 2.5.1
  • redmine 3.4
  • postgresql 9.6
  • thin web app server
  • email 알림에 사용할 gmail 계정

directory location

  • redmine basement
    • /home/redmine/redmine_base
  • pgsql database basement
    • /var/lib/pgsql/9.6/data
  • git basement
    • /home/git

account info

  • Redmine 유지용 계정
    • id : redmine
  • git 유지용 계정
    • id : git


환경준비

이 장에서 설명하는 내용은 모두 root 권한으로 해야한다.

selinux 끄기

터미널등에서 다음의 명령을 실행한다.

setenforce 0


/etc/sysconfig/selinux

SELINUX=disabled


방화벽 열기

여기서는 8080 port 를 redmine 의 접근 port 로 사용할 것이기 때문에, 다음의 명령어로 port 를 방화벽 규칙에 추가한다.

firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --permanent --zone=public --add-port=8080/udp


소프트웨어 설치

OS repository 제공 프로그램의 설치

postgreSQL 9.6 의 설치를 위해 외부 repository 를 세팅하고, epel 패키지를 사용할 수 있도록 설정한다.

yum install epel-release
yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
yum update


본 시스템에서 사용할 소프트웨어를 설치한다.

yum install nginx nginx-all-modules  -y
yum install postgresql96 postgresql96-devel postgresql96-server postgresql96-contrib -y
yum install curl zlib-devel curl-devel openssl-devel apr-devel apr-util-devel ftp wget ImageMagick-devel gcc gcc-c++ patch readline readline-devel zlib libyaml-devel libffi-devel make bzip2 autoconf automake libtool bison subversion git libgit2 libgit2-devel libssh2 libssh2-devel python-docutils -y


postgreSQL 데이터베이스를 초기화한다. epel 이 설정되지 않았다면 libgit2 를 사용할 수 없기 때문에 이후의 설치과정에서 문제가 생긴다.

/usr/pgsql-9.6/bin/postgresql96-setup initdb


posgreSQL DB 의 접속파일을 편집한다. /var/lib/pgsql/9.6/data/pg_hba.conf 파일의 아래쪽을 보면 아래와 같은 내용이 있는데 host 로 시작되는 2개 부분을 trust 로 변경해준다. 변경 후 내용은 다음과 같아야 한다.

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust


postgreSQL 데이터베이스를 시스템 부팅시 자동시작으로 세팅하고 DB 엔진을 시작한다.

systemctl start postgresql-9.6
systemctl enable postgresql-9.6


다음의 과정을 통해 postgreSQL 에서 쓰기 원하는 데이터베이스를 생성한다.

sudo su - postgres

export PATH=/usr/pgsql-9.6/bin/:$PATH

psql

psql (9.6.9)
Type "help" for help.

postgres=# alter role postgres with encrypted password 'POSTGRESQL 관리자 비밀번호';
postgres=# create user redmine with encrypted password 'redmine 에 사용할 사용자 비밀번호';
postgres=# create database redmine with encoding 'UTF-8' owner redmine;

ruby 의 설치

아래의 과정을 통해 ruby 를 설치한다.

wget https://github.com/feedforce/ruby-rpm/releases/download/2.5.1/ruby-2.5.1-1.el7.centos.x86_64.rpm

rpm -i ruby-2.5.1-1.el7.centos.x86_64.rpm


아래의 명령어로 ruby 를 운영하기 위한 최소한의 환경을 설치한다.

gem install bundler
gem install tzinfo-data
gem install yard


redmine 운영을 위한 계정생성 및 기본값 설정

아래의 명령으로 redmine 운영에 필요한 기본 계정을 생성한다.

adduser --home /home/redmine --shell /bin/bash --comment 'Redmine application' redmine
install -d -m 755 -o redmine -g redmine /home/redmine


redmine 데이터베이스 세팅을 위한 초기 redmine 설정

아래의 과정은 redmine 계정으로 진행해야 함을 주의하도록 한다.

su - redmine
cd /home/redmine
svn co http://svn.redmine.org/redmine/branches/3.4-stable redmine_base


redmine 을 subversion 을 통해 받아왔다면, 기본 데이터베이스를 설정하도록 한다. /home/redmine/redmine_base/config/database.yml 파일의 내용을 다음과 같이 설정한다.

production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine
  password: "pgsql 의 redmine 계정의 비밀번호"


redmine email 알림을 위한 위한 초기 redmine 설정

아래의 과정은 redmine 계정으로 진행해야 함을 주의하도록 한다. /home/redmine/redmine_base/config/configuration.yml 파일의 내용을 다음과 같이 설정한다.

scm_git_command : /usr/bin/git

.....
.....
.....

production:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      enable_starttls_auto: true
      address: "smtp.gmail.com"
      port: 587
      domain: "smtp.gmail.com"
      authentication: :plain
      openssl_verify_mode: 'none'
      user_name: "GMAIL계정이름(@gmail.com포함)"
      password: "GMAIL계정비밀번호"


이 기능을 사용하기 위해서는 미리 gmail 계정을 만들고 imap 세팅을 해두어야 함을 명심하도록 한다. gmail 에서의 세팅은 다음의 경로를 참고한다.


redmine 을 위한 ruby 패키지의 설치

database 설정파일의 저장이 완료되었다면 root 권한으로 아래의 내용을 진행하도록 한다.

su - root

cd /home/redmine/redmine_base
bundle lock --add-platform x86-mingw32 x64-mingw32 x86-mswin32
bundle lock --add-platform java
echo 'gem "thin"' >> /home/redmine/redmine_base/Gemfile
bundle config build.pg --with-pg-config=/usr/pgsql-9.6/bin/pg_config
gem install rugged -v='0.26' -- --use-system-libraries
bundle install

환경(network 속도등)에 따라 시간이 꽤 오래 걸리는 경우도 있기 때문에 끈기를 가지고 기다리도록 한다.

rugged 의 0.26 설치에 문제가 있다면 이 문서의 가장 아래쪽을 참고하도록 한다.


redmine 사용을 위한 database 의 초기설정

아래의 과정을 통해 database 설정을 진행하도록 한다. redmine 계정으로 진행해야 한다는걸 주의하자.

su - redmine

cd /home/redmine/redmine_base
yard config --gem-install-yri
cd /home/redmine/redmine_base/config/

RAILS_ENV=production bundle exec rake generate_secret_token
RAILS_ENV=production bundle exec rake db:migrate

redmine 의 기본 동작확인

아래의 명령으로 redmine 의 기본 동작을 확인한다 ruby 의 rack 패키지를 이용한 방법이다. 기본 port 가 3000 번 이기 때문에, 웹브라우저를 열어 해당되는 내용을 참고하도록 한다.

su - redmine
cd /home/redmine/redmine_base
/usr/bin/ruby bin/rails server -b 0.0.0.0 -e production

web 페이지가 뜬다면 redmine 의 기본 설치는 제대로 되었다고 볼 수 있다.

접속이 안된다면 cetnos 의 방화벽을 확인해 보아야 한다

nginx 와의 연동을 위한 thin 서버의 설치

다음의 명령어로 thin 을 설치한다. 하지만 gem list | grep thin 명령어로 thin 이 이미 설치되어 있다면 설치과정을 진행할 필요는 없다.

gem install thin


redmine 운영을 위한 환경설정

nginx

먼저 다음의 명령으로 proxy.include 파일이 들어갈 디렉토리를 생성한다.

mkdir -p /etc/nginx/sites/


/etc/nginx/sites/proxy.include

        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_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;

        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;


/etc/nginx/conf.d/10_redmine.conf

upstream thin_cluster {
                server unix:/home/redmine/tmp/thin.0.sock fail_timeout=0;
                server unix:/home/redmine/tmp/thin.1.sock fail_timeout=0;
                server unix:/home/redmine/tmp/thin.2.sock fail_timeout=0;
                server unix:/home/redmine/tmp/thin.3.sock fail_timeout=0;
}

server {
                listen 8080;
                server_name 당신의DOMAIN;

                include sites/proxy.include;
                root /home/redmine/redmine_base/public;
                proxy_redirect off;

                location / {
                        try_files $uri @cluster;
                }

                location @cluster {
                        proxy_pass http://thin_cluster;
                }

                location /javascripts {
                        alias /home/redmine/redmine_base/public/javascripts;
                }

                access_log  /var/log/nginx/redmine-proxy-access;
                error_log   /var/log/nginx/redmine-proxy-error;
}


/etc/nginx/nginx.conf

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user redmine redmine;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    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  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }
        
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}

thin 서버의 설정

일단 디렉토리부터 생성하자.

mkdir -p /etc/thin

아래의 설정파일은 redmine 소유로 지정해주는것이 좋다.

/etc/thin/redmine.yml

---
pid: /home/redmine/tmp/pids/thin.pid
group: redmine
wait: 30
timeout: 30
log: /var/log/thin.log
max_conns: 1024
require: []

environment: production
max_persistent_conns: 512
servers: 4
daemonize: true
user: redmine
socket: /home/redmine/tmp/thin.sock
chdir: /home/redmine/redmine_base


소유 권한을 변경해주자.

chown -R redmine.redmine /etc/thin

thin 서버의 시험 구동

다음의 명령어로 thin 서버의 기본 구동을 확인한다.

[redmine@localhost ~/] cd /home/redmine/redmine_base
[redmine@localhost redmine_base]$ thin -c /home/redmine/redmine_base -e production start
Using rack adapter
Thin web server (v1.7.2 codename Bachmanity)
Maximum connections set to 1024
Listening on 0.0.0.0:3000, CTRL+C to stop


서버의 구동을 확인했다면 다음의 명령으로 디렉토리의 퍼미션을 조절해준다

mkdir -p /home/redmine/tmp
chown -R redmine:redmine /home/redmine/tmp
chmod -R 777 /home/redmine/tmp


혹시 옆쪽의 web browser 에서 연결이 안된다면 CentOS 7 의 방화벽 때문일 수 있다. 방화벽에 열어야할 port 를 추가해준다.

firewall-cmd --permanent --zone=public --add-port=3000/tcp
firewall-cmd --permanent --zone=public --add-port=3000/udp


일단 3000 번 port 로 web browser 를 통해서 열린다면, 다음의 명령어로 설정파일을 통해 thin 을 구동한다.

thin -C /etc/thin/redmine.yml start


cat /var/log/thin.0.log 명령으로 thin 서버의 구동을 확인한다. 다음과 같은 내용을 확인할 수 있으면 thin 서버는 성공이다.

Writing PID to /home/redmine/tmp/pids/thin.0.pid
Changing process privilege to redmine:redmine
Using rack adapter
Thin web server (v1.7.2 codename Bachmanity)
Maximum connections set to 1024
Listening on /home/redmine/tmp/thin.0.sock, CTRL+C to stop

thin 및 nginx 서버의 구동 설정

nginx 는 다음의 명령어로 시스템 시작시 및 현 시점 구동을 설정할 수 있다.

systemctl enable nginx
systemctl start nginx


기본적으로 우리는 thin 을 ruby gem 을 통해 설치했기 때문에 systemd 에서 해당되는 스크립트를 사용할 수 없는 상태다. 때문에 일단 thin.service 스크립트를 만들어준다.

[Unit]
Description=A fast and very simple Ruby web server

[Service]
Type             =simple
ExecStart       =/usr/local/bin/thin_start.sh
ExecStop        =/usr/local/bin/thin_stop.sh
PIDFile         = /home/redmine/tmp/pids/thin.0.pid
Restart         =no

[Install]
WantedBy=multi-user.target


위의 thin.service 에서 사용하기 위한 2개의 추가 스크립트 파일을 만들어 준다.

/usr/local/bin/thin_start.sh

#!/bin/sh
/usr/bin/thin start --all /etc/thin


/usr/local/bin/thin_stop.sh

#!/bin/sh
/usr/bin/thin stop --all /etc/thin


만들어진 스크립트에 실행권한을 부여해준다.

chmod +x /usr/local/bin/thin_start.sh
chmod +x /usr/local/bin/thin_stop.sh


스크립트를 다 만들었으면 아래의 과정을 통해 만든 thin.service 파일을 설치한다.

systemctl disable thin.service
rm -rf /usr/lib/systemd/system/thin.service
rm -rf /lib/systemd/system/thin.service
rm -rf /etc/systemd/system/default.target.wants/thin.service
rm -rf /etc/systemd/system/multi-user.target.wants/thin.service

systemctl daemon-reload

cp ./thin.service /lib/systemd/system/
chmod 644 /lib/systemd/system/thin.service
chown root:root /lib/systemd/system/thin.service

mkdir -p /home/redmine/tmp
chown -R redmine.redmine /home/redmine/tmp
chmod -R 777 /home/redmine/tmp

systemctl enable thin.service
systemctl start thin.service

기본 동작의 확인

당신이 세팅한 domain 으로 접속을 해보자. port 번호는 8080 이다

http://당신의DOMAIN:8080


웹 페이지가 뜨면 성공.


추가 세팅

redmine plugin 의 설치

다음의 명령으로 redmine plugin 을 설치한다. 물론 redmine 계정 으로 해야한다.

cd /home/redmine/redmine_base/plugins
git clone https://github.com/jbox-web/redmine_bootstrap_kit.git
cd redmine_bootstrap_kit/
git checkout 0.2.5

cd /home/redmine/redmine_base/plugins
git clone https://github.com/jbox-web/redmine_git_hosting.git
cd redmine_git_hosting/
git checkout 1.2.3


주의해줘야할 부분이 있는데 git plugin 을 위해서 redcarpet 버전이 안맞는 부분이 있다 해당되는 부분을 수정해 주는것이 좋다.

  • /home/redmine/redmine_base/Gemfile
    • Gemfile 에서 redcarpet 지정부분을 3.4.0 에서 3.3.2 버전으로 수정


plugin 파일의 다운로드가 끝났다면, 다시 root 계정 으로 이동하자. 일단 Plugin 의 설치를 위해 cmake 를 설치한다.

yum install cmake -y


cmake 의 설치가 끝났다면 아래의 과정을 진행해서 플러그인에 필요한 ruby 패키지 설정을 진행하자.

cd /home/redmine/redmine_base
bundle install --without development test
bundle exec rake redmine:plugins:migrate RAILS_ENV=production NAME=redmine_git_hosting


ruby bundle 작업이 끝났다면 redmine 계정으로 thin 을 재시작하고(systemctl stop thin; systemctl start thin;) redmine web 페이지의 admin 계정에서 관리 로 들어가서 redmine git hosting 항목이 보이는지 확인하자.


git 연동을 위한 Plugin 의 세팅

git 운영을 위한 계정생성 및 기본값 설정

아래의 명령으로 git 운영에 필요한 기본 계정을 생성한다.

adduser  --home /home/git --shell /bin/bash --comment 'Git Main Account' git
install -d -m 755 -o git -g git /home/git


git 운영을 위한 sshd 설정파일의 변경

git 을 편하게 사용하기 위해서는 sshd 의 설정을 변경해 주는것이 좋다.

  • /etc/ssh/sshd_config
PubkeyAuthentication yes


물론 설정한 다음에는 systemctl 을 이용해서 sshd 를 재시작 해줘야 한다.

systemctl restart sshd


git 운영을 위한 ssh key 파일의 생성

서버에서 다음의 방밥으로 키를 생성한다. key 는 $REDMINE_ACCOUNT_HOME 에서 진행하면 된다.

su - redmine
mkdir ssh_keys
ssh-keygen -N '' -f ssh_keys/redmine_gitolite_admin_id_rsa


생성된 key 는 $REDMINE_ACCOUNT_HOME/ssh_keys 에 저장되게 된다.

해당되는 key 를 미리 git 계정으로 복사해 둔다.

su - root
mkdir /home/git/.ssh
cp /home/redmine/ssh_keys/* /home/git/.ssh/
chown -R git:git /home/git/.ssh


git 운영을 위한 gitolite 의 설치 및 세팅

생성한 git 계정에서 gitolite 를 설치한다.

su - git
mkdir $HOME/bin
git clone git://github.com/sitaramc/gitolite
gitolite/install -to $HOME/bin
cd ~/.ssh
gitolite setup -pk redmine_gitolite_admin_id_rsa.pub


gitorite 의 설정파일을 추가로 설정해준다.

  • /home/git/.gitolite.rc
GIT_CONFIG_KEYS  =>  '.*',
LOCAL_CODE                =>  "$ENV{HOME}/local",


git 계정의 .ssh 에 redmine_gitolite_admin_id_rsa.pub 키가 제대로 복사되었는지를 한번만 더 확인합니다. 위의 gitolite setup -pk redmine_gitolite_admin_id_rsa.pub 과정에서 자동으로 git 계정의 ~/authorized_keys 파일이 생성되기 때문에 이 부분의 세팅은 주의하도록 합니다.

운영을 위한 sudo 의 설정

  • /etc/sudoers.d/redmine
Defaults:redmine !requiretty
redmine ALL=(git) NOPASSWD:ALL


이후에 파일을 chmod 하십시오.

chmod 440 /etc/sudoers.d/redmine


known_hosts 목록에 Gitolite 서버 추가

아래의 명령으로 redmine 계정에 git 관련된 정보를 known_host 로 추가합니다.

su - redmine
redmine$ ssh -i ssh_keys/redmine_gitolite_admin_id_rsa git@localhost info

아래와 비슷한 내용을 볼 수 있어야 합니다.

git repository key authentication


Redmine Git hosting 추가모듈 설치

Redmine Git hosting 추가모듈 설치를 위해 아래의 명령을 실행한다.

su - redmine
cd /home/redmine/redmine_base/
RAILS_ENV=production rake redmine_git_hosting:restore_default_settings
RAILS_ENV=production rake redmine_git_hosting:install_hook_files
RAILS_ENV=production rake redmine_git_hosting:install_hook_parameters
RAILS_ENV=production rake redmine_git_hosting:install_gitolite_hooks


redmine 의 gitorite 관련 설정

아래의 내용은 redmine 의 admin 사용자로 로그인해서 진행해야 합니다.

redmine git hosting plugin

  • 관리 > Redmine Git Hosting > ssh tab
    • 스크린샷처럼 ssh key 에 대한 위치를 정확하게 지정한다.

Redmine Git Hosting > ssh tab


  • 관리 > Redmine Git Hosting > global tab
    • git Author email 을 지정한다.

Redmine Git Hosting > gloabl tab


  • 관리 > Redmine Git Hosting > access tab
    • ssh 접근 domain 과 http 서버 주소를 입력해준다.(port 포함)

Redmine Git Hosting > access tab


  • 관리 > Redmine Git Hosting > cache tab
    • Max chche time 을 disable 시킨다

Redmine Git Hosting > cache tab


  • 관리 > Redmine Git Hosting > redmie tab
    • redmine 에 맞게 값을 설정한다.

Redmine Git Hosting > redmine tab


  • 관리 > Redmine Git Hosting > Config Test tab
    • 전체 설정이 이상 없는지를 점검한다.

Redmine Git Hosting > Config Test tab


  • 관리 > Redmine Git Hosting > Hooks tab
    • Hooks URL 부분을 redmine web 의 URL 로 변경해준다
    • 옆쪽의 Install hooks 부분을 눌러 hook 의 설치를 진행한다.

Redmine Git Hosting > Hooks tab


redmine 저장소 설정

  • 관리 > 설정 > 저장소
    • git plugin 대신 xitolite 플러그인을 선택한다. 다만 옆쪽에 버전 표시가 제대로 되지 않는다면 git 패키지의 설치를 점검해 보아야 한다.

setting > repository


테마설치

테마를 설치하려면 unzip 이 설치되어 있어야 한다.

yum install unzip


minimalplat2 redmine theme

cd /home/redmine/redmine_base/public/themes

wget https://github.com/akabekobeko/redmine-theme-minimalflat2/releases/download/v1.4.0/minimalflat2-1.4.0.zip

unzip minimalflat2-1.4.0.zip


Flatly light redmine theme

cd /home/redmine/redmine_base/public/themes

wget https://github.com/Nitrino/flatly_light_redmine/archive/master.zip

unzip master.zip

마무리 작업

perminssion 때문에 주의해야할 곳이 있습니다 두어곳정도 되는데, 모두 한번에 변경하는 걸로 하겠습니다.

chmod -R 777 /home/redmine/tmp
chmod -R 777 /var/lib/nginx


주의사항

  1. 이유를 정확하게 모르겠는데, thin 또는 rack 의 sock 파일을 /tmp 에 위치시키면 그 무엇도 동작되지 않는다.
  2. 이 문서를 작성하는 시점에서 centos 7 의 libgit2 는 0.26 이기 때문에 rugged 는 0.26 을 사용하도록 한다.
    • 만약 rugged 가 0.26 이 설치되지 않았다면 다음의 명령을 참고한다.
    • gem uninstall rugged
      


참고문서