mNetwork 마스토돈 유지보수 기록장

이 문서는 mNetwork 마스토돈을 운영하면서 생긴 문제에 대한 해결 방법, 혹은 도움이 될 수 있을만한 정보에 대해 다룹니다.

이 문서는 2017년 11월 12일에 마지막으로 갱신되었습니다.


Q. Docker 환경에서 네이티브 운영 환경으로 서버를 옮기고 싶습니다.

네이티브 환경 서버 설치는 다음을 참조: Minacle develop – “새 Mastodon 인스턴스 설치하기”

서버 설치 후, 다음과 같은 데이터의 이동 필요:

  • PostgreSQL 데이터베이스
  • Docker 컨테이너를 모두 정지한 다음 PostgreSQL 컨테이너만 실행, 쉘을 사용하여 데이터베이스를 덤프, 새 서버에 데이터베이스 복원1)가능하다면 PostgreSQL 자체의 덤프 기능을 사용하는 것을 추천합니다. 만약 데이터베이스 파일을 수동으로 Docker 인스턴스 구동 중 복사하였을 경우 데이터베이스가 손상될 수 있습니다.
  • 정적 파일들 (~/public 아래에 존재하는 emoji, 이미지 등의 파일들)

반드시 필요하진 않지만, 마이그레이션 후 webasset을 다시 컴파일 하고 데이터베이스 마이그레이션 작업을 실행할 수 있습니다.

RAILS_ENV=production bundle exec rails db:migrate
RAILS_ENV=production bundle exec rails assets:precompile


Q. 데이터베이스에 문제가 생긴 것 같습니다.

데이터베이스가 손상되면 예를 들어서 다음과 같은 에러 메세지가 출력될 수 있습니다.

{“error”:”Validation failed: Username has already been taken”}

또한, 같은 인스턴스에 같은 이름을 가진 유저가 여러명 생길 수 있습니다. 그 유저에게 툿이 보내지지 않거나, 유저의 프로필이 조회되지 않거나, 로컬로 특정 유저들의 툿이 전달되지 않을 수 있습니다.

가장 좋은 방법은 문제가 생기기 이전의 데이터베이스로 롤백하는 방법이겠지만, 그러기엔 이미 너무 늦었다면 다음과 같은 방법을 시도하여 데이터의 일부를 손실하여 무결성을 복구할 수 있습니다.2)이 작업을 실행하면 손상된 부분의 데이터가 손실될 수 있습니다. 미리 백업을 하고 진행하세요.

psql> reindex database (mastodon 데이터베이스 이름);

데이터베이스를 다시 인덱싱 하면 인덱스에서 요구하는 조건에 맞지 않는 데이터의 일부가 콘솔로 반환됩니다. 검토 후 조건에 맞지 않는 데이터를 삭제해 데이터베이스의 무결성을 복구하거나, 수동으로 데이터베이스를 조작하여 문제를 해결할 수 있습니다.

만약 데이터베이스의 무결성을 위해 유저 계정 데이터베이스의 일부를 삭제 할 경우, 외부 인스턴스가 삭제된 계정의 id로 접근할 때 외부 인스턴스의 요청은 반려되며, 관련된 에러가 Sidekiq에 기록됩니다.


Q. 타임라인이 웹 인터페이스에서 자동으로 갱신되지 않습니다.

스트리밍 API가 작동하지 않는 경우일 수 있습니다. 사용하는 웹 서버의 Websocket 설정을 검토하세요.


Q. 서버 정기 업데이트 후, 마스토돈 서비스가 다시 시작되지 않습니다.

만약 아래와 같은 ‘라이브러리를 로드할 수 없음’ 류의 에러가 발생한다면, 의존성 패키지가 업데이트 되어 생긴 문제일 수 있습니다.

! Unable to load application: LoadError: Could not open library ‘/var/lib/mastodon/live/vendor/bundle/ruby/2.4.0/gems/cld3-3.2.0/lib/../ext/cld3/libcld3.so’: libprotobuf.so.13: cannot open shared object file: No such file or directory

이 경우엔 이 게시물을 참고하세요:
Minacle develop – “Mastodon을 호스트하는 시스템 업데이트하기”

추가적으로 다음과 같이 패키지 매니저에 훅을 등록하는 것도 편한 방법입니다. 훅을 등록하면 매번 의존성 패키지를 업데이트 한 후, 번들을 다시 빌드하는 작업을 수동으로 하지 않아도 됩니다. 단 업스트림 소스코드가 새로운 패키지의 버전과 호환되지 않는 경우엔 번들을 다시 빌드해도 문제가 해결되 지 않을 수 있으니 유의하세요.

훅을 만드는 방법은 사용하는 서버 배포판의 패키지 매니저 관련 내용을 참조하세요. 아래에 예제가 있지만, 이 예제는 프로덕션 환경에서의 동작을 보증할 수 없습니다. 알맞게 수정하여 사용하세요.

ArchWiki Pacman 훅 관련 문서
PreTransaction 훅의 예제
PostTransaction 훅의 예제
updateBundle.sh 스크립트의 예제


Q. 서버를 주기적으로 백업하고 싶습니다.

다음 툿을 참고하세요: Gist 링크 툿 링크

마유쨔마!! @mayu

마스토돈 백업 스크립트를 만들었습니다. 카피라잇 위쪽으로는 환경설정이니 각자의 환경과 취향에 맞게 지정해주세요. 이 스크립트는 Arch Linux에서 Dash 셸로 테스트되었습니다. gist.github.com/minacle/9fb69a

· Web · 2 · 2

Sn   [ + ]