Rootless Docker 환경에서의 QueryPie 설치 가이드

Rootless Docker 환경에서의 QueryPie 설치 가이드

개요

이 가이드는 보안을 강화한 Rootless Docker 환경에서 QueryPie 10.2.6 버전을 설치하고 구성하는 방법을 제공합니다. Rootless Docker를 사용하면 root 권한 없이 컨테이너를 실행할 수 있어 보안이 강화됩니다.

설치 환경

  • ALB, NLB (PPv2 사용)

  • Amazon Linux 2023

  • QueryPie v10.2.6

⚠️주의사항

  • ALB, NLB (PPv2 사용) 사용하지 않을 시 Aduit Log 의 Client IP 에 docker ip 가 찍히게 됨.

사전 요구사항

  • 최초 설치 시 sudo 권한

    • 설치 단계 요약 5번까지 필요

  • 인터넷 연결

    • dl.querypie.com / harbor.chequer.io

      • 443 port

    • QueryPie 설치 파일 및 이미지 다운로드

  • QueryPie 라이센스 파일 (license.crt)

설치 단계 요약

  1. QueryPie 사용자 계정 생성

  2. QueryPie 로그 관리 설정 (LogRotate)

  3. Docker-Compose 설치

  4. Rootless Docker 설치

  5. Docker 자동 시작 설정

  6. QueryPie 설치 디렉토리 준비

  7. QueryPie 설치 파일 다운로드 및 설정

  8. harbor 로그인 및 QueryPie 마이그레이션

  9. 라이센스 적용 및 QueryPie 실행


1. QueryPie 사용자 계정 생성

QueryPie를 실행할 전용 사용자 계정을 생성합니다.

sudo useradd querypie sudo passwd querypie # 안전한 비밀번호를 설정하세요

2. QueryPie 로그 관리 설정 (LogRotate)

로그 파일이 과도하게 커지는 것을 방지하기 위해 LogRotate 설정을 추가합니다.

# user id 확인 [querypie@ip-172-31-50-123 ~]$ id querypie uid=1001(querypie) gid=1001(querypie) groups=1001(querypie) # 일시적으로 root 사용자로 전환하여 logrotate 설정 sudo tee /etc/logrotate.d/querypie > /dev/null << 'EOF' /home/querypie/querypie/log/**/*.log { compress dateext copytruncate daily missingok notifempty size 10M rotate 10 postrotate /bin/bash -c 'find /home/querypie/querypie/log -name "*.gz" -exec chown 1001:1001 {} \;' endscript } /home/querypie/.local/share/docker/containers/**/*.log { compress dateext copytruncate daily missingok notifempty size 1024M rotate 10 postrotate /bin/bash -c 'find /home/querypie/.local/share/docker/containers -name "*.gz" -exec chown 1001:1001 {} \;' endscript } EOF

3. Docker-Compose 설치

Docker-Compose를 설치합니다.

# Docker Compose 다운로드 및 설치 curl https://dl.querypie.com/releases/bin/docker-compose-$(uname -s)-$(uname -m) -o docker-compose sudo install -m 755 docker-compose /usr/local/bin

4. Rootless Docker 설치

패키지 설치 및 QueryPie 사용자로 로그인하여 Rootless Docker를 설치합니다.

# iptables 설치 sudo dnf install -y iptables # 커널 모듈 로드 sudo modprobe nf_tables # QueryPie 사용자로 전환 sudo su - querypie # Rootless Docker 설치 curl -fsSL https://get.docker.com/rootless | sh # 환경 변수 설정을 ~/.bashrc에 추가 echo 'export XDG_RUNTIME_DIR=/run/user/$(id -u)' >> ~/.bashrc echo 'export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"' >> ~/.bashrc echo 'export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock' >> ~/.bashrc # 환경 변수 로드 source ~/.bashrc

5. Docker 자동 시작 설정

QueryPie 사용자의 로그인 세션이 종료되어도 Docker 서비스가 계속 실행되도록 설정합니다.

# Root 권한으로 실행 sudo loginctl enable-linger querypie # 다시 querypie 사용자로 전환 sudo su - querypie # Docker 시스템 서비스 설정 디렉토리 생성 mkdir -p ~/.config/systemd/user/ # Docker 서비스 파일 생성 cat > ~/.config/systemd/user/docker.service << 'EOF' [Unit] Description=Docker Application Container Engine (Rootless) Documentation=https://docs.docker.com/engine/security/rootless/ [Service] Environment=PATH=/home/querypie/bin:/usr/bin:/usr/sbin/:$PATH ExecStart=/home/querypie/bin/dockerd-rootless.sh ExecReload=/bin/kill -s HUP \$MAINPID TimeoutSec=0 RestartSec=2 Restart=always StartLimitBurst=3 StartLimitInterval=60s LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity TasksMax=infinity Delegate=yes Type=simple [Install] WantedBy=default.target EOF # 서비스 등록 및 시작 systemctl --user daemon-reload systemctl --user start docker systemctl --user enable docker # 서비스 상태 확인 systemctl --user status docker

6. QueryPie 설치 디렉토리 준비

QueryPie 설치와 로그 저장을 위한 디렉토리를 생성합니다.

mkdir -p ~/querypie/log/data mkdir -p ~/querypie/10.2.6

7. QueryPie 설치 파일 다운로드 및 설정

QueryPie 설치 파일을 다운로드하고 환경 설정을 구성합니다.

# 설치 디렉토리로 이동 cd ~/querypie/10.2.6 # 설치 패키지 다운로드 및 압축 해제 curl https://dl.querypie.com/releases/compose/10.2.x/package.tar.gz -o package.tar.gz tar zxvf package.tar.gz # compose-env 파일 편집 # 에디터(vi 또는 nano)로 compose-env 파일을 열고 다음 섹션을 수정합니다. # 아래는 변경해야 할 부분만 보여줍니다. QUERYPIE_WEB_URL=http://YOUR_SERVER_IP:8080 CABINET_DATA_DIR=../log/data # docker-compose.yml 파일 수정 - 포트 설정 # 에디터(vi 또는 nano)로 docker-compose.yml 파일을 열고 다음 섹션을 수정합니다. # 아래는 변경해야 할 부분만 보여줍니다. mysql: #network_mode: host + ports: + - 3306:3306 redis: #network_mode: host + ports: + - 6379:6379 app: dns: - 8.8.8.8 - 168.126.63.1 volumes: + - type: bind + source: ../log + target: /var/log/querypie ports: + - 8080:80 + - 8443:443

8. harbor 로그인 및 QueryPie 마이그레이션

QueryPie 이미지를 다운로드하기 위해 Docker 레지스트리에 로그인하고 서비스를 실행합니다.

# Docker 레지스트리 로그인 # 인증 정보는 파트너사에게 별도로 제공됩니다. docker login harbor.chequer.io # Username과 Password를 입력하세요 # 데이터베이스 컨테이너 실행 docker-compose --env-file compose-env --profile database up -d # tools 컨테이너 실행 docker-compose --env-file compose-env --profile tools up -d # 데이터베이스 마이그레이션 실행 docker exec -it querypie-tools-1 /app/script/migrate.sh runall

9. 라이센스 적용 및 QueryPie 실행

QueryPie를 정상적으로 사용하기 위해 라이센스를 적용합니다.

# 라이센스 파일을 업로드합니다. # license.crt 파일을 현재 디렉토리에 미리 준비해야 합니다. curl -XPOST 127.0.0.1:8050/license/upload -F file=@license.crt # 성공적으로 업로드되면 "[License] Upload: Success" 메시지가 표시됩니다. # QueryPie 애플리케이션 실행 docker-compose --env-file compose-env --profile querypie up -d # 로그 확인 docker logs -f querypie-app-1

성공적으로 설치가 완료되면 다음과 같은 로그 메시지가 표시됩니다:

READYZ | ######################################################################## READYZ | # # READYZ | # ██████╗ ██╗ ██╗███████╗██████╗ ██╗ ██╗██████╗ ██╗███████╗ # READYZ | # ██╔═══██╗██║ ██║██╔════╝██╔══██╗╚██╗ ██╔╝██╔══██╗██║██╔════╝ # READYZ | # ██║ ██║██║ ██║█████╗ ██████╔╝ ╚████╔╝ ██████╔╝██║█████╗ # READYZ | # ██║▄▄ ██║██║ ██║██╔══╝ ██╔══██╗ ╚██╔╝ ██╔═══╝ ██║██╔══╝ # READYZ | # ╚██████╔╝╚██████╔╝███████╗██║ ██║ ██║ ██║ ██║███████╗ # READYZ | # ╚══▀▀═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚══════╝ # READYZ | # # READYZ | ######################################################################## READYZ | .--------------------------------------------------------. READYZ | | 🚀 QueryPie Server has been successfully started! 🚀 | READYZ | | Timestamp in UTC: Mon Mar 24 15:12:26 UTC 2025 | READYZ | | Timestamp in KST: Tue Mar 25 00:12:26 KST 2025 | READYZ | '--------------------------------------------------------'

웹 접속 확인

브라우저를 열고 아래 URL로 접속하여 QueryPie 에 접근할 수 있습니다:

  • http://[서버_IP]:8080