이번 글에서는 WAS를 생성할 것이다.
WAS의 OS도 Ubuntu 18.04 LTS이며, Redmine과 Redmine을 실행할 Phusion Passenger 설치가 필요하다.
EC2 인스턴스를 생성하는 것 자체는 2022.02.24 - [Redmine on AWS] Bastion Host 생성과 동일하므로 이 글에서는 생략한다.
생성이 완료되었다면, 보안 그룹에 아웃바운드 규칙을 추가한다. 대상은 MySQL에 적용된 SG로 하고, 포트는 3306으로 설정한다.
Redmine은 Ruby를 사용할 수 있는 대부분의 OS 환경에서 사용할 수 있다. 조금 더 정확하게는 Ruby on Rails 프레임워크로 구축된 웹 애플리케이션이다. 그리고 Phusion Passenger는 Ruby on Rails 프레임워크로 구축된 웹 애플리케이션을 실행하는 서버이다. 따라서 일단 Ruby on Rails를 사용할 수 있도록 설정해본다.
Ruby on Rails 설치
패키지 설치이므로 root 권한이 필요하다.
1. 저장소 업데이트 및 설치
apt update
apt upgrade
2. 의존성 패키지 설치
apt install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev software-properties-common libffi-dev
3. rbenv 설치
Ruby를 사용할 사용자 환경에 설정한다.
apt install git-all
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
# 설정 추가
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc # 환경 변수 추가
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
eval "$(rbenv init -)"는 rbenv를 자동으로 로딩하기 위한 설정이다. ~/.bash_profile에 추가해도 된다.
4. ruby-build 설치
ruby-build는 Ruby를 쉽게 설치하기 위한 유틸리티로, 이 글에서는 rbenv 플러그인으로 설치한다.
참고 : https://github.com/rbenv/ruby-build
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
# 환경 변수 추가
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
5. Ruby 설치
# 설치 가능 버전 확인
rbenv install -l
# Ruby 설치 (2.6.6 버전)
rbenv install 2.6.6
rbenv global 2.6.6 # 시스템 전체에 설치
# Ruby 환경 설정
rbenv rehash
6. bundler 설치
gem은 Ruby에서 지원하는 패키지 시스템이다. Python의 pip와 같다.
bundler는 gem을 관리하는 도구이다.
gem install bundler
rbenv rehash
7. Nodejs 설치
Rails가 의존하는 nodejs를 설치한다.
apt install nodejs
8. Rails 설치
gem install rails
rbenv rehash
Phusion Passenger 설치
gem으로 설치한다.
gem install passenger
Redmine 설치
소스 설치로 진행할 것이다.
참고 : https://www.redmine.org/projects/redmine/wiki/redmineinstall
1. 의존성 패키지 설치
apt install build-essential libmysqlclient-dev imagemagick libmagickwand-dev
2. Redmine 설치
꼭 /opt 경로가 아니라 원하는 경로에 설치해도 된다.
# 다운로드
curl -L http://www.redmine.org/releases/redmine-4.1.1.tar.gz -o /tmp/redmine.tar.gz
# 압축해제
tar zxf /tmp/redmine.tar.gz
# 설치 경로 이동
mv /tmp/redmine-4.1.1 /opt/redmine
3. 데이터베이스 설정
# 예시 파일 백업
cp /opt/redmine/config/database.yml.example /opt/redmine/config/database.yml
설정 파일 내용
2022.03.26 - [Redmine on AWS] Database 생성 및 설정 에서 생성한 DB 정보로 설정한다.
production:
adapter: mysql2
database: redmine
host: # rds 엔드포인트
username: redmine
password: # 비밀번호
# Use "utf8" instead of "utfmb4" for MySQL prior to 5.7.7
encoding: utf8mb4
4. 종속성 설치
cd /opt/redmine/
bundle install --without development test postgresql sqlite
5. 세션 저장소 비밀 키 생성
Rails에서 세션 데이터를 저장하는 쿠키를 인코딩하기 위한 임의 키를 생성한다.
bundle exec rake generate_secret_token
6. 데이터베이스 스키마 객체 생성
RAILS_ENV=production bundle exec rake db:migrate
7. 플러그인 설치
bundle exec rake redmine:plugins
8. 기본 구성 데이터 추가
사용 언어를 한국어로 설정한다.
bundle exec rake redmine:load_default_data RAILS_ENV=production REDMINE_LANG=ko
Redmine 실행
1. RAILS_ENV 환경 변수 추가
echo 'export RAILS_ENV=production' >> ~/.bashrc
2. Phusion Passenger 실행
cd /opt/redmine/
passenger start
위 과정은 서버 부팅 시 Redmine이 자동으로 실행되게끔 rc.local에 등록해두는 것이 좋다.
참고 : 2021.12.01 - [Ubuntu 20.04] rc.local 활성화
rc.local 등록 스크립트
#!/bin/bash
export PATH=/home/ubuntu/.rbenv/versions/2.6.6/bin:$PATH
# Change working directory to your webapp.
cd /opt/redmine
# Start Passenger Standalone in daemonized mode. Passenger will be started as
# root when run from this file, but Passengerfile.json tells it to drop its
# privileges to a normal user.
passenger start --daemonize -e production
exit 0
서비스가 정상적으로 동작하는지 확인하기 위해서는 NLB 생성이 필요하다.