Consul을 사용하여 Mastodon!
tl;dr
이 기사에서는 docker와 consul을 사용하여 확장성이 향상된 환경을 구축하는 절차를 설명합니다.
거칠고 여러가지 접혀있는 곳이 있습니다.
docker-compose scale web=5
와 같이, 간단하게 서버를 늘리거나 하는 운용이 가능하게 됩니다.네트워크 만들기
consul 용과 mastodon 용으로 다른 docker-compose.yml을 사용하므로 동일한 네트워크가 필요하기 때문에 미리 만들어 둡니다.
docker network create consul-network
consul 사용
consul은 docker-nginx-lb을 사용합니다. 여기 mastodon과는 관계없는 디렉토리에 git clone 해옵니다.
docker-compose.yml 편집
이 리포지토리에는 docker-compose.yml이 포함되어 있으므로 약간 편집합니다.
networks:
default:
external:
name: consul-network
을 추가하고 방금 만든 네트워크에 연결합니다.
nginx.conf 편집
리포지토리에 포함된 nginx.conf를 편집합니다.
템플릿이 되어 range 라고 써 있는 부분에 자동적으로
server
가 추가되어 갑니다.mastodon.web
이나 mastodon.streaming
는 Tag:Name
의 관계가 되고 있습니다.streaming은 Websocket으로 읽을 수 있도록 수정합니다.
- upstream web {
+ upstream app {
least_conn;
- {{range service "production.app"}}server {{.Address}}:{{.Port}} max_fails=3
+ {{range service "mastodon.web"}}server {{.Address}}:{{.Port}} max_fails=3 fail_timeout=60 weight=1;
{{else}}server 127.0.0.1:65535; # force a 502{{end}}
}
server {
- listen 80 default_server;
+ listen 3000 default_server;
+ client_max_body_size 10m;
location / {
- proxy_pass http://app;
+ proxy_pass http://web;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
+ upstream streaming {
+ least_conn;max_fails=3
+ {{range service "mastodon.streaming"}}server {{.Address}}:{{.Port}} max_fails=3 fail_timeout=60 weight=1;
+ {{else}}server 127.0.0.1:65535; # force a 502{{end}}
+ }
+
+ server {
+ listen 4000 default_server;
+ client_max_body_size 10m;
+
+ location / {
+ proxy_pass http://streaming;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+ }
+ }
mastodon 측 수정
docker-compose.yml 편집
마찬가지로 네트워크에 연결합니다.
서비스가 이미 실행 중이면 네트워크가 변경되므로 IP 주소에 유의하십시오.
networks:
default:
external:
name: consul-network
을 추가하고 방금 만든 네트워크에 연결합니다.
한 번 실행해보세요
여기까지 할 수 있으면,
mastodon
와 docker-nginx-lb
각각으로 docker-compose up --build
합니다. 호스트 측에서 http://(ホストIP):8500
에 액세스하고 Consul UI에 액세스합니다.이런 식으로 나타나면 Consul이 제대로 움직입니다.
환경 변수 설정
docker-nginx-lb
의 docker-compose.yml
에서는 registrator
도 함께 움직이게 되어 있으므로docker-compose.yml
environment:
SERVICE_NAME: web
SERVICE_3000_NAME: web
SERVICE_TAGS: mastodon
라고 정의되어 있는 컨테이너를 발견하면, 서비스로서 등록해 줍니다. 하나만 포트가 열려 있는 서버의 경우는
name
라는 형식의 서비스명으로 등록되고, 복수의 포트가 비어 있는 경우는 name-3000(Name-Port)
라는 형식으로 등록되므로 주의가 필요합니다. (또한 이름에 밑줄 _을 사용할 수 없습니다)웹 수정
docker-compose.yml
environment:
SERVICE_NAME: web
SERVICE_3000_NAME: web
SERVICE_TAGS: mastodon
streaming 수정
docker-compose.yml
environment:
SERVICE_NAME: streaming
SERVICE_4000_NAME: streaming
SERVICE_TAGS: mastodon
수정하고 기동시키면, registrator 가 service 를 찾아 consul 에 등록해 줍니다.
consul은 service가 변경된 알림을 받으면 nginx의 conf를 자동으로 덮어 쓰고 nginx를 자동으로 다시로드합니다.
배포(참고 정도)
docker-compose build
docker-compose scale web=10
docker-compose ps | grep "mastodonto_web_[1-5] " | awk '{print $1}' | xargs docker stop
docker-compose up --build --force-recreate -d web
docker-compose scale web=5
덤
실제로 이 구축 순서로 만든 인스턴스 이쪽입니다.
h tps://오사카나. cぉ우d
생각보다 물고기가 모이지 않기 때문에 종료했습니다.
Reference
이 문제에 관하여(Consul을 사용하여 Mastodon!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nacika_ins/items/34564df24f29e0c9d1be텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)