728x90
반응형

GitLab MCP 연동 가이드

작성일: 2026-06-08
작성자: tester1
대상 인스턴스: http://10.0.0.1:9820


목차

  1. MCP란?
  2. 사전 준비
  3. 패키지 설치 및 설정
  4. Claude Desktop 설정
  5. 연동 테스트
  6. 주요 사용 예시
  7. 트러블슈팅

1. MCP란?

MCP(Model Context Protocol) 는 Anthropic이 2024년에 발표한 오픈 표준으로,
AI 모델(Claude 등)과 외부 도구/데이터 소스를 연결하는 프로토콜입니다.

Claude (MCP Client)
       ↕  MCP Protocol
GitLab MCP Server
       ↕  REST API
GitLab Instance (10.0.0.1:9820)

MCP를 통해 Claude가 GitLab의 프로젝트, 이슈, MR, 파이프라인 등을 직접 조회하고 조작할 수 있습니다.


2. 사전 준비

2.1 Node.js 설치 확인

node -v   # v18.0.0 이상 필요
npm -v    # v9.0.0 이상 필요

2.2 GitLab Personal Access Token 발급

  1. GitLab 접속: http://10.0.0.1:9820
  2. 우측 상단 프로필 아이콘 클릭 → Edit Profile
  3. 좌측 메뉴 → Access Tokens
  4. Add new token 클릭
  5. 아래 항목 설정:
항목
Token name mcp-claude (임의 지정)
Expiration date 원하는 만료일 설정
Scopes api 반드시 체크
  1. Create personal access token 클릭 후 토큰 값 복사 (재확인 불가)

3. 패키지 설치 및 설정

권장 패키지: @zereight/mcp-gitlab

# 전역 설치 (선택사항)
npm install -g @zereight/mcp-gitlab

# 또는 npx로 바로 실행 (설치 불필요)
npx @zereight/mcp-gitlab

4. Claude Desktop 설정

4.1 설정 파일 위치

OS 경로
Windows %APPDATA%\Claude\claude_desktop_config.json
macOS ~/Library/Application Support/Claude/claude_desktop_config.json

4.2 설정 파일 내용

{
  "mcpServers": {
    "gitlab": {
      "command": "npx",
      "args": [
        "-y",
        "@zereight/mcp-gitlab"
      ],
      "env": {
        "GITLAB_PERSONAL_ACCESS_TOKEN": "your_token_here",
        "GITLAB_API_URL": "http://10.0.0.1:9820/api/v4"
      }
    }
  }
}

⚠️ your_token_here 부분을 2단계에서 발급한 실제 토큰으로 교체하세요.

4.3 Claude Desktop 재시작

설정 파일 저장 후 Claude Desktop을 완전히 종료하고 재시작합니다.


5. 연동 테스트

Claude Desktop 또는 Claude.ai에서 아래 명령어로 연동 상태를 확인합니다.

기본 연결 확인

내 GitLab 프로필 정보 보여줘

정상 응답 예시:

사용자명: tester1
이메일: tester1@example.com
상태: active
관리자: true

프로젝트 목록 조회

GitLab에서 내 프로젝트 목록 보여줘

이슈 조회

test-prj 프로젝트의 열린 이슈 목록 보여줘

6. 주요 사용 예시

📁 프로젝트 관리

# 프로젝트 목록
GitLab 프로젝트 목록 보여줘

# 특정 프로젝트 상세 정보
test-prj 프로젝트 정보 알려줘

# 파일 목록
test-prj 프로젝트의 파일 구조 보여줘

🐛 이슈 관리

# 이슈 목록 조회
test-prj의 이슈 목록 보여줘

# 이슈 생성
test-prj에 이슈 만들어줘: 제목은 "버그 수정", 내용은 "로그인 오류 수정 필요"

# 이슈 상세 조회
test-prj의 이슈 #1 내용 보여줘

🔀 Merge Request 관리

# MR 목록
test-prj의 열린 MR 목록 보여줘

# MR 상세
test-prj의 MR #1 내용과 변경사항 보여줘

🚀 CI/CD 파이프라인

# 파이프라인 목록
test-prj의 최근 파이프라인 상태 보여줘

# 특정 파이프라인 잡 조회
test-prj 파이프라인 #5의 잡 목록 보여줘

📝 파일 조작

# 파일 내용 조회
test-prj의 README.md 내용 보여줘

# 파일 생성/수정
test-prj에 docs/guide.md 파일 만들어줘

7. 트러블슈팅

❌ 패키지를 찾을 수 없음 (404 오류)

npm error 404 Not Found - @gitlabhq/gitlab-mcp-server

원인: 패키지명이 잘못됨
해결: @zereight/mcp-gitlab 또는 @yoda-digital/mcp-gitlab-server 사용


❌ 인증 오류 (401 Unauthorized)

원인: Personal Access Token이 잘못되었거나 만료됨
해결:

  1. GitLab에서 새 토큰 재발급
  2. api 스코프 체크 여부 확인
  3. claude_desktop_config.json의 토큰 값 업데이트 후 재시작

❌ 서버에 연결할 수 없음

원인: GitLab 인스턴스 URL이 잘못됨
해결: GITLAB_API_URL 값이 http://10.0.0.1:9820/api/v4 형식인지 확인


❌ MCP 서버가 목록에 보이지 않음

해결:

  1. claude_desktop_config.json JSON 문법 오류 확인 (콤마, 따옴표 등)
  2. Claude Desktop 완전 종료 후 재시작
  3. 로그 확인: %APPDATA%\Claude\logs\

참고 링크


*

728x90
반응형

'00.AI' 카테고리의 다른 글

[Ollama] Rocky 에서 Ollama 설치 및 활용 방법  (0) 2026.02.12
728x90
반응형

1. GitLab Runner란 

GitLab이 오케스트라의 '지휘자'라면, GitLab Runner는 지휘자의 악보(.gitlab-ci.yml)를 보고 실제로 악기를 연주하는 '작업자(일꾼)'입니다.

개발자가 코드를 GitLab 서버에 Push하면, GitLab은 조건에 맞는 Runner에게 알림을 보냅니다. Runner는 지정된 서버에서 코드를 임시로 내려받아 빌드, 테스트, 배포 등의 스크립트를 대신 실행해 주는 핵심 프로그램이다. 

 

2. CI/CD 파이프라인 스크립트 작성 (Gitlab 서버: .gitlab-ci.yml)

Runner가 수행할 작업 지시서입니다. 프로젝트 최상위 경로에 위치해야 합니다.

핵심 개념 및 스크립트 예시

  • 태그(tags): 특정 Runner를 지정하여 실행하도록 연결하는 고리입니다. 웹 설정과 정확히 일치해야 합니다.
  • 임시 디렉토리: Runner는 매번 $CI_PROJECT_DIR라는 임시 폴더(예: /home/qadoc/builds/...)에 최신 코드를 다운로드(HEAD 분리 상태)하여 작업을 수행합니다.

3. GitLab Runner 설치 방법 (Rocky Linux 9 / RHEL 계열)

터미널에서 root 권한 또는 sudo 명령어를 사용하여 공식 저장소를 등록하고 패키지를 설치합니다.

  • 공식 GitLab Runner 저장소(Repository) 추가
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash
  • dnf 명령어로 패키지 설치
sudo dnf install gitlab-runner -y
  • 서비스 자동 시작 설정 및 상태 확인
    • 설치가 완료되면 서버가 부팅될 때 자동으로 Runner가 켜지도록 설정합니다.
# 서비스 활성화 및 시작
sudo systemctl enable --now gitlab-runner

# 서비스 상태 확인 (active (running) 상태인지 확인)
sudo systemctl status gitlab-runner

 

4.GitLab Runner 등록 및 연동

  • 설치된 일꾼(Runner)에게 "어떤 GitLab 서버에 가서 일을 받아와야 하는지" 주소와 인증 번호(토큰)를 알려주는 과정입니다.

4.1 GitLab 웹에서 '새로운 토큰' 발급받기

 

  • GitLab 프로젝트 웹 화면 이동 ➔ 왼쪽 메뉴 Settings (설정) > CI/CD > Runners 클릭 후 펼치기.

  • [New project runner] 버튼을 클릭하여 새로운 러너 생성 화면으로 이동.
  • 태그(Tags) 입력란에 mkdocs를 입력하고 생성 버튼을 누르면 화면에 새로운 인증 토큰(glrt-... 형태)이 나타납니다.
    • tags 는 .gitlab-ci.yml 에서 설정해서 사용 하는 태그명과 일치 해야 합니다.(매우중요) 

 

Gitlab Runner 가 정상적으로 생성이 되면 Gtilab runner 를 설치한 서버에서 Gitlab runner 를 등록 해 줘야 한다. 

 

4.2 gitlab runner 등록 및 실행  

  • 아래내용은 2개의 runner 등록 하고 실행 하는 예제입니다. 

4.2.1 Gitlab UI 화면 에서  runner 생성 

 

 

  • test 용으로 gitlab 에서 각각  test1, test2 태그를 사용 하는 gitlab runner 를 생성 합니다. 

4.2.2 Gitlab UI 생성한 Runner 를 서버에 등록 (test1,test2 ) 

  • 등록한 runner 를 실행 하기위해 runner 를 실행하려는 서버에서 실행 합니다. 
# 두 번째 러너 등록 (새로운 토큰 사용)
sudo gitlab-runner register \
  --url "http://[gitlab ip]:9080" \
  --token "새로_발급받은_첫번째_토큰" \
  --executor "shell"
  
  
  # 두 번째 러너 등록 (새로운 토큰 사용)
sudo gitlab-runner register \
  --url "http://[gitlab ip]:9080" \
  --token "새로_발급받은_두번째_토큰" \
  --executor "shell"

  • 두개의 runner 가 정상적으로 등록이 완료 되면 /etc/gitlab-runner/config.toml 파일에 [[runners]] 블럭이 두개가 실행이됩니다. 
concurrent = 1 // 한번에 1개의 작업을 동시에 처리 할수 있도록 허용 4 이면 4개 동시 작업
check_interval = 0
connection_max_age = "15m0s"
shutdown_timeout = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "rocky9"
  url = "http://[ip]:9820"
  id = 5
  token = "glrt-[첫번째토큰]"
  token_obtained_at = 2026-06-01T09:32:47Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "shell"

[[runners]]
  name = "rocky9"
  url = "http://[ip]:9820"
  id = 6
  token = "glrt-[두번째토큰]"
  token_obtained_at = 2026-06-01T09:33:05Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "shell"

4.2.3 Gitlab runner 실행  실행 및 상태 확인 

#실행 
sudo systemctl start gitlab-runner

#상태 확인 
sudo systemctl status gitlab-runner

 

 

4.2.4 Gitlab pipelined 스크립트 작성 (.gitlab-ci.yml) 

  • .gitlab-ci.yml 파일은 프로젝트 최 상단 경로에 생성 합니다. 
  • gitlab 에 등록된 프로젝트 변경 사항이 감지 되면 작성된 스크립트에 따라 작업을 수행 합니다. 
  • build_job 에서는 test1 태그로 등록 한 잡이 실행 되고  deploy_job 에서는 test2 태그로 등록 한 잡이 실행 됩니다. 
# 전체 작업 순서 정의
stages:
  - build
  - deploy

# [첫 번째 작업] test1 runner
build_job:
  stage: build
  tags:
    - test1   # ⭐ 1번 러너 수행
  script:
    - rm -rf $HOME/gitlab-test-runner ;mkdir -p $HOME/gitlab-test-runner
    # 1. 파일에 내용 쓰기 (전체를 작은따옴표로 묶어서 YAML 에러 방지)
    - 'echo "$(date) : test1 runner execution" >  $HOME/gitlab-test-runner/runner-test.txt'
    
  # ⭐ 핵심: 이 파일은 다음 stage로 전달해 달라고 GitLab에 요청
  artifacts:
    paths:
      - runner-test.txt

# [두 번째 작업] test2 runner
deploy_job:
  stage: deploy
  tags:
    - test2   # ⭐ 2번 러너 수행
  script:
    # 여기도 마찬가지로 전체를 작은따옴표로 묶어줍니다.
    - 'echo "$(date) : test2 runner execution" >>  $HOME/gitlab-test-runner/runner-test.txt'
    - cat $HOME/gitlab-test-runner/runner-test.txt

 

4.2.5 Gitlab Build 상태 확인 

  • 정상동작이 된다면 아래 그림 처럼 순차적으로 job 이 수행이 됩니다. 

 

  • 수행이 완료되면 스크립트가 수행 되고 예상되는 결과에 따라 아래 처럼 파일이 생성 되고 파일에 실행된 시간을 기록 하고 종료합니다. 
[qadoc@rocky9:/home/qadoc]$ cat gitlab-test-runner/runner-test.txt
2026. 06. 01. (월) 18:47:17 KST : test1 runner execution
2026. 06. 01. (월) 18:47:19 KST : test2 runner execution

 

4.2.5.GitLab Runner 서비스 제어 기타 명령어

1. 러너 상태 확인 (Status) 러너가 현재 잘 켜져 있는지, 꺼져 있는지 가장 먼저 점검할 때 사용합니다.

sudo systemctl status gitlab-runner

확인 팁: 결과 화면에 초록색으로 active (running)이 뜨면 정상, inactive (dead)나 failed가 뜨면 꺼져있는 상태입니다. (화면에서 빠져나오려면 q를 누르세요.)

 

2. 러너 시작 (Start) 꺼져 있는 러너 서비스를 켭니다.

sudo systemctl start gitlab-runner

 

3. 러너 중지 (Stop) 서버 점검이나 러너 동작을 아예 멈추고 싶을 때 사용합니다. (진행 중이던 배포 작업이 있다면 실패 처리될 수 있으므로 작업이 없을 때 수행하세요.)

sudo systemctl stop gitlab-runner

 

4. 러너 재시작 (Restart) ⭐️ 러너를 껐다가 바로 다시 켭니다. 에러가 났을 때 가장 먼저 시도해 볼 만한 응급처치이며, 특히 관리자가 러너 설정 파일(/etc/gitlab-runner/config.toml)을 직접 수정했을 때 변경 사항을 적용하기 위해 반드시 쳐야 하는 명령어입

sudo systemctl restart gitlab-runner

 

5. 서버 부팅 시 자동 시작 켜기 (Enable) 리눅스 서버가 재부팅되었을 때, 관리자가 일일이 켜주지 않아도 GitLab Runner가 알아서 백그라운드에서 실행되도록 예약합니다. (설치 시 기본적으로 켜져 있습니다.)

sudo systemctl enable gitlab-runner

 

6. 서버 부팅 시 자동 시작 끄기 (Disable) 서버가 켜질 때 러너가 자동으로 켜지는 것을 막습니다.

sudo systemctl disable gitlab-runner

 

 

 

728x90
반응형

'04.DevTools > Git&GitLab' 카테고리의 다른 글

Gitlab Upgrade 하기  (3) 2025.07.30
[GitLab] Project 삭제 방법  (0) 2024.11.07
[GitLab] git 빈 디렉토리 커밋 하는 방법  (0) 2024.09.13
[GitLab] Gitlab 명령어 모음  (0) 2022.04.17
[GitLab] 프로젝트 생성 및 관리  (0) 2022.04.17
728x90
반응형

사전 준비

소스 코드를 컴파일하려면 C 컴파일러와 Nginx 의존성 라이브러리가 필요합니다. 

 

sudo dnf groupinstall "Development Tools" -y
sudo dnf install pcre-devel zlib-devel openssl-devel -y

 

1. Nginx 소스 다운로드 및 로컬 설치

설치하려는 디렉토리로 이동해서 Nginx 를 다운로드 받아 아래 절차에 따라 설치를 진행 합니다. 

 

# 1. 홈 디렉토리로 이동
cd /home/qadoc/

# 2. Nginx 소스 다운로드 (최신 안정화 버전 1.24.0 기준, 필요시 버전 변경)
wget http://nginx.org/download/nginx-1.24.0.tar.gz

# 3. 압축 해제 및 폴더 이동
tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0/

# 4. 설치 환경 설정 (configure)
# --prefix 옵션이 핵심입니다. 이 경로에 Nginx가 설치됩니다.
# 홈 디렉토리 아래의 nginx 이라는 폴더에 설치하도록 지정합니다.
./configure --prefix=$HOME/nginx --with-http_ssl_module

# 5. 컴파일 및 설치
make
make install

 

  • 설치가 완료 되면 다운로드 받은 파일은 삭제 해도 됩니다. 

 

2. Nginx 설정 변경 (포트 및 경로 설정)

일반 사용자는 1~1023번(Well-known ports, 예: 80, 443) 포트를 사용할 수 없습니다.

따라서 1024번 이상의 포트(예: 8080, 8888 등)로 설정해야 합니다.

로컬에 설치된 Nginx의 설정 파일을 엽니다.

 

vi ~/nginx/conf/nginx.conf
  • nginx.conf
# worker 프로세스 설정 (로컬 계정이므로 user 지시어는 사용하지 않음)
worker_processes  1;

# 에러 로그 경로 (로컬 폴더 내에 저장됨)
error_log  logs/error.log;
pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    
    # 접근 로그 경로
    access_log  logs/access.log;

    sendfile        on;
    keepalive_timeout  65;

    server {
        # 일반 사용자가 열 수 있는 포트 (예: 8081)
        listen       8081;
        server_name  localhost;

        # MkDocs 빌드 파일이 위치할 절대 경로 지정
        # (예: /home/myuser/mkdocs_site)
        location / {
            root   /home/qadoc/mkdocs_site;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
  • 파일 설정이 완료 되었다면 설정상 문제 가 없는지 아래 명령으로 확인 합니다. 
$ ~/nginx/sbin/nginx -t
nginx: the configuration file /home/qadoc/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /home/qadoc/nginx/conf/nginx.conf test is successful
  • 명령
# 설정 파일 문법 테스트
~/nginx/sbin/nginx -t

# Nginx 백그라운드 실행
~/nginx/sbin/nginx

# Nginx 프로세스 확인(정상 기동) 
ps -ef | grep nginx
  • Nginx 기동/중지 스크립트 작성 
    • 조작을 쉽게 하기위해 스크립트를 만듭니다. 
    • 사용 방법
      • 시작: ./manage_nginx.sh start
      • 중지: ./manage_nginx.sh stop
      • 설정 재적용: ./manage_nginx.sh reload
      • 재시작: ./manage_nginx.sh restart
      • 상태 확인: ./manage_nginx.sh status
    • 이제부터는 복잡한 경로를 입력할 필요 없이, 아래처럼 스크립트 하나로 Nginx를 쉽게 제어할 수 있습니다.
#!/bin/bash

# Nginx 실행 파일 경로를 변수로 지정합니다.
# 경로가 다르다면 이 부분을 수정해 주세요.
NGINX_BIN="$HOME/nginx/sbin/nginx"

# 실행 인자($1)가 없는 경우 안내 메시지를 출력합니다.
if [ -z "$1" ]; then
    echo "사용법: $0 {start|stop|reload|restart|status}"
    exit 1
fi

case "$1" in
    start)
        echo "Nginx를 시작합니다..."
        $NGINX_BIN
        echo "완료."
        ;;
    stop)
        echo "Nginx를 중지합니다..."
        $NGINX_BIN -s stop
        echo "완료."
        ;;
    reload)
        echo "Nginx 설정을 무중단으로 재적용합니다..."
        $NGINX_BIN -s reload
        echo "완료."
        ;;
    restart)
        echo "Nginx를 재시작합니다..."
        $NGINX_BIN -s stop
        sleep 2  # 프로세스가 완전히 죽을 때까지 2초 대기
        $NGINX_BIN
        echo "완료."
        ;;
     status)
        # 1. 현재 쉘을 실행 중인 사용자 이름 가져오기
        CURRENT_USER=$(whoami)

        # 2. 본인 계정($CURRENT_USER)으로 실행된 nginx 마스터 프로세스 찾기
        #    (grep "[n]ginx" 기법을 사용하여 grep 명령어 자체는 결과에서 제외)
        NGINX_PS=$(ps -u "$CURRENT_USER" -o pid,user,args | grep "[n]ginx: master process")

        # 3. 결과 문자열의 길이가 0이 아니면(-n) 실행 중인 것으로 판단
        if [ -n "$NGINX_PS" ]; then
            echo "현재 Nginx가 [실행 중]입니다."
            echo "--- [프로세스 정보] ---"
            echo "  PID USER     COMMAND"

            # 본인 계정의 전체 nginx 프로세스(master + worker 등)를 깔끔하게 출력
            ps -u "$CURRENT_USER" -o pid,user,args | grep "[n]ginx"
            echo "-----------------------"
        else
            echo "현재 Nginx가 [중지] 상태입니다."
        fi
        ;;
    *)
        echo "지원하지 않는 명령어입니다: $1"
        echo "사용법: $0 {start|stop|reload|restart|status}"
        exit 1
        ;;
esac

 

 

 

1. 기존 서비스 중지 및 삭제

 

sudo systemctl stop gitlab-runner
sudo gitlab-runner uninstall

 

2. 새로운 토큰으로 Runner 등록

올려주신 명령어에 sudo와 --executor shell 옵션을 추가하여 한 번에 등록을 끝냅니다.

 

sudo gitlab-runner register \
  --url "http://192.168.11.11:9820" \
  --token "glrt-xLXY_4xTc0Qafddpwuf" \
  --executor "shell"

 

3. 계정으로 서비스 설치 및 시작

여기가 핵심입니다. 러너를 다시 시스템 서비스로 등록할 때, 실행 주체(--user)를 qadoc으로 지정하고 작업 폴더도 qadoc의 홈 디렉토리로 맞춰줍니다.

 

sudo gitlab-runner install --user qadoc --working-directory /home/qadoc
sudo systemctl start gitlab-runner
sudo systemctl enable gitlab-runner
728x90
반응형
728x90
반응형

젠킨스(Jenkins) 파이프라인을 구축을 위해 원격 서버에 접속하여 배포 스크립트를 실행 때 SSH Key를 이용한 자격 증명(Credentials) 등록 방법 을 정리합니다. 

 

1. SSH 키 쌍(Key Pair) 생성(ssh 접속할 Remote 서버)

먼저 젠킨스가 사용할 열쇠(Private Key)와 원격 서버에 꽂아둘 자물쇠(Public Key)를 만들어야 합니다. 젠킨스 서버 또는 터미널에서 아래 명령어를 입력합니다.

# RSA 방식, 4096비트 길이로 생성
ssh-keygen -t rsa -b 4096 -C "jenkins_rsa_key"

# 생성 과정에서 엔터를 3번 쳐서 'Passphrase' 없이 생성합니다 (자동화 목적).

 

  • 생성된 파일 
    • 비밀키(Private Key): ~/.ssh/id_rsa → 젠킨스 Credentials에 등록
    • 공개키(Public Key): ~/.ssh/id_rsa.pub → 원격 서버에 등록
      • ~/.ssh/authorized_keys  파일에 id_rsa.pub 값을 붙여 넣습니다. authorized_keys   파일이 없으면 생성하고 붙여넣습니다.
# 접속 계정의 홈 디렉토리에서 실행
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "복사한_공개키_내용" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

 

2. 젠킨스(Jenkins)에 비밀키 등록하기

젠킨스가 원격 서버의 문을 열 수 있도록 비밀키를 전달해 주는 과정입니다.

  1. Jenkins 관리 > Credentials 메뉴로 접속합니다.
  2. (global) 도메인을 클릭하고 Add Credentials를 누릅니다.
  3. 아래 정보를 정확히 입력합니다.
  • Kind: SSH Username with private key
  • ID: 파이프라인에서 호출할 별명 (예: target-server-rsa-key)
  • Username: 서버에 접속할 실제 계정명 (예: compatest)
  • Private Key: 'Enter directly' 선택 후 [Add] 버튼을 누릅니다.
  • Key 입력: 터미널에서 cat ~/.ssh/id_rsa 명령어로 출력된 내용을 -----BEGIN RSA PRIVATE KEY-----부터 끝까지 전부 복사해서 붙여넣습니다.

 

3. 연결테스트 -> 파이프라인(Jenkinsfile) 적용 

  • New Item 생성 

  • 구성 -> 파이프라인 스크립트 붙여넣기
pipeline {
    agent any
    environment {
        // 2단계에서 설정한 ID를 입력합니다.
        SSH_CRED_ID = "test-key"
        REMOTE_HOST = "[ip]"
        REMOTE_USER = "testuser"
    }
    stages {
        stage('Remote SSH Test') {
            steps {
                // SSH Agent 플러그인 필수
                sshagent(credentials: ["${SSH_CRED_ID}"]) {
                    sh "ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'echo Connection Success!'"
                }
            }
        }
    }
}

 

  • 테스트

728x90
반응형

'테스트 > 자동화' 카테고리의 다른 글

[Python] Test Frame Work  (4) 2025.08.06
728x90
반응형

개발이나 테스트 환경에서 오라클 데이터베이스를 구축할 때, 무거운 설치 파일을 다운로드하고 세팅하느라 고생하신 적 있으신가요? 이제는 컨테이너 기술을 활용해 단 몇 분 만에 데이터베이스를 띄울 수 있습니다.

오라클은 기존의 XE (Express Edition) 버전을 단종시키고, 더욱 강력해진 기능(AI Vector Search, JSON Relational Duality 등)을 포함한 Oracle Database 23ai Free 버전을 무료로 제공하고 있습니다.

오늘은 Docker 대신 보안이 뛰어나고 가벼운 PodmanPodman Compose를 활용하여 Oracle 23ai Free 환경을 구축하는 방법을 알아보겠습니다.

 

사전 준비 (Prerequisites)

  • OS: Rocky Linux, CentOS, RHEL 8/9 등 (또는 Ubuntu)
  • 필수 패키지: podman, podman-compose 설치 완료
  • 여유 메모리(RAM) 최소 2GB 이상 권장

Step 1. 작업 디렉터리 및 볼륨 폴더 생성

컨테이너가 삭제되더라도 데이터베이스의 데이터가 날아가지 않도록(영구 보존), 호스트 PC에 데이터를 저장할 폴더를 만들어야 합니다.

원하는 작업 공간으로 이동 후 아래 명령어를 실행하세요.

 

# oracle23 ai 를 설치할 계정생성 
adduser -d /mnt/hdd/ora23ai ora23ai

su - ora23ai 
# 데이터가 영구 저장될 볼륨 폴더 생성
mkdir data_ora23ai
#쓰기권한 설정 
chmod 777 data_ora23ai

 

 

Step 2. docker-compose.yml 파일 작성

podman-compose는 기존의 docker-compose.yml 파일 포맷을 그대로 지원합니다. 방금 만든 oracle23ai 폴더 안에 파일을 생성합니다.

  • vi docker-compose.yml
services:
  oracle23ai:
    image: container-registry.oracle.com/database/free:latest
    container_name: oracle-23ai
    ports:
      - "1523:1521"
    environment:
      # SYS, SYSTEM, PDBADMIN 계정의 공통 비밀번호로 설정됩니다.
      ORACLE_PWD: "Oracle23ai"
    volumes:
      # :z 옵션은 RHEL/Rocky Linux의 SELinux 환경에서 권한 오류를 방지하는 필수 설정입니다.
      - ./data_ora23ai:/opt/oracle/oradata:z
    healthcheck:
      test: ["CMD", "/opt/oracle/checkDBStatus.sh"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 2m

💡 주요 설정 설명

  • image: 오라클 공식 컨테이너 레지스트리에서 제공하는 최신 23ai Free 이미지를 사용합니다.
  • ORACLE_PWD: 관리자 계정의 비밀번호입니다. (보안상 복잡하게 설정하시는 것을 권장합니다.)
  • :z 옵션: Podman을 사용할 때 호스트의 폴더를 마운트하면 Permission Denied 에러가 자주 발생합니다. 끝에 :z를 붙이면 Podman이 알아서 SELinux 레이블을 조정하여 권한 문제를 해결해 줍니다.

Step 3. 컨테이너 실행하기

#컨테이너를 백그라운드(-d)에서 실행
podman compose up -d

# 실시간 로그 확인
podman logs -f oracle-23ai

로그 마지막 부분에 DATABASE IS READY TO USE! 라는 메시지가 출력되면 정상적으로 구축이 완료된 것입니다. (Ctrl+C를 눌러 로그 화면에서 빠져나옵니다.)

 

  • 컨테이너 실행중 아래와 같은 에러가 발생 할 경우 해결 방법에 따라 진행 합니다.
  • 첫번 째 아래 에러는 일반 사용자(Rootless) 권한으로 Podman을 실행할 때, 사용자 DBUS 세션을 찾지 못해 발생하는 경고 내용입니다. 해결 책은 간단합니다. 출력 메시내용을  콘솔창에서 수행 하면 됩니다. 
WARN[0000] Alternatively, you can enable lingering with: `loginctl enable-linger 54327` (possibly as root)
[ora23ai@rocky9:~]$ loginctl enable-linger 54327
  • 두번째 에러는 docker-compose.yml  을 한글 파일로 변환 하면 됩니다. 
[ora23ai@rocky9:~]$ iconv -f euc-kr -t utf-8 docker-compose.yml > docker-compose.yml.utf8
[ora23ai@rocky9:~]$ mv docker-compose.yml docker-compose.yml.bak
[ora23ai@rocky9:~]$ mv docker-compose.yml.utf8 docker-compose.yml

정상 설치가 되면 오라클 컨테이너가 기동되어 있는것을 확인 할수 있습니다. 

 

정상 설치시 아래와 같이 설치 된다. 

  • DATABASE IS READY TO USE! 출력확인

Step 4. 데이터베이스 접속 테스트

구축이 완료되었으니 DBeaver, SQL Developer 또는 터미널을 통해 접속해 봅니다.

접속 정보 요약 (중요)

Oracle 23ai Free 버전은 기존 XE와 달리 서비스명(Service Name)이 다릅니다.

  • Host: localhost (또는 서버의 IP)
  • Port: 1523
  • Service Name (PDB): FREEPDB1 (기존 XE처럼 XE를 입력하면 접속 안 됩니다!)
  • User: SYS (권한: SYSDBA) 또는 SYSTEM
  • Password: docker-compose.yml에서 설정한 ORACLE_PWD 값

💻 터미널에서 직접 접속해 보기 (SQL*Plus)

컨테이너 내부에 내장된 SQL*Plus를 이용해 바로 쿼리를 날려볼 수도 있습니다.

# SYS 계정으로 접속
podman exec -it oracle-23ai sqlplus sys/Oracle23ai@FREEPDB1 as sysdba

# or 컨테이너에 접속후 sqlplus 수행 
#podman exec -it oracle-23ai bash
#sqlplus sys/Oracle23ai@FREEPDB1 as sysdba

# 버전 확인 쿼리 실행
SQL> SELECT banner FROM v$version;


정상적으로 Oracle Database 23ai Free 관련 정보가 출력된다면 성공입니다!

🧹 (참고) 컨테이너 중지 및 삭제

사용을 마치고 컨테이너를 내리고 싶을 때는 아래 명령어를 사용합니다.

# 중지 및 컨테이너 삭제 (oradata 폴더의 데이터는 그대로 유지됨)
podman compose down
728x90
반응형
728x90
반응형

Ollama란 무엇일까? 

  • Ollama는 대규모 언어 모델(LLM)을 로컬 환경에서 쉽게 실행·관리할 수 있도록 해주는 오픈소스 플랫폼이다. 
  • 본글에서는 Ollama를 설치 하고 실제 활용하는 방법에 대해 글을 정리해 보고자 한다. 

Ollama 설치 하기 

  • 설치하는 서비스 아키텍쳐 구성은 아래 그림과 같다. 
  • Ollama라는 LLM(대규모 언어 모델) 실행 엔진과, 이 Ollama를 웹 브라우저에서 편리하게 사용할 수 있도록 해주는 웹 인터페이스인 Open WebUI를 도커 컨테이너로 실행하여 서로 연결하는 구조를 설명 한 그림이다. 

상세 구성 요소 설명

  • ollama 서비스 (백엔드 AI 엔진)
    • 역할: 실제로 LLM 모델(예: Llama 3, Mistral 등)을 다운로드하고 관리하며, 추론(inference)을 실행하는 핵심 엔진으로 API 서버 역할을 담당한다.
    • 이미지: docker.io/ollama/ollama:latest (공식 Ollama 최신 이미지 사용)
    • 포트:
      • 컨테이너 내부 포트 11434를 호스트의 11434 포트와 연결합니다.
      • 이 포트를 통해 외부(또는 다른 컨테이너)에서 Ollama API에 접근할 수 있습니다.
    • 볼륨 (저장소):
      • 호스트의 ./data/ollama 디렉토리를 컨테이너의 /root/.ollama에 마운트합니다.
      • 목적: 다운로드한 거대한 LLM 모델 파일들을 컨테이너가 삭제되어도 호스트에 영구적으로 보관하기 위함입니다.
    • 기타:
      • # devices: - nvidia.com/gpu=all: 주석 처리되어 있지만, NVIDIA GPU를 사용하여 성능을 가속화하려면 이 부분의 주석을 해제하고 관련 설정(NVIDIA Container Toolkit 등)을 해야 합니다.
      • security_opt: - label=disable: SELinux 등의 보안 레이블링을 비활성화하여 권한 문제를 방지합니다.
      • restart: always: 컨테이너가 죽으면 자동으로 재시작합니다.
  • open-webui 서비스 (프론트엔드 웹 인터페이스)
    • 역할: 사용자가 웹 브라우저를 통해 Ollama와 쉽게 상호작용(채팅, 모델 관리 등)할 수 있도록 돕는 웹 애플리케이션입니다. ChatGPT와 유사한 UI를 서비스를 제공 합니다. 
    • 이미지: ghcr.io/open-webui/open-webui:main (Open WebUI 공식 메인 브랜치 이미지 사용)
    • 포트:
      • 컨테이너 내부의 웹 서버 포트 8080을 호스트의 3000 포트와 연결합니다.
      • 사용자는 브라우저에서 http://localhost:3000으로 접속하게 됩니다.
    • 환경 변수:
      • OLLAMA_BASE_URL=http://ollama:11434: 가장 중요한 연결 고리입니다. Open WebUI가 API 요청을 보낼 Ollama 서버의 주소를 지정합니다. 여기서 http://ollama는 도커 네트워크 내부에서 ollama 컨테이너를 가리키는 호스트 이름(서비스 이름)입니다.
    • 볼륨 (저장소):
      • 호스트의 ./data/webui를 컨테이너의 /app/backend/data에 마운트합니다.
      • 목적: 사용자의 채팅 기록, 설정, 로그인 정보 등을 영구적으로 저장합니다.
    • 의존성:
      • depends_on: - ollama: ollama 컨테이너가 먼저 실행된 후에 open-webui 컨테이너가 실행되도록 순서를 보장합니다.
  • Llama 3 
    • Llama 3는 메타(Meta)에서 개발한 최신 오픈소스 대규모 언어 모델(LLM) 이다. 
    • 이전 모델인 Llama 2보다 성능이 크게 향상되었으며, 다양한 크기의 모델로 제공되어 활용 범위가 넓다. 
    • 활용 분야 
      • 챗봇: 고객 서비스, 교육, 엔터테인먼트 등 다양한 분야에서 자연스러운 대화가 가능한 챗봇 개발에 활용될 수 있습니다.
      • 콘텐츠 생성: 기사 작성, 소설 창작, 코드 생성, 번역 등 다양한 종류의 콘텐츠를 생성하는 데 사용될 수 있습니다.
      • 검색 및 요약: 방대한 정보에서 필요한 정보를 빠르게 찾고 요약하는 데 활용될 수 있습니다.

Podman Compose로 Ollama 설치 하기 

사전 준비 사항 

  • podman 과 podman compose 가 설치 되어 있지 않다면 별도로 설치 한다. 
  • Rocky 에서는 기본 설치가 되어있다. 
  • 설치 환경 구성 

 

[root@rocky9:~]$ podman --version
podman version 5.4.0
[root@rocky9:~]$ podman compose --version
>>>> Executing external compose provider "/usr/local/bin/podman-compose". Please see podman-compose(1) for how to disable this message. <<<<
 
podman-compose version 1.5.0
podman version 5.4.0
[root@rocky9:~]$ cat /etc/redhat-release
Rocky Linux release 9.6 (Blue Onyx)

 

 

Ollama 설치 계정 생성 및 docker-compose.yml 작성 

  • 설치할 계정 및 디렉토리 생성 
adduser -d /nvme/ollama ollama
su - ollama 
mkdir ai-ollama
cd ai-ollama/

 

[root@rocky9:~]$ adduser -d /nvme/ollama-docker ollama
[root@rocky9:~]$ passwd ollama
Changing password for user ollama.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@rocky9:~]$ su - ollama
[ollama@rocky9:~]$ mkdir ai-ollama
[ollama@rocky9:~]$ cd ai-ollama/
[ollama@rocky9:~/ai-ollama]$

 

  • docker-compose.yml 
version: '3.8'

services:
  # [Backend] Ollama 서비스
  ollama:
    image: docker.io/ollama/ollama:latest
    container_name: ollama
    ports:
      - "11434:11434"
    volumes:
      - ./data/ollama:/root/.ollama  # 모델 데이터 영구 저장
    # GPU 사용 시 아래 devices 주석 해제 (CDI 설정 필수)
    # devices:
    #   - nvidia.com/gpu=all
    security_opt:
      - label=disable  # SELinux 권한 문제 방지
    restart: always

  # [Frontend] Open WebUI (ChatGPT 유사 화면)
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    ports:
      - "3000:8080"  # 3000번 포트로 접속
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
    volumes:
      - ./data/webui:/app/backend/data
    depends_on:
      - ollama
    security_opt:
      - label=disable
    restart: always

 

Ollama 설치 

  • podman 으로 설치 하기 
podman compose up -d
  • Open WebUI 접속 
  • http://IP:3000/
    • 접속 해서 관리자 계정을 생성한다. 

 

 

  • 설치 하고 웹에 접속 하면 바로 사용을 할수가 없다 . 
  • llama3 모델을 설치 해야 비로소 사용이 가능 하다. 
# ollama 컨테이너 안에 명령을 내려서 'llama3' 모델을 다운로드
podman exec -it ollama ollama run llama3
  • llama3 를 설치 하고 난후 설치한 모델을 선택하면 GPT 처럼 채팅이 가능 하다
  • 테스트로  BTS 에 대해 질문을 해보았다... 

  • 한글로 번역해달라고 해봤습니다... ㅎ

 

다른 모델도 사용 할수 있다고하니... 이것도 해봐야 겠습니다. 

 

  • Google Gemma (젬마): 구글이 만든 오픈 모델 (Apache 2.0)
  • Mistral (미스트랄): 프랑스 기업이 만든 고성능 모델 (Apache 2.0)

 

728x90
반응형

'00.AI' 카테고리의 다른 글

[Claude] Claude code gitlab mcp 연동 가이드  (0) 2026.06.08
728x90
반응형

0.소프트웨어 라이선스 등급 총정리

구분 1. 퍼미시브 (Permissive) 2. 약한 카피레프트 (Weak) 3. 강한 카피레프트 (Strong) 4. 상용/개인무료 (Proprietary)
대표 라이선스 MIT, Apache 2.0, BSD, ISC LGPL, MPL, EPL, MS-PL GPL (v2, v3), AGPL Freeware(Personal), Shareware
안전 등급 🟢 매우 안전 🟢 안전 (주의 필요) 🟡 내부 사용만 안전  기업 사용 금지
대표 SW VS Code, React, Tabby, Kafka Firefox, Chrome, ScreenToGif Linux, Git, mRemoteNG, Wireshark 알집/알약, TeamViewer, AnyDesk
단순 설치/사용  가능  가능  가능  불법 (구매 필수)
사내 업무용 (아무 제약 없음) (아무 제약 없음) (내부 사용은 공개 의무 X) (적발 시 합의금/구매 청구)
수정 후 배포  가능 ⚠️ 조건부 가능  매우 위험  불가
(제품 납품) (소스 공개 의무 없음) (수정한 파일만 소스 공개) (전체 소스 공개 의무 발생) (재배포 계약 없으면 불가)
핵심 요약 "출처만 적고 맘대로 쓰세요" "사용은 OK, 고친 파일만 공개해요" "혼자 쓰면 OK, 남 주면 다 공개" "개인은 무료, 기업은 돈 내세요"

1. 들어가며

매년 돌아오는 소프트웨어 라이선스 감사(Audit)와 보안 점검. "무료 다운로드"라고 적혀 있어서 설치했다가 회사에 수백만 원의 청구서가 날아오거나, 보안 위규로 지적받는 일이 빈번합니다.

최근 라이선스 정책이 바뀐 주요 소프트웨어(VMware 등)와 기업에서 안전하게 사용할 수 있는 대체재들을 정리했습니다. 이 글 하나로 팀원들의 PC를 깔끔하게 세팅해 보세요.

 

2. 가상화 (Virtualization) & 컨테이너

🔴 VMware Workstation / Fusion

  • 상태: 무료 (조건부)
  • 핵심 변경(2024.11.11): 상업용(Commercial Use)도 전면 무료화되었습니다.
  • 주의사항:
    • 구버전(v15 등) 삭제 필수: 보안 취약점 및 라이선스 키 입력 방식인 구버전은 불법/보안 위규입니다.
    • 최신 버전(v17 이상/25h) 설치: 최신 버전만 무료 라이선스(Free for Commercial Use)가 적용됩니다.
    • 기술 지원 없음: 무료인 대신 공식 기술 지원은 제공되지 않습니다.

🔴 VirtualBox

  • 상태: 부분 무료 (함정 주의)
  • 본체: 무료 (GPL v2).
  • 확장팩(Extension Pack): 유료 (매우 비쌈). 설치 시 기업은 라이선스 위반입니다.
  • 가이드: 설치 시 확장팩은 절대 설치하지 말고, 기본 패키지만 사용하세요. (기본 기능으로도 리눅스 설치 충분함)

🔴 Docker Desktop

  • 상태: 유료 (대기업 기준)
  • 기준: 직원 250명 이상 or 매출 1,000만 달러 이상 기업은 유료 구독 필수.
  • 대안 (추천): WSL2 + Docker Engine (Ubuntu)
    • 윈도우의 WSL2에 우분투를 설치하고, 그 안에 도커 엔진을 직접 깔면 100% 무료입니다. (성능도 더 빠름)

3. 터미널 접속 (SSH Client)

🔴 SecureCRT / Xshell

  • 상태: 유료
  • 가이드: 회사에서 라이선스를 사주지 않는다면 삭제해야 합니다.

✅ 추천 대체재 (무료)

  1. Tabby (1순위 추천): UI가 세련되고 SFTP(파일 전송) 기능이 내장되어 있습니다. SecureCRT의 훌륭한 대체재입니다.
  2. mRemoteNG: 수십 대의 서버를 폴더 트리 구조로 관리해야 한다면 가장 좋습니다. (GPL v2 완전 무료)
  3. Windows Terminal: MS 공식 오픈소스. 가장 가볍고 안전합니다. (단, 기능은 심플함)
  4. Tera Term: UI는 투박하지만, 'Broadcast Command'(동시 입력) 기능이 필요하다면 추천합니다.
  • 주의: Termius는 클라우드 동기화 보안 이슈로 기업 사용 비추천.

4. API 테스트 & 개발 도구

🔴 Postman

  • 상태: 라이선스 무료 / 보안 위험
  • 이슈: 라이선스 비용 문제는 없으나, 최신 버전이 클라우드 강제 동기화를 요구하여 사내 데이터 유출 우려로 금지하는 기업이 많습니다.

✅ 추천 대체재

  1. Insomnia: 'Scratch Pad' 모드를 통해 로컬 저장만 하도록 설정 가능합니다. Postman과 사용법이 가장 유사합니다.
  2. Thunder Client: VS Code 확장 프로그램입니다. 별도 설치 없이 가볍게 쓰기 좋습니다.

5. 유틸리티 (압축, 편집기)

🔴 알툴즈 (알집, 알약 등)

  • 상태: 유료 (기업 절대 사용 금지)
  • 가이드: 기업에서는 무조건 유료입니다. 감사 적발 1순위이므로 즉시 삭제하세요.

✅ 추천 대체재

  • 반디집 (Standard): 기업 무료입니다. 광고가 한 줄 뜨지만 성능과 라이선스 모두 안전합니다.
  • 7-Zip: UI는 예쁘지 않지만 완전 무료 오픈소스입니다.

🔴 편집기 (EditPlus, UltraEdit, AcroEdit)

  • 상태: 대부분 유료이거나 업데이트 중단.
  • 대안: VS Code (Visual Studio Code) 하나면 충분합니다. (Notepad++ 도 안전)
728x90
반응형
728x90
반응형

[Podman] MariaDB Docker Compose 설치 방법

최근 리눅스 환경(특히 RHEL, Rocky, 최신 Ubuntu 등)에서 Docker 대신 Podman을 사용하여 컨테이너를 관리하는 경우가 많아졌습니다. Podman은 데몬 없이 작동하고 Rootless(관리자 권한 없이 실행) 모드를 지원하여 보안상 이점이 크지만, Docker와 미세하게 다른 설정 때문에 당황스러운 에러를 겪기도 합니다.

오늘은 docker-compose.yml을 이용해 MariaDB를 설치하는 과정에 대해 공유 합니다. 

1. docker-compose.yml 작성

먼저 MariaDB 11.3 버전을 설치하기 위해 구성 파일을 작성합니다. Podman 환경이라도 파일명은 docker-compose.yml을 그대로 사용하면 podman-compose 명령어가 자동으로 인식합니다.

 

파일명: docker-compose.yml

version: "3.8"

services:
  mariadb:
    image: docker.io/library/mariadb:11.3
    container_name: mariadb
    restart: always
    ports:
      - "3306:3306"
    environment:
      MARIADB_ROOT_PASSWORD: rootpassword
      MARIADB_DATABASE: mydb
      MARIADB_USER: myuser
      MARIADB_PASSWORD: mypassword
    volumes:
      - mariadb_data:/var/lib/mysql
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci

volumes:
  mariadb_data:

 

Mariadb 실행 

#설치 및 기동 
podman  compose up 

#background 실행 
podman  compose up -d 

#Mariadb 기동 상태 확인 
podman  compose ps 

#종료
podman  compose down​

 

[mig-db@rocky9:~/mariadb]$ podman  compose up
>>>> Executing external compose provider "/usr/local/bin/podman-compose". Please see podman-compose(1) for how to disable this message. <<<<

0432514b156c83332ceef9385ce6cfbe7c0192c9cbdb5e9f5dd22fe9cc1b252f
ffe11f79561b93175d00b04ecb5f3d762143a75a1a723b88d92de704fbe1a0e2
[mariadb] | 2026-01-23 02:22:56+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:11.3.2+maria~ubu2204 started.
[mariadb] | 2026-01-23 02:22:56+00:00 [Warn] [Entrypoint]: /sys/fs/cgroup///memory.pressure not writable, functionality unavailable to MariaDB
[mariadb] | 2026-01-23 02:22:56+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
[mariadb] | 2026-01-23 02:22:56+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:11.3.2+maria~ubu2204 started.
[mariadb] | 2026-01-23 02:22:56+00:00 [Note] [Entrypoint]: MariaDB upgrade not required
[mariadb] | 2026-01-23  2:22:56 0 [Note] Starting MariaDB 11.3.2-MariaDB-1:11.3.2+maria~ubu2204 source revision 068a6819eb63bcb01fdfa037c9bf3bf63c33ee42 as process 1
[mariadb] | 2026-01-23  2:22:56 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
[mariadb] | 2026-01-23  2:22:56 0 [Note] InnoDB: Number of transaction pools: 1
[mariadb] | 2026-01-23  2:22:56 0 [Note] InnoDB: Using crc32 + pclmulqdq instructions
[mariadb] | 2026-01-23  2:22:56 0 [Note] mariadbd: O_TMPFILE is not supported on /tmp (disabling future attempts)
[mariadb] | 2026-01-23  2:22:56 0 [Note] InnoDB: Initializing buffer pool, total size = 128.000MiB, chunk size = 2.000MiB
[mariadb] | 2026-01-23  2:22:56 0 [Note] InnoDB: Completed initialization of buffer pool
[mariadb] | 2026-01-23  2:22:56 0 [Note] InnoDB: File system buffers for log disabled (block size=4096 bytes)
[mariadb] | 2026-01-23  2:22:56 0 [Note] InnoDB: End of log at LSN=47661
[mariadb] | 2026-01-23  2:22:57 0 [Note] InnoDB: Opened 3 undo tablespaces
[mariadb] | 2026-01-23  2:22:57 0 [Note] InnoDB: 128 rollback segments in 3 undo tablespaces are active.
[mariadb] | 2026-01-23  2:22:57 0 [Note] InnoDB: Setting file './ibtmp1' size to 12.000MiB. Physically writing the file full; Please wait ...
[mariadb] | 2026-01-23  2:22:57 0 [Note] InnoDB: File './ibtmp1' size is now 12.000MiB.
[mariadb] | 2026-01-23  2:22:57 0 [Note] InnoDB: log sequence number 47661; transaction id 14
[mariadb] | 2026-01-23  2:22:57 0 [Note] Plugin 'FEEDBACK' is disabled.
[mariadb] | 2026-01-23  2:22:57 0 [Note] Plugin 'wsrep-provider' is disabled.
[mariadb] | 2026-01-23  2:22:57 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
[mariadb] | 2026-01-23  2:22:57 0 [Note] Server socket created on IP: '0.0.0.0'.
[mariadb] | 2026-01-23  2:22:57 0 [Note] Server socket created on IP: '::'.
[mariadb] | 2026-01-23  2:22:57 0 [Note] mariadbd: Event Scheduler: Loaded 0 events
[mariadb] | 2026-01-23  2:22:57 0 [Note] InnoDB: Buffer pool(s) load completed at 260123  2:22:57
[mariadb] | 2026-01-23  2:22:57 0 [Note] mariadbd: ready for connections.
[mariadb] | Version: '11.3.2-MariaDB-1:11.3.2+maria~ubu2204'  socket: '/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution
^C[mig-db@rocky9:~/mariadb]$ [mariadb] | 2026-01-23  2:23:28 0 [Note] mariadbd (initiated by: unknown): Normal shutdown
[mariadb] | 2026-01-23  2:23:28 0 [Note] InnoDB: FTS optimize thread exiting.
[mariadb] | 2026-01-23  2:23:28 0 [Note] InnoDB: Starting shutdown...
[mariadb] | 2026-01-23  2:23:28 0 [Note] InnoDB: Dumping buffer pool(s) to /var/lib/mysql/ib_buffer_pool
[mariadb] | 2026-01-23  2:23:28 0 [Note] InnoDB: Buffer pool(s) dump completed at 260123  2:23:28
[mariadb] | 2026-01-23  2:23:28 0 [Note] InnoDB: Removed temporary tablespace data file: "./ibtmp1"
[mariadb] | 2026-01-23  2:23:28 0 [Note] InnoDB: Shutdown completed; log sequence number 47661; transaction id 15
[mariadb] | 2026-01-23  2:23:28 0 [Note] mariadbd: Shutdown complete
[mariadb] | 
mariadb
0432514b156c83332ceef9385ce6cfbe7c0192c9cbdb5e9f5dd22fe9cc1b252f
mariadb_default

Mariadb 접속 

podman exec -it mariadb mariadb -u root -p
# Password 입력 프롬프트가 뜨면 설정한 비밀번호(rootpassword) 입력
# docker-compose.yml 에 작성된 비밀번호를 입력한다.

 

실습

# 1.'mariadb'는 접속 :  docker-compose에서 정한 컨테이너 이름입니다.
podman exec -it mariadb mariadb -u root -p

# 2. docker-compose 설정 파일에서 만든 mydb 데이터베이스로 이동
USE mydb;

#3. 테이블 생성 
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100)
);

#4. 데이터 입력 (한글 테스트)
INSERT INTO users (username, email) VALUES ('홍길동', 'hong@test.com');
INSERT INTO users (username, email) VALUES ('Alice', 'alice@test.com');

#5. 데이터 조회
SELECT * FROM users;

 

 

DBeaver 연결 설정 방법 

 

문제발생 해결 방법

작성한 파일을 실행하기 위해 터미널에 podman-compose up -d를 입력했는데, 컨테이너가 뜨지 않고 아래와 같은 에러 로그가 출력이 됨.

[에러 메시지] Error: unable to start container ... : did not receive systemd slice as cgroup parent when using systemd to manage cgroups: invalid argument

 

원인 분석

이 에러는 Podman(Rootless 모드)이 시스템의 systemd와 상호작용할 때 Cgroup(리소스 관리) 설정이 충돌하여 발생하는 문제로 , 일반 사용자 권한으로 실행 중인데 시스템 관리 영역인 systemd cgroup에 접근하려다 거절당한 것입니다.

이때 sudo를 붙여서 실행하면 해결되긴 하지만, 그렇게 되면 생성되는 DB 파일들의 소유권이 root가 되어버립니다. 나중에 파일 이동이나 백업 시 Permission Denied로 고생할 수 있으므로 권장하지 않습니다.

해결 방법: containers.conf 설정 (권장)

  • 가장 깔끔한 해결책은 Podman이 시스템의 systemd 대신 자체적인 cgroupfs를 사용하도록 설정을 변경하는 것입니다. 이 설정은 현재 로그인한 사용자 계정에만 적용된다. 
mkdir -p ~/.config/containers
vi ~/.config/containers/containers.conf

 

  • ~/.config/containers/containers.conf 파일에 아래 내용 작성 
[engine]
cgroup_manager = "cgroupfs"
events_logger = "file"

 

 

잠깐! 상식

MariaDB는 MySQL의 소스 코드를 기반으로 만들어진(Fork된) 파생 버전입니다. 그래서 명령어, 포트, 파일 구조가 거의 똑같습니다.

사용자 입장에서 중요한 3가지 핵심 관계를 정리해 드릴게요.

왜 갈라졌나요? (탄생 비화)

  • MySQL의 창시자: 몬티 와이드니어스(Monty Widenius)라는 개발자가 만들었습니다. (딸 이름이 'My'라서 MySQL입니다.)
  • 오라클 인수: MySQL이 썬 마이크로시스템즈를 거쳐 거대 기업인 오라클(Oracle) 로 넘어가게 되었습니다.
  • MariaDB 탄생: 몬티는 오라클이 MySQL을 상업적으로 폐쇄할까 봐 걱정하여, "영원히 무료인 오픈소스"를 지키기 위해 MySQL 소스 코드를 들고 나와서 MariaDB를 새로 만들었습니다. (둘째 딸 이름이 'Maria'라서 MariaDB입니다.)

 

 

728x90
반응형

'05.DB > Mysql' 카테고리의 다른 글

Mysql 실행 SQL 확인 방법  (0) 2023.03.07
[Mysql] 유저 생성 /DB생성/권한부여  (0) 2022.05.24
[Mysql] DBeaver Mysql 접속  (0) 2022.04.19
728x90
반응형

Jenkins Docker 설치 가이드 (Rocky9, jen 계정 기준)

1. 사전 준비

1-1. jen 계정 확인

sudo useradd -m jen
sudo passwd jen
sudo usermod -aG docker jen
  • Docker 명령어를 비루트 계정(jen)에서 실행 가능하도록 docker 그룹에 추가합니다.

1-2. 디렉토리 생성

sudo mkdir -p /hdd/jen/home
sudo chown -R jen:jen /hdd/jen
sudo chmod -R 750 /hdd/jen/home
  • /hdd/jen/home : Jenkins 홈 디렉토리 (데이터 영속화)
  • SELinux 환경에서는 :Z 옵션 사용

2. Docker / Docker Compose 설치 확인

docker --version
docker compose version
  • 설치되지 않았다면:
sudo dnf install -y dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl enable --now docker

3. Docker Compose 파일 생성

cd /hdd/jen
vi docker-compose.yml
version: '3.8'
services:
  jenkins:
    image: jenkins/jenkins:lts
    container_name: jenkins
    restart: always
    user: root                    # 일부 플러그인 설치를 위해 root 필요
    ports:
      - "8080:8080"               # 웹 UI
      - "50000:50000"             # agent 연결
    volumes:
      - /hdd/jen/home:/var/jenkins_home:Z
    shm_size: '512m'

설명

  • :Z → SELinux 컨텍스트 적용
  • 8080 → 브라우저 접속용
  • 50000 → Jenkins agent 연결용
  • shm_size → 빌드 시 메모리 공유 공간 확보

4. Jenkins 실행

cd /hdd/jen
docker compose up -d
  • 컨테이너 정상 실행 확인:
docker ps

5. 초기 설정

  1. 브라우저에서 접속:
http://서버IP:8080
  1. 초기 관리자 비밀번호 확인
docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword
  1. Jenkins 웹 UI에서 초기 비밀번호 입력 후

    • 추천 플러그인 설치
    • 관리자 계정 생성

6. 권한 및 SELinux 확인

sudo chown -R jen:jen /hdd/jen/home
sudo chmod -R 750 /hdd/jen/home
  • SELinux 활성화 시 :Z 옵션 필요

7. GitLab 연동 (선택 사항)

  1. Jenkins 플러그인 설치

    • GitLab Plugin
    • Git Plugin
  2. Jenkins에서 GitLab 서버 등록

    • URL: http://<GitLab 서버IP>:<포트>
    • Access Token 생성 → Jenkins Credential 등록
  3. Job 생성 → GitLab 프로젝트 빌드 가능


8. 컨테이너 관리

  • Jenkins 재시작
docker compose restart
  • 컨테이너 중지
docker compose down
  • 로그 확인
docker compose logs -f

참고 사항

  • /hdd/jen/home 경로는 Jenkins 데이터 전용. 컨테이너 삭제해도 데이터 보존됨
  • 호스트 방화벽에서 8080/50000 포트 열어야 외부 접근 가능
  • 운영 환경이면 SSL/HTTPS 적용 가능 (리버스 프록시 추천)
728x90
반응형

'04.DevTools' 카테고리의 다른 글

[Nginx]Nginx 설치 및 설정 가이드  (0) 2026.05.29
[SVN] SVN 사용법  (0) 2024.11.14
[IntelliJ] Intellij Gitlab 연동  (0) 2024.08.16
[Nexus]Centos7 nexus 설치 및 이클립스 연동  (0) 2022.04.21
728x90
반응형

이 문서는 Rocky Linux 9 환경에서 Harbor를 설치하고 설정하는 과정을 단계별로 정리한 가이드입니다. Docker 기반 설치 환경을 기준으로 합니다.


1. 사전 준비

1.1 서버 환경

  • OS: Rocky Linux 9
  • 최소 사양: CPU 2코어, RAM 4GB 이상, 디스크 40GB 이상

1.2 필수 패키지 설치

sudo dnf -y update
sudo dnf -y install curl wget tar dnf-plugins-core

1.3 Docker 설치

# 기존 Podman 또는 Docker 패키지 제거
sudo dnf remove podman-docker podman

# Docker CE 레포 추가
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# Docker CE 설치
sudo dnf -y install docker-ce docker-ce-cli containerd.io

# Docker 서비스 활성화
sudo systemctl enable --now docker

# 버전 확인
docker --version
docker-compose version

참고: Podman 환경에서는 Harbor install.sh가 Docker 버전 체크로 실패할 수 있으므로, 운영 환경에서는 Docker CE 설치를 권장합니다.

1.4 Docker Compose 설치

sudo curl -L "https://github.com/docker/compose/releases/download/2.29.2/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

2. Harbor 전용 계정 및 디렉토리 설정

2.1 Harbor 전용 계정 생성

sudo useradd -m -s /bin/bash harbor
sudo passwd harbor

2.2 Harbor 디렉토리 이름 변경 및 권한 설정

cd /opt
sudo mv harbor myharbor
sudo chown -R harbor:harbor myharbor

3. Harbor 다운로드 및 설정

3.1 Harbor 다운로드

wget https://github.com/goharbor/harbor/releases/download/v2.11.0/harbor-online-installer-v2.11.0.tgz
tar xvf harbor-online-installer-v2.11.0.tgz
cd harbor

3.2 설정 파일 준비

cp harbor.yml.tmpl harbor.yml
nano harbor.yml

harbor.yml 예시

hostname: harbor.example.com
http:
  port: 8080
harbor_admin_password: Harbor12345
data_volume: /home/harbor/data
  • hostname: Harbor 접속할 도메인 또는 IP
  • port: HTTP 포트 (운영 환경에서는 HTTPS 권장)
  • data_volume: Harbor 이미지 저장 위치, harbor 계정이 접근 가능해야 함

4. Harbor 설치

sudo ./install.sh
  • 설치 완료 후 컨테이너 확인:
docker ps
  • 주요 컨테이너: harbor-core, harbor-db, harbor-portal, harbor-registry

5. 웹 UI 접속

  • 브라우저 접속: http://harbor.example.com:8080
  • 기본 계정:
    • ID: admin
    • PW: Harbor12345

6. Docker 클라이언트에서 Harbor 로그인

docker login harbor.example.com:8080

7. 운영 환경 권장 설정

  • HTTPS 적용: 운영 환경에서는 Let’s Encrypt 등 SSL 인증서 적용 필수
  • 방화벽 설정:
sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
  • 데이터 저장소 용량 충분히 확보(/home/harbor/data)

8. 참고 사항

  • 테스트/개발 환경: HTTP, Docker CE 또는 Podman + Podman Compose 가능
  • 운영 환경: HTTPS 필수, Docker CE 설치 권장
  • 설치 시 Harbor install.sh에서 Docker 버전 체크 실패 시 Podman 사용 환경에서는 install.sh 수동 실행 또는 우회 필요
728x90
반응형

+ Recent posts