EC2+Docker로 자신의 도메인에 대한 Mastodon 구축

7234 단어 EC2mastodon도커
내 도메인의 EC2에서 Mastodon 인스턴스를 구축하는 단계
  • Mastodon
  • Documentation

  • 환경



  • EC2
  • 우분투 16.04
  • Resources Needed: htps : // 기주 b. 이 m/라고 붙어서/도쿠멘들 온/bぉb/마s테 r/룬인 g마 s와 돈/레소 r세 s-이봐 d. md

  • Security Group
  • Inbound SSH
  • Inbound ICMP
  • Inbount HTTPS

  • Elastic IP를 assign


  • 기타
  • 도메인 DNS: GoDaddy
  • 메일 배달: Mailgun
  • SSL: Let's Encrypt(Certbot)


  • 도메인 DNS



    레지스트라에 GoDaddy를 사용하는 경우.
    DNS 설정에서 A 레코드를 추가하고 Elastic IP로 이동합니다.www. 등도 사용하는 경우는 CNAME 레코드도 추가.

    이름 확인할 수 있는지 확인합니다.
    $ dig $DOMAIN @8.8.8.8
    

    메일 관련



    등록 시 메일 전달을 위한 설정에 Mailgun을 사용하는 경우.
    Mailgun에서 도메인을 추가하면
  • htps : // 앗 p. 마이 군. 코 m / 아 p / 도마 인 s / $ 도마 인

  • 에서 Default SMTP Login/Default Password 를 확인하세요. (나중에 사용)


    계속해서 Domain Verification & DNS 의 TXT,MX 의 레코드 설정을 확인.



    이 4건을 레지스트라측에서 추가한다.
    완료되면 Mailgun에서 도메인이 Verify되어 메일을 보낼 수있게된다.

    Certbot



    Let's Encrypt의 무료 SSL 인증서를 받으세요.
  • Certbot

  • 환경(이번에는 Ubuntu16.04 x nginx)에 맞춘 설치 지침을 읽는다.
    $ sudo add-apt-repository ppa:certbot/certbot
    $ sudo apt-get update
    $ sudo apt-get install certbot
    $ certbot --version
    certbot 0.11.1
    

    잘하면 한 번 밖에 사용하지 않지만, 사용법을 일단 봐 둔다.
    $ certbot -h
    

    다음의 명령 실행은 몇번이나 설정 불량으로 에러가 되면 일정 시간 잠겨 버리므로 주의.
    도메인 이름 확인이 가능한지, 보안 그룹에서 포트 443번이 비어 있는지 확인한다.

    도메인은 쉼표는 씨로 복수 지정 가능.
    $ sudo certbot certonly --standalone -d $DOMAIN,$DOMAIN2,...
    
    $ sudo ls -R /etc/letsencrypt/live/
    

    도커



    보통으로 rails s 하는 것만으로도 대략의 움직임 확인은 할 수 있지만, docker-compose 를 사용한다.

    설치하고 부팅까지.
    $ sudo apt-get update
    
    $ sudo apt install docker.io
    $ docker -v
    Docker version 1.12.6, build 78d1802
    
    $ sudo apt install docker-compose
    $ docker-compose -v
    docker-compose version 1.8.0, build unknown
    
    $ sudo service docker start
    $ sudo usermod -aG docker $(whoami)
    $ exit
    

    다시 로그인합니다.
    $ docker ps   
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    

    Mastodon



    혼마루의 소스 코드를 취득해, 태그 첨부 버젼으로 전환한다.
    $ git clone https://github.com/tootsuite/mastodon
    $ cd mastodon
    $ git tag | tail -1
    v1.2.2
    $ git checkout v1.2.2
    

    Docker 컨테이너 그룹 빌드


    $ cp .env.production.sample .env.production
    
    $ docker-compose pull 
    $ docker-compose build
    

    secret 생성


    $ docker-compose run --rm web rake secret
    $ docker-compose run --rm web rake secret
    $ docker-compose run --rm web rake secret
    

    생성된 secret들을 삼가한다.

    설정


    $ vim .env.production
    
  • PAPERCLIP_SECRET , SECRET_KEY_BASE , OTP_SECRET: secret을 설정하십시오
  • LOCAL_DOMAIN
  • SMTP_LOGIN , SMTP_PASSWORD
  • SINGLE_USER_MODE=true : 자신 이외의 유저를 만들지 않는 경우는 코멘트 제외해 유효하게 .
    $ docker-compose run --rm web rake db:migrate
    $ docker-compose run --rm web rake assets:precompile
    $ docker-compose up -d
    $ docker-compose logs -f
    ...
    web_1        | => Booting Puma
    web_1        | => Rails 5.0.2 application starting in production on http://0.0.0.0:3000
    web_1        | => Run `rails server -h` for more startup options
    
    

    일어나면 다른 쉘에서
    $ curl localhost:3000
    <html><body>You are being <a href="https://localhost/">redirected</a>.</body></html>ubuntu@ip-172-30-xx-xxx:~/mastodon
    

    nginx



    드디어 종반.
    $ sudo apt install nginx-core
    $ nginx -v
    nginx version: nginx/1.10.0 (Ubuntu)
    

    SSL dhparam


    $ sudo cat /etc/nginx/nginx.conf|grep dhparam
              ssl_dhparam         /etc/ssl/certs/dhparam.pem;
    
    $ sudo openssl dhparam 2048 -out /etc/ssl/certs/dhparam.pem
    

    설정


    $ sudo cp -p /etc/nginx/nginx.conf /etc/nginx/nginx.conf.original
    $ sudo vim /etc/nginx/nginx.conf
    

    Production Guide 의 설정을 밟아 http 지시어 안에 꽂는다.
  • SSL 관련 ssl_certificate/ssl_certificate_key
  • 도메인 이름 server_name
  • 공개 디렉토리 root

  • syntax check하여 시작.
    $ sudo nginx -t -c /etc/nginx/nginx.conf
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    
    $ sudo service nginx restart
    $ sudo service nginx status
    

    동작 확인



    만든 도메인에서 브라우저 액세스하면 무사히 움직였다.



    사용자가 등록하면 Sidekiq, Mailgun을 통해 메일이 전송됩니다.
    sidekiq_1    | 2017-04-25T17:06:56.110Z 1 TID-gn57hjjrc ActionMailer::DeliveryJob JID-3d44cf5c8890886aae8fc0b5 INFO: done: 3.322 sec
    

    메일을 confirm하면 로그인할 수 있게 된다.



    Toot



    숙제


  • 데이터 지속성 등은 추후
  • 곧 정보가 오래된 것 같습니다
  • 좋은 웹페이지 즐겨찾기