기술 가이드

CentOS 8에 Redmine 설치하기

5 min read 서버/DevOps 업데이트됨 21 Oct 2025
CentOS 8에 Redmine 설치 가이드
CentOS 8에 Redmine 설치 가이드

소개

Redmine은 무료 오픈소스 프로젝트 관리 및 이슈 추적 시스템입니다. PostgreSQL·MariaDB를 지원하며 Ruby on Rails 프레임워크 기반으로 동작합니다. 플러그인으로 기능을 확장할 수 있고 여러 프로젝트, 위키, 포럼을 운영할 수 있습니다. 이 문서는 CentOS 8 환경에 Redmine을 설치하고 Nginx를 리버스 프록시로 구성해 운영하는 방법을 설명합니다.

중요: 운영 환경에서는 WEBrick(개발용 내장 서버)이 아닌 Passenger 혹은 Puma 같은 앱 서버를 사용하고 SSL을 적용하세요.

대상 독자와 요구사항

  • CentOS 8이 설치된 서버
  • 루트(root) 접근 권한(또는 sudo 권한)
  • 기본적인 리눅스 명령어와 텍스트 편집기 사용 능력

주요 단계 개요

  1. 의존성 설치
  2. MariaDB 설치 및 Redmine 전용 DB/계정 생성
  3. Ruby와 Passenger 설치
  4. Redmine 설치 및 설정
  5. systemd 서비스 생성
  6. Nginx를 리버스 프록시로 구성
  7. 접속 확인 및 운영 고려사항

설치 전 준비

중요: CentOS 8은 일부 저장소와 패키지의 지원 기간이 제한적일 수 있습니다. 장기 운영 환경에서는 OS 버전과 패키지 지원 주기를 확인하세요.

권장 운영 구조(간단한 참고):

  • 애플리케이션: Redmine (Ruby on Rails)
  • 데이터베이스: MariaDB (로컬 혹은 전용 DB 서버)
  • 리버스 프록시: Nginx
  • 앱 서버: Passenger 또는 Puma

필수 패키지 설치

다음 명령어로 빌드 도구와 필요한 라이브러리를 설치합니다:

dnf group install "Development Tools"
dnf install zlib-devel curl-devel openssl-devel -y

설치가 완료되면 다음 단계로 진행합니다.

MariaDB 설치 및 구성

Redmine은 MariaDB/MySQL을 데이터베이스로 사용하므로 MariaDB 서버를 설치하고 Redmine 전용 데이터베이스와 사용자를 만듭니다.

dnf install mariadb-server mariadb-devel -y

서비스 시작 및 부팅 시 자동 시작 설정:

systemctl start mariadb
systemctl enable mariadb

MariaDB 셸에 접속하여 데이터베이스와 사용자 생성:

mysql

쉘에서 다음을 실행하세요(비밀번호는 안전한 값으로 변경하세요):

MariaDB [(none)]> CREATE DATABASE redmine CHARACTER SET utf8mb4;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost' IDENTIFIED BY 'password';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> EXIT;

중요: 운영 환경에서는 ‘password’ 대신 강력한 비밀번호를 사용하고, 필요 시 원격 접속을 제한하세요.

Ruby와 Passenger 설치

EPEL 저장소를 활성화하고 Passenger와 Ruby 관련 패키지를 설치합니다.

dnf install epel-release -y
dnf config-manager --enable epel -y
dnf install mod_passenger passenger passenger-devel ruby ruby-devel -y

설치 후 버전과 모듈 상태를 확인하세요. Passenger는 Apache/Nginx와 통합해 사용하는 것이 일반적입니다. (이 튜토리얼은 Nginx 리버스 프록시를 사용하므로 Passenger 설정은 추후 필요에 따라 조정하세요.)

Redmine 설치

Redmine 전용 시스템 계정을 만들고 최신 릴리스 아카이브를 다운로드합니다. 아래 예시는 Redmine 4.2.1을 사용합니다. 실제 최신 버전은 공식 사이트에서 확인하세요.

useradd -m -U -r -d /opt/redmine redmine
su - redmine
wget --no-check-certificate https://www.redmine.org/releases/redmine-4.2.1.zip

다운로드가 완료되면 압축을 풀고 디렉터리 이름을 정리합니다:

unzip redmine-4.2.1.zip
mv redmine-4.2.1 redmine
cd redmine
cp config/database.yml.example config/database.yml

config/database.yml 파일을 편집해 데이터베이스 접속 정보를 설정합니다:

nano config/database.yml

다음 값이 production 섹션에 반영되어야 합니다:

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: "password"
  encoding: utf8mb4

저장 후 Bundler와 의존성 설치:

gem install bundler --no-rdoc --no-ri
bundle install --without development test postgresql sqlite --path vendor/bundle

시크릿 토큰 생성 및 DB 마이그레이션을 실행합니다:

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

애플리케이션을 테스트로 실행하려면(WEBrick 사용, 개발/검증 용도):

bundle exec rails server webrick -e production

예상 출력(생략 가능):

/usr/bin/ruby: warning: shebang line ending with \r may cause problems
=> Booting WEBrick
=> Rails 5.2.5 application starting in production on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
[2021-06-24 00:40:15] INFO  WEBrick 1.4.2
[2021-06-24 00:40:15] INFO  ruby 2.5.5 (2019-03-15) [x86_64-linux]
[2021-06-24 00:40:15] INFO  WEBrick::HTTPServer#start: pid=43076 port=3000

CTRL+C로 중지한 뒤 redmine 사용자에서 나옵니다:

exit

중요: WEBrick은 프로덕션용으로 권장되지 않습니다. 안정성과 성능을 위해 Passenger 또는 Puma로 전환하세요.

systemd 서비스 파일 생성

Redmine을 systemd 서비스로 등록하면 관리가 편리합니다. 다음 파일을 생성합니다:

nano /usr/lib/systemd/system/redmine.service

파일에 다음 내용을 추가하세요:

[Unit]
Description=Redmine server
After=syslog.target
After=network.target

[Service]
Type=simple
User=redmine
Group=redmine
ExecStart=/bin/ruby /opt/redmine/redmine/bin/rails server webrick -e production

# Give a reasonable amount of time for the server to start up/shut down
TimeoutSec=300

[Install]
WantedBy=multi-user.target

저장 후 systemd 데몬을 다시 로드하고 서비스 시작 및 활성화를 수행합니다:

systemctl daemon-reload
systemctl start redmine
systemctl enable redmine
systemctl status redmine

포트 3000에서 리스닝 중인지 확인합니다:

ss -antpl | grep 3000

서비스 관리를 위한 팁:

  • 로그는 journalctl -u redmine로 확인합니다.
  • 서비스 파일의 ExecStart는 운영 환경에 맞춰 Passenger/Puma 실행 명령으로 교체하세요.

Nginx를 리버스 프록시로 구성

Nginx를 설치하고 Redmine을 프록시합니다:

dnf install nginx -y

가상 호스트 구성 파일 생성:

nano /etc/nginx/conf.d/redmine.conf

다음 내용을 추가하세요(도메인 이름과 로그 경로를 환경에 맞게 변경):

upstream backend {
  server 127.0.0.1:3000;
}

server {
    listen 80;
    server_name redmine.example.com;
    access_log /var/log/nginx/redmine.example.com-access.log;
    error_log /var/log/nginx/redmine.example.com-error.log;

    location / {
        proxy_pass http://backend/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forward-Proto http;
        proxy_set_header X-Nginx-Proxy true;
        proxy_redirect off;
    }
}

구성 문법 검사 후 Nginx 시작 및 활성화:

nginx -t
systemctl start nginx
systemctl enable nginx
systemctl status nginx

브라우저에서 http://redmine.example.com 으로 접속하면 Redmine 웹 인터페이스가 나타납니다.

Redmine 초기 화면

로그인 예시 화면:

Redmine 로그인 화면

초기 관리자 계정은 기본적으로 다음과 같습니다. 설치 직후 보안을 위해 즉시 비밀번호를 변경하세요.

  • 사용자: admin
  • 비밀번호: admin

로그인 후 비밀번호 변경 화면이 표시됩니다:

관리자 비밀번호 변경 화면

운영 환경 권장사항

중요: 아래 권장사항은 서비스의 가용성, 보안, 유지보수성을 높입니다.

  • 앱 서버: Passenger(Nginx 모듈) 또는 Puma 사용 권장. WEBrick은 개발용입니다.
  • SSL 적용: Let’s Encrypt로 HTTPS를 구성하세요.
  • 방화벽: 외부에서 포트 3000이 직접 노출되지 않도록 하고 Nginx(80/443)만 허용하세요.
  • SELinux: SELinux가 Enforcing인 경우 필요한 컨텍스트와 포트를 허용해야 합니다.
  • 백업: MariaDB 데이터베이스 백업 및 Redmine 파일(첨부 파일·config·파일 스토리지) 정기 백업을 설정하세요.
  • 모니터링: 서비스 상태, 메모리·CPU 사용량, DB 연결 수를 모니터링하세요.

보안 및 하드닝 체크리스트

  • 강력한 DB 비밀번호 사용
  • 데이터베이스 접근을 로컬(또는 제한된 네트워크)으로 제한
  • HTTPS 강제 적용(리디렉션 설정)
  • Redmine 및 플러그인 정기 업데이트
  • 불필요한 포트 차단
  • 정기적인 백업과 복원 테스트

문제 해결 요령

  • 데이터베이스 연결 오류: config/database.yml 설정과 MariaDB에서 생성한 사용자/비밀번호를 확인하세요.
  • gem 설치 실패: 빌드 도구(Development Tools)와 ruby-devel 패키지가 설치되어 있는지 확인하세요.
  • 포트 3000 미리스닝: systemctl status redmine 및 journalctl -u redmine 로 로그를 확인하세요.
  • Nginx 502/504 오류: backend(127.0.0.1:3000)가 실행 중인지 확인하고 프록시 헤더를 검토하세요.
  • SELinux 관련 문제: audit.log를 확인하고 필요한 boolean/포트를 허용하세요.

대안 아키텍처 및 확장 옵션

  • 데이터베이스를 별도 관리형 DB 서버로 분리
  • 앱 서버를 컨테이너화(Docker/Kubernetes)해 배포 자동화
  • Passenger 대신 Puma + systemd 소켓 활성화로 프로세스 관리
  • 파일 첨부를 별도 오브젝트 스토리지(S3 호환)로 분리

역할 기반 체크리스트

관리자:

  • Redmine 설치 검증
  • 관리자 암호 변경
  • SSL 및 도메인 DNS 구성

시스템 엔지니어:

  • systemd·Nginx 구성 및 서비스 모니터링 설정
  • 백업 스케줄 및 복원 절차 문서화

데이터베이스 관리자:

  • DB 사용자 권한 최소화
  • 정기 백업·복원 테스트

개발/운영(DevOps):

  • 로그와 모니터링 통합
  • 배포 파이프라인 및 롤백 계획

간단 복원 및 백업 절차

  • DB 백업: mysqldump redmine > redmine-$(date +%F).sql
  • 파일 백업: /opt/redmine/redmine/files 와 config 디렉터리를 tar로 보관
  • 복원: 데이터베이스 import 후 파일 디렉터리 복원

1줄 용어집

  • Redmine: 오픈소스 프로젝트 관리 도구
  • Passenger: 웹 애플리케이션 서버 모듈
  • WEBrick: Ruby의 기본 내장 개발용 서버
  • Bundler: Ruby gem 의존성 관리 도구

결론

CentOS 8에 Redmine을 설치하고 Nginx를 리버스 프록시로 구성하는 기본 절차를 완료했습니다. 운영 환경에서는 앱 서버 교체, HTTPS 적용, 백업·모니터링 구성, 권한 최소화 등 추가 작업을 권장합니다.

요약과 다음 단계:

  • 데이터베이스·파일 백업을 설정하세요.
  • Passenger 또는 Puma로 앱 서버 전환을 고려하세요.
  • HTTPS(SSL)로 보안을 강화하세요.

감사합니다.

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

Debian 11에 Podman 설치 및 사용하기
컨테이너

Debian 11에 Podman 설치 및 사용하기

Apt-Pinning 간단 소개 — Debian 패키지 우선순위 설정
시스템 관리

Apt-Pinning 간단 소개 — Debian 패키지 우선순위 설정

OptiScaler로 FSR 4 주입: 설치·설정·문제해결 가이드
그래픽 가이드

OptiScaler로 FSR 4 주입: 설치·설정·문제해결 가이드

Debian Etch에 Dansguardian+Squid(NTLM) 구성
네트워크

Debian Etch에 Dansguardian+Squid(NTLM) 구성

안드로이드 SD카드 설치 오류(Error -18) 완전 해결
안드로이드 오류

안드로이드 SD카드 설치 오류(Error -18) 완전 해결

KNetAttach로 원격 네트워크 폴더 연결하기
네트워킹

KNetAttach로 원격 네트워크 폴더 연결하기