2025-09-15 13:33:34 +09:00
2025-09-15 13:33:34 +09:00
2025-09-15 13:33:34 +09:00
2025-09-15 13:33:34 +09:00
2025-09-15 13:33:34 +09:00
2025-09-15 13:33:34 +09:00

Gyber - 통합 자산 관리 시스템

Gyber는 사내 IT 자산을 효율적으로 관리하기 위한 통합 시스템입니다. Windows 클라이언트 PC의 하드웨어 정보를 PowerShell 스크립트로 자동 수집하고, Rust로 작성된 동기화 에이전트가 이를 중앙 데이터베이스에 반영합니다. 관리자는 Django로 제작된 웹 인터페이스를 통해 자산을 조회, 추가, 수정, 삭제하고, 사용자별 할당 현황 및 감사 로그를 확인할 수 있습니다.

주요 기능

  • 💻 하드웨어 정보 자동 수집: PowerShell 스크립트를 통해 CPU, 메모리, 디스크, VGA 등 상세 하드웨어 정보를 수집합니다.
  • ⚙️ Rust 기반 데이터 동기화: Rust로 작성된 강력하고 안정적인 에이전트가 수집된 정보를 중앙 DB와 동기화합니다.
  • 🌐 웹 기반 관리 인터페이스: Django 프레임워크를 사용하여 직관적인 웹 UI를 제공합니다.
    • 자산, 사용자, 그룹(부서), 카테고리의 CRUD(생성, 읽기, 수정, 삭제) 기능
    • 강력한 검색, 필터링 및 정렬 기능
    • 대시보드를 통한 자산 현황 요약
    • 변경 이력 추적을 위한 상세 감사 로그
  • 🔒 동기화 잠금 기능: 웹에서 수동으로 입력하거나 중요한 자산 정보를 자동 동기화로부터 보호하는 잠금 기능
  • 🔐 Azure AD 기반 SSO: OpenID Connect(OIDC)를 통한 안전하고 편리한 사용자 인증
  • 🎨 다크/라이트 모드 지원: 사용자 편의를 위한 동적 테마 전환
  • 📊 데이터 내보내기: 현재 조회 중인 목록을 CSV 파일로 내보내기

🛠️ 기술 스택

  • 백엔드 (웹): Python, Django
  • 백엔드 (동기화 에이전트): Rust
  • 프론트엔드: HTML, CSS, JavaScript, Bootstrap 5, Select2, Chart.js
  • 데이터베이스: MariaDB / MySQL
  • 인프라: Nginx, Gunicorn, systemd
  • 인증: Azure Active Directory (OIDC)
  • 클라이언트 정보 수집: PowerShell

🚀 시작하기

이 프로젝트는 크게 **웹 애플리케이션 (Django)**과 데이터 동기화 에이전트 (Rust), 그리고 **DB 자격 증명 암호화 유틸리티 (Rust)**로 구성됩니다.

사전 준비 사항

  • Ubuntu Server 22.04 LTS (또는 유사한 Linux 배포판)
  • MariaDB 또는 MySQL 데이터베이스 서버
  • Rust 개발 환경 (rustup 권장)
  • Python 3.12+ 개발 환경
  • Nginx
  • Azure Active Directory 테넌트 및 앱 등록 정보 (클라이언트 ID, 시크릿, 테넌트 ID)
  • (클라이언트 PC) PowerShell 5.1 이상

1. 데이터베이스 설정

  1. MariaDB/MySQL에 gyber 데이터베이스와 gyber 사용자를 생성하고 권한을 부여합니다.
  2. 제공된 DB 스키마 파일 (schema.sql 등)을 사용하여 테이블과 저장 프로시저를 생성합니다.
  3. 시간대 정보 로드 (필수): DB 서버에서 다음 명령을 실행하여 시간대 정보를 로드합니다.
    sudo mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
    

2. Rust DB 자격 증명 암호화 유틸리티 (rust_db_enc_creator) 실행

이 유틸리티는 DB 접속 정보를 암호화하여 db.enc 파일을 생성합니다.

  1. .env 파일 생성: apps/rust_db_enc_creator/ 디렉토리에 .env 파일을 만들고 다음 내용을 작성합니다.
    # apps/rust_db_enc_creator/.env
    ENCRYPTION_KEY="your-strong-32-byte-encryption-key-here" # 32바이트(256비트) 키
    
  2. 유틸리티 실행:
    cd apps/rust_db_enc_creator
    cargo run
    
  3. 실행이 완료되면 apps/rust_db_enc_creator/ 디렉토리에 db.enc 파일이 생성됩니다. 이 파일을 apps/rust_gyber/config/ 디렉토리로 이동 또는 복사합니다.

3. Rust 데이터 동기화 에이전트 (rust_gyber) 설정 및 실행

  1. 환경 변수 설정: apps/rust_gyber/ 디렉토리에 .env 파일을 만들고 암호화 유틸리티에서 사용한 것과 동일한 ENCRYPTION_KEY를 설정합니다.
    # apps/rust_gyber/.env
    ENCRYPTION_KEY="your-strong-32-byte-encryption-key-here"
    
  2. 설정 파일 확인: apps/rust_gyber/config/config.json 파일의 json_file_path가 PowerShell 스크립트가 정보를 저장하는 공유 폴더 경로와 일치하는지 확인합니다.
  3. 컴파일 및 실행:
    cd apps/rust_gyber
    cargo build --release # 프로덕션용으로 빌드
    ./target/release/gyber # 실행
    
    • 실제 운영 시에는 이 Rust 애플리케이션도 systemd 서비스로 등록하여 백그라운드에서 주기적으로 실행되도록 구성하는 것이 좋습니다.

4. Django 웹 애플리케이션 (web) 설정 및 배포

이 프로젝트는 Ubuntu 22.04 서버에서 Nginx와 Gunicorn을 사용하여 프로덕션 환경에 배포하는 것을 기준으로 합니다.

  1. 프로젝트 클론 및 Python 가상환경 설정:

    cd /data/gyber/apps # 예시 경로
    git clone <your-repository-url> web
    cd web
    python3 -m venv vgyber
    source vgyber/bin/activate
    pip install -r requirements.txt
    
  2. 환경 변수 파일 생성: systemd 서비스에서 사용할 환경 변수 파일을 생성합니다 (예: /etc/gyber/gyber_prod.env).

    sudo mkdir -p /etc/gyber
    sudo nano /etc/gyber/gyber_prod.env
    

    파일 내용:

    DJANGO_SECRET_KEY="your_django_production_secret_key"
    DB_PASSWORD="your_database_password"
    OIDC_RP_CLIENT_ID="your_azure_ad_client_id"
    OIDC_RP_CLIENT_SECRET="your_azure_ad_client_secret"
    AZURE_TENANT_ID="your_azure_ad_tenant_id"
    # 기타 필요한 환경 변수 (DB_HOST, DB_USER, OIDC_RP_POST_LOGOUT_REDIRECT_URI 등)
    

    파일 권한을 설정합니다: sudo chmod 600 /etc/gyber/gyber_prod.env

  3. Django settings.py 확인: apps/web/config/settings.py 파일이 프로덕션 환경에 맞게 설정되었는지 확인합니다 (DEBUG = False, 환경 변수 참조 등).

  4. collectstatic 실행:

    # 가상 환경 활성화 상태에서
    cd /data/gyber/apps/web
    python manage.py collectstatic --noinput
    
  5. Gunicorn systemd 서비스 설정:

    • /etc/systemd/system/gunicorn_gyber.socket/etc/systemd/system/gunicorn_gyber.service 파일을 생성하고 제공된 파일 내용을 복사합니다.
    • 서비스 파일의 User, Group, WorkingDirectory, ExecStart, EnvironmentFile 경로가 실제 환경과 일치하는지 확인합니다.
    • 서비스 시작 및 활성화:
      sudo systemctl daemon-reload
      sudo systemctl start gunicorn_gyber.socket
      sudo systemctl enable gunicorn_gyber.socket
      sudo systemctl start gunicorn_gyber.service
      sudo systemctl enable gunicorn_gyber.service
      
  6. Nginx 설정:

    • SSL/TLS 인증서 파일들을 안전한 위치(예: /etc/nginx/ssl/gyber.oneunivrs.com/)에 준비합니다.
    • /etc/nginx/sites-available/gyber_project 설정 파일을 생성하고, server_name, listen 포트(8438), ssl_certificate 경로, alias 경로, proxy_pass 소켓 경로 등을 실제 환경에 맞게 수정합니다.
    • 설정 활성화 및 Nginx 재시작:
      sudo ln -s /etc/nginx/sites-available/gyber_project /etc/nginx/sites-enabled/
      sudo nginx -t
      sudo systemctl restart nginx
      
  7. 방화벽 설정:

    sudo ufw allow 8438/tcp # HTTPS 포트
    sudo ufw allow 80/tcp  # HTTP->HTTPS 리디렉션 사용 시
    

5. 클라이언트 PC 설정 (PowerShell 스크립트)

  1. scripts/powershell/Collect-HWInfo.ps1 스크립트를 클라이언트 PC에 배포합니다.
  2. 스크립트 내의 $saveDir 변수를 실제 데이터가 저장될 네트워크 공유 폴더 경로로 수정합니다.
  3. 이 스크립트가 각 PC에서 주기적으로 (예: 로그인 시 또는 예약된 작업으로) 실행되도록 설정합니다.
Description
No description provided
Readme 596 KiB
Languages
Python 31.3%
JavaScript 19.4%
HTML 19.1%
CSS 18.6%
Rust 8%
Other 3.6%