servers:nginx:mastodon
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revision | |||
| servers:nginx:mastodon [2019/02/26 00:52] – external edit 127.0.0.1 | servers:nginx:mastodon [2024/08/13 22:18] (current) – removed Sean Rhone | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Information ====== | ||
| - | * Mastodon ((https:// | ||
| - | * [[Information: | ||
| - | * https:// | ||
| - | |||
| - | ===== Prerequisites ===== | ||
| - | |||
| - | * [[distros: | ||
| - | * [[servers: | ||
| - | * [[servers: | ||
| - | |||
| - | ====== Repositories ====== | ||
| - | |||
| - | ===== Node.js ===== | ||
| - | |||
| - | wget -O '/ | ||
| - | |||
| - | sudo -e '/ | ||
| - | |||
| - | ===== Yarn ===== | ||
| - | |||
| - | wget -O '/ | ||
| - | |||
| - | sudo -e '/ | ||
| - | |||
| - | ====== Dependencies ====== | ||
| - | |||
| - | **** | ||
| - | |||
| - | sudo apt install imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file git g++ libprotobuf-dev protobuf-compiler pkg-config nodejs gcc autoconf bison build-essential libssl-dev libyaml-dev libreadline-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm5 libgdbm-dev redis-server redis-tools postgresql postgresql-contrib yarn libidn11-dev libicu-dev libjemalloc-dev | ||
| - | |||
| - | ====== Create User ====== | ||
| - | |||
| - | **** | ||
| - | |||
| - | sudo useradd --comment ' | ||
| - | |||
| - | ====== Download Source ====== | ||
| - | |||
| - | ===== Switch User ===== | ||
| - | |||
| - | **** | ||
| - | |||
| - | sudo su ' | ||
| - | |||
| - | ===== Download Source ===== | ||
| - | |||
| - | * Clones into ''/ | ||
| - | |||
| - | cd ~ && git clone --branch ' | ||
| - | |||
| - | ====== Additional Dependencies ====== | ||
| - | |||
| - | ===== Switch User ===== | ||
| - | |||
| - | **** | ||
| - | |||
| - | sudo su ' | ||
| - | |||
| - | ===== rbenv ===== | ||
| - | |||
| - | ==== Download Source ==== | ||
| - | |||
| - | **** | ||
| - | |||
| - | cd ~ && git clone --branch ' | ||
| - | |||
| - | ==== Compile ==== | ||
| - | |||
| - | **** | ||
| - | |||
| - | cd ~/' | ||
| - | |||
| - | ==== PATH ==== | ||
| - | |||
| - | **** | ||
| - | |||
| - | echo -e '\n# rbenv\nexport PATH=" | ||
| - | |||
| - | ===== Ruby ===== | ||
| - | |||
| - | ==== Download Source ==== | ||
| - | |||
| - | **** | ||
| - | |||
| - | cd ~ && git clone --branch ' | ||
| - | |||
| - | ==== Compile ==== | ||
| - | |||
| - | * Change '' | ||
| - | |||
| - | RUBY_CONFIGURE_OPTS=' | ||
| - | |||
| - | ===== Gem ===== | ||
| - | |||
| - | **** | ||
| - | |||
| - | gem update --system | ||
| - | |||
| - | ===== Bundler ===== | ||
| - | |||
| - | ==== Install ==== | ||
| - | |||
| - | * :!: Mastodon' | ||
| - | |||
| - | gem install bundler --no-document | ||
| - | |||
| - | ==== Dependencies ==== | ||
| - | |||
| - | **** | ||
| - | |||
| - | cd ~/' | ||
| - | |||
| - | ===== Yarn ===== | ||
| - | |||
| - | **** | ||
| - | |||
| - | cd ~/' | ||
| - | |||
| - | ===== Exit User ===== | ||
| - | |||
| - | **** | ||
| - | |||
| - | exit | ||
| - | |||
| - | ====== Database ====== | ||
| - | |||
| - | ===== Service ===== | ||
| - | |||
| - | **** | ||
| - | |||
| - | sudo systemctl enable ' | ||
| - | |||
| - | ===== Database ===== | ||
| - | |||
| - | sudo -u ' | ||
| - | |||
| - | CREATE USER mastodon CREATEDB; | ||
| - | |||
| - | \q | ||
| - | |||
| - | ====== Redis ====== | ||
| - | |||
| - | ===== Service ===== | ||
| - | |||
| - | * TODO: See if this is needed; Mastodon' | ||
| - | |||
| - | sudo systemctl enable ' | ||
| - | |||
| - | ====== nginx Configuration ====== | ||
| - | |||
| - | ===== Mastodon Proxies ===== | ||
| - | |||
| - | sudo -e '/ | ||
| - | |||
| - | < | ||
| - | 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:// | ||
| - | proxy_buffering on; | ||
| - | proxy_redirect off; | ||
| - | proxy_http_version 1.1; | ||
| - | proxy_set_header Upgrade $http_upgrade; | ||
| - | proxy_set_header Connection $connection_upgrade; | ||
| - | |||
| - | proxy_cache CACHE; | ||
| - | proxy_cache_valid 200 7d; | ||
| - | proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; | ||
| - | add_header X-Cached $upstream_cache_status; | ||
| - | add_header Strict-Transport-Security " | ||
| - | |||
| - | tcp_nodelay on; | ||
| - | } | ||
| - | |||
| - | location / | ||
| - | 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:// | ||
| - | 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; | ||
| - | }</ | ||
| - | |||
| - | ===== Server Block ===== | ||
| - | |||
| - | sudo -e '/ | ||
| - | |||
| - | < | ||
| - | map $http_upgrade $connection_upgrade { | ||
| - | default upgrade; | ||
| - | '' | ||
| - | } | ||
| - | |||
| - | proxy_cache_path / | ||
| - | |||
| - | server { | ||
| - | listen ' | ||
| - | server_name ' | ||
| - | root '/ | ||
| - | |||
| - | include '/ | ||
| - | include '/ | ||
| - | |||
| - | client_max_body_size ' | ||
| - | |||
| - | #access_log / | ||
| - | #error_log / | ||
| - | |||
| - | location / { | ||
| - | try_files $uri @proxy; | ||
| - | } | ||
| - | |||
| - | location ~ ^/ | ||
| - | try_files $uri @proxy; | ||
| - | } | ||
| - | |||
| - | location /sw.js { | ||
| - | try_files $uri @proxy; | ||
| - | } | ||
| - | |||
| - | error_page 500 501 502 503 504 /500.html; | ||
| - | }</ | ||
| - | |||
| - | ==== Enable Server Block ==== | ||
| - | |||
| - | **** | ||
| - | |||
| - | sudo rm -f '/ | ||
| - | |||
| - | ====== Initial Setup ====== | ||
| - | |||
| - | ===== Switch User ===== | ||
| - | |||
| - | **** | ||
| - | |||
| - | sudo su ' | ||
| - | |||
| - | ===== Initial Setup ===== | ||
| - | |||
| - | **** | ||
| - | |||
| - | cd ~/' | ||
| - | |||
| - | ==== Settings ==== | ||
| - | |||
| - | * Domain name: '' | ||
| - | * Yes single user mode | ||
| - | * No Docker | ||
| - | * Default PostgresSQL details | ||
| - | * Default Redis details | ||
| - | * No uploaded files on cloud | ||
| - | * No emails from localhost | ||
| - | |||
| - | ====== Post Setup ====== | ||
| - | |||
| - | ===== Logo ===== | ||
| - | |||
| - | ==== Hero image ==== | ||
| - | |||
| - | * 600x100 | ||
| - | * RoE | Social text centered in font '' | ||
| - | * Gray background with HTML color notation ''# | ||
| - | * White text for '' | ||
| - | * Blue text for '' | ||
| - | |||
| - | ==== Instance thumbnail ==== | ||
| - | |||
| - | * 1200x630 | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * Gray background with HTML color notation ''# | ||
| - | |||
| - | ===== Documentation ===== | ||
| - | |||
| - | * https:// | ||
| - | |||
| - | ===== Rake Tasks ===== | ||
| - | |||
| - | * https:// | ||
| - | |||
| - | ====== Services ====== | ||
| - | |||
| - | ===== Web Workers ===== | ||
| - | |||
| - | * Background daemon ran at system startup | ||
| - | |||
| - | sudo -e '/ | ||
| - | |||
| - | < | ||
| - | [Unit] | ||
| - | Description=Mastodon Web Workers | ||
| - | After=network-online.target | ||
| - | Wants=network-online.target | ||
| - | |||
| - | [Service] | ||
| - | Type=simple | ||
| - | User=mastodon | ||
| - | Group=mastodon | ||
| - | WorkingDirectory=/ | ||
| - | Environment=' | ||
| - | Environment=' | ||
| - | Environment=' | ||
| - | ExecStart='/ | ||
| - | ExecReload=/ | ||
| - | TimeoutSec=15 | ||
| - | Restart=always | ||
| - | |||
| - | [Install] | ||
| - | WantedBy=multi-user.target</ | ||
| - | |||
| - | ===== Background Queue ===== | ||
| - | |||
| - | * :!: '' | ||
| - | |||
| - | sudo -e '/ | ||
| - | |||
| - | < | ||
| - | [Unit] | ||
| - | Description=Mastodon Background Queue | ||
| - | After=network-online.target | ||
| - | Wants=network-online.target | ||
| - | |||
| - | [Service] | ||
| - | Type=simple | ||
| - | User=mastodon | ||
| - | Group=mastodon | ||
| - | WorkingDirectory=/ | ||
| - | Environment=' | ||
| - | Environment=' | ||
| - | Environment=' | ||
| - | Environment=' | ||
| - | ExecStart='/ | ||
| - | TimeoutSec=15 | ||
| - | Restart=always | ||
| - | |||
| - | [Install] | ||
| - | WantedBy=multi-user.target</ | ||
| - | |||
| - | ===== Streaming API ===== | ||
| - | |||
| - | * Background daemon ran at system startup | ||
| - | |||
| - | sudo -e '/ | ||
| - | |||
| - | < | ||
| - | [Unit] | ||
| - | Description=Mastodon Streaming API | ||
| - | After=network-online.target | ||
| - | Wants=network-online.target | ||
| - | |||
| - | [Service] | ||
| - | Type=simple | ||
| - | User=mastodon | ||
| - | Group=mastodon | ||
| - | WorkingDirectory=/ | ||
| - | Environment=' | ||
| - | Environment=' | ||
| - | Environment=' | ||
| - | ExecStart='/ | ||
| - | TimeoutSec=15 | ||
| - | Restart=always | ||
| - | |||
| - | [Install] | ||
| - | WantedBy=multi-user.target</ | ||
| - | |||
| - | ===== Updater ===== | ||
| - | |||
| - | ==== Service ==== | ||
| - | |||
| - | sudo -e '/ | ||
| - | |||
| - | < | ||
| - | [Service] | ||
| - | User=mastodon | ||
| - | Group=mastodon | ||
| - | Type=oneshot | ||
| - | WorkingDirectory=/ | ||
| - | Environment=' | ||
| - | ExecStart='/ | ||
| - | ExecStart='/ | ||
| - | ExecStart='/ | ||
| - | ExecStart='/ | ||
| - | ExecStart='/ | ||
| - | ExecStartPost='/ | ||
| - | |||
| - | |||
| - | |||
| - | ==== Timer ==== | ||
| - | |||
| - | * Every day at '' | ||
| - | |||
| - | sudo -e '/ | ||
| - | |||
| - | < | ||
| - | [Unit] | ||
| - | Description=Mastodon Updater | ||
| - | After=network-online.target | ||
| - | Wants=network-online.target | ||
| - | |||
| - | [Timer] | ||
| - | OnCalendar=*-*-* 02:00:00 | ||
| - | Persistent=true | ||
| - | |||
| - | [Install] | ||
| - | WantedBy=timers.target</ | ||
| - | |||
| - | ===== Ruby Updater ===== | ||
| - | |||
| - | ==== Service ==== | ||
| - | |||
| - | sudo -e '/ | ||
| - | |||
| - | < | ||
| - | [Service] | ||
| - | User=mastodon | ||
| - | Group=mastodon | ||
| - | Type=oneshot | ||
| - | WorkingDirectory=/ | ||
| - | Environment=' | ||
| - | ExecStart='/ | ||
| - | ExecStart='/ | ||
| - | ExecStart='/ | ||
| - | ExecStart='/ | ||
| - | ExecStart='/ | ||
| - | ExecStart='/ | ||
| - | ExecStartPost='/ | ||
| - | |||
| - | ==== Timer ==== | ||
| - | |||
| - | * Every day at '' | ||
| - | |||
| - | sudo -e '/ | ||
| - | |||
| - | < | ||
| - | [Unit] | ||
| - | Description=Mastodon Ruby Updater | ||
| - | After=network-online.target | ||
| - | Wants=network-online.target | ||
| - | |||
| - | [Timer] | ||
| - | OnCalendar=*-*-* 01:30:00 | ||
| - | Persistent=true | ||
| - | |||
| - | [Install] | ||
| - | WantedBy=timers.target</ | ||
| - | |||
| - | ===== Maintenance ===== | ||
| - | |||
| - | ==== Service ==== | ||
| - | |||
| - | sudo -e '/ | ||
| - | |||
| - | < | ||
| - | [Service] | ||
| - | User=mastodon | ||
| - | Group=mastodon | ||
| - | Type=oneshot | ||
| - | ExecStart='/ | ||
| - | ExecStart='/ | ||
| - | ExecStartPost='/ | ||
| - | |||
| - | ==== Timer ==== | ||
| - | |||
| - | * '' | ||
| - | |||
| - | sudo -e '/ | ||
| - | |||
| - | < | ||
| - | [Unit] | ||
| - | Description=Mastodon Maintenance | ||
| - | After=network-online.target | ||
| - | Wants=network-online.target | ||
| - | |||
| - | [Timer] | ||
| - | OnCalendar=*-*-01 02:20:00 | ||
| - | Persistent=true | ||
| - | |||
| - | [Install] | ||
| - | WantedBy=timers.target</ | ||
| - | |||
| - | ===== Restarter ===== | ||
| - | |||
| - | ==== Service ==== | ||
| - | |||
| - | sudo -e '/ | ||
| - | |||
| - | < | ||
| - | [Service] | ||
| - | Type=oneshot | ||
| - | ExecStartPre='/ | ||
| - | ExecStart='/ | ||
| - | ExecStart='/ | ||
| - | ExecStart='/ | ||
| - | ExecStartPost='/ | ||
| - | ExecStartPost='/ | ||
| - | ExecStartPost='/ | ||
| - | ExecStartPost='/ | ||
| - | |||
| - | ==== Timer ==== | ||
| - | |||
| - | * Every day at '' | ||
| - | |||
| - | sudo -e '/ | ||
| - | |||
| - | < | ||
| - | [Unit] | ||
| - | Description=Mastodon Service Restarter | ||
| - | After=network-online.target | ||
| - | Wants=network-online.target | ||
| - | |||
| - | [Timer] | ||
| - | OnCalendar=*-*-* 02:10:00 | ||
| - | Persistent=true | ||
| - | |||
| - | [Install] | ||
| - | WantedBy=timers.target</ | ||
| - | |||
| - | ===== Backup ===== | ||
| - | |||
| - | ==== Information ==== | ||
| - | |||
| - | * :!: This differs from the usual backup scheme and **should not** be used copy/ | ||
| - | * Because '' | ||
| - | * So to avoid having to run another service just to move the database dump, it's integrated into the files backup service | ||
| - | |||
| - | ==== Database ==== | ||
| - | |||
| - | === Service === | ||
| - | |||
| - | sudo -e '/ | ||
| - | |||
| - | < | ||
| - | [Service] | ||
| - | Type=oneshot | ||
| - | User=mastodon | ||
| - | Group=mastodon | ||
| - | ExecStart='/ | ||
| - | ExecStartPost='/ | ||
| - | |||
| - | === Timer === | ||
| - | |||
| - | * Every day at '' | ||
| - | |||
| - | sudo -e '/ | ||
| - | |||
| - | < | ||
| - | [Unit] | ||
| - | Description=Mastodon Database Dump | ||
| - | After=postgresql.service | ||
| - | |||
| - | [Timer] | ||
| - | OnCalendar=*-*-* 02:45:00 | ||
| - | Persistent=true | ||
| - | |||
| - | [Install] | ||
| - | WantedBy=timers.target</ | ||
| - | |||
| - | ==== Files ==== | ||
| - | |||
| - | === Service === | ||
| - | |||
| - | mkdir -p ~/' | ||
| - | |||
| - | < | ||
| - | [Service] | ||
| - | Type=oneshot | ||
| - | WorkingDirectory=/ | ||
| - | ExecStart='/ | ||
| - | ExecStartPost='/ | ||
| - | |||
| - | === Timer === | ||
| - | |||
| - | * Every day at '' | ||
| - | |||
| - | sudo -e '/ | ||
| - | |||
| - | < | ||
| - | [Unit] | ||
| - | Description=Mastodon Files and Database Backup | ||
| - | |||
| - | [Timer] | ||
| - | OnCalendar=*-*-* 02:50:00 | ||
| - | Persistent=true | ||
| - | |||
| - | [Install] | ||
| - | WantedBy=timers.target</ | ||
| - | |||
| - | ====== Backup ====== | ||
| - | |||
| - | * Create backup archive on server and transfer to client computer | ||
| - | |||
| - | ===== Server ===== | ||
| - | |||
| - | ==== Stop Services ==== | ||
| - | |||
| - | **** | ||
| - | |||
| - | sudo systemctl stop mastodon-web mastodon-sidekiq mastodon-streaming redis-server | ||
| - | |||
| - | ==== Backup Files ==== | ||
| - | |||
| - | **** | ||
| - | |||
| - | cd '/ | ||
| - | |||
| - | ==== Backup Database ==== | ||
| - | |||
| - | === Backup Database === | ||
| - | |||
| - | **** | ||
| - | |||
| - | sudo -u ' | ||
| - | |||
| - | ==== Start Services ==== | ||
| - | |||
| - | **** | ||
| - | |||
| - | sudo systemctl start mastodon-web mastodon-sidekiq mastodon-streaming redis-server | ||
| - | |||
| - | ===== Client ===== | ||
| - | |||
| - | ==== Transfer Files To Client ==== | ||
| - | |||
| - | **** | ||
| - | |||
| - | scp espionage724@192.168.1.153: | ||
| - | |||
| - | ====== Restore ====== | ||
| - | |||
| - | * :!: This is untested as of 2019/01/18 | ||
| - | |||
| - | ===== Client ===== | ||
| - | |||
| - | ==== Transfer Files To Server ==== | ||
| - | |||
| - | **** | ||
| - | |||
| - | scp ~/' | ||
| - | |||
| - | ==== Remove Files ==== | ||
| - | |||
| - | **** | ||
| - | |||
| - | rm -f ~/' | ||
| - | |||
| - | ===== Server ===== | ||
| - | |||
| - | ==== Stop Services ==== | ||
| - | |||
| - | **** | ||
| - | |||
| - | sudo systemctl stop mastodon-web mastodon-sidekiq mastodon-streaming redis-server | ||
| - | |||
| - | ==== Restore Files ==== | ||
| - | |||
| - | === Extract === | ||
| - | |||
| - | **** | ||
| - | |||
| - | mkdir -p '/ | ||
| - | |||
| - | === Move === | ||
| - | |||
| - | == system Folder == | ||
| - | |||
| - | **** | ||
| - | |||
| - | sudo rm -Rf '/ | ||
| - | |||
| - | == Settings == | ||
| - | |||
| - | **** | ||
| - | |||
| - | sudo rm -f '/ | ||
| - | |||
| - | == Redis Database == | ||
| - | |||
| - | **** | ||
| - | |||
| - | sudo rm -f '/ | ||
| - | |||
| - | ==== Restore Database ==== | ||
| - | |||
| - | === Create Database === | ||
| - | |||
| - | **** | ||
| - | |||
| - | sudo -u ' | ||
| - | |||
| - | === Restore === | ||
| - | |||
| - | **** | ||
| - | |||
| - | sudo -u ' | ||
| - | |||
| - | ==== Start Services ==== | ||
| - | |||
| - | **** | ||
| - | |||
| - | sudo systemctl start mastodon-web mastodon-sidekiq mastodon-streaming redis-server | ||
| - | |||
| - | ==== Remove Backups ==== | ||
| - | |||
| - | * Verify that Mastodon works before running | ||
| - | |||
| - | rm ~/' | ||
/srv/www/wiki/data/attic/servers/nginx/mastodon.1551160350.txt.gz · Last modified: (external edit)
