코드를 push하면 <이름>.koax.site 로 자동 배포됩니다 — 사내에서 운영하는 Git · 자동배포 플랫폼.
irm https://setup.koax.site/koax-git-setup.ps1 | iex 붙여넣기(1회) → ③ 프로젝트에 deploy.json 넣고 git push.
끝나면 https://<저장소명>.koax.site 로 사이트가 뜹니다. SSH 키도, 서버 설정도, 배포 명령도 필요 없습니다.
@koces.com, @nhnpayco.com, @kcp.co.kr@gmail.com). 받은편지함에 없으면 스팸함을 확인하세요.
관리자 승인은 필요 없습니다 — 메일만 확인하면 바로 로그인됩니다.
이걸 해두면 git push 할 때 GitHub처럼 브라우저 창이 떠서 로그인하고, 이후로는 다시 묻지 않습니다.
irm https://setup.koax.site/koax-git-setup.ps1 | iex
"설정 완료" 메시지가 나오면 끝입니다. 한 번만 하면 됩니다.
git push 때 브라우저 로그인이 뜨도록 준비만 합니다.
실행 전에 내용을 보고 싶으면 브라우저에서 setup.koax.site/koax-git-setup.ps1 을 그대로 열어보세요.
curl -fsSL https://setup.koax.site/koax-git-setup.sh | bash
Windows와 달리 mac/Linux는 Git Credential Manager가 git에 포함돼 있지 않습니다.
없으면 스크립트가 설치 방법을 안내하고 멈추니, 안내대로 설치한 뒤 다시 실행하세요.
powershell -ExecutionPolicy Bypass -File .\koax-git-setup.ps1
(내용만 확인하려면 이쪽에서 브라우저로 바로 볼 수 있습니다.)
예시로 정적 웹사이트 하나를 올려봅니다. PowerShell에서:
mkdir my-site
cd my-site
git init -b main
deploy.json)과 내용 만들기 — deploy.json이 있어야 배포됩니다.
'{ "buildPack": "static" }' | Out-File -Encoding utf8 deploy.json
'<h1>안녕하세요 koax</h1>' | Out-File -Encoding utf8 index.html
git add -A
git commit -m "첫 배포"
<본인계정>은 git.koces.com 로그인 아이디로, <저장소>는 원하는 이름으로 바꾸세요.
git remote add origin https://git.koces.com/<본인계정>/my-site.git
git push -u origin main
https:// 주소로 하세요 (git@... 형태 아님). 브라우저 로그인은 https에서만 작동합니다.
https://my-site.koax.site 로 사이트가 뜹니다. 인증서(https)는 자동입니다.deploy.json은 저장소 루트에 두는 작은 설정 파일입니다. 전부 선택 항목이며, 없는 값은 자동 판단됩니다.
{
"buildPack": "static",
"port": 3000,
"subdomain": "myblog",
"autoDeploy": false,
"resources": { "memory": "1g", "cpu": "1" }
}
| 키 | 설명 | 기본값 |
|---|---|---|
buildPack | static(정적 HTML) · nixpacks(Node/Python 등 자동) · dockerfile(Dockerfile 사용) | static |
port | 앱이 여는 포트. Node는 보통 3000 | 빌드팩별 자동 |
subdomain | 원하는 주소. "myblog" → myblog.koax.site. 비워두면 저장소 이름 사용 | 저장소 이름 |
autoDeploy | false=최초 1회만 배포(이후 [deploy]로 갱신) · true=push마다 자동 갱신 | false |
resources | 메모리·CPU. 상한: 2g / 2. 넘으면 자동으로 줄여집니다 | 512m / 0.5 |
database | "postgresql" 이라고 적으면 PostgreSQL DB가 자동으로 만들어져 연결됩니다 (→ 5번) | 없음 |
dataClass | 앱이 다루는 데이터 등급. public · internal · confidential · personal 중 해당하는 것 전부(배열).
database를 쓸 때는 필수입니다 | 없음 |
buildPack을 적지 않으면 Dockerfile이 있어도 static으로 처리됩니다. Docker로 빌드하려면 "buildPack": "dockerfile"을 꼭 적으세요.
기본 설정(autoDeploy: false)에서는 push한다고 자동으로 다시 배포되지 않습니다. 실수 배포·데이터 초기화를 막기 위해서입니다.
커밋 메시지에 [deploy] 를 넣어 push하면 그때 한 번 배포됩니다.
git add -A
git commit -m "내용 수정 [deploy]"
git push
웹 UI로 편집할 때도 커밋 메시지 칸에 [deploy] 를 포함하면 됩니다.
deploy.json에 "autoDeploy": true를 넣으면, 이후 push마다 자동 갱신됩니다.
(이 설정을 바꾼 다음 push부터 적용됩니다.)
데이터를 저장해야 하는 앱이면 deploy.json에 두 줄만 추가하세요. 관리자에게 요청할 필요 없이 push하면 DB가 만들어지고 앱에 연결됩니다.
{
"buildPack": "nixpacks",
"port": 3000,
"dataClass": ["internal"],
"database": "postgresql"
}
| 무엇 | 설명 |
|---|---|
| 내 전용 PostgreSQL 서버 | 계정(또는 그룹)마다 1개. 처음 DB를 요청할 때 만들어지고, 같은 계정의 다음 앱들이 같이 씁니다 |
| 앱 전용 데이터베이스 | 앱마다 따로 만들어집니다 (이름 app_<주소이름>). 다른 앱은 이 데이터베이스에 접속할 수 없습니다 — 같은 계정의 앱이라도 마찬가지입니다 |
환경변수 DATABASE_URL | 접속 주소가 앱에 자동으로 들어갑니다. 비밀번호를 알 필요도, 코드에 적을 필요도 없습니다 |
| 자동 백업 | 매일 새벽 2시(한국시간), 서버 안에 7일 보관 (→ 5-5) |
결과는 GitLab 커밋 옆에 코멘트로 남습니다: 🗄️ PostgreSQL 연결 준비됨
DB를 쓰려면 앱이 어떤 데이터를 저장하는지 적어야 합니다. 애매하면 한 단계 높게 적으세요.
| 등급 | 뜻 | 예 | 자동 DB |
|---|---|---|---|
public | 누구에게 보여도 무방 | 공지, 공개 자료 | ✅ 가능 |
internal | 사내 한정 | 업무 대시보드, 내부 도구, 통계 | ✅ 가능 |
confidential | 유출 시 사업·계약상 손해 | 매출·원가, 계약 정보 | ❌ 불가 |
personal | 개인을 식별할 수 있는 정보 | 회원 정보, 연락처, 주문 내역 | ❌ 불가 |
confidential · personal 데이터는 지금 자동 DB로 받지 않습니다. 이 플랫폼의 백업이 아직 암호화되지 않기 때문입니다.
이런 데이터를 다뤄야 하면 배포 전에 보안 담당자와 먼저 협의하세요. 개인정보는 다른 등급과 함께 적습니다 — 예: ["internal", "personal"].
환경변수 DATABASE_URL을 읽으면 됩니다.
// Node.js (pg)
const { Pool } = require('pg');
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
# Python
import os, psycopg
conn = psycopg.connect(os.environ["DATABASE_URL"])
// Prisma — schema.prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
DATABASE_URL이 없습니다. 접속 정보가 빌드 로그·이미지에 남지 않게 하려고 앱이 실행될 때만 넣습니다.package.json):
"scripts": {
"build": "prisma generate && next build",
"start": "prisma migrate deploy && next start"
}
빌드 도중 DB를 조회하는 코드(예: Next.js 정적 생성에서 DB 읽기)도 실패하니, 실행 시점에 읽도록 바꾸세요.
deploy.json에 dataClass와 database를 추가해 push하세요.
"autoDeploy": true 이면 DB 연결 후 자동으로 다시 배포됩니다.false)이면 DB만 준비되고, 커밋 메시지에 [deploy]를 넣어 배포할 때 연결됩니다. 한 번에 하려면 처음부터 [deploy]를 넣어 push하세요.관리자가 이미 DATABASE_URL을 연결해 둔 앱은 건드리지 않습니다. 변수 이름을 바꾸고 싶으면 "database": { "type": "postgresql", "envVar": "PG_URL" } 처럼 적습니다.
| 항목 | 내용 |
|---|---|
| 백업 | 매일 새벽 2시(한국시간)에 자동으로 전체 백업되어 서버 안에 7일 보관됩니다. 서버 밖 사본은 없습니다 — 잃으면 안 되는 데이터는 따로 내보내 두세요. 복구가 필요하면 관리자에게 요청하세요 |
| 삭제 | deploy.json에서 database를 지워도, 저장소를 지워도 DB는 삭제되지 않습니다(실수로 데이터를 잃지 않도록). 지우려면 관리자에게 요청하세요 |
| 외부 접속 | DB는 서버 내부에만 열려 있어 내 PC에서 직접 접속할 수 없습니다 |
| 로컬 개발 | 내 PC에 PostgreSQL을 따로 띄우고, 로컬 .env 파일에 DATABASE_URL=postgresql://...localhost...를 적어 쓰세요. .env는 커밋하지 마세요 |
| SQLite | 앱 안의 SQLite 파일은 재배포 때 초기화될 수 있습니다. 데이터를 남겨야 하면 이 PostgreSQL을 쓰세요 |
| 증상 | 해결 |
|---|---|
push할 때 HTTP Basic: Access denied / 브라우저가 안 뜸 |
설치 한 줄을 다시 실행하세요 — irm https://setup.koax.site/koax-git-setup.ps1 | iex예전에 저장된 로그인 정보가 남아 방해하는 경우로, 스크립트가 그걸 정리하고 브라우저 로그인을 새로 띄웁니다. |
| 사이트가 빈 페이지 / 404 | 정적 사이트인데 index.html이 없는 경우입니다. index.html을 추가해 다시 배포하세요. |
주소에 -이름이 붙음 (blog-hong.koax.site) |
같은 이름을 다른 사람이 먼저 썼습니다(선착순). deploy.json의 subdomain으로 다른 이름을 지정하세요. |
예약된 서브도메인 이라고 거부됨 |
api·www·admin·git·koces 등 예약어는 쓸 수 없습니다. 다른 이름으로. |
| 고쳤는데 사이트가 그대로 | 기본은 [deploy]가 있어야 갱신됩니다(→ 4번). 커밋 메시지에 [deploy]를 넣으세요. |
| 확인 메일이 안 옴 | 스팸함을 확인하세요. 그래도 없으면 관리자에게 문의. |
DB 코멘트: dataClass 를 적어 주세요 |
deploy.json에 "dataClass": ["internal"] 처럼 등급을 추가해 다시 push하세요 (→ 5-2). |
DB 코멘트: 등급 데이터는 … 자동 제공하지 않습니다 |
confidential·personal 데이터입니다. 보안 담당자와 먼저 협의하세요. |
DB 코멘트: 아직 이 플랫폼에서 켜져 있지 않아 무시되었습니다 |
DB 자동 생성이 꺼져 있는 상태입니다. 관리자에게 문의하세요. |
DB 코멘트: 데이터베이스 app_… 가 이미 있어 |
같은 이름의 DB가 이미 있어 안전을 위해 멈췄습니다. 관리자에게 문의하세요. |
DB 코멘트: DB 준비에 실패했습니다 |
일시적인 문제일 수 있습니다. 다음 push 때 자동으로 다시 시도합니다. 반복되면 관리자에게 문의. |
앱 로그에 DATABASE_URL이 없다는 오류 (빌드 중) |
빌드 단계에는 이 변수가 없습니다. 마이그레이션·DB 조회를 시작 명령으로 옮기세요 (→ 5-3). |
git.koces.com/<본인아이디>/...deploy.json이 없으면 배포되지 않습니다. (배포용이 아닌 저장소를 실수로 올리는 것을 막습니다.)main)에 push할 때만 일어납니다.deploy.json으로 상한(2GB/2) 안에서 조정할 수 있습니다."database": "postgresql"을 쓰세요 (→ 5번).
업로드 파일처럼 파일로 남겨야 하는 데이터는 관리자와 상의해 영속 볼륨을 붙이세요.
문의: 시스템 관리자 · 이 문서는 koax 배포 플랫폼 운영 기준으로 작성되었습니다.
이 문서의 최신본은 항상 setup.koax.site/manual.html 에 있습니다.
관련: git.koces.com(코드) · <이름>.koax.site(배포 주소) · setup.koax.site(설치·설명서)