Docker

[docker] 레드마인 운영 시, production.log 파일 생성 문제

채윤아빠 2023. 9. 10. 13:16
728x90
반응형

개요

레드마인 (https://www.redmine.org/)을 도커를 이용하여 운용하고 있는데, 로그 파일이 생성되지 않아 로그를 확인하기 위해서 "docker logs" 명령을 활용해야만 했었습니다.

하지만 도커의 logs를 이용하기에는 여러모로 불편한 점이 많아서, 레드마인의 로그 파일을 별도로 생성하는 방법을 정리해 둡니다.


레드마인 컨테이너 구동

레드마인을 구동하기 위해서 다음과 같은 형식으로 스크립트를 작성하여 활용하고 있었습니다.

#!/bin/bash

# redmine 구동 스크립트
# server : www1
# date : 2021-08-21
# author : hbesthee@naver.com

CONTAINER_NAME=redmine
LOG_REDMINE=/home/logs/redmine.log
REDMINE_FILES=/home/redmine/files
REDMINE_LOGS=/home/redmine/logs
REDMINE_PORT=3000
REDMINE_DB_HOST=172.17.0.1
REDMINE_DB_PORT=3306
REDMINE_DB_USERNAME=redmine
REDMINE_DB_PASSWORD=redmine_pwd
REDMINE_DB_DATABASE=redmine


echo "========"tee -a ${LOG_REDMINE}
echo "[$(date +%Y-%m-%d) $(date +%H:%M:%S)] $0 $@"tee -a ${LOG_REDMINE}

echo "${CONTAINER_NAME} 컨테이너 중지"tee -a ${LOG_REDMINE}
docker ps -q --filter "name=${CONTAINER_NAME}"grep -q . && docker stop ${CONTAINER_NAME} && docker rm -fv ${CONTAINER_NAME} && echo "'${CONTAINER_NAME}' container stopped."

echo "${CONTAINER_NAME} 컨테이너 생성"tee -a ${LOG_REDMINE}
docker run -d --network host --restart=unless-stopped --name ${CONTAINER_NAME} \
    -e REDMINE_DB_MYSQL=${REDMINE_DB_HOST} \
    -e REDMINE_DB_PORT=${REDMINE_DB_PORT} \
    -e REDMINE_DB_USERNAME=${REDMINE_DB_USERNAME} \
    -e REDMINE_DB_PASSWORD=${REDMINE_DB_PASSWORD} \
    -e REDMINE_DB_DATABASE=${REDMINE_DB_DATABASE} \
    -v ${REDMINE_FILES}:/usr/src/redmine/files \
    -v ${REDMINE_LOGS}:/usr/src/redmine/log \
    redmine:4.2.10-alpine 2>&1tee -a ${LOG_REDMINE}

문제는 위와 같이 형식으로 도커 레드마인을 시작하면, 일반적으로 생성되는 "production.log" 파일이 생성되지 않았습니다.


production.log 파일이 생성되지 않는 원인 확인

"production.log" 파일이 생성되지 않는 원인을 확인해 보니, 레드마인 컨테이너 내부의 "additional_environment.rb" 파일이 다음과 같이 작성되어 있었기 때문이었습니다.

$ vi /usr/src/redmine/config/additional_environment.rb

config.logger = Logger.new(STDOUT)

로그를 별도의 파일 (production.log)로 저장하지 않고, "STDOUT"으로 그냥 내보내도록 되어 있었고, 그래서 도커의 "logs" 명령으로 콘솔로 출력된 로그를 확인해야만 했었습니다.


production.log 파일이 생성되도록 운영하기

다음과 같이 별도의 "additional_environment.rb" 파일을 작성하였습니다.

#Logger.new(PATH,NUM_FILES_TO_ROTATE,FILE_SIZE)
#config.logger = Logger.new(STDOUT)
config.logger = Logger.new('/usr/src/redmine/log/production.log', 2, 1000000)
config.logger.level = Logger::INFO

그리고 레드마인을 실행하는 스크립트를 다음과 같이 수정하였습니다.

#!/bin/bash

# redmine 구동 스크립트
# server : www1
# date : 2021-08-21
# author : hbesthee@naver.com

CONTAINER_NAME=redmine
LOG_REDMINE=/home/logs/redmine.log
REDMINE_FILES=/home/redmine/files
REDMINE_CONFIG_ADDITIONAL=/home/redmine/config/additional_environment.rb
REDMINE_LOGS=/home/redmine/logs
REDMINE_PORT=3000
REDMINE_DB_HOST=172.17.0.1
REDMINE_DB_PORT=3306
REDMINE_DB_USERNAME=redmine
REDMINE_DB_PASSWORD=redmine_pwd
REDMINE_DB_DATABASE=redmine


echo "========"tee -a ${LOG_REDMINE}
echo "[$(date +%Y-%m-%d) $(date +%H:%M:%S)] $0 $@"tee -a ${LOG_REDMINE}

echo "${CONTAINER_NAME} 컨테이너 중지"tee -a ${LOG_REDMINE}
docker ps -q --filter "name=${CONTAINER_NAME}"grep -q . && docker stop ${CONTAINER_NAME} && docker rm -fv ${CONTAINER_NAME} && echo "'${CONTAINER_NAME}' container stopped."

echo "${CONTAINER_NAME} 컨테이너 생성"tee -a ${LOG_REDMINE}
    # -e REDMINE_NO_DB_MIGRATE=1 \
    # -p {REDMINE_PORT}:3000 \
docker run -d --network host --restart=unless-stopped --name ${CONTAINER_NAME} \
    -e REDMINE_DB_MYSQL=${REDMINE_DB_HOST} \
    -e REDMINE_DB_PORT=${REDMINE_DB_PORT} \
    -e REDMINE_DB_USERNAME=${REDMINE_DB_USERNAME} \
    -e REDMINE_DB_PASSWORD=${REDMINE_DB_PASSWORD} \
    -e REDMINE_DB_DATABASE=${REDMINE_DB_DATABASE} \
    -v ${REDMINE_FILES}:/usr/src/redmine/files \
    -v ${REDMINE_LOGS}:/usr/src/redmine/log \
    -v ${REDMINE_CONFIG_ADDITIONAL}:/usr/src/redmine/config/additional_environment.rb \
    redmine:4.2.10-alpine 2>&1tee -a ${LOG_REDMINE}

위와 같이 스크립트를 수정한 이후에 구동하니, "/home/redmine/logs" 폴더 아래에 "production.log"로그가 생성되었고 로깅되는 내용들을 확인할 수 있었습니다.


참고자료