# Установка своего инстанса Misskey ## 1.1 Требования к аппаратному обеспечению Точных рекомендаций в документации нет, однако судя по тестовой виртуальной машине на одного пользователя должно хватить 1 ГБ ОЗУ и 1 ядра CPU ## 1.2 Требуемое программное обеспечение 1. [Debian Linux](https://www.debian.org/) 2. [NodeJS](https://nodejs.org/en/) (12.x, 14.x) 3. [PostgreSQL](https://www.postgresql.org/) (>=10.0) 4. [Redis](https://redis.io/) 5. [Yarn](https://classic.yarnpkg.com/en/) --- ## 2. Установка Misskey Для начала необходимо создать пользователя для Misskey, так как запускать свой инстанс из под Root - плохая практика ``` # adduser --disabled-password --disabled-login misskey ``` После необходимо установить всё нужное для работы инстанса программное обеспечение: ``` // Redis, PostgreSQL, sudo и остальное программное обеспечение # apt install redis postgresql sudo git nginx // NodeJS # curl -sL https://deb.nodesource.com/setup_12.x | bash - # apt-get install -y nodejs // Yarn # curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - # echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list # apt update && apt install yarn ``` Тут будет расхождение от официальной документации. В документации Misskey устанавливается в директорию /home/misskey/misskey, в данном же руководстве Misskey устанавливается в /opt/misskey, так что создаём директорию /opt/misskey и меняем у неё владельца на пользователя misskey: ``` // Создаём директорию # mkdir -pv /opt/misskey // Меняем владельца # chown misskey:misskey -R /opt/misskey ``` Создаём базу данных под Misskey: ``` # sudo -Hu postgres psql // Создаём базу данных psql=# CREATE DATABASE misskey; // Создаём пользователя misskey с паролем yourpass psql=# CREATE USER misskey WITH ENCRYPTED PASSWORD 'yourpass'; // Выдаем ему все разрешения на использование базы данных Misskey psql=# GRANT ALL PRIVILIGES ON DATABASE misskey TO misskey; psql=#\q ``` После заходим под пользователя misskey и скачиваем исходный код Misskey: ``` // Заходим под пользователем Misskey # su - misskey // Скачиваем Misskey misskey@domain$ cd /opt misskey@domain$ git clone -b master https://github.com/syuilo/misskey.git // Устанавливаем зависимости misskey@domain$ cd misskey misskey@domain$ yarn ``` Копируем файл .config/example .config/default.yml (Подразумевается что вы всё ещё в директории /opt/misskey) и редактируем его: ``` misskey@domain$ cp .config/example.yml .config/default.yml misskey@domain$ nano .config/default.yml ``` В данном конфигурационном файле нас интересуют следующие параметры: ``` url: поменять example.tld на своё доменное имя port: в данной руководстве Misskey работает через Reverse Proxy, так что порт ставим 3000 db: user: пишем пользователя базы данных (в данном руководстве misskey) pass: пишем пароль пользователя базы данных (в данном руководстве yourpass) ``` Собираем Misskey: ``` misskey@domain$ NODE_ENV=production yarn build misskey@domain$ yarn run init ``` Запускаем Misskey: ``` misskey@domain$ NODE_ENV=production npm start ``` Если всё хорошо, Misskey выдаст строку о том, что он прослушивает 3000 порт: ``` Now listening on port 3000 on https://example.tld/ ``` Выключаем Misskey сочетанием клавиш CTRL+X и создаем SystemD сервис для того, что бы Misskey автоматически запускался при каждом включении: ``` // Создаем и открываем для редактирования файл /etc/systemd/system/misskey.service # nano /etc/systemd/system/misskey.service ``` Вставляем в файл /etc/systemd/system/misskey.service следующий код: ``` [Unit] Description=Misskey daemon [Service] Type=simple User=misskey ExecStart=/usr/bin/npm start WorkingDirectory=/opt/misskey Environment="NODE_ENV=production" TimeoutSec=60 StandardOutput=syslog StandardError=syslog SyslogIdentifier=misskey Restart=always [Install] WantedBy=multi-user.target ``` Включаем инстанс Misskey в SystemD: ``` // Перечитываем все сервисы SystemD что бы он обнаружил новый сервис # systemctl daemon-reload // Включаем Misskey и добавляем в автозагрузку # systemctl enable --now misskey // Проверяем работу Misskey # systemctl status misskey ``` Заключительный этап - настройка Revers Proxy. Открываем файл /etc/nginx/sites-enabled/default: ``` # nano /etc/nginx/sites-enabled/default ``` И вставляем следующий код: ``` server { listen 80; listen [::]:80 server_name example.tld; # Перенаправление с http на https location / { return 301 https://$server_name$request_uri; } } server { listen 443 ssl; listen [::]:443 ssl; # Подключение сертификатов Let's Encrypt ssl_trusted_certificate /etc/letsencrypt/live/example.tld/chain.pem; ssl_certificate /etc/letsencrypt/live/example.tld/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.tld/privkey.pem; # Подключение сжатия gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript application/activity+json application/atom+xml; # Размер загружаемых файлов client_max_body_size 16m; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` Всё, заходим в браузере на свой инстанс и создаём административную учётную запись