Компания предоставляющая услуги VPS подняла ценники, но сделала еще тарифы с меньшими по тех.характеристикам VPS по той же цене. А еще и денег стали просить за публичный IP адрес, а было бесплатно. Поэтому съезжаю, собрал монатки и, в общем дабы пригодилось при следующем переезде очень кратко все манипуляции без особых пояснений. Приведен порядок действий для сервера Ubuntu 22.04 для Debian 12 почти не отличается, вроде только с ключом для докера разница есть.
Что нужно для переезда
Создать каталог mkdir ~/mastodon/backup/
в который положим все что нужно.
Удалить мусор
Перейти в каталог, где установлен Mastodon:
cd ~/mastodon/
Удалить удаленные учетные записи, которые никогда не взаимодействовали с локальными пользователями.
docker compose exec web bin/tootctl accounts prune
Удалить из базы данных статусы, на которые нет ссылок, например статусы, полученные от ретрансляторов или от пользователей, за которыми больше не следят какие-либо локальные учетные записи, и на которых не ответили или с которыми иным образом не взаимодействовали.
docker compose exec web bin/tootctl statuses remove --days 1
Удалить локально кэшированные копии медиа-вложений, аватаров или заголовков профилей с других серверов. По умолчанию удаляются только вложения мультимедиа.
docker compose exec web bin/tootctl media remove --days 1
Вместо вложений мультимедиа удалить локально кэшированные копии заголовков с других серверов --include-follows
. Переопределить поведение по умолчанию --prune-profiles
и --remove-headers
удалить локально кэшированные копии аватаров (и заголовков) с других серверов, независимо от статуса подписки (по умолчанию они удаляются только из учетных записей, которые не подписаны или не подписаны на кого-либо локально). Можно использовать только с --prune-profiles
или --remove-headers
.
docker compose exec web bin/tootctl media remove --remove-headers --days 1
Вместо медиа-вложений удалить локально кэшированные копии аватаров и заголовков с других серверов.
docker compose exec web bin/tootctl media remove --prune-profiles --days 1
Удалить локальные миниатюры для карточек предварительного просмотра.
docker compose exec web bin/tootctl preview_cards remove --days 1
Сканирует файлы, не принадлежащие существующим мультимедийным вложениям, и удаляет их. Обратите внимание, что некоторые поставщики хранилищ взимают плату за необходимые запросы API для получения списка объектов. Кроме того, эта операция требует индивидуального перебора каждого файла, поэтому она будет медленной.
docker compose exec web bin/tootctl media remove-orphans
Сохранить нужное для работы Mastodon
Посмотреть имя контейнера базы данных docker ps
Создать дамп базы данных Mastodon
docker exec -t mastodon-db-1 pg_dumpall -c -U postgres > dump_sql_mastodon.sql
Архивировать дамп базы данных
zip ~/mastodon/backup/`date +'%d%m%Y'`_dump_sql_mastodon.sql.zip dump_sql_mastodon.sql
Удалить файл дампа после архивации
rm dump_sql_mastodon.sql
Сохранить каталог с пользовательскими файлами
zip -r ~/mastodon/backup/`date +'%d%m%Y'`_mastodon_public_system_backup.zip ~/mastodon/public/system
Сохранить конфигурацию сервера
zip ~/mastodon/backup/`date +'%d%m%Y'`_env.production.zip ~/mastodon/.env.production
zip ~/mastodon/backup/`date +'%d%m%Y'`_docker-compose.yml.zip ~/mastodon/docker-compose.yml
Сохранить все что касается работы сервера
Все подключения производятся по ранее созданным ключам SSH
Сохранить все ключи:
cp -r ~/.ssh ~/mastodon/backup
Скопировать конфиг shh сервера
cp /etc/ssh/sshd_config ~/mastodon/backup
Конфиг fail2ban
sudo cp /etc/fail2ban/jail.local ~/mastodon/backup
Правила ufw
sudo cp -r /etc/ufw/applications.d ~/mastodon/backup
Сертификаты letsencrypt
sudo cp -r /etc/letsencrypt ~/mastodon/backup
sudo cp /etc/nginx/sites-available/i.wildserver.ru.conf ~/mastodon/backup
Все что скопировали в ~/mastodon/backup
перенести удобным способом к себе на комп или другой сервер.
Настройка VPS
Подключится к серверу по выданным данным хостером:
ssh root@IP-VPS
Добавить пользователя желательно такого же, как был:
adduser UserVPS
Дать права на использование SUDO
usermod -aG sudo UserVPS
Сделать себя главным на сервере добавив запись в файл nano /etc/sudoers
:
UserVPS ALL=(ALL:ALL) ALL
Перезагрузить сервер и зайти под именем пользователя:
ssh UserVPS@IP-VPS
Создать каталог в который перенести все сохраненные ранее данные:
mkdir backup
Скопировать ключи:
cp -r ~/backup/.ssh ~/
Очень важно установить правильные права иначе не будет копирования на удаленный сервер бэкапа:
chmod 600 ~/.ssh/id_rsa
Скопировать конфиг shh сервера
sudo cp ~/backup/sshd_config /etc/ssh/
Или отредактировать конфиг sudo nano /etc/ssh/sshd_config
, что бы не было доступа по паролю:
# Include /etc/ssh/sshd_config.d/*.conf
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
UsePAM yes
X11Forwarding yes
PrintMotd no
AcceptEnv LANG LC_*
Subsystem sftp internal-sftp
AllowUsers UserVPS
Перезапустить сервер ssh:
sudo systemctl restart ssh
Выйти exit
или закрыть терминал
Подключится к серверу пользователем UserVPS
. Теперь парользапрашиваться не будет, вход осуществляется, только по ключу:
ssh UserVPS@IP-VPS
Установить архиватор:
sudo apt install zip
Обновить список пакетов:
sudo apt update
Установить новые пакеты и обновить имеющиеся:
sudo apt upgrade -y
В убунту вечно выскакивает окошко с выбором, что делать с конфигами после обновлений, раздражает ибо привык к Debian. Оставить все, как есть нех совацо в мои файлы.
Выбрать - Keep the local version currently installed
sudo apt install fail2ban -y
Скопировать ранее сохраненный файл настроек:
sudo cp ~/backup/jail.local /etc/fail2ban/
Проверка конфига:
sudo fail2ban-client -d
Запуск fail2ban
sudo systemctl start fail2ban
Активировать автозапуск:
sudo systemctl enable fail2ban
UFW установлен по умолчанию
Открыть порт SSH
sudo ufw allow OpenSSH
Включить UFW
sudo ufw enable
Скопировать правила
sudo cp -r ~/backup/applications.d /etc/ufw
Открыть порты веб-сервера 80 и 443
sudo ufw allow "WWW Full"
Создать файл подкачки объёмом 2 гига, на всяк случай, памяти не очень много выделяют на VPS приходится жертвовать дисковым пространством:
sudo fallocate -l 2G /swap.img
sudo chmod 600 /swap.img
sudo mkswap /swap.img
sudo swapon /swap.img
Проверка:
free -h
Включить на постоянку свап дополнив строку в файл sudo nano /etc/fstab
:
/swap.img none swap sw 0 0
Настроить имя хоста редактировать файл sudo nano /etc/hosts
:
127.0.0.1 localhost
IP-VPS i.wildserver.ru i-wildserver
Что бы в терминале было написано имя хоста
Имя хоста
sudo hostnamectl set-hostname i-wildserver
Полезные проги:
sudo apt install htop
sudo apt install mc -y
Установка Mastodon в Docker
ПЕРЕД УСТАНОВКОЙ MASTODON СДЕЛАТЬ CНАПШОТ ИЛИ БЭКАП на тот случай, если что то пойдет не так, а оно пойдет не так 😀 . У хостера есть такая бесплатная услуга, как снапшот - снимок всего VPS, очень удобно, когда собираешься сделать, что то кардинальное. Можно очень быстро откатится к той версии, когда все работало.
Установка Docker и нужных плагинов
Рабочая версия добавления репы докера другие херня. Импортировать GPG-ключ:
wget -O- https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor | sudo tee /etc/apt/keyrings/docker.gpg > /dev/null
Добавить репу докера:
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Надо быть внимательным при копировании команд в терминал, иногда такие символы | > исчезают.
Обновить список пакетов:
sudo apt update
Установка Docker и плагинов:
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Запуск Docker:
sudo systemctl start docker
Включить автозагрузку Docker
sudo systemctl enable docker
Проверить работу Docker
sudo systemctl status docker
Чтобы не запускать Docker от имени рута
sudo usermod -aG docker ${USER}
Установка Mastodon из бэкапов
Клонировать репу
git clone https://github.com/tootsuite/mastodon.git
Перейти в каталог
cd mastodon
Эта команда находит последний (по версии) тег в репозитории Git, который не является “релиз-кандидатом” (то есть не содержит rc в своем имени), и переключается на этот тег.
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)
Извлечь архивы:
cd ~/backup
unzip 09082024_docker-compose.yml.zip
unzip 09082024_env.production.zip
unzip 09082024_mastodon_public_system_backup.zip
unzip 09082024_postgres_backup.sql.zip
Можно заменить файл docker-compose.yml
своим или отредактировать имеющийся закомментировав все build
. Забегая вперед скажу, что заметил время в логах контейнеров не совпадают с серверным. Исправить:
Добавить в фйле docker-compose.yml
перед всеми контейнерами
environment:
- TZ=Europe/Moscow
Вот мой работающий конфиг скачать
Скопировать файлы в нужные каталоги. СДЕЛАЛ СНАП теперь пошла жара
Зайти в каталог Matodon
cd ~/mastodon
Запустить контейнер базы данных, имя db базы можно узнать из docker-compose.yml:
docker compose up -d db (имя db базы из docker-compose.yml)
Скопировать дамп в контейнер, имя контейнера узнать docker ps
docker cp ~/backup/dump_sql_mastodon.sql mastodon-db-1:/mastodon_backup.sql
Подключиться к контейнеру PostgreSQL:
docker exec -it mastodon-db-1 sh
Запустить psql под пользователем postgres:
psql -U postgres
Создать базу данных и пользователя с помощью psql:
CREATE DATABASE mastodon;
CREATE USER mastodon WITH PASSWORD 'пароль'; (пароль из env.production )
GRANT ALL PRIVILEGES ON DATABASE mastodon TO mastodon;
\q
Восстановление базы данных из дампа:
psql -U postgres -d mastodon -f /mastodon_backup.sql
exit
Обязательно поменять права иначе будут ошибки и не будут загружаться изображения:
sudo chown -R 70:70 postgres14
sudo chown -R 991:991 public
Запуск сервиса всех контейнеров
docker compose up -d
Посмотреть логи:
docker compose logs -f
Проверить дату время в контейнере должна совпадать с установленным часовым поясом выше, в моем случае с моим системным временем:
docker exec -it mastodon-redis-1 date
Сертификат SSL
Скопировать из бэкапа всю папку полностью сохраненную папку:
sudo cp -r ~/backup/letsencrypt /etc
Установка certbot через snap так проще:
sudo snap install --classic certbot
обновить сертификаты вручную с помощью команды:
sudo certbot renew
Удалить которые не нужны и выдаются с ошибками:
sudo certbot delete
Веб сервер NGINX
Установить NGINX:
sudo apt install nginx -y
Cкопировать конфиг NGINX из бэкапа:
sudo cp ~/backup/i.wildserver.ru.conf /etc/nginx/sites-available/
Активировать веб сервер:
sudo ln -s /etc/nginx/sites-available/i.wildserver.ru.conf /etc/nginx/sites-enabled/
Удалить активированный виртуальный сервер по умолчанию:
sudo rm /etc/nginx/sites-enabled/default
Ели нужно у регистратора поменять IP в записи А для домена
Проверить конфигурацию веб сервера:
sudo nginx -t
sudo systemctl reload nginx
Backup Mastodon
Периодически нужно чистить Mastodon, чтоб не захламил весь диск. Ну и самое важное это бэкап базы данных, остальное дело наживное. Пример скрипта для очистки и сохранения данных на удаленный сервер, соединение должно быть настроено и запускаться планировщиком. Скачать скрипт clear-cron-backup.sh в папку ~/mastodon/
Заменить UserVPS
своим ником, IP-VPS
айпи сервера или домен.
Скрипт нужно сделать исполняемым:
chmod ugo+x clear-cron-backup.sh
Добавить запись в планировщик задач:
crontab -e
# 0 */24 * * * /bin/bash ~/mastodon/clear-cron.sh
0 3 * * * ~/mastodon/./clear-cron.sh
Запускается каждый день в 3 часа ночи.
Enjoy
Вот и все телодвижения. Восстановление работы Mastodon и установка нового инстанса практически одинакова отличие только в том, что не запускается скрипт установки, который формирует базу данных с необходимыми данными для работы. Ну там есть еще некоторые тонкости, о которых позже напишу, может быть 😀
Комментарии