Onpod Enterprise On-Prem · 셀프서브 설치 가이드

onpod을 회사 서버에 통째로.
바이브코딩 결과물을 사내에만 배포하세요.

가입하고, 설치 파일을 받고, 라이선스를 발급받고, 서버에서 명령 몇 줄 — 영업 담당을 거치지 않아도 오늘 안에 회사 안에 onpod이 떠요. Docker 서버 한 대부터 Kubernetes 클러스터, 인터넷이 끊긴 폐쇄망, 회사 통합 로그인까지 전부 돼요.

Docker 서버(베어메탈·VM) Kubernetes(Helm) 폐쇄망(인터넷 0) SSO(OIDC·SAML) 체험 30일 무료
이렇게 돌아가요

회사 서버 한 대가 「회사만의 onpod」이 돼요

직원은 지금처럼 코딩 에이전트에게 「배포해줘」라고 말하면 되고, 결과물은 인터넷이 아니라 회사 주소로 떠요.

› 사내 대시보드 만들어서 회사 안에만 배포해줘✓ onpod app deploy …직원 PC · 코딩 에이전트onpod CLI회사 onpod 서버 (컨트롤플레인)콘솔·API사내 레지스트리파일 저장소데이터베이스라이선스 · SSO · 감사 기록 · 배포 통제console.onpod.회사도메인배포앱 서버 (Docker)Kubernetes 클러스터같은 명령 · --region k8shttps://내앱.onpod.회사도메인인터넷 연결 없이도 전부 회사 안에서 돌아가요 · 앱 서버는 밖으로만 연결해요(들어오는 포트 0)
데이터가 회사 밖으로 안 나가요

코드·이미지·파일·DB 전부 회사 서버 안에만 있어요. 인터넷이 없어도 돌아가요.

회사 계정으로 로그인해요

Okta·Azure AD·Keycloak 같은 회사 통합 로그인(OIDC·SAML)을 붙이면 별도 가입이 없어요.

관리자에게는 다 보여요

누가 무엇을 배포했고 누가 볼 수 있는지, 부서별 사용량과 감사 기록까지 기업 기능 그대로예요.

준비물

시작 전에 이것만 챙겨요

대부분 회사에 이미 있는 것들이에요. 없으면 그 자리에서 만들어도 10분이면 돼요.

서버 1대 (컨트롤플레인)

Ubuntu 22.04+ 또는 RHEL 8+ · x86_64 또는 arm64 · 4vCPU · 16GB 메모리 · SSD 200GB 이상 · Docker Engine 24 이상(docker compose v2 포함)

앱 서버 1대 이상

직원 앱이 실제로 뜨는 서버예요. 컨트롤플레인과 같은 서버여도 되고(테스트), 따로 여러 대여도 돼요(GPU 서버도 됨).

사내 DNS 한 줄

*.onpod.회사도메인 → 컨트롤플레인 서버 IP로 가는 와일드카드 A 레코드. 예: *.onpod.corp.internal

(선택) 회사 인증서

와일드카드 인증서가 있으면 그대로 써요. 없으면 설치가 내부 인증서를 만들어 주고, 루트 인증서 파일 하나를 직원 PC에 배포하면 돼요.

onpod 계정

onpod.ai 가입 계정(구글 5초). 라이선스·설치 파일을 여기서 받아요. 회사 이름으로 받으려면 기업 계정(무료)을 만들어요.

설치 단계

9단계, 처음 해도 한 시간이면 돼요

각 단계의 그림은 실제 화면·터미널 모양이에요. 명령은 「명령 복사」로 그대로 붙이면 돼요.

  1. 1

    가입하고 설치 파일을 받아요

    걸리는 시간 약 3분

    onpod.ai에 가입하고 콘솔 왼쪽 메뉴 「온프렘 설치」를 눌러요. 회사 이름으로 라이선스를 받고 다른 관리자와 함께 관리하려면 먼저 왼쪽 위 계정 전환에서 기업 계정을 만들고(무료), 기업 관리 메뉴의 「온프렘 설치」로 들어가요.

    1단계 카드에서 서버 CPU 종류(x86_64 인텔·AMD / arm64 Graviton·Ampere)에 맞는 최신 버전의 「내려받기」를 눌러요. 확인은 서버에서 uname -m(x86_64 또는 aarch64). 파일 하나(약 1~3GB)에 onpod 전체와 폐쇄망용 기본 이미지가 들어 있어요. 옆에 적힌 SHA256 값은 4단계에서 파일이 온전한지 확인할 때 써요.

  2. 2

    라이선스를 받아요 — 체험은 카드 없이 즉시

    걸리는 시간 약 1분

    같은 화면 2단계 카드에서 「체험 라이선스 받기」를 누르면 30일·앱 서버 2대·사용자 무제한 라이선스가 바로 나와요. 계속 쓸 때는 앱 서버 수 × 기간을 골라 카드로 결제하면 즉시 발급돼요(12개월마다 2개월 무료 · 사용자 수 제한 없음).

    발급된 라이선스는 화면 아래 「내 라이선스」 목록에 남아요. 언제든 「라이선스 보기·복사」로 내용을 복사하거나 license.json 파일로 받을 수 있어요. 만료가 다가오면 같은 화면에서 갱신하면 되고, 새 기간은 지금 라이선스 만료 다음 날부터 이어져요.

    라이선스가 만료돼도 이미 배포한 앱은 계속 돌아요. 14일 유예가 지나면 새 배포·빌드·서버 추가만 잠겨요.

  3. 3

    파일을 서버로 옮기고 풀어요

    걸리는 시간 약 5분

    받은 파일을 컨트롤플레인 서버로 옮겨요. 인터넷이 되는 서버면 scp, 폐쇄망이면 USB 나 사내 파일 서버로요. 옮긴 뒤 SHA256을 대조해 파일이 깨지지 않았는지 확인하고 풀어요.

    컨트롤플레인 서버
    # 1) PC에서 서버로 복사(파일 이름은 받은 그대로)
    $ scp onpod-onprem-v2026.09.04-<아키텍처>.tar.gz [email protected]:~/ # amd64 또는 arm64, 받은 파일 이름 그대로
    # 2) 서버에서 — 콘솔에 적힌 SHA256과 같은지 확인
    $ sha256sum onpod-onprem-v2026.09.04-*.tar.gz
    3f9c…e21a onpod-onprem-v2026.09.04-amd64.tar.gz (콘솔의 SHA256과 같아야 해요)
    # 3) 풀기 → 설치 폴더로 이동
    $ sudo mkdir -p /opt && sudo tar -xzf onpod-onprem-*.tar.gz -C /opt && sudo mv /opt/onpod-onprem-* /opt/onpod
    $ cd /opt/onpod && ls
    install.sh add-host.sh onpod-images.tar seed/ helm/ MANUAL.ko.md …
  4. 4

    설치 — 두 줄 채우고 install.sh

    걸리는 시간 약 10분

    .env 파일에 회사 도메인관리자 이메일 두 줄만 채워요. 나머지 비밀값은 설치가 알아서 만들어요.install.sh 는 이미지를 적재하고, DB·파일 저장소·사내 레지스트리·콘솔·API를 띄우고, 마지막에 관리자 비밀번호를 화면에 한 번 보여줘요(꼭 적어 두세요).

    컨트롤플레인 서버 · /opt/onpod
    $ cp .env.example .env
    # 아래 두 줄을 회사 값으로 (nano .env 또는 vi .env)
    # ONPOD_BASE_DOMAIN=onpod.corp.internal
    $ sudo ./install.sh onpod-images.tar
    ▸ 이미지 번들 적재 … ▸ DB 마이그레이션 … ▸ 컨트롤플레인 기동 … ▸ 엣지 기동
    ✅ 설치 완료 콘솔 https://console.onpod.corp.internal
    관리자 [email protected] 비밀번호 (한 번만 표시) ********
    루트 인증서 certs/ca.crt — 직원 PC·앱 서버에 배포하세요

    회사 인증서가 있으면 실행 전에 certs/fullchain.pem·certs/privkey.pem(사설 CA 면 certs/ca.crt)을 두면 그걸 써요. 없으면 내부 인증서를 만들어 줘요.

  5. 5

    사내 DNS 한 줄 · 인증서 배포

    걸리는 시간 약 5분

    사내 DNS에 와일드카드 A 레코드 한 줄을 넣어요: *.onpod.corp.internal → 10.0.0.10(컨트롤플레인 서버 IP). 이 한 줄로 콘솔·API·모든 앱 주소가 전부 열려요. 테스트만 할 거면 PC의 hosts 파일에 console.onpod.corp.internalapi.onpod.corp.internal 두 줄을 넣어도 돼요.

    내부 인증서를 쓰는 경우 certs/ca.crt 를 직원 PC에 신뢰하는 루트 인증서로 넣어요(윈도우 그룹 정책·맥 키체인 배포 도구 등 회사 표준 방식). 앱 서버에는 다음 단계의 add-host.sh 가 알아서 넣어요.

  6. 6

    관리자로 접속해 라이선스를 붙여넣어요

    걸리는 시간 약 2분

    브라우저에서 https://console.onpod.corp.internal 을 열고 4단계에서 받은 관리자 이메일·비밀번호로 로그인해요. 왼쪽 메뉴 맨 아래 「슈퍼어드민」 → 맨 위 라이선스 카드「라이선스 붙여넣기」에 2단계에서 복사한 내용을 그대로 붙이고 「적용하기」.

    서명을 확인한 뒤 바로 「정상」으로 바뀌고, 서버 재시작은 필요 없어요. 파일로 두고 싶으면 설치 폴더의 license/license.json 에 넣어도 같아요. 갱신할 때도 같은 자리에 새 내용을 붙이면 돼요.

  7. 7

    앱 서버를 붙여요 — Docker 한 줄, Kubernetes는 Helm

    걸리는 시간 약 5분 / 서버

    직원 앱이 뜰 서버에서 add-host.sh 한 줄이면 에이전트가 설치되고 컨트롤플레인에 등록돼요(들어오는 포트를 열 필요 없어요 — 서버가 밖으로만 연결해요). 컨트롤플레인과 같은 서버를 앱 서버로 써도 돼요.

    ① 컨트롤플레인 서버(설치 폴더)에서 서버 등록 토큰 만들기
    $ cd /opt/onpod
    $ sudo docker compose exec -e ONPOD_URL=http://localhost:8080 -e ONPOD_TOKEN=$(sudo cat data/cp-state/admin-bootstrap.token) controlplane \
    $ onpod admin host-create --name srv-01 --region onprem
    bootstrap_token: op_b_… (앱 서버 하나에 하나씩)
    ② 앱 서버에서 (번들 폴더 또는 add-host.sh + certs/ca.crt + bin/ 만 복사)
    $ sudo ./add-host.sh --cp https://api.onpod.corp.internal --token op_b_… --ca certs/ca.crt --name srv-01 --cp-ip 10.0.0.10
    ✓ 루트 CA 등록 · 에이전트 설치 · 등록 완료 · 앱 포트는 컨트롤플레인(10.0.0.10)에서만 접근
    Kubernetes라면 (클러스터 하나가 앱 서버 하나로 등록)
    $ helm install onpod-agent ./helm/onpod-agent -n onpod --create-namespace \
    $ --set image.repository=registry.onpod.corp.internal/onpod/controlplane --set image.tag=<번들 버전> \
    $ --set controlPlaneURL=https://api.onpod.corp.internal --set hostName=k8s-prod --set region=k8s \
    $ --set namespace=onpod-apps --set bootstrapToken=op_b_… --set-file caCert=certs/ca.crt
    콘솔 슈퍼어드민 「호스트」에 k8s-prod가 online으로 보여요

    컨트롤플레인 자체를 Kubernetes에 올리고 싶으면 helm/onpod 차트를 써요(매뉴얼 §2). CLI 명령은 Docker 호스트와 완전히 같아요.

  8. 8

    직원을 초대하거나 회사 로그인을 붙여요

    걸리는 시간 약 5분

    콘솔 기업 관리 → 구성원 → 초대에서 이메일로 초대하면 직원이 링크로 가입해요(셀프 가입은 꺼져 있어요). 회사 통합 로그인이 있다면 .envOIDC 또는 SAML 설정 몇 줄을 넣고 재시작하면 로그인 화면에 「회사 계정으로 로그인」이 생기고, 그룹에 따라 관리자 권한이 자동으로 붙어요.

    .env — 예: Keycloak · Okta · Azure AD (OIDC)
    # ONPOD_OIDC_ISSUER=https://sso.corp.com/realms/corp
    # ONPOD_OIDC_CLIENT_ID=onpod
    # ONPOD_OIDC_CLIENT_SECRET=…
    # ONPOD_SSO_ADMIN_GROUPS=onpod-org-admins # 이 그룹이면 조직 관리자
    # ONPOD_SSO_SUPERADMIN_GROUPS=onpod-superadmins # 이 그룹이면 슈퍼어드민
    $ sudo docker compose up -d controlplane

    SAML 2.0도 같은 방식이에요(SP 메타데이터 주소가 콘솔에 표시돼요). 자세한 항목은 번들의 MANUAL.ko.md §5에 있어요.

  9. 9

    첫 배포 — 직원은 하던 대로 말하면 돼요

    걸리는 시간 약 3분

    직원 PC에 onpod CLI를 회사 주소에서 내려받고(https://console.onpod.corp.internal/cli/) 로그인하면 끝이에요. 코딩 에이전트(BizCoder·Claude Code·Codex 등)에게 「onpod에 배포해줘」라고 말하면, 에이전트가 회사 onpod인 걸 스스로 알아채고 사내 주소로 배포해요.

    직원 PC
    $ onpod login --url https://api.onpod.corp.internal
    $ onpod app deploy --build . # Dockerfile이 있는 프로젝트 폴더에서
    ✓ 빌드 완료(사내 레지스트리) · 배포 완료
    https://my-dashboard.onpod.corp.internal
    코딩 에이전트한테 이렇게 말하세요

    「이 프로젝트를 onpod에 배포해줘. 회사 안에서만 보이게(조직 전체) 해줘.」

    에이전트는 onpod 매뉴얼을 읽어 서버측 빌드·공개범위·주소를 알아서 골라요. 요금 얘기는 안 해요 — 온프렘엔 과금이 없어요.

운영

폐쇄망·백업·업그레이드도 명령 한 줄

설치 폴더의 스크립트가 다 해요. 상세는 번들 안 MANUAL.ko.md에 있어요.

폐쇄망(인터넷 없음)

번들에 node·python·nginx 같은 기본 이미지가 들어 있어 Dockerfile의 FROM이 인터넷 없이 빌드돼요. 이미지를 더 넣고 싶으면 인터넷 되는 PC에서 받아 서버로 옮기고 시드하면 돼요.

terminal
# 인터넷 되는 PC에서
$ docker pull python:3.12-slim && docker save -o python_3.12-slim.tar python:3.12-slim
# 서버(설치 폴더)로 옮긴 뒤
$ sudo ./seed-images.sh python_3.12-slim.tar
백업·복구

DB·파일 저장소·레지스트리·설정을 한 폴더로 백업해요. 새 서버에 번들을 설치한 뒤 restore하면 그대로 살아나요.

terminal
$ sudo ./backup.sh /backup/onpod-$(date +%F)
# 복구
$ sudo ./restore.sh /backup/onpod-2026-09-03
업그레이드

새 번들을 받아 풀고 upgrade.sh를 돌리면 백업 → 이미지 교체 → 마이그레이션 → 재기동까지 알아서 해요. 실패하면 백업 시점으로 돌아가요.

terminal
# 새 번들을 풀어 둔 폴더 안에서, 기존 설치 폴더를 인자로
$ cd /opt/onpod-onprem-v2026.10.01-amd64 && sudo ./upgrade.sh /opt/onpod
백업 → 이미지 적재 → 킷 파일 교체 → 마이그레이션 → 재기동 ✓
잘 안 될 때
  • 콘솔이 안 열려요 — DNS(5단계)와 인증서 신뢰를 먼저 확인해요. 서버에서 docker compose ps 로 전부 healthy 인지 봐요.
  • 라이선스가 「검증 실패」예요 — 붙여넣은 내용이 잘렸을 수 있어요. 콘솔에서 「전체 복사」로 다시 복사해 붙여요.
  • 빌드가 「소스 내려받기 실패 · Could not resolve host s3.…」로 끝나요 — 컨테이너 안에서 회사 도메인이 안 풀리는 거예요. PC의 hosts 파일이 아니라 사내 DNS(또는 서버가 쓰는 DNS)에 와일드카드 레코드(5단계)가 있어야 해요. 서버의 docker run --rm alpine nslookup s3.onpod.corp.internal 이 IP를 돌려주면 돼요.
  • 배포가 「이미지를 못 받아요」로 멈춰요 — 폐쇄망에서 그 기본 이미지가 아직 시드되지 않은 거예요. 위 폐쇄망 명령으로 넣어요.
  • 앱 서버가 offline 이에요 — 앱 서버에서 sudo systemctl status onpod-agent 와 컨트롤플레인 주소로의 https 연결을 확인해요.
자주 묻는 질문

이런 것도 궁금하실 것 같아요

가격은 어떻게 돼요?
앱 서버(호스트) 수 × 기간이에요. 사용자 수·배포 수·트래픽은 세지 않아요. 12개월 결제는 2개월이 무료예요. 정확한 금액은 콘솔 「온프렘 설치」 구매 카드에서 서버 수와 기간을 고르면 바로 보여요. 체험 30일은 무료예요.
카드 결제 말고 계약으로 살 수 있나요?
네. 견적·세금계산서·계좌이체, 다년 계약, 설치 지원이 필요한 회사는 [email protected]로 연락해 주세요. 별도 계약으로 진행하고 라이선스는 같은 콘솔 목록으로 발급해 드려요.
라이선스가 만료되면 앱이 멈추나요?
아니요. 이미 배포한 앱과 데이터는 그대로 돌아요. 14일 유예 뒤에는 새 배포·빌드·앱 서버 추가만 잠기고, 갱신 라이선스를 붙여넣으면 바로 풀려요.
인터넷이 완전히 없는 서버에서도 되나요?
네. 설치 파일 하나에 onpod 전체와 기본 이미지가 들어 있어요. CLI도 회사 콘솔 주소에서 내려받아요. 인터넷이 필요한 건 onpod.ai에서 파일과 라이선스를 받는 PC 한 대뿐이에요.
어떤 서버에 설치되나요?
리눅스 서버(Ubuntu 22.04+·RHEL 8+ 계열)의 x86_64와 arm64 둘 다 돼요 — 인텔·AMD 서버는 물론 Graviton·Ampere 같은 ARM 서버, GPU 서버도 앱 서버로 붙어요. 컨트롤플레인은 Docker 한 대 또는 Kubernetes(Helm)로 올려요. macOS·Windows 서버는 대상이 아니에요.
데이터베이스(서비스형 Postgres)도 되나요?
네. 직원이 onpod db create 한 줄로 만들면 회사가 등록한 Docker 앱 서버 위에 Postgres 컨테이너(16/17·pgvector 포함)가 떠요. 앱에 --attach-db 로 붙이면 접속 주소가 자동으로 들어가고, 요금이나 크기 상한은 없어요. 자동 백업·크기 변경·연결 풀은 아직 없어서 백업은 서버 관리자가 pg_dump 로 회사 백업에 넣어요.
설치 파일을 받으면 소스가 노출되나요?
설치 파일은 실행 파일과 컨테이너 이미지로만 이뤄져 있고, 프로그램은 함수 이름과 내부 문자열까지 난독화해 배포해요. 내려받기 전에 소프트웨어 라이선스 약관(분해·역컴파일·재배포 금지, 라이선스 확인 우회 금지)에 한 번 동의해요.
Kubernetes만 쓰는 회사예요.
컨트롤플레인은 Helm 차트로, 앱 서버는 클러스터 에이전트 차트로 설치해요. 직원이 쓰는 명령은 Docker 서버와 완전히 같고, --region k8s로 클러스터를 고를 수 있어요. 서비스형 Postgres 만은 아직 Docker 서버가 1대 필요해요.
BizCoder(웍스AI 코딩)와 같이 쓸 수 있나요?
네. BizCoder 폐쇄망 판의 설정에 회사 onpod 주소 한 줄을 넣으면, 직원이 만든 결과물이 곧바로 회사 onpod에 배포돼요.
데이터는 어디에 저장돼요?
전부 컨트롤플레인 서버의 설치 폴더 아래(data/)와 회사가 붙인 앱 서버에만 있어요. onpod.ai 로는 아무 데이터도 가지 않아요.
회사 통합 로그인은 어떤 게 되나요?
OIDC(Okta·Azure AD·Google Workspace·Keycloak 등)와 SAML 2.0이 돼요. 그룹을 관리자 권한에 매핑할 수 있고, 회사 계정으로만 로그인하게 잠글 수도 있어요.
도움이 필요하면요?
[email protected]로 메일 주세요. 설치 화면 공유로 함께 봐 드려요. 도입 규모가 크면 설치를 대신 해 드리는 것도 상담할 수 있어요.

오늘 오후, 회사 안에 onpod을 띄워 보세요

체험 라이선스는 카드 없이 즉시 나와요.
설치 파일을 받아 서버에서 install.sh 한 번이면 끝이에요.