diff --git a/docs/ops.md b/docs/ops.md new file mode 100644 index 0000000..a60b0d5 --- /dev/null +++ b/docs/ops.md @@ -0,0 +1,175 @@ +# 운영 절차 + +## 서비스 관리 기본 패턴 + +모든 서비스는 `systemd + Podman Quadlet`으로 관리된다. + +```bash +# 상태 확인 +systemctl status .service + +# 재시작 +systemctl restart .service + +# 로그 확인 +journalctl -u .service -f + +# Quadlet 파일 수정 후 반드시 daemon-reload +systemctl daemon-reload +systemctl restart .service +``` + +## 서비스명 목록 + +| 서비스 | systemd unit | +|---|---| +| Authentik Server | `authentik-server.service` | +| Authentik Worker | `authentik-worker.service` | +| Gitea | `gitea.service` | +| Nextcloud | `nextcloud-app.service` | +| Jellyfin | `jellyfin.service` | +| Grafana | `grafana-server.service` | +| Prometheus | `prometheus.service` | +| cAdvisor | `cadvisor.service` | +| FileBrowser | `filebrowser.service` | +| SFTPGo | `sftpgo.service` | +| Open WebUI | `open-webui.service` | +| ComfyUI | `comfyui.service` | +| JupyterHub | `jupyterhub.service` | +| Ollama | `ollama.service` | +| NPM | `npm-app.service` | +| ASR | `asr.service` | +| Reservation | `reservation.service` | +| PostgreSQL | `postgres-main.service` | +| MariaDB | `mariadb.service` | + +## 헬스체크 + +```bash +# Authentik +curl -sf http://localhost:19000/-/health/live/ + +# Gitea +curl -sf http://10.89.0.8:3000/api/healthz + +# Nextcloud +curl -fsS http://10.89.0.42/status.php + +# Prometheus +curl -sf http://10.89.0.30:9090/-/healthy + +# Grafana +curl -sf http://172.30.1.41:3000/api/health + +# Open WebUI +curl -sf http://localhost:8079/health + +# Ollama +curl -sf http://localhost:11434/api/version +``` + +## Podman 컨테이너 직접 조작 + +```bash +# 실행 중인 컨테이너 목록 +podman ps + +# 컨테이너 로그 +podman logs + +# 컨테이너 셸 접속 +podman exec -it bash + +# 컨테이너 재시작 (systemd 경유 권장) +systemctl restart .service +``` + +## Nextcloud occ 명령 + +```bash +# 앱 목록 +podman exec --user www-data nextcloud-app php occ app:list + +# 시스템 설정 확인 +podman exec --user www-data nextcloud-app php occ config:system:get + +# 캐시 초기화 +podman exec --user www-data nextcloud-app php occ maintenance:repair + +# 파일 스캔 +podman exec --user www-data nextcloud-app php occ files:scan --all +``` + +## Gitea 관리 + +```bash +# 사용자 목록 +podman exec --user git gitea gitea admin user list + +# 인증 소스 목록 +podman exec --user git gitea gitea admin auth list + +# 관리자 권한 부여 +podman exec --user git gitea gitea admin user create --admin --username --email --password +``` + +## Authentik 관리 + +```bash +# API 토큰 재발급 +podman exec authentik-worker python -m manage shell -c " +from authentik.core.models import Token, TokenIntents, User +user = User.objects.get(username='akadmin') +t = Token.objects.filter(identifier='cli-admin-token').first() +if t: t.delete() +token = Token.objects.create(identifier='cli-admin-token', user=user, intent=TokenIntents.INTENT_API) +print(token.key) +" + +# 설정 초기화 (migration) +podman exec authentik-worker python -m manage migrate +``` + +## NPM 설정 변경 후 반영 + +NPM은 MariaDB에 설정을 저장한다. DB 직접 변경 시 nginx conf도 함께 수정해야 한다. + +```bash +# NPM nginx 즉시 reload +podman exec npm-app nginx -s reload + +# conf 파일 위치 +ls /podman/data/npm/data/nginx/proxy_host/ +``` + +## 인증서 갱신 + +NPM이 Let's Encrypt 인증서를 자동 갱신한다. 인증서는 `/podman/data/npm/letsencrypt/` 에 저장된다. + +```bash +# 현재 인증서 상태 확인 +podman exec npm-app certbot certificates +``` + +## 새 Quadlet 서비스 배포 절차 + +1. `/etc/containers/systemd/.container` 작성 +2. `systemctl daemon-reload` +3. `systemctl enable --now .service` +4. 헬스체크 확인 +5. NPM에 프록시 호스트 추가 (필요 시) +6. Authentik Application 등록 (필요 시) +7. Gitea 리포에 Quadlet 파일 커밋 + +## 로그 집중 조회 + +```bash +# 전체 서비스 오류만 +journalctl -p err --since "1 hour ago" --no-pager + +# 특정 서비스 최근 50줄 +journalctl -u .service -n 50 --no-pager + +# 실시간 멀티 서비스 +journalctl -fu authentik-server.service -u authentik-worker.service +```