아키텍처
Semaphore 배포에는 반드시 필요한 세 가지 요소가 있습니다. 서버 프로세스 하나, 데이터베이스 하나, 그리고 태스크가 실행되는 장소입니다. 러너, Redis, 리버스 프록시, ID 공급자 등 나머지는 모두 선택 사항이며 구체적인 필요가 생겼을 때 추가합니다.
구성 요소
서버
단일 Go 바이너리입니다. 컴파일된 웹 인터페이스가 함께 포함되 어 있으므로, 하나의
프로세스가 UI, REST API, 그리고 열려 있는 브라우저로 태스크 출력을 스트리밍하는
/api/ws WebSocket 엔드포인트를 모두 제공합니다. 기본적으로 3000 포트를 사용합니다.
이 프로세스 안에서는 여러 가지가 동시에 동작합니다.
| 구성 요소 | 역할 |
|---|---|
| HTTP API와 UI | 브라우저와 API 클라이언트가 호출하는 모든 것. |
| 태스크 풀 | 태스크 큐, 동시 실행 제한, 상태 관리. |
| 스케줄러 | cron 스케줄에 따라 템플릿을 시작합니다. |
| 로컬 실행기 | 원격 러너가 처리하지 않는 태스크를 서버 자체에서 실행합니다. |
| 알림 발송기 | 태스크가 끝나면 알림을 보냅니다. |
데이터베이스
dialect 옵션으로 SQLite, MySQL, PostgreSQL 중 하나를 선택합니다. 프로젝트, 템플릿,
인벤토리, 스케줄, 사용자, 역할, 태스크 기록, 그리고 키 저장소의 암호화된 내용이 여기에
저장됩니다. 반드시 백업해야 하는 유일한 대상이며, 나머지는 모두 다시 만들 수 있습니다.
SQLite가 기본값이며 서버 한 대에 적합합니다. 여러 사람이 서비스를 사용하는 경우에는 PostgreSQL이나 MySQL을 쓰고, 노드를 두 대 이상 운영할 때는 반드시 그렇게 하세요.