이 주제는 Discourse에서 Discourse ActivityPub 플러그인을 사용하여 ActivityPub 액터를 설정하는 방법에 대해 다룹니다. 이 용어가 무엇을 의미하는지 확실하지 않다면 먼저 Discourse ActivityPub Plugin 주제로 이동해 보세요.
다음 단계
설명
ActivityPub 액터를 생성하려면:
관리자 > 플러그인 > ActivityPub로 이동합니다.
“Add Actor” 버튼을 클릭합니다.
Add Actor 양식을 작성합니다(설정은 아래에 설명되어 있음).
“Save Actor” 버튼을 클릭합니다.
액터를 저장하면 Fediverse의 다른 액터들이 해당 액터를 팔로우하기 시작할 수 있습니다. Edit Actor 보기 오른쪽의 “Enabled” 토글을 전환하여 액터를 비활성화할 수 있습니다.
액터 설정
사용자 이름(Username)
이것은 액터의 ActivityPub 핸들에서 첫 번째 부분입니다. 예를 들어 announcements@meta.discourse.org의 사용자 이름은 announcements입니다. 이는 원격 Discourse 인스턴스에서 해당 액터의 사용자 이름이 될 기본값입니다(해당 인스턴스에서 사용자 이름이 이미 사용 중이면 고유성을 위해 정수가 추가됩니다).
이 속성은 ActivityPub 사양의 preferredUsername에 해당합니다. 현재 이 값은 설정된 후에는 변경할 수 없습니다. Mastodon에 대한 이 PR이 병합되면 변경될 것입니다.
이름(Name)
이것은 액터의 표시 이름입니다. 사용 방식은 다른 서비스가 어떻게 구현하는지에 따라 달라집니다. Discourse에서는 이것이 해당 액터의 사용자 "이름"이 됩니다.
가시성(Visibility)
이 설정은 액터가 게시한 활동(Activities)에 "Public Addressing"이 적용되는지를 결정합니다. 특별한 이유가 없다면 공개(public)로 두는 것이 좋습니다.
이는 기본적으로 Mastodon에서 “공개” 게시와 “비공개”(팔로워 전용) 게시의 차이와 동일합니다.
게시물 객체 유형(Post object type)
이 설정은 액터가 게시물을 Note로 게시할지 Article로 게시할지를 결정합니다. 특별한 이유가 없다면 Note로 두는 것이 좋습니다.
Mastodon은 Article을 수신할 때만 원본 게시물에 대한 링크를 게시합니다.
게시 유형(Publication type)
전체 주제(Full Topic)
액터와 연결된 주제 내의 모든 게시물이 게시되고, Fediverse에서 온 모든 답글이 게시물로 변환됩니다.
첫 번째 게시물(First Post)
액터와 연결된 주제 내의 첫 번째 게시물만 게시되고, Fediverse에서 온 답글은 게시물로 변환되지 않습니다.
방금 discourse 3.3.2 설치 환경에 플러그인을 추가했습니다. 플러그인 목록, 플러그인 설정 등에서 플러그인이 정상적으로 보입니다.
하지만 액터(actors)를 추가하려고 할 때 태그(Tags)에 대한 액터만 추가할 수 있고(필요하지 않습니다), 카테고리에는 추가할 수 없습니다. UI/브라우저 측 JavaScript 문제처럼 보입니다(웹 개발자는 아닙니다).
Debian에서 Firefox와 Chromium 양쪽에서 테스트해 보았는데, 두 브라우저 모두 동일한 동작을 보입니다.
태그에 대한 액터 추가는 정상적으로 작동합니다.
카테고리에 대한 액터 추가는 불가능합니다. ‘Select a model / Category’ 선택 항목 오른쪽에 카테고리를 선택할 수 있는 선택 박스가 전혀 렌더링되지 않기 때문입니다.
‘Select a Model’ 버튼에서 "Category"를 선택할 때 개발자 콘솔에 다음과 같은 오류가 발생합니다.
runtime.js:912 Uncaught TypeError: Cannot read properties of null (reading 'firstNode')
at ue.firstNode (runtime.js:912:1)
at T (runtime.js:241:1)
at ue.reset (runtime.js:983:1)
at ae.resume (runtime.js:686:1)
at Ut.handleException (runtime.js:4309:1)
at Vt.handleException (runtime.js:4521:1)
at Dt.throw (runtime.js:4260:1)
at $e.evaluate (runtime.js:2088:1)
at Dt._execute (runtime.js:4247:1)
at Dt.execute (runtime.js:4232:1)
at qt.rerender (runtime.js:4547:1)
at hr.render (index.js:4674:1)
at index.js:4934:1
at Nt (runtime.js:4080:1)
at gr._renderRoots (index.js:4916:1)
at gr._renderRootsTransaction (index.js:4960:1)
at gr._revalidate (index.js:4992:1)
at invoke (backburner.js.js:280:1)
at h.flush (backburner.js.js:197:1)
at p.flush (backburner.js.js:358:1)
at B._end (backburner.js.js:798:1)
at B.end (backburner.js.js:589:1)
at B._run (backburner.js.js:842:1)
at B._join (backburner.js.js:819:1)
at B.join (backburner.js.js:629:1)
at l (index.js:81:1)
at u.onHover (index.js:118:1)
at e.handleMouseEnter (select-kit-row.js:83:22)
추가 의견을 주셔서 감사합니다. 오늘早些에 플러그인 커밋 3a6512d0560211b93f022a27ed7276024d0020dc를 이제 업그레이드된 discourse 3.3.3과 함께 다시 시도해 보았지만, 어떤 URL이든 모든 HTTP 요청이 Completed 500 Internal Server Error in 42ms (ActiveRecord: 0.0ms | Allocations: 16860)로 응답되는 상태가 되었습니다. production.log에는 아무것도 없었고, 표준 출력/오류에도 오류가 기록되지 않았으며, passenger.3000.log에도 아무것도 없었습니다. 플러그인 디렉터리에서 플러그인을 제거하고 재시작한 후에야 문제가 해결되었습니다. 여러 번 재현되었습니다.
지금은 포기합니다. ActivityPub 통합을 해보는 것은 좋은 아이디어였지만, 제가 성공적으로 설치한 다른 플러그인들과 달리 유용하게 사용할 수 있는 수준에는 아닌 것 같습니다. 어쨌든 중요한 요구사항은 아니고, 그저 있으면 좋은 것(nice to have)에 불과합니다.
특정 플러그인의 커밋을 Discourse의 특정 버전과 수동으로 일치시키려 하면 잘 안 될 가능성이 높습니다. Discourse의 표준 설치 방식을 사용하는 것을 권장합니다. 이렇게 하면 관리 부담을 줄이고, 이 플러그인 및 기타 플러그인을 문제없이 사용할 수 있습니다.