navystack - rhymix 질문
-
안녕하세요,
- lightsail instance 셋업 및 433 (udp/tcp), 80(tcp) port 열기
- static ip 추가 및 dns register (cloudflare)
- docker, docker-compose 설치
- docker-compose.yml 저에게 맞게 수정
- cloudflare 에서 (Zone.DNS All zones permission 준 후 )dns challenge로 변경하였습니다.
- docker network create traefik-network
- chmod 600 traefik-certificates/acme.json
메뉴얼에 나와있는데로 진행 후, docker compose up -d 한 후에, 다 정상적으로 실행되는 것은 확인 하였는데, 도커 rhymix-rhymix-1 쪽 주소로 curl http://172.18.0.4 할때는 정상적인 rhymix쪽 응답이 나오는데, ip나 domain으로 들어가면 404 page not found가 뜹니다
ㅠ 혹시 제가 놓친게 있을까요? 뭔가 traefik 설정이 잘못 된 것 같은데, 처음 해보다보니 잘안되서 문의드립니다.
-
@imageschool 괜찮으시다면, 정보는 마스킹 하셔서 한번
docker-compose.yml
첨부 부탁드립니다.또한 살짝 우려 되는 부분이
navystack - rhymix 질문 에서 @imageschool 님이 말했습니다:
lightsail instance 셋업 및 433 (udp/tcp), 80(tcp) port 열기
라고 하셨는데 443 포트가 맞는지 확인 부탁드립니다.
-
안녕하세요, 우선 빠르게 답장해주셔서 감사합니다!
앗 433포트는 제가 질문 작성중에 오타로 입력 한 것 같습니다.. 방화벽 셋팅은 위와 같습니다.
아래는 제 docker-compose.yaml 내용입니다.
version: '3.9' services: rhymix-db: image: mysql:8.0 restart: unless-stopped logging: options: max-size: '10m' environment: MYSQL_USER: rhymix MYSQL_PASSWORD: ********* MYSQL_DATABASE: rhymix MYSQL_ROOT_PASSWORD: ********* volumes: - rhymix-db:/var/lib/mysql networks: - traefik-network rhymix: image: navystack/rhymix:latest restart: unless-stopped depends_on: - rhymix-db logging: options: max-size: '10m' labels: - 'traefik.enable=true' - 'traefik.docker.network=traefik-network' - 'traefik.http.services.rhymix-srv.loadbalancer.server.port=80' - 'traefik.http.services.rhymix-srv.loadbalancer.passhostheader=true' - 'traefik.http.middlewares.www-redir.redirectregex.regex=^https://www.(.*)' - 'traefik.http.middlewares.www-redir.redirectregex.replacement=https://$${1}' - 'traefik.http.middlewares.www-redir.redirectregex.permanent=true' - 'traefik.http.middlewares.compresstraefik.compress=true' - 'traefik.http.routers.rhymix-rt.rule=Host(`mydomain.com`) || Host(`www.mydomain.com`)' ## fixed - 'traefik.http.routers.rhymix-rt.entrypoints=websecure' - 'traefik.http.routers.rhymix-rt.service=rhymix-srv' - 'traefik.http.routers.rhymix-rt.middlewares=www-redir,compresstraefik' - 'traefik.http.routers.rhymix-rt.tls=true' - 'traefik.http.routers.rhymix-rt.tls.certresolver=letsencrypt' ## fixed - 'traefik.http.routers.rhymix-rt.tls.domains[0].main=mydomain.com' ## fixed - 'traefik.http.routers.rhymix-rt.tls.domains[0].sans=*.mydomain.com' ## fixed volumes: - rhymix-data:/var/www/html networks: - traefik-network traefik: image: traefik:v2.10 restart: unless-stopped logging: options: max-size: '10m' command: - '--log.level=DEBUG' - '--accesslog=true' - '--api.dashboard=true' - '--ping=true' - '--ping.entrypoint=ping' - '--entryPoints.ping.address=:8082' - '--entryPoints.web.address=:80' - '--entryPoints.websecure.address=:443' - '--entryPoints.web.http.redirections.entryPoint.to=websecure' - '--entrypoints.web.http.redirections.entryPoint.scheme=https' - '--entrypoints.web.http.redirections.entrypoint.permanent=true' - '--providers.docker=true' - '--providers.docker.watch=true' - '--providers.docker.network=traefik-network' - '--providers.docker.endpoint=unix:///var/run/docker.sock' - '--providers.docker.exposedByDefault=false' # (commented out due to dns challenge usage) Let's Encrypt ACME 설정 # - '--certificatesresolvers.letsencrypt.acme.tlschallenge=true' # DNS Challenge 사용시 주석처리 하고 밑에 Let's Encrypt ACME DNS Challenge (CLoudflare) 주석 해제 && # environment: # CF_DNS_API_TOKEN: 주석 해제 - '--certificatesresolvers.letsencrypt.acme.keyType=EC256' - '--certificatesresolvers.letsencrypt.acme.email=webmaster@mydomain.com' # fixed - '--certificatesresolvers.letsencrypt.acme.storage=/etc/traefik/acme/acme.json' # Let's Encrypt ACME DNS Challenge (CLoudflare) - "--certificatesResolvers.letsencrypt.acme.dnsChallenge=true" - "--certificatesResolvers.letsencrypt.acme.dnsChallenge.provider=cloudflare" - "--certificatesResolvers.letsencrypt.acme.dnsChallenge.resolvers=1.1.1.1:53,8.8.8.8:53" - "--certificatesresolvers.letsencrypt.acme.dnschallenge.delaybeforecheck=0" # Prometheus 메트릭 설정 - '--metrics.prometheus=true' - '--metrics.prometheus.buckets=0.1,0.3,1.2,5.0' - '--metrics.prometheus.addServicesLabels=true' - '--metrics.prometheus.addrouterslabels=true' - '--metrics.prometheus.addEntryPointsLabels=true' # 버전 확인 및 익명 사용 통계 설정 - '--global.checkNewVersion=true' - '--global.sendAnonymousUsage=false' # HTTP3 설정 - '--experimental.http3=true' - '--entrypoints.websecure.http3' - '--entrypoints.websecure.http3.advertisedport=443' environment: CF_DNS_API_TOKEN: *********************************** healthcheck: test: ['CMD', 'wget', 'http://localhost:8082/ping', '--spider'] interval: 10s timeout: 2s retries: 3 start_period: 5s labels: - 'traefik.enable=true' - 'traefik.http.services.dashboard.loadbalancer.server.port=8080' - 'traefik.http.services.dashboard.loadbalancer.passhostheader=true' - 'traefik.http.routers.dashboard.rule=Host(`web.mydomain.com`)' ## fixed - 'traefik.http.routers.dashboard.entrypoints=websecure' - 'traefik.http.routers.dashboard.service=api@internal' - 'traefik.http.routers.dashboard.tls=true' - 'traefik.http.routers.dashboard.tls.certresolver=letsencrypt' volumes: - /var/run/docker.sock:/var/run/docker.sock - ./traefik-certificates:/etc/traefik/acme networks: - traefik-network ports: - target: 80 published: 80 mode: host - target: 443 published: 443 mode: host protocol: tcp - target: 443 published: 443 mode: host protocol: udp - target: 8080 published: 8080 mode: host protocol: tcp volumes: rhymix-data: rhymix-db: networks: traefik-network: external: true
혹시 대쉬보드는 8080 포트 열어준다음에 접속하면 되는걸까요?
a.b.c.d/dashboard
a.b.c.d:8080/dashboard
a.b.c.d:8080
domain 그리고 static ip 둘다 접속이 안되는 상황입니다 ㅠcurl http://172.18.0.4/dashboard 는 lightsail instance 내에서는 응답이오네요!
아래는 docker traefik-network 관련 내용입니다.
~ ❯ docker network inspect traefik-network at 04:02:32 [ { "Name": "traefik-network", "Id": "7a6813a33aced9b56000fbf3fb6c4f326191a66bda9540aacf637216312dded8", "Created": "2024-10-27T12:46:50.390286474Z", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.18.0.0/16", "Gateway": "172.18.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { "80f4495e4e8c13d57185681af21e522c66a79488a637a111bef80a8843a5f0c3": { "Name": "rhymix-traefik-1", "EndpointID": "339ea1a26a2c1ca9a9eab3a67abe7450e9097c8af285eea0d8c426da8fe b72e2", "MacAddress": "02:42:ac:12:00:02", "IPv4Address": "172.18.0.2/16", "IPv6Address": "" }, "98fcb5824f55e6b21b170ee5621419fe511317d63ece5a20130bfdb516cde325": { "Name": "rhymix-rhymix-1", "EndpointID": "dab8fd45539d57d24a4c892adbafcfe6cacf6ffcac8c6328e063b5eb66f 06e92", "MacAddress": "02:42:ac:12:00:04", "IPv4Address": "172.18.0.4/16", "IPv6Address": "" }, "db624142c7a32847f14e20617e61174821b4329be337c2e1f82a51c7086274b1": { "Name": "rhymix-rhymix-db-1", "EndpointID": "a71e0d718ee206b5c2d41bd5e77c09e3c0fa5576cca31f1770e7e01cef9 e9fae", "MacAddress": "02:42:ac:12:00:03", "IPv4Address": "172.18.0.3/16", "IPv6Address": "" } }, "Options": {}, "Labels": {} } ]
-
엇.. cloudflare dns 쪽에서 proxy status 를 dns only로 변경하니 페이지가 잘 들어가지네요..!!! 잘 해결 되었습니다. 답변 주셔서 감사합니다, 괜히 번거롭게 했네요..혹시 위 문제와 별개로, 요런식으로 docker-compose로 CMS 띄워서 개발 할때는, 개발 사이클이 어떤식으로 진행되는지 여쭤봐도 될까요? (기초적인 기능 개발이라던가, 나중에 rhymix 자체 코드를 수정해서 쓸때는 어떤식으로 해야하는지 아직 처음이라 잘 몰라서 질문 드립니다.) 또, 질문이 비슷한데 @navystack 님은 cms 사이트 개발 하실 때 어떤 방식으로 배포 하고 관리 하시는지 궁금합니다
-
@imageschool 님 Traefik에서 신뢰할수 있는 프록시 옵션이 없어서 404를 반환한 것 같네요.
혹시 트래픽을 프록시 뒤에 배치할 때는 관련된 설정이 필요합니다.트래픽과 관련된 오류는 아니었지만 잘 해결되어 다행입니다.
docker-compose로 개발할 때는 여러가지로 상황에 맞추어 진행하는 편입니다.
- 번역을 할 때, 특정 파일만 수정해서 진행해야한다고 하면, 바인드 마운트를 바탕으로 컨테이너를 실시간으로 조정합니다. 이것 저것 개발 환경이라도 설치하기 귀찮기도 하고요. (그래서 대부분 제가 만든 컨테이너는 UID:PID 매핑이 되어있습니다.) 파일 권한 오류는 부차적인 옵션이구용
- 동일한 의존성을 유지해야하거나, 특정한 오류를 감지해야한다면, 컨테이너를 사용하는 편입니다. (재현성)
- 수정은 해야겠고 관련 의존성을 개발환경에 설치하기 싫을 때 사용합니다. docker exec를 사용해서 수정합니다.
- 최종적으로 완성된 코드를 배포하는 용도로 사용을 합니다.
-
@imageschool navystack으로 컨테이너 관리하다가 너무 복잡해져서, 컨테이너 용으로 github를 별도로 분리했습니다.
혹시 관련된 활용방법이 필요하시다면 https://github.com/netvpc 를 확인해보세요 :) -
@navystack 네 다행히 별 문제 아니여서, 잘 해결하였습니다!
상세히 설명해주셔서 감사합니다. IDE는 그럼 직접 인스턴스에 remote로 연결하고 도커 내에 마운트한 경로를 불러와서 작업하시는거군요? 한번 netvpc도 살펴보겠습니다.