I used the instructions from [[https://docs.joinmastodon.org/admin/install/|Mastodon]] and adopted it to fit better for me :) ====== Install Mastodon v4.5.4 on Rocky Linux 10 ====== Enable repos: remi, rpmfusion, epel dnf install --nogpgcheck https://dl.fedoraproject.org/pub/epel/epel-release-latest-$(rpm -E %rhel).noarch.rpm -y /usr/bin/crb enable dnf install --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-$(rpm -E %rhel).noarch.rpm -y yum install -y https://rpms.remirepo.net/enterprise/remi-release-10.rpm Install additional RPMS as root: nodejs, valkey (instead of redis), yum install -y bison ca-certificates certbot.noarch ffmpeg.x86_64 file gdbm-devel git ImageMagick.x86_64 iotop jemalloc-devel.x86_64 jemalloc.x86_64 gcc gcc-c++ libffi-devel libicu-devel libidn-devel libxslt-devel.x86_64 libxslt.x86_64 libyaml-devel make ncurses-devel net-tools nodejs24.x86_64 npm postgresql-devel protobuf-c-compiler.x86_64 python3-certbot-nginx.noarch readline-devel.x86_64 readline.x86_64 valkey.x86_64 vips vips-devel Add user mastodon as root mkdir /opt/mastodon useradd -d /opt/mastodon mastodon chown -R mastodon:mastodon /opt/mastodon/ Prepare the DB postgres=# CREATE USER mastodon CREATEDB; postgres=# \q Install ruby as user mastodon 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 root)"/plugins/ruby-build Checkout mastodon code as user mastodon git clone https://github.com/mastodon/mastodon.git live && cd live git checkout $(git tag -l | grep '^v[0-9.]*$' | sort -V | tail -n 1) Install Ruby as user mastodon RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install Install Ruby dependencies as user mastodon bundle config deployment 'true' bundle config without 'development test' bundle install Fix some nodejs stuff as root npm install -g yarn rm -f /usr/local/bin/yarn # when a old yarn version is installed rm -f /usr/local/bin/yarnpkg # when a old yarn version is installed npm install -g corepack Install nodejs dependencies as user mastodon corepack enable corepack prepare yarn@4.12.0 --activate yarn install ====== Install Mastodon on Rocky Linux 9 ====== ===== Pre-requisites ===== Enable EPEL is a good idea dnf config-manager --set-enabled powertools dnf install epel-release Get the YARN repo curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo Installing the needed packages yum install -y git ruby ruby-devel postgresql-devel postgresql-server postgresql \ postgresql-contrib nodejs.x86_64 yarn make idn2.x86_64 libidn-devel.x86_64 \ libidn2-devel.x86_64 libidn.x86_64 libicu-devel.x86_64 libicu.x86_64 gcc gcc-c++ \ libzstd-devel openssl-devel tar redis nginx certbot.noarch \ python3-certbot-nginx.noarch ImageMagick.x86_64 libicu-devel.x86_64 postgresql-contrib.x86_64 \ libffi-devel.x86_64 libyaml.x86_64 autoconf.noarch protobuf.x86_64 \ libxml2-devel.x86_64 bison.x86_64 libpq-devel.x86_64 jemalloc-devel rbenv Add the user and change the home-dir adduser mastodon mv /home/mastodon /opt usermod -d /opt/mastodon mastodon Start redis systemctl enable --now redis ===== Preparing the DB ===== systemctl start postgresql.service /usr/bin/postgresql-setup --initdb --unit postgresql sudo -u postgres psql CREATE USER mastodon CREATEDB; \q ===== Setting up Mastodon ===== su - mastodon Use git to download the latest stable release of 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) Now to install Ruby and JavaScript dependencies: bundle config deployment 'true' bundle config without 'development test' bundle install -j$(getconf _NPROCESSORS_ONLN) yarn install --pure-lockfile Run the interactive setup wizard: RAILS_ENV=production bundle exec rake mastodon:setup ===== Setting up nginx ===== Copy the prepared nginx.conf into the nginxc config-dir. Change the hostname and the root-dir. cp /opt/mastodon/live/dist/nginx.conf /etc/nginx/conf.d/mastodon.conf sed -i 's:/home/mastodon/live/public;:/opt/mastodon/live/public;:g' /etc/nginx/conf.d/mastodon.conf sed -i 's/example.com/social.server17.net/g' /etc/nginx/conf.d/mastodon.conf Ensure that the firewall is configured for http and https firewall-cmd --add-service=http --permanent firewall-cmd --add-service=https --permanent firewall-cmd --reload Get a certifcate for your host/hostname certbot --nginx -d social.server17.net ===== Setting up systemd services ===== copy the files cp /opt/mastodon/live/dist/mastodon-*.service /etc/systemd/system/ and edit the files sed -i 's:/home/mastodon/:/opt/mastodon/:g' /etc/systemd/system/mastodon-* sed -i 's:/opt/mastodon/.rbenv/shims/bundle:/opt/mastodon/live/bin/bundle:g' /etc/systemd/system/mastodon-* now relaod the systemd and start evertything systemctl daemon-reload systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming Maybe something went wrong with the install of the bundler gem and the services are not starting. Check if the gem is installed or just install it. # su - mastodon cd live/ RAILS_ENV=production gem install bundler ====== Tuning ====== ===== Start tuning sidekiq ===== sidekiq is handling multiple queues. Each of them can run as an own process. Per process you should use a max. of 25 threads. ====== OLD HOW TO ====== ===== Install Mastodon on Rocky Linux 8 ===== ==== Pre-requisites ==== Enable EPEL is a good idea dnf config-manager --set-enabled powertools dnf install epel-release Get the YARN repo curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo After a fresh installation, setting some software to the needed release. yum module enable ruby:3.0 -y yum module enable nodejs:12 -y yum module enable postgresql:12 -y Installing the needed packages yum install -y git ruby ruby-devel postgresql-devel postgresql-server postgresql \ postgresql-contrib nodejs.x86_64 yarn make idn2.x86_64 libidn-devel.x86_64 \ libidn2-devel.x86_64 libidn.x86_64 libicu-devel.x86_64 libicu.x86_64 gcc gcc-c++ \ libzstd-devel openssl3-devel openssl-devel tar redis nginx certbot.noarch \ python3-certbot-nginx.noarch ImageMagick.x86_64 libicu-devel.x86_64 postgresql-contrib.x86_64 \ libffi-devel.x86_64 libyaml-devel.x86_64 autoconf.noarch protobuf-compiler.x86_64 \ libxml2-devel.x86_64 bison.x86_64 libpq-devel.x86_64 jemalloc-devel rbenv Add the user and change the home-dir adduser mastodon mv /home/mastodon /opt usermod -d /opt/mastodon mastodon ==== Preparing the DB ==== systemctl start postgresql.service /usr/bin/postgresql-setup --initdb --unit postgresql sudo -u postgres psql CREATE USER mastodon CREATEDB; \q ==== Setting up Mastodon ==== su - mastodon Use git to download the latest stable release of 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) Now to install Ruby and JavaScript dependencies: bundle config deployment 'true' bundle config without 'development test' bundle install -j$(getconf _NPROCESSORS_ONLN) yarn install --pure-lockfile Run the interactive setup wizard: RAILS_ENV=production bundle exec rake mastodon:setup ==== Setting up nginx ==== Copy the prepared nginx.conf into the nginxc config-dir. Change the hostname and the root-dir. cp /opt/mastodon/live/dist/nginx.conf /etc/nginx/conf.d/mastodon.conf sed -i 's:/home/mastodon/live/public;:/opt/mastodon/live/public;:g' /etc/nginx/conf.d/mastodon.conf sed -i 's/example.com/social.server17.net/g' /etc/nginx/conf.d/mastodon.conf Ensure that the firewall is configured for http and https firewall-cmd --add-service=http --permanent firewall-cmd --add-service=https --permanent firewall-cmd --reload Get a certifcate for your host/hostname certbot --nginx -d social.server17.net ==== Setting up systemd services ==== copy the files cp /opt/mastodon/live/dist/mastodon-*.service /etc/systemd/system/ and edit the files sed -i 's:/home/mastodon/:/opt/mastodon/:g' /etc/systemd/system/mastodon-* sed -i 's:/opt/mastodon/.rbenv/shims/bundle:/bin/bundle:g' mastodon-* now relaod the systemd and start evertything systemctl daemon-reload systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming ===== Update Mastodon to 4.0.* ===== That is just a how-to which worked for me. Do a Backup in advance! ==== Pre-requisites ==== Backup everything! You do not want to stay up half of the night and fix something. With the update to the version 4.0 you need a nodejs 14 and also edit some path in the system files. Update nodejs: yum module reset nodejs yum module enable nodejs:14 yum -y update Edit the path for bundle: sed -i 's:ExecStart=/bin/bundle:ExecStart=/opt/mastodon/bin/bundle:g' /etc/systemd/system/mastodon-* That is necessary, because in my installation I changed it before. ==== the REAL update ==== Here I just followed the manual from [[https://github.com/mastodon/mastodon/releases/tag/v4.0.0|Mastodon]] on Github. This can take some minutes: su - mastodon cd live git fetch && git checkout v4.0.0 bundle install yarn install Also this take some minutes SKIP_POST_DEPLOYMENT_MIGRATIONS=true RAILS_ENV=production bundle exec rails db:migrate RAILS_ENV=production bundle exec rails assets:precompile sudo systemctl restart mastodon-* RAILS_ENV=production bundle exec rails db:migrate sudo systemctl restart mastodon-* ==== Update to 4.0.2 ==== su - mastodon cd live git fetch && git checkout v4.0.2 bundle install RAILS_ENV=production bundle exec rails assets:precompile sudo systemctl restart mastodon-* YEAH! Welcome to the new version. ===== Tuning ===== ==== Start tuning sidekiq ==== sidekiq is handling multiple queues. Each of them can run as an own process. Per process you should use a max. of 25 threads. {{tag>[HowTo]}}