콘텐츠로 건너뛰기
  • 홈
  • 카테고리
  • 최근
  • 태그
  • 인기
  • 사용자
  • 그룹
축소
브랜드 로고

AskFront 포럼

  1. 홈
  2. 자유로운 소통
  3. 뉴비를 위한 질문 공간
  4. navystack - rhymix 질문

navystack - rhymix 질문

예약됨 고정됨 잠김 이동됨 Solved 뉴비를 위한 질문 공간
9 게시물 2 작성자 139 조회수
  • 오래된 순
  • 최신 순
  • 가장 많은 투표
답글
  • 토픽으로 답글
로그인 후 답글 작성
이 토픽은 삭제되었습니다. 토픽 관리 권한이 있는 사용자만 볼 수 있습니다.
  • I 오프라인
    I 오프라인
    imageschool
    에 작성함 마지막 수정자: imageschool
    #1

    안녕하세요,

    • 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 설정이 잘못 된 것 같은데, 처음 해보다보니 잘안되서 문의드립니다.

    1 답글 마지막 답글
    0
    • navystackN 오프라인
      navystackN 오프라인
      navystack
      전역 중재자
      에 작성함 마지막 수정자: navystack
      #2

      @imageschool 님 안녕하세요?
      우선 많이 답답하셨을 것 같네요.

      IP나 도메인으로 들어갔을 때,

      image.png

      이 페이지가 나온다는 말씀이신거죠?

      라이믹스 컨테이너가 traefik-network로 올바르게 연결되었는지 확인한번 해보시겠어요?
      트래픽 자체가 도커 네트워크를 활용하는 방법을 사용하기 때문에, traefik-network에 참여 되어있어야 합니다.

      또한, 대시보드 페이지에서 올바르게 인식 되었는지 확인 가능합니다.

      ad1e3be5-445d-4add-b446-3213445c3ddf-image.png

      1 답글 마지막 답글
      👍
      0
      • navystackN 오프라인
        navystackN 오프라인
        navystack
        전역 중재자
        에 작성함 마지막 수정자: navystack
        #3

        @imageschool 괜찮으시다면, 정보는 마스킹 하셔서 한번 docker-compose.yml 첨부 부탁드립니다.

        또한 살짝 우려 되는 부분이

        navystack - rhymix 질문 에서 @imageschool 님이 말했습니다:

        lightsail instance 셋업 및 433 (udp/tcp), 80(tcp) port 열기

        라고 하셨는데 443 포트가 맞는지 확인 부탁드립니다.

        I 1 답글 마지막 답글
        👍
        0
        • navystackN navystack

          @imageschool 괜찮으시다면, 정보는 마스킹 하셔서 한번 docker-compose.yml 첨부 부탁드립니다.

          또한 살짝 우려 되는 부분이

          navystack - rhymix 질문 에서 @imageschool 님이 말했습니다:

          lightsail instance 셋업 및 433 (udp/tcp), 80(tcp) port 열기

          라고 하셨는데 443 포트가 맞는지 확인 부탁드립니다.

          I 오프라인
          I 오프라인
          imageschool
          에 작성함 마지막 수정자: imageschool
          #4

          @navystack

          안녕하세요, 우선 빠르게 답장해주셔서 감사합니다!

          0fffcca2-542f-4011-beed-8bbefbbf03a3-image.png

          앗 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": {}
              }
          ]
          
          1 답글 마지막 답글
          0
          • I 오프라인
            I 오프라인
            imageschool
            에 작성함 마지막 수정자:
            #5

            image.png
            엇.. cloudflare dns 쪽에서 proxy status 를 dns only로 변경하니 페이지가 잘 들어가지네요..!!! 잘 해결 되었습니다. 답변 주셔서 감사합니다, 괜히 번거롭게 했네요..

            혹시 위 문제와 별개로, 요런식으로 docker-compose로 CMS 띄워서 개발 할때는, 개발 사이클이 어떤식으로 진행되는지 여쭤봐도 될까요? (기초적인 기능 개발이라던가, 나중에 rhymix 자체 코드를 수정해서 쓸때는 어떤식으로 해야하는지 아직 처음이라 잘 몰라서 질문 드립니다.) 또, 질문이 비슷한데 @navystack 님은 cms 사이트 개발 하실 때 어떤 방식으로 배포 하고 관리 하시는지 궁금합니다

            1 답글 마지막 답글
            0
            • navystackN 오프라인
              navystackN 오프라인
              navystack
              전역 중재자
              에 작성함 마지막 수정자: navystack
              #6

              @imageschool 님 Traefik에서 신뢰할수 있는 프록시 옵션이 없어서 404를 반환한 것 같네요.
              혹시 트래픽을 프록시 뒤에 배치할 때는 관련된 설정이 필요합니다.

              트래픽과 관련된 오류는 아니었지만 잘 해결되어 다행입니다.

              docker-compose로 개발할 때는 여러가지로 상황에 맞추어 진행하는 편입니다.

              1. 번역을 할 때, 특정 파일만 수정해서 진행해야한다고 하면, 바인드 마운트를 바탕으로 컨테이너를 실시간으로 조정합니다. 이것 저것 개발 환경이라도 설치하기 귀찮기도 하고요. (그래서 대부분 제가 만든 컨테이너는 UID:PID 매핑이 되어있습니다.) 파일 권한 오류는 부차적인 옵션이구용
              2. 동일한 의존성을 유지해야하거나, 특정한 오류를 감지해야한다면, 컨테이너를 사용하는 편입니다. (재현성)
              3. 수정은 해야겠고 관련 의존성을 개발환경에 설치하기 싫을 때 사용합니다. docker exec를 사용해서 수정합니다.
              4. 최종적으로 완성된 코드를 배포하는 용도로 사용을 합니다.
              1 답글 마지막 답글
              0
              • navystackN 오프라인
                navystackN 오프라인
                navystack
                전역 중재자
                에 작성함 마지막 수정자:
                #7

                @imageschool navystack으로 컨테이너 관리하다가 너무 복잡해져서, 컨테이너 용으로 github를 별도로 분리했습니다.
                혹시 관련된 활용방법이 필요하시다면 https://github.com/netvpc 를 확인해보세요 :)

                1 답글 마지막 답글
                0
                • I 오프라인
                  I 오프라인
                  imageschool
                  에 작성함 마지막 수정자:
                  #8

                  @navystack 네 다행히 별 문제 아니여서, 잘 해결하였습니다!

                  상세히 설명해주셔서 감사합니다. IDE는 그럼 직접 인스턴스에 remote로 연결하고 도커 내에 마운트한 경로를 불러와서 작업하시는거군요? 한번 netvpc도 살펴보겠습니다.

                  1 답글 마지막 답글
                  0
                  • navystackN 오프라인
                    navystackN 오프라인
                    navystack
                    전역 중재자
                    에 작성함 마지막 수정자:
                    #9

                    @imageschool 네 맞습니다. 보통 혼용해서 사용합니다. :)
                    IDE는 사용 안합니다 :) vscode가 IDE라면 사용하는 거겠네요 :)

                    1 답글 마지막 답글
                    👍
                    0
                    • askfrontA askfront has marked this topic as solved on
                    답글
                    • 토픽으로 답글
                    로그인 후 답글 작성
                    • 오래된 순
                    • 최신 순
                    • 가장 많은 투표


                    • 로그인

                    • 계정이 없으신가요? 등록

                    • 검색하려면 로그인하거나 등록하세요.
                    이용약관
                    개인정보 처리방침
                    • 첫 게시물
                      마지막 게시물
                    0
                    • 홈
                    • 카테고리
                    • 최근
                    • 태그
                    • 인기
                    • 사용자
                    • 그룹