Gentoo redmine git3

From 흡혈양파의 인터넷工房
Revision as of 08:27, 22 June 2018 by Onionmixer (talk | contribs) (→‎redmine 의 기본 동작확인)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
CentOS 7 에서 nginx + puma + 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
  • puma web app server
  • email 알림에 사용할 gmail 계정

directory location

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

account info

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


소프트웨어 설치

OS repository 제공 프로그램의 설치

postgreSQL 9.6 의 설치를 위해 외부 repository 를 세팅한다.

yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
yum install epel-release
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 -y


postgreSQL 데이터베이스를 초기화한다.

/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 /opt/redmine --shell /bin/bash --comment 'Redmine application' redmine
install -d -m 755 -o redmine -g redmine /opt/redmine


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

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

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


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

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


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

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

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


scm_git_command : /usr/bin/git


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


redmine 을 위한 ruby 패키지의 설치

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

su - root

cd /opt/redmine/redmine_base
bundle lock --add-platform x86-mingw32 x64-mingw32 x86-mswin32
bundle lock --add-platform java
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 /opt/redmine/redmine_base
yard config --gem-install-yri
cd /opt/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 /opt/redmine/redmine_base
/usr/bin/ruby bin/rails server -b 0.0.0.0 -e production

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

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

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

이유는 잘 모르겠지만 gem 을 통해 설치한 thin 이 올바르게 동작하지 않았다. 때문에 이 문서에서는 puma 라는 대안을 사용하기로 했다. 다음의 명령어로 puma 를 설치할 수 있다.

gem install puma


redmine 운영을 위한 환경설정

nginx

/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 {
# puma server setting
                server unix:///var/run/my_app.sock;
}

server {
                listen 8080;
                server_name 당신의DOMAIN;

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

                # Send sensitive stuff via https
                #rewrite ^/login(.*) http://developer.steeloz.net$request_uri permanent;
                #rewrite ^/my/account(.*) http://developer.steeloz.net$request_uri permanent;
                #rewrite ^/my/password(.*) http://developer.steeloz.net$request_uri permanent;
                #rewrite ^/admin(.*) http://developer.steeloz.net$request_uri permanent;

                location / {
                        try_files $uri/index.html $uri.html $uri @cluster;
                }

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

                location /javascripts {
                        alias /opt/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 nobody nobody;
worker_processes 1;
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;
    use epoll;
}

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;

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

        client_header_timeout 100m;
        client_body_timeout 100m;
        client_max_body_size 4096m;
        send_timeout 100m;

        connection_pool_size 4096;
        client_header_buffer_size 4096k;
        client_body_buffer_size    128k;
        large_client_header_buffers 4 8k;
        request_pool_size 256k;
        types_hash_max_size 2048;

        gzip on;
        gzip_min_length 1100;
        gzip_buffers 4 8k;
        gzip_types text/plain;

        output_buffers 1 32k;
        postpone_output 1460;

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;

        keepalive_timeout 512;

        ignore_invalid_headers on;

        index index.html;

    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 {
        }
    }

    include /etc/nginx/conf.d/10_redmine.conf;
}


puma 서버를 위한 간단한 스크립트

아래의 스크립트는 반드시 redmine 권한으로 실행해주는것이 좋다.

/opt/redmine/puma_start.sh

#!/bin/sh
cd redmine_base
bundle exec puma -e production -d -b unix:///var/run/my_app.sock


기본 동작의 확인

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

http://당신의DOMAIN:8080


웹 페이지가 뜨면 성공.


추가 세팅

redmine plugin 의 설치

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

cd /opt/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 /opt/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/Gemfile
    • Gemfile 에서 redcarpet 지정부분을 3.4.0 에서 3.3.2 버전으로 수정


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

yum install cmake -y


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

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


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


git 연동을 위한 Plugin 의 세팅

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

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

adduser  --home /opt/git --shell /bin/bash --comment 'Git Main Account' git
install -d -m 755 -o git -g git /opt/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 /opt/git/.ssh
cp /opt/redmine/ssh_keys/* /opt/git/.ssh/
chown -R git:git /opt/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 의 설정파일을 추가로 설정해준다.

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


git 계정의 .ssh 에 redmine_gitolite_admin_id_rsa 키가 제대로 복사되었는지를 확인하고, 이후의 redmine 인증을 위해 이를 복사해 줍니다.

su - git
cd ~/.ssh
cp redmine_gitolite_admin_id_rsa.pub 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


known_hosts 목록에 Gitolite 서버 추가

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

su - redmine
cd /opt/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 plugin 대신 xitolite 플러그인을 선택한다. 다만 옆쪽에 버전 표시가 제대로 되지 않는다면 git 패키지의 설치를 점검해 보아야 한다.

setting > repository


주의사항

  1. 이유를 정확하게 모르겠는데, thin 또는 rack 의 sock 파일을 /tmp 에 위치시키면 그 무엇도 동작되지 않는다.
  2. 이 문서를 작성하는 시점에서 centos 7 의 libgit2 는 0.26 이기 때문에 rugged 는 0.26 을 사용하도록 한다.
    • 만약 rugged 가 0.26 이 설치되지 않았다면 다음의 명령을 참고한다.
    • gem uninstall rugged
      
    • 혹시 puma 등의 동작에서 rugged 가 문제가 된다면 $REDMINE_BASE 디렉토리의 Gemfile.lock 파일 안에서 버전에 관련된 내용을 수정해 주도록 하자.


참고문서