OpenSource-Hub

snipe-it

애플리케이션

grokability/snipe-it

오픈 소스 IT 자산 및 라이선스 관리 시스템.

개요

Snipe-IT은 조직이 하드웨어 자산을 추적하고 소프트웨어 라이선스와 감가상각을 관리할 수 있도록 지원하는 무료 오픈 소스 웹 기반 IT 자산 관리 시스템으로, Laravel 기반으로 구축되었으며 REST API를 제공하고 Docker 배포를 지원합니다.

README 미리보기

\n\n[](https://crowdin.com/project/snipe-it) [](https://hub.docker.com/r/snipe/snipe-it/)  [](https://github.com/grokability/snipe-it/actions/workflows/tests-mysql.yml)\n[](#contributing) [](https://discord.gg/yZFtShAcKk)\n\n## Snipe-IT - Open Source Asset Management System\n\nThis is a FOSS project for asset management in IT Operations. Knowing who has which laptop, when it was purchased in order to depreciate it correctly, handling software licenses, etc.\n\nIt is built on [Laravel 12](http://laravel.com).\n\nSnipe-IT is actively developed and we [release quite frequently](https://github.com/grokability/snipe-it/releases). ([Check out the live demo here](https://snipeitapp.com/demo/).)\n\n> [!TIP]\n> __This is web-based software__. This means there is no executable file (aka no .exe files), and it must be run on a web server and accessed through a web browser. It runs on any Mac OSX, any flavor of Linux, as well as Windows, and we have a [Docker image](https://snipe-it.readme.io/docs/docker) available if that's what you're into.\n\n-----\n\n### Table of Contents\n* [Installation](#installation)\n* [User's Manual](#users-manual)\n* [Bug Reports & Feature Requests](#bug-reports--feature-requests)\n* [Security](#security)\n* [Upgrading](#upgrading)\n* [Translations!](#translations-)\n* [Libraries, Modules & Related Projects](#libraries-modules--related-projects)\n* [Join the Community!](#join-the-community)\n* [Contributing](#contributing)\n* [Announcement List](#announcement-list)\n\n\n-----\n\n### Installation\n\nFor instructions on installing and configuring Snipe-IT on your server, check out the [installation manual](https://snipe-it.readme.io/docs). (Please see the [requirements documentation](https://snipe-it.readme.io/docs/requirements) for full requirements.)\n\nIf you're having trouble with the installation, please check the [Common Issues](https://snipe-it.readme.io/docs/common-issues) and [Getting Help](https://snipe-it.readme.io/docs/getting-help) documen

FAQ (5)

문제 해결
Snipe-IT API 하드웨어 페이지네이션이 limit과 offset을 사용할 때 자산을 건너뛰거나 누락하는 이유는 무엇인가요?

Snipe-IT는 /api/v1/hardware 인덱스 정렬의 기본값으로 created_at을 사용하는데, 이 값은 고유하지 않습니다. 여러 자산이 동일한 생성 타임스탬프를 공유하는 경우(예: 일괄 가져오기) offset 기반 페이지가 겹치거나 레코드가 알림 없이 누락될 수 있습니다. 해결 방법: 페이지네이션된 모든 요청에 명시적인 고유 정렬을 추가하세요(예: GET /api/v1/hardware?limit=200&offset=0&sort=id&order=asc). 그런 다음 페이지마다 offset을 계속 증가시키면 됩니다. 이렇게 하면 전체 인벤토리를 일관되게 조회할 수 있습니다. 또한 권한 버그로 판단하기 전에 최신 Snipe-IT 버전에서 해당 문제를 확인하고 FMCS 회사 범위 지정 제한이 아닌지 확인하세요.

원본 Issue #19866
문제 해결
Snipe-IT의 동기화 어댑터에서 'Create new Snipe-IT assets' 체크박스를 체크 해제할 수 없는 이유는 무엇인가요?

이것은 Snipe-IT v8.8.3의 알려진 버그입니다(Microsoft Intune과 같은 동기화 어댑터에 영향을 미침). app/SyncAdapters/SyncAdapter.php(약 907번째 줄)에서 코드는 $request->boolean($slug.'_create_snipeit_assets_on_pull', true)를 사용하는데, 체크 해제된 HTML 체크박스는 제출되지 않기 때문에 누락된 필드가 true 기본값으로 대체되어 항상 "1"이 저장됩니다. 임시 해결 방법: 데이터베이스를 직접 업데이트하세요:

UPDATE sync_adapter_instances
SET config = JSON_SET(config, '$.create_snipeit_assets_on_pull', '0')
WHERE slug = '<your-adapter-slug>';

영구적 수정 방법: $request->boolean(...)에서 true 기본값을 제거하거나, 값이 항상 제출되도록 폼에 숨겨진 0 입력 필드를 추가하세요.

원본 Issue #19917
문제 해결
왜 Snipe-IT Intune 동기화(snipeit:pull-inventory)가 끝나지 않고 계속 실행되나요?

이 문제는 관리 디바이스가 ~999대를 초과하는 Intune 테넌트에 영향을 미치며, app/SyncAdapters/Intune/IntuneClient.php(managedDevices(), ~80행)의 페이지네이션 버그로 인해 발생합니다. 첫 번째 Graph API 페이지 이후에도 빈 $query 배열이 계속 get()에 전달됩니다. Laravel은 이를 Guzzle의 query 옵션으로 전달하고, Guzzle은 빈 배열인 경우에도 요청 URI의 쿼리 문자열을 대체하여 Graph의 @odata.nextLink 커서에서 $skiptoken을 제거합니다. 그러면 Graph는 1페이지를 무한정 다시 제공하므로 동기화가 동일한 디바이스에서 계속 반복되며 절대 완료되지 않습니다. 수정 방법: $query가 비어 있지 않은 경우에만 전달되도록 해당 줄을 패치하세요:

$response = ($query === [] ? $this->request()->get($url) : $this->request()->get($url, $query))->throw()->json();

php artisan snipeit:pull-inventory <slug> --dry-run --limit=1500으로 수정 사항을 확인하세요. 첫 페이지(~999개)에서 제한되는 대신 1,500개의 고유 디바이스 ID를 반환해야 합니다. 그러면 전체 풀이 정상적으로 완료됩니다(예: 약 6,200대의 디바이스를 약 1시간 만에 가져옴).

원본 Issue #19916
문제 해결
Active Flag가 비어 있을 때 Snipe-IT LDAP 동기화가 Active Directory 사용자를 비활성화하지 않는 문제를 어떻게 해결하나요?

Snipe-IT v8.8.0에서 새로운 LDAP 마법사는 비어 있는 Active Flag를 NULL 대신 빈 문자열('')로 저장할 수 있습니다. LdapSync는 해당 값이 null일 때만 userAccountControl을 요청하므로, AD에서 비활성화된 사용자가 계속 활성 상태로 남게 됩니다. 즉시 적용 가능한 해결 방법: 레거시 LDAP 설정 양식을 열고 Active Flag를 비워 둔 채 저장한 다음 php artisan snipeit:ldap-sync를 실행하세요. 레거시 양식은 빈 문자열을 NULL로 변환합니다. 다음 명령으로 확인하세요: php artisan tinker --execute="var_dump(Setting::getSettings()->ldap_active_flag);" 출력 결과가 NULL이어야 합니다. 영구적인 코드 수정 방법: app/Console/Commands/LdapSync.php에서 userAccountControl 속성 요청 검사 부분의 is_null($ldap_map['activated'])를 blank($ldap_map['activated'])로 교체하거나, app/Livewire/LdapSettings.php가 비어 있는 선택적 매핑을 null로 저장하도록 수정하세요.

원본 Issue #19789
문제 해결
v8.8.0에서 독일어 de-DE 로케일을 사용할 때 Snipe-IT 테이블이 비어 있고 "string literal contains an unescaped line break" 오류가 발생하는 문제를 해결하는 방법은?

이것은 de-DE 번역 문자열에 포함된 원시 줄 바꿈이 인라인 JavaScript 문자열을 손상시켜 bootstrap-table이 초기화되지 못하게 하는 v8.8.0 버그입니다. 즉각적인 해결 방법: 영향을 받는 사용자의 언어를 영어로 변경하거나, .env에서 APP_LOCALE=en을 설정하고 컨테이너를 재시작하세요. 영구적인 수정: 커밋 6525787ba523ea9655ce8f1dfe3310e4faaa63ee가 포함된 v8.8.0보다 새로운 Snipe-IT 릴리스로 업그레이드하세요. Docker의 경우 docker compose pull && docker compose up -d를 실행한 다음 브라우저를 강력 새로 고침하세요. 기존 자산 및 라이선스 데이터는 손실되지 않습니다.

원본 Issue #19772