前回のスクリプトでは必要なパラメータを手動でエディタなどを用いて作成する必要があった。
そこで対話形式でパラメータを入力するだけでお手軽にMastodonサーバを構築できるように聞いてみた。
Question : ubuntu環境下でMastodonをbashのみだけで構築できるようにしたい。個別に必要なパラメータは対話形式で入力させること。
Answer : Mastodonのインストールと設定を完全に自動化するスクリプトを提供します。このスクリプトでは、対話形式で必要なパラメータを入力できます。Ubuntu環境でbashのみを使ってMastodonを構築するために、以下のスクリプトを使用してください。
まず、install_mastodon.shという名前で新しいファイルを作成し、以下のコードを貼り付けます。
#!/bin/bash
echo "Mastodonインストールスクリプトへようこそ!"
# 依存関係のインストール
echo "依存関係をインストールします。"
sudo apt update
sudo apt install -y wget curl git imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file git-core g++ libprotobuf-dev protobuf-compiler pkg-config nodejs gcc autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev libdb-dev redis-server redis-tools
# Node.jsとYarnのインストール
echo "Node.jsとYarnをインストールします。"
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt install -y nodejs
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update
sudo apt install -y yarn
# rbenvとRubyのインストール
echo "rbenvとRubyをインストールします。"
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
rbenv install 2.7.2
rbenv global 2.7.2
# Mastodonユーザーの作成
echo "Mastodonユーザーを作成します。"
sudo adduser --disabled-login --gecos "" mastodon
sudo su - mastodon
# Mastodonのクローンと設定
echo "Mastodonをクローンし、設定ファイルを作成します。"
git clone https://github.com/tootsuite/mastodon.git live
cd live
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)
bundle install --deployment --without development test
yarn install --pure-lockfile
cp .env.production.sample .env.production
# 対話形式で必要なパラメータを入力
echo "必要なパラメータを入力してください。"
read -p "ドメイン名 (例: example.com): " domain
read -p "管理者のメールアドレス: " admin_email
read -p "SMTPサーバーアドレス: " smtp_server
read -p "SMTPポート: " smtp_port
read -p "SMTPユーザー名: " smtp_username
read -p "SMTPパスワード: " smtp_password
# .env.productionファイルにパラメータを設定
sed -i "s/LOCAL_DOMAIN=.*/LOCAL_DOMAIN=$domain/" .env.production
sed -i "s/SMTP_SERVER=.*/SMTP_SERVER=$smtp_server/" .env.production
sed -i "s/SMTP_PORT=.*/SMTP_PORT=$smtp_port/" .env.production
sed -i "s/SMTP_LOGIN=.*/SMTP_LOGIN=$smtp_username/" .env.production
sed -i "s/SMTP_PASSWORD=.*/SMTP_PASSWORD=$smtp_password/" .env.production
sed -i "s/SMTP_FROM_ADDRESS=.*/SMTP_FROM_ADDRESS=noreply@$domain/" .env.production
# データベースの設定
echo "データベースを設定します。"
sudo apt install -y postgresql postgresql-contrib
sudo -u postgres psql -c "CREATE USER mastodon CREATEDB;"
sudo -u postgres psql -c "CREATE DATABASE mastodon OWNER mastodon;"
RAILS_ENV=production bundle exec rake mastodon:setup
# Nginxのインストールと設定
echo "Nginxをインストールし、設定します。"
sudo apt install -y nginx
sudo rm /etc/nginx/sites-enabled/default
sudo cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon
sudo ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/
sudo sed -i "s/example\.com/$domain/" /etc/nginx/sites-enabled/mastodon
# Let's Encrypt証明書の取得
echo "Let's Encrypt証明書を取得します。"
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d $domain --agree-tos --email $admin_email --redirect
# サービスの設定
echo "サービスを設定します。"
sudo cp /home/mastodon/live/dist/mastodon-*.service /etc/systemd/system/
sudo systemctl enable /etc/systemd/system/mastodon-*.service
sudo systemctl start mastodon-web.service mastodon-sidekiq.service mastodon-streaming.service
# ファイアウォールの設定
echo "ファイアウォールを設定します。"
sudo apt install -y ufw
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw --force enable
echo "Mastodonのインストールが完了しました!"
次に、スクリプトに実行権限を与えて実行します。
chmod +x install_mastodon.sh
./install_mastodon.sh
スクリプトを実行すると、対話形式で必要なパラメータを聞かれます。適切な値を入力して進めてください。インストールが完了すると、Mastodonインスタンスが起動し、指定したドメインでアクセスできるようになります。
ということらしいのですが、途中でカレントユーザーをmastodonに移行したためそこから先のスクリプトが動かない・・・
だめじゃーんということで修正させるか・・・