LoginSignup
0
0

More than 3 years have passed since last update.

Ubuntu 16.04をインストールしたAlibaba Cloud ECS上でDockerを使ってMastodonを設定する

Posted at

このチュートリアルでは、Ubuntu 16.04をインストールしたAlibaba Cloud Elastic Compute Service (ECS)上でMastodonを設定します。

本ブログは英語版からの翻訳です。オリジナルはこちらからご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。

前提条件

  • Alibaba Cloud Elastic Compute Service (ECS)を有効にし、有効な支払い方法を確認する必要があります。新規ユーザーの場合は、新規アカウントに300ドル~1200ドル相当のAlibaba Cloudクレジットを獲得できます。ECSインスタンスのセットアップ方法がわからない場合は、こちらのチュートリアルまたはクイックスタートガイドを参照してください。ECSインスタンスは、少なくとも2GBのRAMと2コアプロセッサを搭載している必要があります。
  • Alibaba Cloudから登録されたドメイン名。すでにAlibaba Cloudまたは他のホストからドメインを登録している場合は、そのドメインネームサーバーレコードを更新することができます。
  • ドメイン名は、あなたのAlibaba Cloud ECSのIPアドレスを指している必要があります。
  • Alibaba CloudのVNCコンソールまたはPCにインストールされているSSHクライアントにアクセスします。
  • サーバーのホスト名を設定し、root権限を持つユーザーを作成します。

サーバーの設定

パッケージのインストールを進める前に、以下のコマンドを使用してUbuntuシステムをアップデートしてください。このコマンドを実行するには、root 以外のユーザから sudo 権限でログインすることを忘れないでください。

# sudo apt update && sudo apt upgrade

Docker CEをインストールするためには、サポートされているファイルを取得するためにsoftware-properties-commonパッケージが必要です。software-properties-commonをインストールするには、以下のコマンドを実行します。

# sudo apt-get install software-properties-common -y

Docker CEのインストールには、Apt-transport-https、ca-certificates、curlが必要です。これらをインストールするには、以下のコマンドを実行します。

# sudo apt-get install apt-transport-https -y 
# sudo apt-get install ca-certificates -y 
# sudo apt-get install curl -y 

Docker CEとDocker Composeのインストール

以下のコマンドを実行して、Docker用のGPGキーを追加します。

# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

以下のコマンドを実行して、GPG キーのフィンガープリントを確認します。

# sudo apt-key fingerprint 0EBFCD88

以下のコマンドを実行してDockerリポジトリを追加します。

# sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”

以下のコマンドを実行してシステムをアップデートし、追加されたリポジトリをロードします。

# sudo apt update

以下のコマンドを実行してDockerをインストールします。

# sudo apt install docker-ce

以下のコマンドを実行して、ユーザ名をdockerグループに追加します。

# sudo adduser aareez docker 

現在のシェルセッションを閉じて、新しいセッションを開始してください。そうしないとDockerを実行できず、パーミッションエラーが表示される可能性があります。

以下のコマンドを実行して、dockerが正しく実行されているかどうかを確認します。

# docker run hello-world

Docker Composeをダウンロードしてインストールするには、以下のコマンドを実行します。

# sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

Docker Composeファイルのパーミッションを設定するには、以下のコマンドを実行します。

# sudo chmod +x /usr/local/bin/docker-compose

Mastodonをインストール

以下のコマンドを実行して、GitリポジトリからMastodonをクローンします。

# git clone https://github.com/tootsuite/mastodon  

以下のコマンドを実行して、ダウンロードしたディレクトリに移動してください。

# cd mastodon

以下のコマンドを実行して、.env.production.sampleを.env.productionにコピーします。

# cp .env.production.sample .env.production

秘密鍵を生成するには、Dockerイメージをビルドして実行する必要があります。ビルドするには、以下のコマンドを実行します。

# docker-compose build

Dockerイメージの構築に成功しました。設定に必要な3つの秘密鍵を生成する必要があります。SECRET_KEY_BASEを生成するには、以下のコマンドを実行します。

# SECRET_KEY_BASE=$(docker-compose run --rm web bundle exec rake secret)

以下のコマンドを実行して、.env.productionファイルにSECRET_KEY_BASEの値を挿入します。

# sed -i -e "s/SECRET_KEY_BASE=/&${SECRET_KEY_BASE}/" .env.production

OTP_SECRETを生成するには、以下のコマンドを実行します。

# OTP_SECRET=$(docker-compose run --rm web bundle exec rake secret)

以下のコマンドを実行して、.env.productionファイルにSECRET_KEY_BASEの値を挿入します。

# sed -i -e "s/OTP_SECRET=/&${OTP_SECRET}/" .env.production

PAPERCLIP_SECRETを生成するには、以下のコマンドを実行します。

# PAPERCLIP_SECRET=$(docker-compose run --rm web bundle exec rake secret)

以下のコマンドを実行して、.env.productionファイルにPAPERCLIP_SECRETの値を挿入します。

# sed -i -e "s/PAPERCLIP_SECRET=/&${PAPERCLIP_SECRET}/" .env.production

LOCAL_DOMAINの値を更新する必要があります。そのためには、テキストエディタで.env.productionファイルを開く必要があります。以下のコマンドを実行して、.env.productionファイルを開きます。

# sudo nano ~/mastodon/.env.production

LOCAL_DOMAIN変数を見つけ、その値をexample.comからECSのドメイン名またはIPアドレスに変更し、更新したファイルを保存します。

mastodonに移動します。

# cd mastodon

上記で変更したので、再度Dockerイメージをビルドする必要があります。ビルドするには、以下のコマンドを実行します。

# docker-compose build

を実行してマイグレーションを実行します。

# docker-compose run --rm web rails db:migrate

物事をよりスムーズにするためには、アセットを事前にコンパイルする必要があります。そのためには、以下のコマンドを実行します。

# docker-compose run --rm web rails assets:precompile

以下のコマンドを実行してコンテナを実行します。

# docker-compose up -d

Nginxサーバーのインストールと設定

Nginxの設定を作成してMastodonを動作させ、SSL証明書をインストールするには、Nginxサーバーをインストールする必要があります。

以下のコマンドを実行してnginxサーバーをインストールします。

# sudo apt-get install nginx

以下のコマンドを実行して、デフォルトサイトのNginx設定を削除する必要があります。

# sudo rm /etc/nginx/sites-available/default

以下のコマンドを実行して、デフォルトサイトのシンボリックリンクを削除します。

# sudo rm /etc/nginx/sites-enabled/default

以下のコマンドを実行して、Mastodon用のNginx設定ファイルを作成します。

# sudo touch /etc/nginx/sites-available/mastodon

以下のコマンドを実行して、Mastodonのシンボリックリンクを作成します。

# sudo ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon

以下のコマンドを実行して、Mastodon Nginxの設定ファイルをnanoのテキストエディタで開きます。

# sudo nano /etc/nginx/sites-available/mastodon

開いているファイルに以下のテキストをコピーペーストし、変更内容を保存します。

map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

server {
  listen 80;
  listen [::]:80;
  server_name softpedia.xyz;
  root /home/mastodon/live/public;
  # Useful for Encrypt
  location /.well-known/acme-challenge/ { allow all; }
  location / { return 301 https://$host$request_uri; }
}

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name softpedia.xyz;

  ssl_protocols TLSv1.2;
  ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;

  ssl_certificate     /etc/letsencrypt/live/softpedia.xyz/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/softpedia.xyz/privkey.pem;

  keepalive_timeout    70;
  sendfile             on;
  client_max_body_size 80m;

  root /home/mastodon/live/public;

  gzip on;
  gzip_disable "msie6";
  gzip_vary on;
  gzip_proxied any;
  gzip_comp_level 6;
  gzip_buffers 16 8k;
  gzip_http_version 1.1;
  gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

  add_header Strict-Transport-Security "max-age=31536000";

  location / {
    try_files $uri @proxy;
  }

  location ~ ^/(emoji|packs|system/accounts/avatars|system/media_attachments/files) {
    add_header Cache-Control "public, max-age=31536000, immutable";
    try_files $uri @proxy;
  }

  location /sw.js {
    add_header Cache-Control "public, max-age=0";
    try_files $uri @proxy;
  }

  location @proxy {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy "";
    proxy_pass_header Server;

    proxy_pass http://127.0.0.1:3000;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    tcp_nodelay on;
  }

  location /api/v1/streaming {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy "";

    proxy_pass http://127.0.0.1:4000;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    tcp_nodelay on;
  }

  error_page 500 501 502 503 504 /500.html;
}

SSL証明書をインストール

Let's Encrypt with Certbotを使ってSSL証明書をインストールします。そのためには、以下の手順を実行します。

パッケージを更新します。

# sudo apt-get update

software-properties-commonをインストールします。

# sudo apt-get install software-properties-common.

以下のコマンドを使用して、サートボットのリポジトリを追加します。

# sudo add-apt-repository ppa:certbot/certbot

追加された certbot リポジトリを読み込むようにパッケージを更新します。

# sudo apt-get update

SSL証明書発行前にapacheを停止します。

# sudo systemctl stop apache2

以下のコマンドでpython-certbot-apacheをインストールします。

# sudo apt-get install python-certbot-apache

以下のコマンドを実行して、Let's Encrypt SSLを発行してもらいます。

# sudo certbot --apache -d softpedia.xyz

オプション2を選択してリンクをhttpsにリダイレクトし、SSLのバーチャルホスト設定を更新します。apacheサーバを再起動します。

# sudo systemctl start apache2

あなたのウェブサイトにアクセスするには、https://your_domain_name.tld

image.png

これで完了です。Alibaba Cloud ECSサーバーにMastodonをインストールすることに成功しました。データベースのデフォルトパスワードを変更し、管理者アカウントを設定することで安全にインストールできます。

アリババクラウドは日本に2つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
アリババクラウドジャパン公式ページ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0