마스토돈 인스턴스 만들기
사용한 이미지
마스토돈 설정
마스토돈 컨테이너 말고도 PostgreSQL와 Redis 컨테이너를 같이 만들어주어야 했다. 요약하자면 둘 다 데이터베이스인데, 약간 다르다.
1
2
3
4
# 마스토돈의 docker-compose.yml
environment:
- LOCAL_DOMAIN=fractalcoffee.duckdns.org
- WEB_DOMAIN=mastodon.fractalcoffee.duckdns.org
이렇게 설정하면 내 마스토돈 인스턴스의 주소는 mastodon.fractalcoffee.duckdns.org이 되고, 마스토돈 인스턴스 계정은 fractalcoffee.duckdns.org로 특정할 수 있다. 예를 들어 fractalbarista 계정은 @fractalbarista@fractalcoffee.duckdns.org로 특정할 수 있게된다.
SWAG 설정
SWAG는 서버의 인증서를 자동으로 갱신해준다. Nginx를 내장하고 있어서 역방향 프록시 서버로도 사용할 수 있다.
1
2
3
# SWAG의 docker-compose.yml
environment:
- SUBDOMAINS=mastodon
SUBDOMAINS
에 mastodon을 추가하고 /nginx/proxy-confs/mastodon.subdomain.conf
를 만들어서 mastodon.fractalcoffee.duckdns.org로 마스토돈 인스턴스에 접근할 수 있게 만들었다.
문제
하지만 문제가 있었다. 내 마스토돈 인스턴스의 계정이 외부 마스토돈 인스턴스의 계정을 팔로우 하지 못했다. 컨테이너 로그에는 Mastodon::UnexpectedResponseError: https://mastodon.instance/users/myuser/inbox returned code 401
라는 메세지가 남아있었다.
그리고 다른 인스턴스에서 내 계정을 검색하면 503 Remote SSL certificate could not be verified
라는 에러가 발생했다.
처음에는 역방향 프록시에서 사용하는 인증서에 문제가 있는지 의심했지만 그것 때문은 아니었다.
마스토돈에서 LOCAL_DOMAIN
을 WEB_DOMAIN
으로 트래픽을 보내주도록 설정하지 않아서 생기는 문제였다. 그리고 SWAG 환경변수를 ONLY_SUBDOMAINS=true
로 설정했기 때문에 다른 인스턴스에서 내 인스턴스의 계정을 찾을 때 인증서 오류가 발생하는 것이었다.
해결
1
2
3
4
# SWAG의 docker-compose.yml
environment:
- SUBDOMAINS=mastodon
- ONLY_SUBDOMAINS=false # 중요
처음에는 ONLY_SUBDOMAINS=true
로 설정했었다. 외부에서 불필요한 접근이 들어오는 것을 막고 싶었기 때문이다. 하지만 이것 때문에 외부에서 내 마스토돈 인스턴스의 계정을 찾지 못하고 있었다.
마스토돈 컨테이너에서 LOCAL_DOMAIN
과 WEB_DOMAIN
를 위와 같이 설정했다면, fractalcoffee.duckdns.org로 접근하는 트래픽을 mastodon.fractalcoffee.duckdns.org로 보내주도록 설정해야 한다.
이를 위해서 /config/nginx/site-confs/default.conf
를 수정했다. main server block 안에 다음 코드를 추가해 주었다.
1
2
3
4
5
# inside main server block
location /.well-known/webfinger {
add_header Access-Control-Allow-Origin '*';
return 301 https://mastodon.fractalcoffee.duckdns.org$request_uri;
}
마스토돈은 다른 인스턴스의 계정을 검색할 수 있는가
이후로는 외부 인스턴스의 계정을 정상적으로 팔로우 할 수 있었다. 외부 인스턴스에서 내 인스턴스의 계정을 검색할 때 인증서 오류는 생기지 않았다. 하지만 내 계정이 검색이 되지 않는 서버가 있었다.
마스토돈이 원래 다른 인스턴스의 계정을 검색할 수 있는지 궁금했다. 내가 팔로우 한 계정이 등록된 인스턴스에서는 내 계정을 찾을 수 있었다. 하지만 내 계정과 아무런 상호작용이 없었던 인스턴스에는 검색되지 않았다.
내 계정이 문제일 수도 있다고 생각해서 팔로워가 300명 정도 되는 다른 사람의 계정으로도 실험해봤다. 검색이 되는 인스턴스가 있었지만 검색이 안되는 인스턴스도 있었다.
마스토돈은 여러 인스턴스가 연합하어 작동하기 때문에 기본적으로 다른 인스턴스와 연결되지 않는다. 따라서 마스토돈이 상호작용이 없었던 다른 인스턴스의 계정을 검색하지 못하는 것은 어찌보면 당연하다.
Comments powered by Disqus.