서버 연동 체크리스트
설계 13장 순서 그대로예요. 안드로이드 공기계로 돌리면 폰 단계가 함께 붙어요. 체크 표시는 이 기기에만 저장돼요.
0 / 22 완료
디스코드 명령 예시는 입력할 값을 보여 주는 거예요. 채팅창에 명령 이름(예: /그룹 생성)을 입력하고 옵션 칸을 골라 채우세요.
안드로이드 단계의 명령·확인 방법 전체는 docs/deploy-android.md에 있어요. 저장소는 비공개(소유자만 열림)예요.
폰(안드로이드) 준비
Galaxy S8+ 같은 안드로이드 공기계(Termux + proot Ubuntu)로 봇을 돌릴 때만. 서버·라즈베리파이의 Docker로 돌리면 건너뛰고 README 「배포」를 따르세요.
누를 것
- github.com/termux/termux-app/releases → arm64-v8a APK
- github.com/termux/termux-boot/releases, github.com/termux/termux-api/releases → APK
- 설치 후 Termux:Boot를 한 번 열었다 닫기(부팅 실행 등록)
보여야 할 것
- 세 앱이 모두 같은 출처(GitHub)여야 해요. Play 스토어·F-Droid 것과 섞으면 서명이 달라 서로 연결되지 않아요
- Termux를 열면 $ 프롬프트
누를 것
- 디바이스 케어 → 배터리 → 앱 전원 관리 → 절전 예외 앱에 Termux·Termux:Boot 추가
- 디바이스 케어 → ⋮ → 자동 최적화 끄기
- 설정 → 애플리케이션 → Termux → 배터리 → 백그라운드 제한 없음(배터리 사용량 최적화 해제)
- 설정 → 연결 → Wi-Fi → ⋮ → 고급 → 절전 모드에서 Wi-Fi 연결 유지: 항상
- 설정 → 소프트웨어 업데이트 자동 다운로드 끄기, Play·Galaxy Store 앱 자동 업데이트 끄기
보여야 할 것
- 메뉴 이름은 펌웨어마다 조금 달라요. 자세한 경로는 아래 문서 2단계
누를 것
- Termux에서 패키지를 올린 뒤 스크립트 한 줄
보여야 할 것
- 「==> 완료」 뒤에 Ubuntu용 한 줄이 출력됨
- 「Termux를 완전히 종료했다 다시 연 뒤」 안내가 나오면 알림의 Exit → 다시 열고 같은 줄을 한 번 더
pkg upgrade -ycurl -sL https://gatekeeper-7sf.pages.dev/android/setup-termux.sh | bash누를 것
- Termux에서 그대로 한 줄. Termux의 curl로 받아 Ubuntu 안 bash에 흘려 넣어요
보여야 할 것
- 마지막에 node v24.x, pnpm 12.5.1, gh·sqlite3·rclone 버전 목록
curl -sL https://gatekeeper-7sf.pages.dev/android/setup-ubuntu.sh | proot-distro login ubuntu -- bash -s누를 것
- proot-distro login ubuntu 로 들어가기(프롬프트가 root@localhost)
- gh auth login → GitHub.com → HTTPS → 브라우저 로그인(기기 코드)
- 저장소 clone 후 설치·빌드
보여야 할 것
- gh auth login 끝에 「Logged in as …」
- pnpm build가 오류 없이 끝나고 dist/index.js가 생김
proot-distro login ubuntugh auth logingh repo clone psychopomp0519/gatekeeper /root/gatekeepercd /root/gatekeeper && pnpm install && pnpm build
개발자 포털
누를 것
- discord.com/developers/applications → New Application
- Bot 탭 → Reset Token → 토큰을 봇 서버의 .env DISCORD_TOKEN에 붙여 넣기
- Bot 탭의 Public Bot 끄기
보여야 할 것
- 토큰은 한 번만 보여요. 잃어버리면 다시 Reset Token
- Public Bot이 꺼져 있어 나만 초대할 수 있음
누를 것
- Bot 탭 → Privileged Gateway Intents
- Server Members Intent 켜기, Presence·Message Content는 끄기 → Save
보여야 할 것
- Server Members Intent만 켜져 있음. 꺼져 있으면 봇이 입장·탈퇴를 받지 못해요
누를 것
- 아래 초대 URL을 열고(홈의 「봇 초대」 버튼과 같음) 서버 선택 → 승인
보여야 할 것
- 권한 32개가 선택된 승인 화면
- 서버 멤버 목록에 봇이 보임(봇 프로세스를 켜기 전엔 오프라인)
- 권한을 빠뜨려도 /설정 초기화가 빠진 권한을 알려 줘요. 서버 설정 → 역할 → 봇 역할에서 켜면 됨
https://discord.com/oauth2/authorize?client_id=1552202076921270342&scope=bot+applications.commands&permissions=585483968573139&integration_type=0권한 정수 585483968573139. 감사 로그 보기는 디스코드에서 직접 한 추방·차단을 알아채는 데 써요.
폰에서 봇 기동
안드로이드일 때만. 토큰과 봇 초대(위 개발자 포털)가 끝난 뒤에 해요.
누를 것
- Ubuntu 안 /root/gatekeeper에서 .env를 만들고 토큰·클라이언트 ID·실서버 ID 입력(DATABASE_PATH=./data/gatekeeper.db)
- DB 준비 후 명령 등록
보여야 할 것
- pnpm deploy-commands 끝에 「등록 완료: /설정, /그룹, …」
- 토큰은 위 「애플리케이션과 토큰」, 봇은 「봇 초대」를 먼저 끝내야 해요
cp .env.example .env && chmod 600 .env && nano .envpnpm db:migrate && pnpm deploy-commands누를 것
- run-loop.sh로 띄우고, Termux 왼쪽 가장자리에서 밀어 새 세션을 열어 로그 보기
- 확인 후 첫 세션에서 Ctrl+C
보여야 할 것
- 로그에 「디스코드 로그인 완료」, 디스코드에서 봇이 온라인
- Ctrl+C 후 「중지 요청으로 종료」 「run-loop 종료」
bash /root/gatekeeper/scripts/android/run-loop.shproot-distro login ubuntu -- tail -f /root/gatekeeper/logs/bot.log누를 것
- Termux(Ubuntu 밖)에서 boot.sh를 Termux:Boot 폴더에 받기
- 폰 재부팅 후 화면을 켜지 않고 1~2분 기다리기
보여야 할 것
- 재부팅 뒤 Termux 알림에 「wake lock held」, 디스코드에서 봇이 온라인
- 상태 확인: node dist/health.js 가 「healthy: 하트비트 N초 전」
mkdir -p ~/.termux/boot && curl -sL https://gatekeeper-7sf.pages.dev/android/boot.sh -o ~/.termux/boot/gatekeeper.sh && chmod +x ~/.termux/boot/gatekeeper.shproot-distro login ubuntu -- bash -c "cd /root/gatekeeper && node dist/health.js"누를 것
- Ubuntu 안에서 rclone config → n → 이름 gdrive → drive → 브라우저로 Google 로그인
- 백업 1회 수동 실행 → Termux(Ubuntu 밖)에서 매일 04:10 crontab 등록
보여야 할 것
- 「==> 완료」, Drive의 gatekeeper-backups 폴더에 gatekeeper-날짜.db.gz
- crontab -l 에 backup.sh 줄
rclone configbash /root/gatekeeper/scripts/android/backup.shmkdir -p ~/.gatekeeper && (crontab -l 2>/dev/null | grep -v gatekeeper/scripts/android/backup.sh; echo '10 4 * * * PATH=/data/data/com.termux/files/usr/bin /data/data/com.termux/files/usr/bin/proot-distro login ubuntu -- bash /root/gatekeeper/scripts/android/backup.sh >> /data/data/com.termux/files/home/.gatekeeper/backup.log 2>&1') | crontab -
서버(소유자)
누를 것
- 디스코드에서 서버 추가 → 직접 만들기(빈 템플릿)
- 커뮤니티는 켜지 않기
보여야 할 것
- 기본 #general·음성 채널은 /설정 초기화 뒤 지워도 됨
누를 것
- 인증 수준: 낮음(이메일 인증)
- 기본 알림: @멘션만
- 운영 작업 2단계 인증: 켬(소유자 2FA 필요)
- 시스템 메시지 채널: 없음
보여야 할 것
- 입장 메시지는 봇이 #대기실에서 처리하므로 시스템 메시지는 끔
누를 것
- 서버 설정 → 역할 → 봇 역할을 목록 맨 위(소유자 바로 아래)로 드래그
보여야 할 것
- 사람이 만든 역할이 봇 위에 있으면 그 역할을 가진 사람의 역할·닉네임을 봇이 못 바꿔요
누를 것
- 봇을 켠 상태에서(로컬 pnpm dev 또는 배포) 명령 등록을 한 번 실행
- 서버에서 /설정 초기화 → 계획 확인 → 실행
보여야 할 것
- 역할 관리자·운영진·인증됨·대기, 카테고리 입구·공용·운영와 채널이 생김
- #대기실에 「합류 신청」 버튼이 달린 고정 메시지, #봇-로그에 실행 결과
- 소유자는 자동으로 인증됨(VERIFIED)
- 다시 실행하면 「변경할 것이 없어요」
pnpm deploy-commands/설정 초기화누를 것
- 서버 프로필에서 본인 닉네임을 이름 (별명) 형식으로 직접 설정
보여야 할 것
- 봇은 소유자 닉네임을 바꿀 수 없어서 이 단계만 손으로 해요
누를 것
- 첫 무리는 소유자를 담당으로 /그룹 생성
- 실제 담당을 /멤버 등록 → /그룹 담당 추가
- 소유자가 담당을 맡지 않을 거면 /그룹 담당 제거, 무리 소속은 /멤버 그룹제거
- 두 번째 무리부터는 담당을 먼저 /멤버 등록한 뒤 /그룹 생성
보여야 할 것
- 무리마다 역할 그룹:X·담당:X, 카테고리 X와 #잡담·음성 채널
- /멤버 등록은 무리가 하나 이상 있어야 하고, /그룹 생성의 담당은 인증된 멤버여야 해서 첫 무리만 순서가 달라요
/그룹 생성 이름:군대 담당:@소유자/멤버 등록 유저:@담당 이름:홍길동 그룹:군대/그룹 담당 추가 그룹:군대 유저:@담당/그룹 담당 제거 그룹:군대 유저:@소유자누를 것
- /멤버 일괄등록 → 열린 창에 한 줄에 한 명
- 새로 오는 사람은 #대기실의 합류 신청 폼으로
보여야 할 것
- 진행률이 응답에 표시되고, 실패한 줄은 이유와 함께 보고돼요
/멤버 일괄등록123456789012345678, 홍길동, 군대;고등학교, 길동이줄 형식: 사용자ID, 이름, 그룹[;그룹], 별명(선택). 사용자ID는 개발자 모드를 켜고 프로필 → ID 복사.
누를 것
- /게임 생성으로 2~3개
보여야 할 것
- #안내에 게임 역할 메뉴 버튼. 누르면 게임 역할을 받고 그 게임 카테고리가 보이고, 다시 누르면 반납하고 사라짐
/게임 생성 이름:발로란트누를 것
- #안내에 규칙과 사용법을 운영진이 직접 작성
보여야 할 것
- 봇은 이 글을 쓰지 않아요
누를 것
- /설정 점검
보여야 할 것
- 「점검 결과: 정상」이면 초대 링크를 나눠도 돼요. 항목이 있으면 운영 FAQ의 점검·복구 참고
/설정 점검