Tabby 팀 서버 구축 2026: 자체 호스팅 코드 완성
Source: Dev.to
이 글은 aifoss.dev에 원본이 게시되었습니다.
TL;DR: Tabby v0.32.0은 Apache 2.0 라이선스를 가진 코드 완성 서버입니다 — 네트워크에 GPU가 장착된 한 대의 머신을 두고 모든 개발자가 그 서버에 연결합니다. Ubuntu와 NVIDIA GPU만 준비되어 있다면 전체 팀 배포는 1시간 이내에 끝낼 수 있습니다. 팀 규모가 8~10명에 달하면 자체 호스팅이 비용 면에서 유리합니다.
이 가이드를 따라 하면 얻게 되는 것
- Docker 안에서 실행되는 Tabby v0.32.0, nginx + Let’s Encrypt TLS를 통해 HTTPS로 노출
- Tabby 관리 패널에서 관리되는 개발자별 API 토큰
- VS Code와 JetBrains IDE에서 인라인 완성 및 채팅 기능 연결
솔직한 평가: 전용 GPU 서버가 있는 5~15명 규모 팀이라면 Tabby가 현재 가장 좋은 Copilot 대체제입니다 — 팀 사용을 위해 처음부터 설계된 도구이며, 단일 사용자용 툴을 억지로 변형한 것이 아닙니다. 4명 이하라면 운영 부담이 크므로 Copilot을 유지하는 편이 좋습니다.
시작하기 전에 준비할 것
- Ubuntu 22.04 LTS 서버 (물리 서버든 VM이든 — GPU 패스스루가 가능한 클라우드 VM도 가능)
- NVIDIA GPU + 드라이버 ≥ 535 설치
- Docker Engine와 NVIDIA Container Toolkit
- 서버 퍼블릭 IP를 가리키는 A 레코드가 설정된 도메인 이름
- 방화벽/보안 그룹에서 포트 80, 443 열기
팀 규모별 GPU·모델 매칭 (2026년 중반 기준 실사용 예)
| GPU | VRAM | 팀 규모 | 권장 모델 |
|---|---|---|---|
| RTX 3060 / RTX 3070 | 12 GB | 2–4명 | Qwen/Qwen2.5‑Coder‑7B |
| RTX 3090 / 4070 Ti | 24 GB | 5–10명 | Qwen/Qwen2.5‑Coder‑7B + 채팅 모델 |
| RTX 4090 | 24 GB | 10–15명 | Qwen/Qwen2.5‑Coder‑7B + Qwen2‑7B‑Instruct |
아직 전용 GPU 서버가 없나요?
RunPod에서는 월 계약 형태로 전용 NVIDIA 인스턴스를 제공하니, 하드웨어를 구매하기 전 시험 삼아 사용하기에 적합합니다. 영구 서버를 구축하려면 runaihome.com에서 하드웨어 옵션을 확인하세요.
Docker가 설치되지 않은 경우
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
NVIDIA Container Toolkit (GPU 패스스루에 필수)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
GPU 접근 확인:
docker run --rm --gpus all nvidia/cuda:12.3.0-base-ubuntu22.04 nvidia-smi
nvidia-smi 출력에 GPU가 보이면 준비 완료입니다.
배포 디렉터리와 compose 파일 만들기
sudo mkdir -p /opt/tabby
sudo tee /opt/tabby/docker-compose.yml > /dev/null << 'EOF'
services:
tabby:
image: tabbyml/tabby:0.32.0
command: serve --model Qwen/Qwen2.5-Coder-7B --device cuda --port 8080
volumes:
- tabby_data:/data
ports:
- "127.0.0.1:8080:8080"
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
restart: unless-stopped
volumes:
tabby_data:
EOF
이미지는 latest가 아니라 0.32.0을 고정합니다. Tabby의 모델 API는 마이너 버전 사이에 바뀔 수 있어, 중간에 이미지가 업데이트되면 IDE 플러그인이 깨지는 경우가 있기 때문입니다.
서버 시작
cd /opt/tabby
docker compose up -d
docker compose logs -f tabby
첫 실행 시 모델을 다운로드합니다 — Qwen2.5‑Coder‑7B는 약 4–7 GB 정도입니다. 이후 재시작은 캐시된 볼륨을 사용하므로 30초 이내에 완료됩니다.
로그에 Listening on 0.0.0.0:8080 가 보이면 다음 명령으로 정상 동작을 확인합니다:
curl http://localhost:8080/v1/health
# Expected: {"status":"ok","model":"Qwen/Qwen2.5-Coder-7B"}
nginx와 Certbot 설치
sudo apt-get install -y nginx certbot python3-certbot-nginx
/etc/nginx/sites-available/tabby 파일 만들기
server {
listen 80;
server_name tabby.yourdomain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name tabby.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/tabby.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/tabby.yourdomain.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
# Tabby의 answer engine 스트리밍에 필요한 WebSocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 300s;
}
}
사이트 활성화 및 인증서 발급
sudo ln -s /etc/nginx/sites-available/tabby /etc/nginx/sites-enabled/
sudo nginx -t
sudo certbot --nginx -d tabby.yourdomain.com
sudo systemctl reload nginx
Certbot은 자동 갱신을 위한 systemd 타이머를 설치합니다. 다음 명령으로 정상 동작을 확인하세요:
sudo certbot renew --dry-run
자주 발생하는 문제: nginx를 시작한 직후 502 Bad Gateway 가 뜨면 대부분 Tabby가 아직 모델을 다운로드 중인 경우입니다. docker compose logs tabby 를 보면서 health check가 통과될 때까지 기다리세요.
WebSocket 주의: Upgrade와 Connection 헤더를 빼면 Tabby 채팅 스트리밍이 조용히 멈춥니다. 기본 완성 기능은 WebSocket에 의존하지 않지만, answer engine은 필요합니다.
초기 설정
브라우저에서 https://tabby.yourdomain.com 에 접속하면 첫 방문 시 관리자 계정을 만들라는 화면이 나옵니다. 최초 등록자가 관리자 권한을 갖게 되며, 이후 사용자는 일반 사용자로 등록됩니다.
관리자 패널 (/admin) 활용
- Users → Invite: 팀원별 초대 링크 생성. 링크는 1회 사용 후 만료됩니다.
- Tokens: 각 개발자는 로그인 후 Settings → Tokens 에서 자신의 토큰을 생성합니다. 토큰은 한 번만 복사할 수 있으며, Tabby는 전체 값을 다시 보여주지 않습니다.
- Admin visibility: 모든 활성 토큰, 소유자, 마지막 사용 시각을 확인할 수 있습니다. 팀원을 떠나게 하면 토큰을 즉시 폐기하세요.
v0.32.0 기준으로 토큰 자동 회전 스케줄은 제공되지 않으니, 팀 운영 매뉴얼에 “토큰은 수동으로 폐기하기 전까지는 만료되지 않는다”는 점을 명시해 두세요.
VS Code에 Tabby 확장 설치
- VS Code Marketplace에서 TabbyML 퍼블리셔의 확장 설치
Ctrl+Shift+P→ Tabby: Connect to Server 실행- 서버 URL 입력:
https://tabby.yourdomain.com - 프롬프트가 뜨면 토큰 붙여넣기
또는 settings.json에 직접 입력:
{
"tabby.api.endpoint": "https://tabby.yourdomain.com",
"tabby.api.token": "your-token-here"
}
VS Code 상태 표시줄에 초록색 Tabby 아이콘이 보이면 연결이 정상적인 것입니다. 회색 아이콘이면 연결에 실패한 것이니 토큰과 서버 URL을 다시 확인하세요.
JetBrains IDE에 Tabby 플러그인 설치
- File → Settings → Plugins → Marketplace 에서 Tabby 검색 후 설치, IDE 재시작
- File → Settings → Tools → Tabby 로 이동
- Server endpoint:
https://tabby.yourdomain.com입력 - Authentication token: 개발자 토큰 붙여넣기
- Server endpoint:
설정이 완료되면 IDE 내에서 인라인 완성과 채팅 기능을 바로 사용할 수 있습니다.