728x90

docker 5

[PostgreSQL] 설치와 접속 Ubuntu apt와 Docker

부제: PostgreSQL을 우분투에 바로 깔거나 도커로 띄워 psql로 접속하기까지# 우분투: 패키지로 설치 (systemd 서비스로 상주)sudo apt update && sudo apt install -y postgresql postgresql-contribsudo systemctl status postgresql # 상태 확인sudo -u postgres psql # postgres 슈퍼유저로 접속psql (16.14 (Ubuntu 16.14-0ubuntu0.24.04.1))Type "help" for help.postgres=#우분투는 apt로 깔면 postgres OS 유저와 동명의 DB 슈퍼유저가 만들어지고 서비스로 상주한다. 그래서 sudo -..

명령어/DB 2026.07.21

[관측성] 실패 거부 경로 로깅 중앙 예외 핸들러 Fluent Bit

부제: 성공만 로깅되던 서버에서 실패를 조사할 수 있게 만들기성공 경로는 촘촘히 로깅되는데, 실패·거부 경로에서는 서버가 조용했다.HEIF 이미지가 왜 안 올라갔는지, 채팅이 어디서 타임아웃 났는지, 403이 왜 났는지 —조사할 때마다 로그가 없어서 원인 특정에 막혔다.문제를 두 축으로 나눴다. 무엇을 로깅할지, 그리고 그걸 어디로 모아 얼마나 보존할지.성공만 남던 서버실패를 성공만큼 남기기로 했다.다만 원칙을 세웠다.판정에 쓴 입력값과 함께 남기되, 본문 내용은 넣지 않고(개인정보 0),4xx는 경고, 5xx는 에러 수준으로 남긴다.여기서 갈림길이 있었다.실패가 나는 자리마다 로그를 한 줄씩 심을 수도 있었다.그런데 그러면 자리마다 남기는 방식이 제각각이 되고, 새 에러 코드가 생기면 로그를 또 빠뜨린..

Infra 2026.07.09

[nginx] docker-compose command override envsubst 미실행 ${VAR}

부제: command를 덮어썼더니 ${VAR}가 그대로 남았다nginx 설정을 템플릿으로 두고, 환경변수를 채워 렌더하는 방식을 쓰고 있었다. TLS 인증서 경로에 도메인을 변수로 넣어 뒀다.ssl_certificate /etc/letsencrypt/live/${SSL_DOMAIN}/fullchain.pem;그런데 어느 순간 ${SSL_DOMAIN}이 치환되지 않고 글자 그대로 남았다. nginx는 ${SSL_DOMAIN}이라는 이름의 디렉터리에서 인증서를 찾으려다 실패했고, 443(HTTPS)이 뜨지 못했다.증상디스크의 템플릿은 멀쩡했다. ${SSL_DOMAIN}을 채우는 단계가 그냥 안 돌았다. 변수 치환(envsubst)이 통째로 건너뛰어진 것이다.근본 원인 — command를 덮어쓰면 치환 단계도..

Infra 2026.06.25

[Prometheus] Docker 컨테이너 자원 cgroup v2 직독 cAdvisor 대체

컨테이너별 메모리·CPU를 모니터링하려고 했다. 보통은 cAdvisor 같은 익스포터를 붙이는데, 이 호스트에선 그게 잘 안 맞았다. 그래서 커널의 cgroup을 직접 읽기로 했다. 왜 cAdvisor를 안 썼나이 호스트는 컨테이너 이미지 저장에 containerd-snapshotter(overlayfs)를 쓴다. 이 조합에서 cAdvisor는 컨테이너를 제대로 못 봤다.도커 방식으로 조회하면 컨테이너를 0개로 인식했다.containerd 방식으로 조회하면 이름이 해시로 잡혀, compose 서비스 라벨이 사라졌다. 서비스 단위(api, postgres …)로 묶어 보는 대시보드를 만들 수가 없다.새 컨테이너(cAdvisor 등)를 여럿 띄우는 것도 부담이라, 작은 수집기 하나만 추가해서 cgroup을 ..

Infra 2026.06.25

[Docker] bind-mount 설정 미반영 원인 force-recreate

배포 스크립트가 새 태그를 체크아웃하고 docker compose up -d nginx로 nginx를 올린다. 호스트 디스크의 설정 파일은 분명히 새 내용으로 바뀌었는데, 실제 요청은 계속 404가 났다.무슨 일이 있었나설정은 bind-mount로 컨테이너에 연결돼 있었다. 디스크의 파일을 바꾸면 컨테이너 안에서도 같은 파일이 보이니, 당연히 반영될 거라고 생각했다.그런데 docker compose up -d는 컨테이너 spec이 바뀌었을 때만 재생성한다. bind-mount된 파일의 내용이 바뀐 것은 spec 변경이 아니다. 이미지 태그도, 환경변수도, 볼륨 정의도 그대로니까 compose 입장에선 "바뀐 게 없는" 컨테이너다. 그래서 재기동을 건너뛰고, 실행 중이던 nginx 워커는 처음 켜질 때 읽..

Infra 2026.06.25
728x90