테마
서버 올리기
autofix 는 정적으로 빌드된 Go 바이너리 하나예요. 데이터베이스가 없고, 기록은 파일 하나(runs.json)에 남아요.
이미지
저장소 루트의 Dockerfile 은 두 단계로 빌드해요.
- 빌드:
gofmt검사,go vet,go test를 통과해야 바이너리를 만들어요. 테스트가 깨지면 이미지가 만들어지지 않아요. - 실행: Alpine 위에 바이너리만 두고, uid
10001의app사용자로 돌아요.ca-certificates·tzdata가 들어 있어요.
| 항목 | 값 |
|---|---|
| 포트 | 8080 (PORT 로 바꿈) |
| 볼륨 | /data (DATA_DIR) |
| 헬스 체크 | GET /healthz → ok, 60초마다 |
꼭 넣을 것
sh
docker run -d --name autofix --restart unless-stopped -p 8080:8080 \
-v autofix-data:/data \
-v /srv/autofix/rules.md:/config/rules.md:ro \
-e BRIDGE_URL=https://bridge.example.com \
-e BRIDGE_HOST="내 맥 이름" \
-e BRIDGE_WORKDIR="~/src" \
-e BRIDGE_SERVICE_TOKEN=... -e AUTOFIX_TOKEN=... \
-e VIEW_USER=me -e VIEW_PASSWORD=... \
-e RULES_FILE=/config/rules.md \
autofix/data는 볼륨으로. 없으면 다시 배포할 때 기록이 사라져요. 이름 있는 볼륨은 이미지의 소유자(app, 10001)를 그대로 받아요. 호스트 폴더를 바인드 마운트한다면 그 폴더를 10001 이 쓸 수 있게 해 두세요. 아니면 서버는 뜨지만 첫 트리거에서500 기록 저장 실패가 나요.- 규칙 파일은 읽기 전용 마운트로. 컨테이너의
app사용자가 읽을 수 있어야 해요. - HTTPS 뒤에 두세요. 기록 화면이 Basic 인증이라 평문 HTTP 로 열면 비밀번호가 그대로 지나가요. 리버스 프록시(Traefik, Caddy, nginx)에서 TLS 를 끝내세요.
전체 목록은 환경 변수를 보세요.
Dokploy 에서
- 애플리케이션을 만들고 Git 저장소를 연결해요. 빌드 방식은 Dockerfile, 경로는
Dockerfile이에요. - Environment 에 환경 변수를 넣어요.
- Mounts 에 볼륨(
/data)과, 규칙을 쓸 거라면 File Mount(/config/rules.md) 를 더하고RULES_FILE=/config/rules.md를 넣어요. 규칙은 Dokploy 화면에서 바로 고칠 수 있고, 다음 실행부터 반영돼요. - Domains 에 도메인을 붙이고 포트
8080, HTTPS 를 켜요.
비공개 저장소의 자동 배포
비공개 저장소는 Dokploy 의 자동 배포가 켜져 있어도 push 로 배포가 걸리지 않는 경우가 있어요. push 뒤에 배포 기록이 안 보이면 직접 Deploy 를 누르세요.
다시 배포할 때
- 새 컨테이너가 헬스 체크를 통과할 때까지(최대 60초쯤) 옛 컨테이너가 응답해요. 라이브 확인은 그 뒤에 하세요.
- 진행 중인 실행은
runs.json에 남아 있어서, 새 컨테이너가 다음 분부터 이어서 지켜봐요. "끝남이 2분 유지" 세기만 처음부터 다시 해요. - 필수 환경 변수가 비었거나 규칙 파일을 못 읽으면 새 컨테이너가 뜨지 않아요. 로그 첫 줄에 이유가 있어요.
시작 로그
정상이면 이렇게 한 줄이 찍혀요.
autofix 시작 :8080 (맥 "내 맥 이름", 폴더 "~/src", 규칙 /config/rules.md, 제한 4h0m0s)규칙 자리에 기본 규칙 이 보이면 RULES_FILE 이 비어 있는 거예요. 토큰이 하나라도 비어 있으면 경고가 한 줄 더 찍히고 그 기능만 꺼져요.
백업
/data/runs.json 하나만 복사하면 돼요. 쓸 때 임시 파일에 쓰고 이름을 바꾸기 때문에, 언제 복사해도 반쯤 쓰인 파일이 되지 않아요. 기록은 최근 200건까지만 남아요.