마스트돈을 3분 만에 설치하는 방법 (사전 준비 포함하지 않음)

경위



마스트돈의 호스팅 서비스, mastohost에 관하여 신경이 쓰여 있었기 때문에 일괄 설치를 시도했습니다. Subdomain에서 설치됩니다. CloudFlare, SparkPost에 따라 다르기 때문에 대규모 사이트에 적합하지 않습니다.

실행 결과



マストドンを3分でインストール
htps //w w. 요츠베. 이 m/와 tch? v=SQ6z0YmZpWg

대상인


  • 기본 셰일 (bash 등), 에디터 등의 사용법을 이해할 수있는 사람 (댓글에서 무엇이든 물어봐도 괜찮습니다)
    (Comments/Questions can also be in English.)

  • 환경


    # debian8 (OSX/VirtualBox使用)
    % uname -a
    Linux debian 3.16.0-4-amd64 #1 SMP Debian 3.16.39-1+deb8u2 (2017-03-07) x86_64 GNU/Linux
    # 普段zsh使用していますが、ここはbash上でしか試していないです。
    

    이용 서비스


  • 메일 서비스 htps : // 앗 p. s 파 rk 포 st. 이 m
  • API KEY 필요 htps : // 어 p. s 파 rk 포 st. 코 m / 아코 톤 t / c 레덴 치아 ls

  • DNS, CDN 서비스 htps //w w. c ぉ df ぁ. 이 m
  • AUTH_KEY 필요 htps //w w. c ぉ df ぁ. 코 m / 아 / 아코 t / my - 아 코 t
  • ZONE_KEY 필요 htps //w w. c ぉ df ぁ. 코 m/아/오오 rゔぃ에 w/
  • Crypto -> SSL -> Full 사용 (필수)


  • 사전 준비


  • debian도 VirtualBox도없는 경우 아래에서 VirtualBox를 다운로드하여 설치 (자세한 내용은 할애)
  • htps //w w.ゃぃr 짠 l보 x. 오 rg / uuki / Down ぉ ds

  • 데비안이 손에 들지 않으면 아래에서 다운로드하여 설치 (자세한 내용은 할애)
  • htps //w w. 데비안. rg/CD/네친 st/
  • ssh-server도 설치

  • 데비안에 로그인 (ssh를 통해 가정)
  • sudo가 설치되어 있지 않은 경우
  • su - (루트 암호 입력)
  • apt-get install sudo
  • visudo (편집 화면 시작)
  • ログイン名 ALL=(ALL:ALL) ALL 추가 (Ctrl + x로 끝나고 저장할지 묻습니다)

  • exit (일반 사용자로 돌아가기)


  • curl, 인증서 등 설치되어 있지 않은 경우 다음을 실행
  • sudo apt-get install apt-transport-https ca-certificates curl
  • curl --version


  • docker가 설치되어 있지 않으면 다음을 수행하십시오.
  • curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
  • echo deb https://download.docker.com/linux/debian jessie stable | sudo tee -a /etc/apt/sources.list
  • sudo apt-get update
  • sudo apt-get install docker-ce
  • docker -v


  • docker 서버에 연결할 수 없으면 그룹에 없을 수 있기 때문에
  • sudo usermod -aG docker 自分のユーザID
  • 일단 로그 아웃하고 다시 로그인하십시오
  • docker ps 연결 오류가 없는지 확인


  • docker-compose 설치되어 있지 않은 경우 다음을 수행
  • curl -sL https://github.com/docker/compose/releases/download/1.13.0-rc1/docker-compose-Linux-x86_64 > docker-compose && chmod +x docker-compose && sudo mv docker-compose /usr/local/bin/
  • docker-compose -v


  • jq가 설치되어 있지 않은 경우 다음을 실행 (API 결과 JSON 구문 분석)
  • curl -sL https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64 > jq && chmod +x jq && sudo mv jq /usr/local/bin
  • jq --version


  • 공통 컨테이너 얻기
  • docker pull gargron/mastodon
  • docker pull postgres:alpine
  • docker pull redis:alpine
  • docker pull nginx:alpine


  • 마스트돈 설치는 여기에서


  • 실행 방법 : bash install-mstdn.sh subdomain.main-domain.tld (서버 IP, 각 API 키를 입력 한 후)
  • 잡히 쓰고있는 부분 상당히 있으므로 양해 바랍니다. 지적해 주시면 좋겠습니다.

  • install-mstdn.sh
    #!/bin/bash
    
    # 以下編集してください
    SERVER_IP=1.2.3.4                                # サーバのグロバルIPアドレス (1.2.3.4)
    
    SPARKPOST_APIKEY=ffffffffffffffffffffffffffffffffffffffff #フル権限 - https://app.sparkpost.com/account/credentials
    SPARKPOST_SENDKEY=$SPARKPOST_APIKEY             # フルアクセス当てたくない場合に個別に指定、インスタンスの中にコピーされます
    
    CF_EMAIL="[email protected]"                  # CloudFlareのログインメールアドレス
    CF_AUTH="cffffffffffffffffffffffffffffffffffff" # https://www.cloudflare.com/a/account/my-account - アカウントごと
    CF_ZONE="ffffffffffffffffffffffffffffffff"      # https://www.cloudflare.com/a/overview/$MAIN_DOMAIN - ドメーンごと
    
    SUB_DOMAIN=$1                                    # 利用したいドメーン名(サブドメーンsub.main.com)、通常は第ーパラメータを使用するため基本は編集不要
    MAIN_DOMAIN=$(echo $SUB_DOMAIN | cut -d"." -f2-) # メインドメーン、基本は編集不要 (main.com)
    # ----- ここまで ------
    
    
    # ---- 各プログラム利用可能かチェック -------
    set -e # エラーあれば即終了
    uname -a
    docker -v
    docker-compose -v
    jq --version
    
    # ------ MASTODON APP -------
    
    # 新しいSENDING_DOMAINSと追加し、DKIMを発行
    SPARKPOST_RESULT=$(curl -s -H "Content-Type: application/json" -H "Authorization: $SPARKPOST_APIKEY" -X POST -d '{"domain":"'$SUB_DOMAIN'","generate_dkim":true,"shared_with_subaccounts":false}"' "https://api.sparkpost.com/api/v1/sending-domains")
    # 確認はこちら、https://app.sparkpost.com/account/sending-domains
    
    # DKIMを収納
    DKIM_KEY=$(echo $SPARKPOST_RESULT|echo $SPARKPOST_RESULT|jq -r '.results.dkim.selector')
    DKIM_VALUE=$(echo $SPARKPOST_RESULT|echo $SPARKPOST_RESULT|jq -r '.results.dkim.public')
    
    # A レコードを追加
    CF_RES1=$(curl -s -H "X-Auth-Email: $CF_EMAIL" -H "X-Auth-Key: $CF_AUTH" -H "Content-Type: application/json" -X POST -d '{"type":"A","proxied":true,"name":"'$SUB_DOMAIN'","content":"'$SERVER_IP'"}' "https://api.cloudflare.com/client/v4/zones/$CF_ZONE/dns_records")
    
    # TXT レコードにDKIMを追加
    CF_RES2=$(curl -s -H "X-Auth-Email: $CF_EMAIL" -H "X-Auth-Key: $CF_AUTH" -H "Content-Type: application/json" -X POST -d '{"type":"TXT","name":"'$DKIM_KEY'._domainkey.'$SUB_DOMAIN'","content":"v=DKIM1; k=rsa; h=sha256; p='$DKIM_VALUE'"}' "https://api.cloudflare.com/client/v4/zones/$CF_ZONE/dns_records")
    
    # 結果などは無視していますが、確認したい方は
    # echo $DKIM_KEY, $DKIM_VALUE, $CF_RES1, $CF_RES2
    
    mkdir -p $SUB_DOMAIN && cd $SUB_DOMAIN
    
    # 環境ファイルを作成
    cat <<EOF>.env.production
    REDIS_HOST=redis
    REDIS_PORT=6379
    # REDIS_DB=0
    DB_HOST=db
    DB_USER=postgres
    DB_NAME=postgres
    DB_PASS=
    DB_PORT=5432
    
    LOCAL_DOMAIN=$SUB_DOMAIN
    LOCAL_HTTPS=true
    
    PAPERCLIP_SECRET=`docker run --rm gargron/mastodon rake secret`
    SECRET_KEY_BASE=`docker run --rm gargron/mastodon rake secret`
    OTP_SECRET=`docker run --rm gargron/mastodon rake secret`
    # 毎回--rm使わずに後で消せば早くなると思います、その分コンテナの名前を持つ必要あり
    
    SMTP_SERVER=smtp.sparkpostmail.com
    SMTP_PORT=587
    SMTP_LOGIN=SMTP_Injection
    SMTP_PASSWORD=$SPARKPOST_SENDKEY
    SMTP_FROM_ADDRESS=root@$SUB_DOMAIN
    
    STREAMING_API_BASE_URL=//$SUB_DOMAIN/api/v1/streaming
    STREAMING_CLUSTER_NUM=1
    EOF
    
    # docker-compose.ymlをダウンロードし、コメント部分をアンコメント
    curl -s -O https://raw.githubusercontent.com/tootsuite/mastodon/master/docker-compose.yml
    sed -i 's/# / /g' docker-compose.yml
    cat <<EOF>>docker-compose.yml
      nginx:
        restart: always
        image: nginx:alpine
        extra_hosts:
          - "$SUB_DOMAIN:172.17.0.1"
        ports:
          - "80:80"
          - "443:443"
        depends_on:
          - web
        volumes:
          - ./nginx:/etc/nginx
    EOF
    
    # データベースのスキーマなどを作成、アセットなどをコンパイル
    docker-compose run --rm web rails db:migrate
    docker-compose run --rm web rails assets:precompile
    # precompile超遅い、2分ほど時間かかる
    
    # SparkPostのDKIM 確認をここでする。DNS普及のため、わざと時間を空けています。
    DKIM_VERIFY=$(curl -s -H "Content-Type: application/json" -H "Authorization: $SPARKPOST_APIKEY" -X POST -d '{"dkim_verify":true}"' "https://api.sparkpost.com/api/v1/sending-domains/$SUB_DOMAIN/verify")
    
    # ------------- NGINX ----------------
    mkdir -p nginx
    
    # オレオレ証明書を準備、実際の証明書はCloudFlareが提供するため、特に問題ない
    openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout nginx/$SUB_DOMAIN.key -out nginx/$SUB_DOMAIN.crt \
      -subj "/C=GB/ST=Tokyo/L=Tokyo/O=Global Security/OU=IT Department/CN=$SUB_DOMAIN"
    
    cat <<'EOF'>nginx/nginx.conf
    user  nginx;
    worker_processes  1; # 適当にあげてください
    error_log  /var/log/nginx/error.log warn;
    pid        /var/tmp/nginx.pid;
    worker_rlimit_nofile 65535;
    events {
        worker_connections 4096;
        multi_accept on;
        use epoll;
    }
    http {
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        tcp_nopush     on;
        tcp_nodelay     on;
        server_tokens   off;
    
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_redirect off;
        proxy_buffering off;
        proxy_http_version 1.1;
    
        server {
            listen 80;
            listen 443 ssl;
            server_name $SUB_DOMAIN;
            ssl_certificate /etc/nginx/$SUB_DOMAIN.crt;
            ssl_certificate_key /etc/nginx/$SUB_DOMAIN.key;
            location / {
                proxy_pass http://172.17.0.1:3000;
            }
            location /api/v1/streaming {
                proxy_pass http://172.17.0.1:4000;
            }
        }
    }
    EOF
    sed -i 's/\$SUB_DOMAIN/'$SUB_DOMAIN'/g' nginx/nginx.conf
    
    # コンテナを全部立ち上げる
    docker-compose up -d
    
    # ログの確認したい方は
    # docker-compose logs -f #(ctrl+cで終了)
    
    # -------- INFO -----------
    
    # ここで初めてアクセスできるようになる
    echo https://$SUB_DOMAIN/
    
    # 管理者に昇格
    echo "以下のコマンドの末にユーザIDを指定して実行すれば管理者に昇格される"
    echo docker-compose run --rm web rails mastodon:make_admin USERNAME=
    
  • 같은 것을 여기에 둘 예정입니다. htps : // 기주 b. 이 m/S-요/인 s단 l-mstd응. sh (여기서 코멘트, Issue,PullRequest 모두 괜찮습니다.)

  • 이상, 지적, 보충 등이 있으면 코멘트로 부탁드립니다.

    좋은 웹페이지 즐겨찾기