Digital Ocean에서 Nginx로 리디렉션 URL 설정하기

Digital Ocean에 이미 설정된 Discourse가 있습니다.
Flarum에서 Discourse로 리디렉션하고 싶지만 nginx 폴더를 찾을 수 없습니다.

/etc/ - /usr/ 폴더를 확인해 보았지만 찾을 수 없었습니다. Docker를 사용 중이라서 그런 걸까요?

관리자 인터페이스에서 정규식(regexp)을 이용해 리디렉션할 수 있을까요?

Flarum: https://testdiscourse.com/d/123123-asdasd
Discourse : https://testdiscourse.com/t/asdasd/123123

위와 같이 리디렉션하고 싶지만 nginx 폴더를 찾을 수 없습니다. 도움을 주시면 감사하겠습니다.
또한 정규식 코드도 공유해 주실 수 있다면 정말 감사하겠습니다 :slight_smile:

표준 설치를 했나요, 아니면 Flarum이 Discourse와 동일한 호스트에서 실행되고 있나요?

데이터를 가져오기 위해 Flarum 마이그레이션 스크립트를 사용했나요? Flarum 스크립트가 영구 링크(퍼마링크) 리다이렉트를 처리하지 않는 것으로 보입니다. Discourse의 주제 ID가 Flarum의 ID와 일치하도록 어떻게든 맞춰놓지 않는 한, 제안하신 리다이렉트가 어떻게 작동할 수 있는지 상상할 수 없습니다.

만약 그렇게 했다면, 제안하신 작업을 수행할 수 있는 permalink normalization(영구 링크 정규화) 사이트 설정이 있습니다. 다음과 같은 형태가 될 것입니다.

     /d\/(\d+)-(.*)/t\/\2\/\1/

하지만 asdasd 부분은 슬러그가 라우팅에 무시되므로 -로 대체할 수 있습니다.

nginx는 도커 컨테이너 내부에 있습니다. 다음 명령을 실행하면 확인할 수 있습니다.

cd /var/discourse
./launcher enter app

거기에서 변경한 내용은 새로운 컨테이너를 빌드할 때 사라집니다. app.yml을 수정하여 새로운 컨테이너가 빌드될 때 컨테이너 내의 nginx 설정을 변경하는 것은 가능합니다. /var/discourse/templates의 템플릿을 참고하여 몇 가지 예시를 볼 수 있습니다.

./launcher enter app 명령어로 docker에 진입했습니다.
nginx에 설정되어 있습니다 :slight_smile: 저는 초보라서 죄송합니다.

nginx에서 어떤 파일을 설정해야 하나요? 이 주제에 대해 알고 계신 점이 있으신가요?

도메인 이름 등이 보통 이 파일에 표시되나요?

여기서 최적의 해결책은 마이그레이션 스크립트를 업데이트하여 퍼malink 리다이렉트가 자동으로 생성되도록 하는 것입니다.

nginx를 직접 설정하지 마세요. 컨테이너가 업그레이드를 위해 다시 빌드될 때마다 이러한 변경 사항이 삭제됩니다.

대신 @pfaffman이 말했듯이 app.yml 파일을 편집하여 nginx 설정을 수정하세요.

app.yml 파일에서 변경 사항을 시도하고 있는데, 리다이렉트는 정확히 어떻게 설정해야 할까요? :frowning:

도와주신다면 정말 감사하겠습니다. 질문이 150,000개 이상이라 전부 찾아보기는 어렵습니다 :frowning:

이런 방식으로 리다이렉트를 설정해본 적이 없고, 인터넷으로 조사해봐도 관련 정보가 많이 나오지 않았습니다.

rewrite를 이용해 리다이렉트를 작성할 때, 제가 원하는 것은 다음과 같습니다:

https://testdiscourse.com/d/123123-asda-asdasd-adas

https://testdiscourse.com/t/asda-asdasd-adas

123123 같은 숫자 부분은 전혀 필요하지 않은데, 어떻게 하면 될까요?

대상에는 토픽 ID가 필요하며, 스텁은 선택 사항입니다

슬러그 섹션만 있으면 충분하지 않나요?

https://meta.discourse.org/t/redirect-url-with-nginx-in-digital-ocean

예를 들어, 위의 링크를 클릭하면 이 페이지가 열립니다.

따라서 235297을 입력할 필요가 없습니다.

https://meta.discourse.org/t/cake/235297/ 스텁은 리다이렉트에 영향을 주지 않습니다 - ID 앞에는 아무 내용을 넣어도 됩니다

https://meta.discourse.org/t/235297/ 스텁을 완전히 생략해도 됩니다

https://meta.discourse.org/t/redirect-url-with-nginx-in-digital-ocean/ 이 방법도 작동하지만 더 취약합니다

Flarum의 id 값과 이곳의 id 값이 다르기 때문에, 내게는 slug 값만으로도 충분합니다.

150,000개의 질문을 하나씩 처리해야 한다는 건 정말 안타까운 일입니다. 정말 지치네요 :slight_smile:

그래서 가져오기 스크립트를 수정하는 것이 가장 쉬운 해결책입니다

가져오기 스크립트에 영구 링크(퍼머링크) 리다이렉트 옵션이 없었는데 :frowning: 저는 Ruby 언어와 PostgreSQL에 대해서도 아직 초보입니다. 하고 싶지만, 할 수 없네요.

수동으로 150,000개의 리다이렉트를 생성하는 것보다, 다른 가져오기(importer) 스크립트와 비교하여 조사하고 구현하는 것이 훨씬 빠를 가능성이 매우 높습니다.

그렇다면 영구 링크(permalinks)를 생성하도록 가져오기(import) 스크립트를 수정하거나, 누군가에게 수정을 맡겨야 합니다. 지금 하려는 일은 불가능합니다. 모든 토픽 ID가 서로 다르기 때문입니다. 이미 커뮤니티를 사용 중인 사용자가 있다면, 운이 없거나 그들의 게시물을 삭제해야 합니다.

아, 죄송합니다. import_ids는 데이터베이스에 있어야 합니다. 토픽이 가져와진 후 리다이렉트를 생성하도록 하는 다른 가져오기 스크립트들을 참고하여 영구 링크를 생성하는 스크립트를 작성할 수 있습니다. 가져오기 토픽 함수의 일부가 아니라, 토픽 가져오기 완료 후 리다이렉트를 생성하는 스크립트를 찾아보셔야 합니다.

여기 바로 MVP가 있네요! :man_superhero:

다음은 예시입니다:

여러 가지 이유로 올바른 슬러그를 얻기 어려운 경우가 있습니다. 보통 permalink_normalizations를 사용하여 슬러그를 무시하고 Permalink의 ID에만 집중하는 방식으로 처리할 수 있습니다.