JJoriping / KKuTu

글자로 놀자! 끄투 온라인
http://jjo.kr/kkutu
GNU General Public License v3.0
328 stars 267 forks source link

불러오는중 앞으로 1... 에서 멈춥니다. #1048

Closed ttrrrrrddd closed 1 year ago

ttrrrrrddd commented 1 year ago

제목그대로 입니다. 게임 서버, 웹서버는 정상작동 하는데 들어가보면 앞으로 1 에서 멈춥니다. F12 키 눌러서 확인 해 보았더니 in_kkutu.min.js:1 Failed to load resource: the server responded with a status of 404 (Not Found) drkkutu.run.goorm.io/:1

   Refused to execute script from 'https://drkkutu.run.goorm.io/js/in_kkutu.min.js' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled

이런 오류가 있었습니다. 제 힘으론 도저히 해결을 못하겠습니다. 도와주세요.

Preta-Crowz commented 1 year ago

689, 리드미 읽고 구축을 다시 시도해보세요. 문법 오류도 아니고 아예 404가 뜨는 것으로 보아 필수 과정이 누락된 것 같습니다.

lshqqytiger commented 1 year ago

in_kkutu.min.js 오류

PageHead mixin에서 자동으로 스크립트를 페이지에 삽입하는 과정에서 in_kkutu.min.js 파일을 찾지 못해 발생합니다. in_kkutu.min.js 파일은 Grunt가 생성하지 않으며, 끄투 프론트엔드 구성 요소가 아니므로 해당 오류가 발생하더라도 끄투 동작에는 문제가 없습니다.

그럼에도 불구하고 해결하고 싶다면 module.pug 파일의 118번째 줄을 다음과 같이 수정합니다.

    - var pageName = locals.page.replace("/", "_");
    - if(pageName !== "kkutu")
        script(type='text/javascript', src='/js/in_'+pageName+'.min.js')

locals.page에 지금은 의미가 없는 .replace("/", "_")가 붙어있다는 점, Grunt로 minify된 인게임 소스코드 이름이 in_game_kkutu.min.js라는 점, 끄투는 쪼롤에 속한 게임 서비스 중 하나였다는 점을 고려해보면 끄투를 오픈소스로 공개하기 위해 쪼롤에서 분리하는 과정에서 생긴 잔재라고 생각해볼 수 있습니다. 또한 ko_KR.json에는 쪼롤의 것으로 추정되는 데이터들이 남아있으며 game/fates 키가 존재하는데 이는 끄투를 오픈소스로 공개하기 위해 쪼롤에서 끄투를 분리하는 과정에서 생긴 잔재입니다. 지금의 ko_KR.jsonkkutu 키는 당시에 game/kkutu 였을 것입니다. 초기 쪼롤 서버 코드는 다음과 같았을 것입니다.

Server.get(..., function(req, res){
    // ...
    // webinit.js에서 ko_KR.json의 'game/kkutu' 객체를 window.L로 보냄.
    // module.pug에서 "in_" + "game/kkutu".replace("/", "_") + ".min.js"를 로드하게 함.
    page(req, res, "game/kkutu");
});
Server.get(..., function(req, res){
    // ...
    // webinit.js에서 ko_KR.json의 'game/fates' 객체를 window.L로 보냄.
    // module.pug에서 "in_" + "game/fates".replace("/", "_") + ".min.js"를 로드하게 함.
    page(req, res, "game/fates");
});

하지만 끄투를 오픈소스로 공개하기 위해 쪼롤에서 분리하는 과정에서 ko_KR.jsongame/kkutu 키는 kkutu로, main.jspage(req, res, "game/kkutu");page(req, res, "kkutu");로 바뀌었습니다. 그로 인해 PageHead mixin은 더 이상 in_game_kkutu.min.js, in_game_kkutu.css를 로드하지 않고 엉뚱한 존재하지도 않는 in_kkutu.min.js 파일을 로드하게 된 것입니다. 그래서 끄투 오픈소스 공개 당시 쪼리핑님께서 in_game_kkutu.min.jskkutu.pug에서 직접 로드하도록 수정하신 것 같습니다. in_kkutu.cssin_game_kkutu.css 파일을 복사하여 이름만 바꾸었던 것으로 보이고 두 파일의 내용이 약간 다른 것은 PR 등을 거치면서 달라진 것이라고 생각합니다. (그래서 in_game_kkutu.css는 이름이 무색하게 인게임 페이지에서는 사용되지 않고 portal.pug에서 쓰고 있습니다)

불러오는 중...앞으로 1에서 멈추는 문제

웹 소켓과 연결하지 못하고 있습니다. 불러오는 중 화면에서 조금 더 기다리면 ERR_CONNECTION_TIMED_OUT 오류가 개발자 도구 콘솔에 출력될 확률이 높습니다. 원인으로는 여러가지가 있겠습니다.

외부에서 접속 시 멈추는 경우

구름IDE 서비스를 사용하고 계신 것으로 보이므로 아래 경우 중 하나일 것이라고 생각합니다.

  1. 웹 소켓 포트가 포워딩 되어 있지 않음. #783
  2. 방화벽 등이 웹 소켓 포트로의 접근을 막고 있음. #783
  3. 소스코드를 잘못 수정함. #761
  4. 웹 소켓 서버가 열려 있지 않음.

내부에서 접속 시 멈추는 경우

  1. 소스코드를 잘못 수정함.
  2. 웹 소켓 서버가 열려 있지 않음.

기타

1039 #909

ttrrrrrddd commented 1 year ago

개발자 도구 창에서 조금 기다려보니 이런 오류가 나왔습니다.

Mixed Content: The page at 'https://drkkutu.run.goorm.io/?server=0' was loaded over HTTPS, but attempted to connect to the insecure WebSocket endpoint 'ws://drkkutu.run.goorm.io:2083/UuWcxgSx4OUb3U7Do1gZ0BCP7xN1bvHu'. This request has been blocked; this endpoint must be available over WSS.

Uncaught DOMException: Failed to construct 'WebSocket': An insecure WebSocket connection may not be initiated from a page loaded over HTTPS. at h (https://drkkutu.run.goorm.io/js/in_game_kkutu.min.js:21:31262) at Object.success (https://drkkutu.run.goorm.io/js/in_game_kkutu.min.js:21:16650) at f (https://drkkutu.run.goorm.io/js/jquery.js:19:18299) at Object.fireWith [as resolveWith] (https://drkkutu.run.goorm.io/js/jquery.js:19:19085) at r (https://drkkutu.run.goorm.io/js/jquery.js:21:16009) at XMLHttpRequest.r (https://drkkutu.run.goorm.io/js/jquery.js:21:21631)

lshqqytiger commented 1 year ago

871 을 적용하신 상태인가요?

Preta-Crowz commented 1 year ago

웹서버는 https를 사용하지만 게임서버가 wss가 아닌 ws를 사용하고 있는것 같습니다. 보안 연결 관련 설정을 진행해주셔야합니다.

locozz21 commented 1 year ago

구름IDE에서 인증서가 보이지 않습니다 ㅠㅡㅠ (부계정 입니다)

lshqqytiger commented 1 year ago

구름IDE에 의해 유저는 구름IDE 서버와 보안 연결을 하고 있지만 끄투 웹 서버에서 클라이언트에게 게임 채널과 웹 소켓 통신 시 보안 연결하지 않도록 PROTOCOL 값을 잘못 전달하고 있습니다.

871 을 사용하면 해결할 수 있습니다.

게임 채널 포트가 2083으로 설정되어 있는 것으로 보아(2083은 클라우드플레어가 포워딩하는 포트이고 구름IDE가 2083 포트를 포워딩하는지는 확인이 필요하지만) 이미 #871 은 확인하신 것 같은데 global.json 파일에서 WAF를 사용하도록 설정하셨나요?

locozz21 commented 1 year ago

아니요. 사용하지 않게 했습니다. 실외라 집에가서 시도해보겠습니다.

ttrrrrrddd commented 1 year ago

가서 SSL 모두 수정 하고 서버를 실행 했더니 이런 오류가 뜨며 켜지지 않습니다. (게임 서버) root@goorm:/workspace/KKUTU/KKuTu/Server(master)# node lib/Game/cluster.js 0 1 [2022-10-11 08:50:07] Error from Redis: Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379 [2022-10-11 08:50:07] Run with no-redis mode. [2022-10-11 08:50:07] << KKuTu Server:null >> [2022-10-11 08:50:07] Master DB is ready. [2022-10-11 08:50:08] Error from Redis: Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379 [2022-10-11 08:50:08] Run with no-redis mode. [2022-10-11 08:50:08] DB is ready. ^C (웹 서버) root@goorm:/workspace/KKUTU/KKuTu/Server(master)# node lib/Web/cluster.js 1 [2022-10-11 08:50:11] << KKuTu Web >> [2022-10-11 08:50:12] OAuth Strategy daldalso is not loaded [2022-10-11 08:50:12] OAuth2Strategy requires a clientID option [2022-10-11 08:50:12] OAuth Strategy naver is not loaded [2022-10-11 08:50:12] OAuth2Strategy requires a clientID option [2022-10-11 08:50:12] OAuth Strategy facebook is not loaded [2022-10-11 08:50:12] OAuth2Strategy requires a clientID option [2022-10-11 08:50:12] OAuth Strategy google is not loaded [2022-10-11 08:50:12] OAuth2Strategy requires a clientID option [2022-10-11 08:50:12] OAuth Strategy twitter is not loaded [2022-10-11 08:50:12] OAuthStrategy requires a consumerKey option [2022-10-11 08:50:12] OAuth Strategy kakao is not loaded [2022-10-11 08:50:12] OAuth2Strategy requires a clientID option [2022-10-11 08:50:12] OAuth Strategy discord is not loaded [2022-10-11 08:50:12] OAuth2Strategy requires a clientID option [2022-10-11 08:50:12] OAuth Strategy twitch is not loaded [2022-10-11 08:50:12] OAuth2Strategy requires a clientID option [2022-10-11 08:50:12] OAuth Strategy github is not loaded [2022-10-11 08:50:12] OAuth2Strategy requires a clientID option [2022-10-11 08:50:12] OAuth Strategy line is not loaded [2022-10-11 08:50:12] OAuth2Strategy requires a clientID option [2022-10-11 08:50:12] OAuth Strategy instagram is not loaded [2022-10-11 08:50:12] OAuth2Strategy requires a clientID option [2022-10-11 08:50:12] OAuth Strategy spotify is not loaded [2022-10-11 08:50:12] OAuth2Strategy requires a clientID option [2022-10-11 08:50:12] Error from Redis: Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379 [2022-10-11 08:50:12] Run with no-redis mode. [2022-10-11 08:50:12] Game server #1 has an error: Error: write EPROTO 140330403977088:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../deps/openssl/openssl/ssl/recor d/ssl3_record.c:332:

[2022-10-11 08:50:12] Game server #1 closed: 1006 [2022-10-11 08:50:12] DB is ready. ^C

Preta-Crowz commented 1 year ago

SSL 버전 오류, OAuth 미사용 컨픽까지 불러옴, 레디스 없음..

locozz21 commented 1 year ago

죄송합니다. SSL은 잘 다루지 못해서요..

lshqqytiger commented 1 year ago

해결 되었습니다. 구름IDE가 포트를 직접 포워딩해주지 않아서 프록시로 우회하여 웹 소켓과 연결하였습니다.

ttrrrrrddd commented 1 year ago

해결 되었습니다. 이슈 닫겠습니다. 도와주신 분들 정말 감사합니다.