æè¿ã¯ããã¾ãTwitterãè¦ã¦ãããMastodonã«ããããã¨ãã¨æãµã¼ãã«ããããã©æ°´ãåããªãã¨æãã¦ãã¦ããã£ãããªããã²ã¨ããã¾ã¤ã³ã¹ã¿ã³ã¹ãæã£ã¦ããã¨ããã ãããªã¨æãã建ç«ãããã¨ã«ããã
ç«ã¦ãåã«Masto.hostãHostdonãªã©ã®ããã¼ã¸ããã²ã¨ããã¾ã¤ã³ã¹ã¿ã³ã¹å»ºç«ãµã¼ãã¹ãçºãã¦ã¿ãããéç¨ã§éã¹ãæ¹ãããã¨ããæ°æã¡ãåã£ããã©ãããããªãé¢ç½ãããªã»ããããããã¨åç´ã«ActivityPubã®åå¼·ç¨éã§ã使ããããããªããã¨ããéèããããã©ãããªãããéã¶éç¨ã§Mastodonã®ã³ã¼ãã¯çºãã«ãããã¨ã«ãªãã¨æãã
ã¨ããããã§åç´ã«ãã²ã¨ããã¾ã¤ã³ã¹ã¿ã³ã¹ã欲ããã ãã§ããã°ãããã®ããã¼ã¸ããµã¼ãã¹ãæ¨ããå®ãããããããã¯é楽ã®ã³ã¼ãã¼ã§ãã
æ§æ
æ®æ®µããAWSã«ãããããããã¤ãã¦éãã§ããã®ã§ä»åãAWSä¸ã«ç½®ããã¨ã«ãããåããããã®è¦ä»¶ã¨ãã¦èããã®ã¯
- æä½ééã¹ããããã®ã¹ããã¯ã®ã¤ã³ã¹ã¿ã³ã¹
- ãã ãDBã®éç¨ã¯ããã¼ã¸ãã«éãããã(ã¹ãããã·ã§ããã¨ãåæã«æ®ã£ã¦ã»ãã)
ããããæåã¯EC2+RDSãæ¤è¨ãã¦ãããã©ãAmazon Lightsailã«ãããã¼ã¸ãMySQL/PostgreSQLã®æ©è½ãããããã¡ãã®æ¹ãè¥å¹²å®ãããã«è¦ããã®ã§ããã«ãããæçµçãªæ§æã¯ä»¥ä¸ã®éãã
- Amazon Lightsail 5ãã«ãã©ã³
- 1GBã¡ã¢ãª
- 1ã³ã¢ããã»ããµ
- 40GB SSD
- Amazon Lightsail PostgreSQL 15ãã« ã¹ã¿ã³ãã¼ããã©ã³
- 1GBã¡ã¢ãª
- 1ã³ã¢ããã»ããµ
- 40GB SSD
- éçãã¡ã¤ã«é ä¿¡ç¨CDNã¨ãã¦CloudFront + S3
ã¤ã³ã¹ãã¼ã«
åºæ¬çã«ã¯ Installing from source - Mastodon documentation ã®æé éãã«é²ãã¦ãããã®ã ããããããã¨ã²ã£ããã£ãã®ã§é ã追ã£ã¦æ¸ãã¦ãããããã¨ãã£ã¦ãæé å´ã¯æªããªãã¦ãèªåãæé ããé¸è±ãããã¨ãã¦è»¢ãã 話ã
swapé åãä½ã
ãããªãæé ã«æ¸ãã¦ãªããã¨ã ãã©ã1GBã¡ã¢ãªã ã¨swapé åãä½ããªãã¨è¶³ããªãã®ã§åæã§ä½ã£ã¦ããã
dd if=/dev/zero of=/swapvol bs=1M count=2048 chmod 600 /swapvol mkswap /swapvol swapon /swapvol echo -e "/swapvol\tswap\tswap\tdefaults\t0\t0" >> /etc/fstab
ä¸ããé ã«å®è¡ãã¦ãããã°swapé åãä½ããã¨ãã§ããã swapon -s
ã§æ§åãè¦ã¦ãããã¨ä¸å¯§ã
Ruby, Node.jsã®ãã¼ã¸ã§ã³
ãªã«ãã¨ãææ°ãããã§ãããã¨æã£ã¦ææ°çãå ¥ãããããè©°ã¾ã£ããã¾ãRubyã«ã¤ãã¦ã¯.ruby-versionã§ãã¼ã¸ã§ã³ãåºå®ããã¦ããã®ã§æé éãã®ãã¼ã¸ã§ã³ãæå®ããªãã¨åããªãã
Node.jsã«ã¤ãã¦ã¯16ãæå®ããã¦ããã18ãå
¥ãã¦ãåãããã ãOpenSSLã®äºæã¨ã©ã¼ãåºã(Ubuntu 20.04 LTSã§ã¤ã³ã¹ãã¼ã«ãããã®ã¯1.1.1fãªãã)ã®ã§ rake assets:precompile
ãèµ°ããã段㧠NODE_OPTIONS=--openssl-legacy-provider
ãªãã·ã§ã³ã追å ããå¿
è¦ããã(å®éã«ã¯ rake mastodon:setup
ãå
é¨ã§ assets:precompile
ãå®è¡ãã¦ããã®ã§ããã㧠NODE_OPTIONS
ã足ã)ã
ã¡ã¢ãªãå°ãªããã rake assets:precompile
ãè½ã¡ã
Node.jsã®ãã¼ã¸ã§ã³ã ãã§ãªããã¡ã¢ãªãå°ãªãã ãã§ã rake assets:precompile
ã失æãããrake mastodon:setup
ã®å®è¡æã«ã
The final step is compiling CSS/JS assets.
This may take a while and consume a lot of RAM.
ã¨è¡¨ç¤ºããã¦ãã¦ä¸å¯§ã ãâ¦â¦ã¨ããæ°æã¡ã«ãªã*1ãå
·ä½çã«ã¯ãã¼ãé åã足ããNode.jsã®ããã»ã¹ãã¯ã©ãã·ã¥ããããã®ãããªå ´å㯠NODE_OPTIONS="--max-old-space-size=2048"
ã®ãããªå½¢ã§æå®ãããã¨ã§åé¿ã§ããã
ã¤ã¾ããNode.js 18ç°å¢ãã¤ã¡ã¢ãªãå°ãªãå ´åã¯setupã®éã«ä»¥ä¸ã®ã³ãã³ããçºè¡ããã°è¯ãã
NODE_OPTIONS="--openssl-legacy-provider --max-old-space-size=2048" RAILS_ENV=production bundle exec rake mastodon:setup
S3ã«ãªãã¸ã§ã¯ããæ¸ãè¾¼ããã¨ãã§ããªã
ããã¯ããã²ã£ããã£ããS3 bucketã®ä¸èº«ã¯CloudFrontçµç±ã§é
ä¿¡ããã®ã§ãbucketã®è¨å®ã§ãããªãã¯ã¢ã¯ã»ã¹ããã¹ã¦ãããã¯ãã¦ãããMastodonã®ä¸ã§S3ãæä½ããã®ã«ä½¿ã£ã¦ããPaperclipã¯ããã©ã«ãã§public-readã®ãã¼ããã·ã§ã³ã§ãªãã¸ã§ã¯ããä½æãã«ãããã¨ãããããã¨403 Forbiddenã¨ã©ã¼ãè¿ã£ã¦ãã¦ãã¾ããåé¿ããããã«ã¯Mastodonã®ãã£ã¬ã¯ããªç´ä¸ã«ãã .env.production
ã« S3_PERMISSION=private
ã¨ããå¤ã追è¨ãããããã§ãªãã¸ã§ã¯ããä½ããããã«ãªãã
å®éã«ã©ãããéä¿¡ããã¦ããã®ããªãã¨ç¢ºèªããã®ã«ä»¥ä¸ã®Issueã³ã¡ã³ããå½¹ã«ç«ã£ãã
config/initializers/paperclip.rb
ã®ä¸ã§ http_wire_trace: true
ããªãã·ã§ã³ã¨ãã¦æ¸¡ãã¨éä¿¡ã®æ§åããã°ã«åºã¦ãããããããã®ãproductionã«ããããã«å·®ãããã§éã¹ãã®ã¯ãã²ã¨ããã¾ã¤ã³ã¹ã¿ã³ã¹ã®ããã¨ããã ã¨æãã
éç¨
ãããªã«é£ãããã¨ã¯ãã¦ããªãããã£ãããã«ã¹ãã§ãã¯ã¨ãã¢ãããã¼ãæ¦ç¥ã決ãããããã
Mackerelå°å ¥
Ubuntuãªã®ã§å
¬å¼ã®æé ã«åã£ã¦mackerel-agentãã¤ã³ã¹ãã¼ã«ããã ããå人ã®Slackã«mastodonãã£ã³ãã«ãä½ã£ã¦ãã¹ããreachableãã©ããã¨ãå¤å½¢ç£è¦ã ãéç¥ããããã«ä»è¾¼ãã ãMastodonã®ãã«ã¹ãã§ãã¯ã¯ /health
ã«ã¨ã³ããã¤ã³ããããã®ã§ãããå©ç¨ããã
å ãã¦ããã¤ãã®ããã«ã¦ã§ã¢ã®ã¡ããªãã¯ãåå¾ãããã¨ã«ãããPostgreSQLã®ã¡ããªãã¯ãè¦ãããã©ãªããè¨å®ãã¦ãªãã£ãã®ã§ããã¯ãã¨ã§ããã
# Plugin for accesslog [plugin.metrics.accesslog] command = "mackerel-plugin-accesslog /var/log/nginx/access.log" # Plugin for Linux [plugin.metrics.linux] command = "mackerel-plugin-linux" # Plugin for Redis [plugin.metrics.redis] command = "mackerel-plugin-redis" # Plugin for Sidekiq [plugin.metrics.sidekiq] command = "mackerel-plugin-sidekiq"
詳ããã¯ãã¡ã
ãã°ããè¦ã¦ããéãã¯1GBã®ã¡ã¢ãªã ã¨å¸¸æ70%-90%ããã使ã£ã¦ãã¦æããªãæãããããããã¾ãæ®éã«åãã¦ããã®ã§è¯ãã§ãããã¨ããæããã ããã30ãã©ãã¼/ãã©ãã¯ã¼ã®è¦æ¨¡æã§ãããªã®ã§ããã£ã¨å¢ããã¨ãã«ã©ããªãã®ãã¯åãããªãã
ã¢ãããã¼ãæ¦ç¥
ããã¾ãåã£ããã¨ã¯ãããã²ã¨ã¾ã以ä¸ã®ããã«ããã
- ã¢ãããã¼ãæ å ±ããã£ããã§ããããã«RSSãè³¼èªãã
- é±1ã§ã¢ãããã¼ããã¼ãè¨ãã¦å¿ è¦ã ã£ããæ´æ°ãã
ã¢ãããã¼ãæ å ±ã¯RSSãSlackã«æµãããã«ãããé½åº¦Slackã®Integrationãå¤æ´ããã®ã¯é¢åãªã®ã§ãä¸æ¦å¤§ãã§ãã«ã¼ã§åãã¦ãã²ã¨ã¤ã®ãã£ã¼ãã«ã¾ã¨ãã¦ããSlackã«æµãããã«ãã¦ããã
ã¢ãããã¼ããã¼ã¯Todoistä¸ã§ç®¡çãã¦ãã¦ãé±1ã§ãªãã¤ã³ããããããã¡ããç·æ¥æ§ã®é«ãæ´æ°ããã£ã¦ããå ´åã¯ã¢ãããã¼ããã¼ã«ããã対å¿ããã¤ããã ãã©ããã¾ã®ã¨ããã¯Node.jsã®è»½å¾®ãªæ´æ°ããæ¥ã¦ããªãã
å¼ã£è¶ã
ãã¨ãã¨å¥ã®ãµã¼ãã«ããã®ã§ã¢ã«ã¦ã³ããå¼ã£è¶ãããMastodonã«ã¯ActivityPubã®Move Activityãå©ç¨ããå¼ã£è¶ãã®ä»çµã¿ããã£ã¦ããã©ãã¯ã¼å´ã®å®è£ ãããã«å¯¾å¿ãã¦ããå ´åã¯ãã®ãã©ãã¯ã¼ã®ãã©ãã¼å ãå¼·å¶çã«æ°ããã¤ã³ã¹ã¿ã³ã¹ã«åãããã¨ãã§ãããmisskeyãgotosocialãWildebeestãªã©ã§ã¯ç¾æç¹ã§ã¯å¯¾å¿ãã¦ããããå¥éãã©ãã¼ããé¡ããããã¨ã«ãªãã
æ稿ã¯ã¨ã¯ã¹ãã¼ãã§ãããã¤ã³ãã¼ãã¯ã§ããªãã®ã§æ³¨æãå¿ è¦ã
ã¨ãããã㧠https://social.masawada.me ã«ããã¾ãããã¾ã®ã¨ããæµéããã ããã§å¹³åãã¨ããç¶æ ã