마스트돈을 3분 만에 설치하는 방법 (사전 준비 포함하지 않음)
17887 단어 sparkpostnginxmastodoncloudflare도커
경위
마스트돈의 호스팅 서비스, mastohost에 관하여 신경이 쓰여 있었기 때문에 일괄 설치를 시도했습니다. Subdomain에서 설치됩니다. CloudFlare, SparkPost에 따라 다르기 때문에 대규모 사이트에 적합하지 않습니다.
실행 결과
htps //w w. 요츠베. 이 m/와 tch? v=SQ6z0YmZpWg
대상인
(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上でしか試していないです。
이용 서비스
# 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上でしか試していないです。
사전 준비
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
마스트돈 설치는 여기에서
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=
이상, 지적, 보충 등이 있으면 코멘트로 부탁드립니다.
Reference
이 문제에 관하여(마스트돈을 3분 만에 설치하는 방법 (사전 준비 포함하지 않음)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/S-YOU/items/68a27a1f1659250a8a2a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)