🚀 정적 사이트, 몇 초 만에
디스크에서 바로 서빙해서 업로드가 끝나는 순간 라이브. .html 파일 하나만 올려도 자동으로 index가 됩니다.
Self-hosted mini-PaaS
프로젝트를 zip으로 묶거나 — 명령 한 번이면 — 우리 서버에 바로 라이브. 정적 사이트와 Dockerfile 앱, 그리고 롤백·암호화된 env·팀 계정까지 기본 제공.
디스크에서 바로 서빙해서 업로드가 끝나는 순간 라이브. .html 파일 하나만 올려도 자동으로 index가 됩니다.
zip 안에 Dockerfile이 있으면 이미지를 빌드해 컨테이너로 실행합니다. 자동 라우팅에 전용 포트까지 붙습니다.
앱마다 최근 5개 릴리스를 들고 있어서, 대시보드 버튼 하나나 arcturus rollback으로 이전 버전으로 돌아갑니다.
앱별 환경 변수를 SQLite에 AES-256-GCM으로 암호화해 보관. 저장하면 재빌드 없이 컨테이너만 다시 만들어 바로 반영됩니다.
앱은 별도 오리진에서 돌아서 대시보드 세션을 가로챌 수 없습니다. 컨테이너는 단단히 잠가두고, 로그인은 횟수를 제한하며, 로그아웃하면 세션이 서버에서 바로 사라집니다.
대시보드와 API가 ingress 뒤에서 블루-그린으로 교체되어, 배포하는 동안에도 :7777과 :7778이 계속 응답합니다.
관리자가 초대 링크를 나눠주면 각자 자기 앱을 관리합니다. 앱은 view나 manage로 공유할 수 있고, manage 권한이면 그 앱에 배포까지 할 수 있습니다.
대시보드, API 메시지, CLI가 모두 두 언어를 지원하며 브라우저 설정이나 ARCTURUS_LANG 값을 따릅니다.
경로 프리픽스 프록시(/alice/blog)는 절대 경로로 에셋을 참조하는 앱을 깨뜨립니다. Arcturus는 세 겹의 해법을 쌓아 그냥 동작하게 만듭니다:
X-Forwarded-Prefixbase path를 설정할 수 있는 앱은 그대로 동작 — 게이트웨이가 프리픽스를 떼고 앱에게 위치를 알려줍니다.
/static/app.js처럼 매칭되지 않은 요청은 브라우저가 보고 있던 앱으로 다시 라우팅됩니다.
모든 컨테이너 앱은 고정 포트(30000+)를 유지 — base path 문제가 아예 없습니다. 새 컨테이너 앱은 “redirect”가 기본이라 방문자가 곧장 전용 포트로 이동합니다. 포트는 자동 할당되며, 포트 설정에서 직접 고를 수도 있습니다.
게이트웨이가 인스톨러와 플랫폼별 바이너리를 직접 서빙합니다 — 우리 서버가 곧 배포 채널:
$ curl -fsSL http://<host>:7777/install.sh | sh
| 명령 | 설명 |
|---|---|
| arcturus login --server … --token … | 인증 (토큰은 Dashboard → API Tokens에서) |
| arcturus deploy | 현재 디렉터리를 zip으로 묶어 배포 (Dockerfile → 컨테이너) |
| arcturus apps | 내 앱 목록 |
| arcturus deployments <app> | 배포 히스토리 (live / rollback 가능 마커) |
| arcturus rollback <app> <id> | 이전 릴리스로 복원 |
| arcturus env <app> --set K=V | env 변수 — 컨테이너 재생성, 재빌드 없음 |
| arcturus logs <app> | 컨테이너 로그 팔로우 |
| arcturus destroy <app> | 앱 삭제 |
프로젝트별 앱 이름은 arcturus.json으로 고정: { "name": "my-app" }
클론하고 스크립트 하나 — 의존성 설치, 대시보드 빌드, pm2 기동까지 알아서. http://<host>:7777을 열면 끝.
첫 실행 시 터미널에서 admin 비밀번호를 직접 입력받습니다.
$ git clone https://github.com/chussum/arcturus.git && cd arcturus $ bun run server:up ✦ install → build → start (pm2) ✦ 첫 실행 시 admin 비밀번호 입력
# 선택 하드닝 (macOS) — 평문 키 → 암호화 .env.secrets + Keychain $ bun run secrets:init ✦ 이후 시크릿 수정 → bun run secrets:update ✦ 자세히 → 가이드
SQLite는 Drizzle로 — 리포지토리가 port 뒤에 있어 PostgreSQL은 모듈 교체로 충분합니다. Docker는 ContainerRuntime port 뒤의 dockerode. 정적 릴리스는 버전 디렉터리, 컨테이너 릴리스는 배포별 이미지 태그로 보관됩니다.