8.1 KiB
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. 데이터베이스 설정
- MariaDB/MySQL에
gyber데이터베이스와gyber사용자를 생성하고 권한을 부여합니다. - 제공된 DB 스키마 파일 (
schema.sql등)을 사용하여 테이블과 저장 프로시저를 생성합니다. - 시간대 정보 로드 (필수): DB 서버에서 다음 명령을 실행하여 시간대 정보를 로드합니다.
sudo mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
2. Rust DB 자격 증명 암호화 유틸리티 (rust_db_enc_creator) 실행
이 유틸리티는 DB 접속 정보를 암호화하여 db.enc 파일을 생성합니다.
.env파일 생성:apps/rust_db_enc_creator/디렉토리에.env파일을 만들고 다음 내용을 작성합니다.# apps/rust_db_enc_creator/.env ENCRYPTION_KEY="your-strong-32-byte-encryption-key-here" # 32바이트(256비트) 키- 유틸리티 실행:
cd apps/rust_db_enc_creator cargo run - 실행이 완료되면
apps/rust_db_enc_creator/디렉토리에db.enc파일이 생성됩니다. 이 파일을apps/rust_gyber/config/디렉토리로 이동 또는 복사합니다.
3. Rust 데이터 동기화 에이전트 (rust_gyber) 설정 및 실행
- 환경 변수 설정:
apps/rust_gyber/디렉토리에.env파일을 만들고 암호화 유틸리티에서 사용한 것과 동일한ENCRYPTION_KEY를 설정합니다.# apps/rust_gyber/.env ENCRYPTION_KEY="your-strong-32-byte-encryption-key-here" - 설정 파일 확인:
apps/rust_gyber/config/config.json파일의json_file_path가 PowerShell 스크립트가 정보를 저장하는 공유 폴더 경로와 일치하는지 확인합니다. - 컴파일 및 실행:
cd apps/rust_gyber cargo build --release # 프로덕션용으로 빌드 ./target/release/gyber # 실행- 실제 운영 시에는 이 Rust 애플리케이션도
systemd서비스로 등록하여 백그라운드에서 주기적으로 실행되도록 구성하는 것이 좋습니다.
- 실제 운영 시에는 이 Rust 애플리케이션도
4. Django 웹 애플리케이션 (web) 설정 및 배포
이 프로젝트는 Ubuntu 22.04 서버에서 Nginx와 Gunicorn을 사용하여 프로덕션 환경에 배포하는 것을 기준으로 합니다.
-
프로젝트 클론 및 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 -
환경 변수 파일 생성:
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 -
Django
settings.py확인:apps/web/config/settings.py파일이 프로덕션 환경에 맞게 설정되었는지 확인합니다 (DEBUG = False, 환경 변수 참조 등). -
collectstatic실행:# 가상 환경 활성화 상태에서 cd /data/gyber/apps/web python manage.py collectstatic --noinput -
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
-
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
- SSL/TLS 인증서 파일들을 안전한 위치(예:
-
방화벽 설정:
sudo ufw allow 8438/tcp # HTTPS 포트 sudo ufw allow 80/tcp # HTTP->HTTPS 리디렉션 사용 시
5. 클라이언트 PC 설정 (PowerShell 스크립트)
scripts/powershell/Collect-HWInfo.ps1스크립트를 클라이언트 PC에 배포합니다.- 스크립트 내의
$saveDir변수를 실제 데이터가 저장될 네트워크 공유 폴더 경로로 수정합니다. - 이 스크립트가 각 PC에서 주기적으로 (예: 로그인 시 또는 예약된 작업으로) 실행되도록 설정합니다.