저는 지금 Redmine 7 버전을 개인 NAS에 구축해서 사용 중입니다.
이전에 발행한 [Redmine] 레드마인 7.0.0 정식 출시! 실무자가 꼽은 주요 변화 6가지 (feat. Office 뷰어 & 표 붙여넣기) 글에서 이야기했던 새 기능들을 직접 테스트해보고 싶은 생각도 있었고, 최근 티스토리에서 운영 중인 담덕이의 탐방일지 블로그 관련 협업 건이 늘어나면서 메일로만 진행 상황을 관리하기가 벅차더군요. 기록을 체계적으로 남기고 업무 편의성을 높이기 위해 개인 프로젝트 관리용으로 설치했는데, 수년째 다뤄온 도구임에도 메이저 버전이 올라가니 또 새롭습니다.
이번 포스트에서는 사소해 보이지만 모르면 반드시 삽질하게 되는 레드마인 플러그인 완전 제거 가이드를 단계별로 따라 하실 수 있게 정리해 드립니다.
1단계: 플러그인 DB 마이그레이션 롤백 (VERSION=0)
플러그인이 생성한 DB 테이블 및 변경 사항을 롤백(제거)하는 과정입니다.
-
도커 내부 콘솔에서 진행 시:
SECRET_KEY_BASE={your_secret_key} bundle exec rake redmine:plugins:migrate NAME={플러그인명} VERSION=0 RAILS_ENV=production -
호스트 터미널에서 실행 시 (docker exec):
docker exec -e SECRET_KEY_BASE={your_secret_key} -it {Redmine_컨테이너명} bundle exec rake redmine:plugins:migrate NAME={플러그인명} VERSION=0 RAILS_ENV=production
2단계: 플러그인 디렉토리 삭제
Redmine의 plugins/ 디렉토리에서 대상 플러그인 폴더를 제거합니다.
rm -rf /usr/src/redmine/plugins/{플러그인명}
3단계: DB 마이그레이션 이력(schema_migrations) 정리
테이블을 수동 삭제했거나 롤백이 깔끔하게 처리되지 않은 경우, Redmine이 마이그레이션 이력을 재인식하지 못해 재설치 시 테이블이 생성되지 않습니다. DBeaver 등 DB 클라이언트를 통해 마이그레이션 이력 레코드를 직접 삭제해 줍니다.
-- DB 클라이언트에서 실행
DELETE FROM schema_migrations WHERE version LIKE '%{플러그인명}%';
4단계: Redmine 컨테이너 재시작
플러그인 파일 및 DB 이력 정리가 끝났다면 컨테이너를 재시작하여 캐시와 라우팅을 갱신합니다.
docker compose restart {Redmine_컨테이너명}
오랫동안 Redmine을 다뤄오면서도 예전에는 2단계(폴더 삭제)까지만 대충 처리하곤
했습니다. 하지만 이번에 플러그인 재설치 과정에서 새 테이블이 생성되지 않는
현상을 겪으면서, schema_migrations 테이블에 이력이 잔존해 있으면
마이그레이션 건너뛰기가 발생한다는 점을 다시금 확인했습니다.
Redmine 7(Rails 8) 필수 변경점: SECRET_KEY_BASE
Redmine 7 버전부터는 백엔드 프레임워크가 Rails 8로 판올림되면서,
마이그레이션 명령어 앞에 SECRET_KEY_BASE=... 환경변수를 명시하는
것이 표준 절차가 되었습니다.
-
Rails 8의 엄격해진 보안 검증:
RAILS_ENV=production환경에서 수동 Rake 태스크를 실행할 때 세션 보안키가 명시되지 않으면, 엔진 부팅 단계에서ArgumentError: Missing secret_key_base for 'production' environment에러를 뿜으며 실행을 즉시 중단합니다. -
도커 실행 환경 차이:
docker exec일회성 세션에서는 컨테이너 내부 환경변수가 쉘로 온전히 승계되지 않는 경우가 있으므로, 명령어 라인에서 인라인으로 값을 주입해 주는 방식이 가장 안전합니다.
여기까지 Redmine 플러그인 완전 제거 절차를 정리해 보았습니다. 다음 레드마인 실전 운영 팁도 기대되신다면, IDSTORY: 테크에 로그인해 주세요! 궁금한 점이나 추가 팁은 댓글로 편하게 남겨주시기 바랍니다.
댓글
댓글 쓰기