ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AWS EC2 Instance로 Redmine 5.1.0 구축(Amazonlinux 2023)
    Redmine 2023. 12. 12. 16:14
    AWS EC2 Instance로 Redmine 구축(Amazonlinux 2023)

    • 레드마인(Redmine)이란?

     

    레드마인(Redmine)은 웹 기반의 프로젝트 관리와 버그 추적 기능을 제공하는 오픈 소스 프로그램입니다.  소프트웨어 개발 및 여러 협업 작업을 관리하는 데 사용됩니다. Ruby on Rails에 기반하여 작성되었으며, 멀티플랫폼을 지원할 뿐 아니라 여러 가지 종류의 데이터베이스 및 34개의 언어를 지원합니다.

     

    • 주요 기능

     

    화면기반의 관리에 도움이 되도록 달력과 간트 차트를 제공합니다. 일정관리 및 통합된 프로젝트관리가 가능합니다. 이슈추적 및 여러 가지 형상관리 기능을 제공합니다.

     


     

    #  TL;DR

     

    이번 튜토리얼에서는 AWS EC2로 Redmine 서버를 간단히 구성하고 구축합니다.

    VPC에 Public Subnet 1개만 사용하며, EC2 Instance에 Apache, Redmine과 별도로 RDS를 구성하지 않고  Mysql/MariaDB를 인스톨하는 방법을 소개합니다.

    Redmine 서버 액세스 시 default port 3000번을 그대로 사용하며, SSH Client을 통한 EC2 Instance 연결을 위해 port 22번을 허용하는 보안그룹을 구성합니다.

    OS는 Amazon Linux 2023을 사용하며, EC2 Instance는 기존에 초기설정을 완료하였던 AMI를 적용한 뒤 시작합니다.

    서버 구축 시 Redmine 5.1.0를 사용하며, Apache 2.4.58, Ruby 3.2.2, Passenger 6.0.19, Mysql/MariaDB 15.1/10.5.20을 사용합니다.

    Redmine 서버 구성 및 구축은 아래와 같은 순서로 진행합니다.

    •  Redmine 서버 구성 및 구축순서

     

    1.  Redmine 시스템 사용자 생성
    2.  Apache 서버 설치
    3.  Redmine MariaDB 데이터베이스 설치 및 mysql 사용자 생성
    4.  Redmine 다운로드와 Ruby 및 필수 Package(dependencies) 설치
    5.  Redmine 데이터 베이스 연결 설정 구성
    6.  Ruby Package(dependencies) 설치
    7.  세선 토큰과 스키마 객체 생성
    8.  파일 시스템 권한 구성
    9.  Redmine 설치 테스트 
    10.  Apache Passenger module 설치와 Redmine Apache 구성파일 생성 및 수정
    11.  Apache Passenger module 설치 후 포트 확인 및 브라우저 액세스

     


    #  개요

     

    • AWS EC2 Instance에 Redmine을 설치하여 서버를 구성, 구축하는 과정을 설명합니다. 데이터베이스로 MariaDB를 사용하고, Ruby on Rails 및 Passenger와 Apache를 설치하여 사용합니다. 

     

    이름  버전  설치
    Redmine 5.1.0 download
    Apache 2.4.58 dnf
    Ruby 3.2.2 dnf
    Passenger 6.0.19 gem
    Mysql/MariaDB 15.1/10.5.20 dnf

     

    * 레드마인 설치 시 버전정보 참고 : https://www.redmine.org/projects/redmine/wiki/RedmineInstall

     

    RedmineInstall - Redmine

    Installing Redmine¶ This is the installation documentation for Redmine 4.0 and higher. You can still read the document for older versions: 3.x , 1.4.x - 2.6.x, 1.3.x Requirements¶ Operating system¶ Redmine should run on most Unix, Linux, macOS and Windo

    www.redmine.org

     

     

     


     

    # 인프라 구성

     

     

    • VPC와 IPv4를 할당하여 Public Subnet을 생성합니다.
    • Internet Gateway를 생성하고, Public Subnet과 연결합니다.
    • Route tables Routes 대상에 0.0.0.0/0을 추가하고 Internet Gateway를 연결합니다.
    • EC2 Instance 시작하여 생성한 VPC, Public Subnet과 연결하고, key pair를 생성한 뒤 다운로드를 진행합니다.
    • Security Groups는 Port 22는 MyIP(현재본인아이피)로 3000은 0.0.0.0/0으로 액세스를 허용하도록 구성합니다.
    • EC2 Instance에 연결하고 단계적으로 Redmine 설치를 진행합니다.

     

     


     

    #  Redmine 시스템 사용자 생성

     

    $ sudo su
    $ useradd -r -m -d /opt/redmine redmine 
    
    # 시스템 사용자 생성확인
    $ cat /etc/passwd | grep "redmine"
    • Redmine 설치 시에는 시스템 사용자 생성이 필요합니다. command로는 useradd를 사용합니다. 기본적으로 useradd -r command 만으로 사용자 생성이 가능하지만 별도의 디렉터리에 Redmine을 설치하고 홈 디렉터리로 지정하기기 위해 추가적으로 -m과 -d  옵션을 함께 사용해야 합니다. 시스템 사용자 생성에 필요한 모든 절차가 끝난 후 생성 여부를 재확인합니다.

     

     


    #  Apache 서버 설치

     

    $ sudo su
    $ dnf isntall httpd 
    
    # Apache 버전확인
    $ httpd -v
    
    # 시스템 시작 시 자동기동 설정
    $ systemctl enable httpd --now
    
    # redmine 그룹에 apache 사용자 추가
    usermod -aG redmine apache
    
    # 그룹추가 여부 확인
    $ cat /etc/group | grep "redmine"
    • 우선 Apache를 설치합니다. 설치완료되면 버전을 확인하여 설치가 제대로 되었는지 확인합니다. 또한 시스템 시작 시 자동적으로 기동 될 수 있도록 설정합니다. redmine 그룹에 apache 사용자를 추가합니다.

     

     


    # Redmine MariaDB 데이터베이스 설치 및 Mysql 사용자 생성

     

    $ sudo su
    
    # mariadb-server 설치 
    $ dnf install mariadb-server
    
    # mariadb 자동기동설정
    $ systemctl enable --now mariadb
    • Redmine 데이터베이스 생성을 위해 MariaDB를 설치합니다. Redmine은 PostgerSQL, MS-SAL, SQLite 여러 데이터베이스 백엔드를 지원하기에 선택적으로 진행하는 것이 가능합니다. 설치 후 시스템 부팅 시에는 MariaDB 서버를 시작하고 활성화할 수 있도록 command를 적용합니다.

     

    # 데이터베이스 보완관련 설정
    $ mysql_secure_installation
    • 초기 MariaDB 데이터베이스 보안 스크립트를 실행하여 적절하게 보안을 설정하는 것이 필요합니다. 기본 데이터 베이스, 테스트 테이블을 제거해야 합니다. 또한 원격 루트 로그인을 비활성화합니다.

     

    # root 암호로 mysql 사용자 접속
    $ mysql -u root -p
    
    # 데이터베이스 생성
    mysql> create database redminedb;
    
    # 사용자 생성
    mysql> grant all on redminedb.* to redmineadmin@localhost identified by 'my-pwd';
    
    # 설정사항 적용
    mysql> flush privileges;
    mysql> quit
    • 데이터베이스 백엔드가 설치된 후에는 mysql 사용자로 접속합니다. 접속 후 Redmine용 데이터베이스 및 사용자를 생성한 뒤 데이터베이스 이름을 지정해야 합니다. 생성된 데이터베이스에 대한 모든 권한은 사용자에게 부여하고, 이에 따라 사용자와 비밀번호를 변경합니다. 모든 설정사항이 적용된 후 권한 테이블은 다시 로드하고, 종료합니다.

     


    # Redmine 다운로드와 Ruby 및 필수 Package(dependencies) 설치

     

    $ sudo su
    $ dnf install ruby-devel \
        rpm-build \
        wget \
        libxml2-devel \
        vim \
        make \
        openssl-devel \
        automake \
        libtool \
        ImageMagick \
        ImageMagick-devel \
        mariadb-devel \
        gcc \
        httpd-devel \
        libcurl-devel \
        gcc-c++ -y
    
    # ruby 버전확인
    $ ruby -v
    • Redmine을 다운로드하게 될 시 빌드에 필요한 다양한 Package(dependencies)들을 설치하는 게 필수입니다. 자동으로 설치되는 Ruby interpreter도 필요합니다. Redmine 버전마다 Ruby 지원 버전이 다르기에 Ruby의 원활한 작동을 위해선 버전을 확인해야 합니다.

     

    $ sudo su
    $ VER=5.1.0
    
    # Redmine 5.1.0 다운로드 및 설치폴더 생성
    $ curl -s https://www.redmine.org/releases/redmine-$VER.tar.gz | \
    sudo -u redmine tar xz -C /opt/redmine/ --strip-components=1
    
    # Redmine 5.1.0 여러 구성파일 확인
    $ ls -alh /opt/redmine
    • Ruby 버전 지원 여부를 확인한 뒤 공식 페이지로 이동하여 Redmine 5.1.0 압축 파일을 다운로드합니다. 압축해제는 redmine설치를 위해 생성한 /opt/redmine에서 진행합니다. 모든 과정이 끝났을 경우, 여러 구성파일들을 /opt/redmine/ 경로에서 확인할 수 있어야 합니다.

     

     


    #  Redmine 데이터베이스 연결 설정 구성

     

    $ sudo su
    $ su - redmine
    
    # 여러 구성파일 변경 및 복사
    $ cp config/configuration.yml{.example,}
    $ cp public/dispatch.fcgi{.example,}
    $ cp config/database.yml{.example,}
    
    # 데이터베이스 구성파일 수정
    $ vi config/database.yml
    • Redmine 데이터베이스는 연결 설정 구성을 적절하게 변경하거나 수정해야 합니다. 앞선 과정을 진행하기 위해선 Redmine의 사용자 계정으로 전환하는 것이 필요합니다. 순차적으로 샘플 Redmine 구성파일, public 디렉터리 내에 있는 샘플 디스패치 CGI 구성파일, 샘플 데이터베이스 구성파일의 이름을 변경하고 복사합니다. 샘플 데이터 베이스의 경우, 별도로 데이터베이스 이름, 사용자 및 비밀번호를 앞서 설정한 대로 동일하게 수정한 뒤 저장합니다.

     

    # database.yml 파일구성 및 변경방법
    production:
      adapter: mysql2
      database: redminedb # 작성한 database명으로 변경
      host: localhost
      username: redmineadmin # 작성한 mysql 사용자로 변경
      password: "my_pwd"     # 작성한 mysql 사용자의 패스워드로 변경
      # Use "utf8" instead of "utfmb4" for MySQL prior to 5.7.7
      encoding: utf8mb4
    • database.yml 파일 수정 시 다음 구문을 찾아야 합니다. database, username, password는 데이터베이스 및 사용자 생성에서 입력한 대로 변경합니다.

     


    # Ruby Package(dependencies) 설치

     

    $ sudo su
    $ su - redmine
    
    # bundler 설치
    $ gem install bundler
    
    # bundler 구성 옵션 설정
    $ bundle config set --local path 'vendor/bundle'
    $ bundle config set --local without 'development test'
    
    # dependencies 설치 
    $ bundle install
    • Ruby의 경우에는 여러 Package(dependencies)를 설치하는 것이 필수입니다. Redmine 사용자 계정으로 현재 로그인이 되어 있지 않다면 Redmine 사용자 계정으로 전환하여 진행해야 합니다. 우선적으로 gem Package(dependencies)를 관리하기 위한 bundler를 설치합니다. 완료 후에는 필수 gem Package(dependencies)를 설치하는 것이 가능합니다. 

     

     

     


    # 세션 토큰과 스키마 객체 생성

     

     $ bundle exec rake generate_secret_token
    • 세션 데이터를 저장할 때에는 쿠키의 조정을 방지하는 것이 필요합니다. 이를 위해선 Rails가 쿠키를 인코딩하는 데 사용하는 임의의 비밀 키를 생성해야 합니다.

     

    # 데이터베이스 구조를 생성
    $ RAILS_ENV=production bundle exec rake db:migrate
    
    # 기본 구성 데이터 투입
    $ RAILS_ENV=production REDMINE_LANG=en bundle exec rake redmine:load_default_data
    •  스키마 객체 생성 시 Rails 데이터베이스 구조를 생성하기 위해 데이터베이스 마이그레이션을 진행해야 합니다. 완료 후 기본 구성 데이터를 데이터베이스에 투입합니다.

     


     

    #  파일 시스템 권한 구성

     

    $ for i in tmp tmp/pdf public/plugin_assets; do [ -d $i ] || mkdir -p $i; done
    
    # 소유자와 그룹 변경
    $ chown -R redmine:redmine files log tmp public/plugin_assets
    
    # user 외 755 권한부여
    $ chmod -R 755 /opt/redmine/
    •  Redmine 디렉터리 /opt/redmine에서 tmp, tmp/pdf, public and public/plugin_assets, log 디렉터리가 생성되어 있는지 확인하는 것이 필요합니다. 존재하지 않는 파일이 있는 경우에는 생성한 뒤, 소유자와 그룹, 권한 확인하여 Redmine을 실행하는 데 사용된 사용자로 모두 변경합니다. 

     

     

     


     

    #  Redmine 설치 테스트 

     

    $ sudo su
    $ su - redmine
    
    # Gemfile에 webric 추가
    $ echo 'gem "webrick"' >> Gemfile
    $ bundle install
    
    # Redmine 서버 설치 테스트
    $ bundle exec rails server -u webrick -e production
    •  Redmine 설정이 완료된 뒤에는 WEBrick을 사용하여 Redmine을 테스트하는 것이 가능합니다. 우선 Redmine 사용자로 변경한 후, Gemfile에 webrick을 추가합니다. Webrick gem을 설치하고 설치 테스트를 실시합니다. 샘플 출력 후에는 http://Server-IP:3000/ 해당 주소를 사용하여 Redmine에 액세스 하는 것이 가능합니다.

     

    # 샘플 출력
    => Booting WEBrick
    => Rails 6.1.7.6 application starting in production http://0.0.0.0:3000
    => Run `bin/rails server --help` for more startup options
    [2023-11-13 08:03:05] INFO  WEBrick 1.8.1
    [2023-11-13 08:03:05] INFO  ruby 3.2.2 (2023-03-30) [x86_64-linux]
    [2023-11-13 08:03:05] INFO  WEBrick::HTTPServer#start: pid=4022 port=3000
    •  WEBrick을 통해 웹서버 Instance를 실행하기 위해서는 샘플 출력 내용을 확인하는 것이 중요합니다.

     


    # Apache Passenger module 설치와 Redmine Apache 구성파일 생성 및 수정

     

    $ sudo su
    $ su - redmine
    $ gem install passenger --no-document
    
    # passenger-install-apache2-module 경우, 설치 가이드를 따라 Phusion Passenger를 설치
    $ passenger-install-apache2-module
    • Passenger module 설치는 redmine 사용자 계정으로 진행해야 합니다. 설치 후에는 그에 따라 버전을 교체하는 것이  필요합니다. 설치 가이드에 따라 진행해야 하며, 언어의 경우에는 Ruby를 선택합니다. 
    • passenger-install-apache2-module 완료 후에는 모듈 구성방법이 제공되므로 해당 내용대로 redmine.conf 파일을 수정해야 합니다.

     

    $ sudo su
    $ vi /etc/httpd/conf.d/redmine.conf
    • apache 설정파일을 수정합니다.

     

    # redmine.conf 파일구성 
    <IfModule mod_passenger.c>
      PassengerRoot /opt/redmine/.local/share/gem/ruby/gems/passenger-6.0.18
      PassengerDefaultRuby /usr/bin/ruby
    </IfModule>
    <VirtualHost *:3000>
        ServerName {server-IP-or-Hostname}
        DocumentRoot "/opt/redmine/public" 
    
        CustomLog logs/redmine_access.log combined
        ErrorLog logs/redmine_error_log
        LogLevel warn
    
        <Directory "/opt/redmine/public">
            Options Indexes ExecCGI FollowSymLinks
            Require all granted
            AllowOverride all
        </Directory>
    </VirtualHost>
    • <IfModule mod_passenger.c>.. </IfModule> 부분은 passenger-install-apache2-module 완료 후 표시되는 내용대로 작성해 주는 것이 중요합니다. 

     

    # 구성구문 재확인 
    $ passenger-install-apache2-module --snippet
    
    # Syntax 확인
    $ httpd -t
    
    $ systemctl restart httpd.service
    • 구성 구문이 재확인하려면 passenger-install-apache2-module --snippet를 사용합니다. redmine.conf 파일을 수정하고 저장한 뒤에는 httpd -t로 에러가 없는지 확인합니다. redmine.conf를 수정하였으므로 Apache를 재기동해야 합니다.

    #  Apache Passenger module 설치 후 포트 확인 및 브라우저 액세스

     

    $ sudo su
    $ su - redmine
    
    # 포트확인
    $ ss -altnp
    •  Redmine 서버에 액세스 하기에 앞서 redmine 사용자 계정으로 전환합니다. command를 통해 포트  3000에 수신 대기 중인 항목이 있는지 확인해야 합니다. 브라우저를 통해 Redmine 액세스 시에는  http://server-IP-or-Hostname:3000 주소를 입력하여 Redmine이 표시되는지 확인합니다.

     

    반응형

    댓글

Designed by Tistory.