Mastodon este un server de microblogging și rețele de socializare self-gazdat. Oferă funcții ca Twitter; dar în loc să fie controlat de o singură companie, este o federație de servere descentralizate care se conectează pentru a realiza un întreg sistem de rețele sociale. O echipă mică poate porni instanța serverului Mastodon pentru a comunica între ei, precum și cu ceilalți utilizatori ai comunității federate. De asemenea, vă permite să alegeți propriile politici de confidențialitate și moderare și să definiți modul în care comunicați cu alți utilizatori ai diferitelor servere. Conținutul la care un utilizator individual creează și se abonează este găzduit pe serverul în care este creat contul său. Utilizatorii se pot urmări reciproc, chiar dacă nu sunt găzduiți pe același server. Fiecare utilizator din rețeaua Mastodon are un nume sau un ID unic, care se află în@[email protected]format. Aplicațiile client pentru Mastodon sunt disponibile pentru aproape toate platformele.
Cerințe preliminare
Notă: Vom folosi social.example.comnumele de domeniu folosit pentru instanța Mastodon. Înlocuiți toate aparițiile social.example.comcu numele de domeniu real pe care doriți să îl utilizați pentru aplicația Mastodon .
Actualizați sistemul de bază utilizând ghidul Cum să actualizați CentOS 7 , dacă este necesar. După ce sistemul dvs. a fost actualizat, continuați să instalați dependențele necesare.
Instalarea dependențelor
Mastodon necesită mai multe dependențe pentru a funcționa. Instalați cea mai recentă versiune Node.js, care va fi folosită pentru a compila fișierele JavaScript.
curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
sudo yum -y install nodejs
Instalați Yarn, care este o aplicație de manager de dependență rapidă, fiabilă și sigură. Vom folosi Yarn pentru a instala dependențele Node.js.
sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo
sudo yum -y install yarn
Instalați Redis. Redis este o aplicație de memorie și aplicație de memorie cache în memorie.
sudo yum -y install redis
Porniți Redis și permiteți-l să pornească automat la pornire.
sudo systemctl start redis
sudo systemctl enable redis
Instalați alte câteva dependențe care sunt necesare pentru a construi Rubyinstalarea și alte dependențe.
sudo yum -y install ImageMagick git libxml2-devel libxslt-devel gcc bzip2 openssl-devel zlib-devel gdbm-devel ncurses-devel autoconf automake bison gcc-c++ libffi-devel libtool patch readline-devel sqlite-devel glibc-headers glibc-devel libyaml-devel libicu-devel libidn-devel
De asemenea, va trebui să instalați instrumentele de dezvoltare.
sudo yum -y groupinstall 'Development Tools'
Instalarea și configurarea PostgreSQL
PostgreSQL este un sistem de baze de date relațional obiect. Va trebui să adăugați depozitul PostgreSQL la sistemul dvs., deoarece yumdepozitul implicit conține o versiune mai veche a aplicației.
sudo rpm -Uvh https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
Instalați serverul de baze de date PostgreSQL.
sudo yum -y install postgresql96-server postgresql96-contrib postgresql96-devel
Inițializează baza de date.
sudo /usr/pgsql-9.6/bin/postgresql96-setup initdb
Editați pg_hba.conffișierul pentru a activa MD5autentificarea bazată.
sudo nano /var/lib/pgsql/9.6/data/pg_hba.conf
Găsiți următoarele linii și treceți peerla trustși identla md5.
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
Odată actualizată, configurația ar trebui să arate astfel.
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
Porniți serverul PostgreSQL și permiteți-l să pornească automat la pornire.
sudo systemctl start postgresql-9.6
sudo systemctl enable postgresql-9.6
Modificați parola pentru utilizatorul implicit PostgreSQL.
sudo passwd postgres
Conectați-vă la shell ca PostgreSQLutilizator.
sudo su - postgres
Creați un PostgreSQLutilizator nou pentru Mastodon.
createuser mastodon
PostgreSQL oferă psqlshell - ul pentru a rula interogări pe baza de date. Comutați la shell-ul PostgreSQL rulând.
psql
Setați o parolă pentru utilizatorul nou creat pentru baza de date Mastodon și acordați permisiunea de a adăuga noi baze de date.
ALTER USER mastodon WITH ENCRYPTED password 'DBPassword' CREATEDB;
Înlocuiți DBPasswordcu o parolă puternică. Ieșiți din psqlcoajă:
\q
Comutați la sudoutilizator.
exit
Instalați alte câteva dependențe PostgreSQL necesare.
sudo yum -y install libpqxx-devel protobuf-devel
Instalați Ruby
Creați un utilizator nou pentru Mastodon și treceți la un utilizator nou creat.
sudo adduser mastodon -d /opt/mastodon
sudo su - mastodon
Vom instala cea mai recentă versiune de Ruby folosind Ruby Version Manager sau RVM. Este folosit pentru instalarea și gestionarea mai multor versiuni de Ruby.
Adăugați GPGcheia RVM pe serverul dvs.
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
Instalați RVM.
curl -sSL https://get.rvm.io | bash -s stable
source /opt/mastodon/.rvm/scripts/rvm
Obțineți acum lista versiunilor disponibile pentru Ruby.
rvm list known
Veți vedea următoarea ieșire.
[mastodon@vultr ~]$ rvm list known
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.7]
[ruby-]2.3[.4]
[ruby-]2.4[.1]
ruby-head
...
Acum instalați cea mai recentă versiune a Ruby.
rvm install 2.4
Folosiți versiunea instalată de Ruby.
rvm use 2.4
Ar trebui să poți verifica versiunea sa.
ruby -v
Ar trebui să vedeți o ieșire similară.
[mastodon@vultr ~]$ ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
Instalați bundler, care este managerul de dependență pentru aplicația Ruby.
gem install bundler
Acum treceți la directorul principal al utilizatorului Mastodon și clonați fișierele de depozitare a aplicațiilor de la Github.
cd ~
git clone https://github.com/tootsuite/mastodon.git app
Mutați directorul aplicației și verificați cele mai recente versiuni ale aplicației.
cd ~/app
git checkout $(git describe --tags `git rev-list --tags --max-count=1`)
Configurați bundlepentru a utiliza o cale personalizată pentru configurația PostgreSQL. De asemenea, instalați dependențele Ruby.
bundle config build.pg --with-pg-config=/usr/pgsql-9.6/bin/pg_config
bundle install --deployment --without development test
Instalați dependențele Node.js folosind Yarn.
yarn install --pure-lockfile
Va trebui să creați un fișier de configurare pentru aplicația Mastodon. Copiați fișierul de configurare a mostrei.
cd ~/app
cp .env.production.sample .env.production
Înainte de a edita fișierul, generați trei diferite secretsrulând următoarea comandă de trei ori. Va trebui să setați aceste secrete în fișierul de configurare.
RAILS_ENV=production bundle exec rake secret
Ar trebui să obțineți o ieșire similară.
[mastodon@vultr app]$ RAILS_ENV=production bundle exec rake secret
0f17dab1cf4a07f6fac671ecd5815adcb59d012b338dae9350c66402250c6c729dccd6182b1a8f75c4fde55453ce283ea66e07ed4466cdc6d4d6974c98512967
Editați fișierul de configurare folosind nanoeditorul.
nano .env.production
Găsiți următoarele linii și modificați valorile în consecință.
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
Furnizați datele de acreditare ale bazei de date, în funcție de utilizatorul bazei de date pe care l-ați creat în timpul instalării PostgreSQL. Furnizați orice nume pentru numele bazei de date, întrucât Mastodon va crea automat baza de date cu numele pe care îl furnizați.
DB_HOST=127.0.0.1
DB_USER=mastodon
DB_NAME=mastodon
DB_PASS=DBPassword
DB_PORT=5432
Setați numele de domeniu al aplicației.
LOCAL_DOMAIN=social.example.com
Găsiți următoarele linii și setați valoarea acesteia la secretele pe care le-ați generat.
PAPERCLIP_SECRET=
SECRET_KEY_BASE=
OTP_SECRET=
Salvați fișierul și ieșiți din editor.
Acum, executați următoarea comandă pentru a genera Web Push VAPIDchei. Veți primi o eroare la generarea tastelor VAPID Web Push dacă nu ați setat secretele în fișierul de configurație menționat mai sus.
RAILS_ENV=production bundle exec rake mastodon:webpush:generate_vapid_key
Ar trebui să vedeți următoarea ieșire.
[mastodon@vultr app]$ RAILS_ENV=production bundle exec rake mastodon:webpush:generate_vapid_key
VAPID_PRIVATE_KEY=DCMQdSPkdm-mepsNh4F3suc-UIvsABCvwFd03jSVemM=
VAPID_PUBLIC_KEY=BMMVcVXmqnV0C8S_ybZ7eQH-MXBEX2exqfdPSYQiMMUF2rRxfhoEtVF931i26ebMgmslHB_nvVadOdcBPhaFEjw=
Deschideți din nou fișierul de configurare și setați tastele generate în liniile respective.
VAPID_PRIVATE_KEY=
VAPID_PUBLIC_KEY=
În cele din urmă, furnizați informațiile serverului dvs. de poștă SMTP, astfel încât aplicația să poată trimite e-mailuri către utilizatori. Este important să utilizați un server SMTP funcțional deoarece, la înregistrarea nouă, utilizatorii vor primi un e-mail cu un link de activare. Utilizatorii noi vor trebui să facă clic pe linkul de activare pentru a-și activa contul.
SMTP_SERVER=mail.example.com
SMTP_PORT=456
[email protected]
SMTP_PASSWORD=MailPassword
[email protected]
SMTP_TLS=true
Odată terminat, salvați fișierul și ieșiți din editor. Ați făcut configurația de bază a instanței Mastodon.
Configurați baza de date PostgreSQL pentru prima dată.
RAILS_ENV=production bundle exec rails db:setup
În primul rând, comanda de mai sus va crea o nouă bază de date cu numele menționat în configurație. Apoi, va scrie baza de date conform configurației.
Precompila cu toate CSSși JavaScriptfișiere pentru a crea cache.
RAILS_ENV=production bundle exec rails assets:precompile
Mastodon este acum instalat pe serverul dvs. Acum, va trebui să configurați un Nginxserver web pentru a servi aplicația și Systemdserviciile de configurare pentru a rula serviciile Mastodon.
De acum, va trebui să executăm comenzile folosind sudoutilizatorul.
Instalați Nginx cu ajutorul modelului Let's Encrypt SSL
Vom folosi serverul web Nginx ca proxy invers pentru a servi aplicația utilizatorilor. De asemenea, vom obține și vom instala certificate SSL de la Let's Encrypt.
Instalați Nginx și Certbot. Certbot este clientul oficial care eliberează certificate pentru Let's Encrypt CA.
sudo yum -y install nginx certbot
Ajustați setarea firewallului pentru a permite standardul HTTPși HTTPSporturile prin firewall, deoarece Certbot trebuie să creeze o conexiune HTTP pentru verificarea autorității domeniului.
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
Notă: Pentru a obține certificate de la Let's Encrypt CA, trebuie să vă asigurați că domeniul pentru care doriți să generați certificatele este îndreptat către server. Dacă nu, atunci faceți modificările necesare la înregistrările DNS ale domeniului dvs. și așteptați propagarea DNS înainte de a face din nou cererea de certificat. Certbot verifică autoritatea domeniului înainte de furnizarea certificatelor .
Acum utilizați serverul web încorporat din Certbot pentru a genera certificatele pentru domeniul dvs.
sudo certbot certonly --standalone -d social.example.com
Este posibil ca certificatele generate să fie stocate în /etc/letsencrypt/live/social.example.com/director. Certificatul SSL vor fi păstrate fullchain.pemși cheia privată vor fi salvate privkey.pem.
Să cripțăm certificatele expiră în 90 de zile, de aceea este recomandat să configurați reînnoirea automată a certificatelor folosind joburi Cron. Cron este un serviciu de sistem care este utilizat pentru a executa sarcini periodice.
Deschideți fișierul de job cron.
sudo crontab -e
Adăugați următoarea linie.
0 0 * * * /usr/bin/certbot renew --quiet
Slujba cron de mai sus va rula zilnic la miezul nopții. Dacă certificatul este scadent, acesta va reînnoi automat certificatele.
Acum creați un nou bloc de server Nginx pentru site-ul Mastodon.
sudo nano /etc/nginx/conf.d/mastodon.conf
Populați fișierul cu aceasta.
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
listen [::]:80;
server_name social.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name social.example.com;
ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_certificate /etc/letsencrypt/live/social.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/social.example.com/privkey.pem;
keepalive_timeout 70;
sendfile on;
client_max_body_size 0;
root /opt/mastodon/app/public;
gzip on;
gzip_disable "msie6";
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;
add_header Strict-Transport-Security "max-age=31536000";
location / {
try_files $uri @proxy;
}
location ~ ^/(emoji|packs|system/accounts/avatars|system/media_attachments/files) {
add_header Cache-Control "public, max-age=31536000, immutable";
try_files $uri @proxy;
}
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://127.0.0.1:3000;
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;
}
location /api/v1/streaming {
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://127.0.0.1:4000;
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;
}
error_page 500 501 502 503 504 /500.html;
}
Asigurați-vă că schimbați numele de domeniu și calea către certificatele SSL.
Acum puteți porni serverul web Nginx și puteți să îl porniți automat la pornire.
sudo systemctl start nginx
sudo systemctl enable nginx
De asemenea, vi se va cere să permiteți portul 4000prin firewall, deoarece portul va furniza serviciul de streaming API.
sudo firewall-cmd --permanent --zone=public --add-port=4000/tcp
sudo firewall-cmd --reload
Furnizați permisiunile de execuție pentru directorul Mastodon.
sudo chmod +x /opt/mastodon
Configurarea serviciului Systemd
Va trebui să începeți trei procese diferite pentru a porni serverul Mastodon cu succes. Utilizarea serviciului Systemd vă va asigura că serverul Mastodon este pornit automat la pornirea și procesarea eșecurilor.
Creați un nou serviciu systemd pentru a rula serviciul web Mastodon. Acest serviciu va lansa serverul web încorporat pe port 3000.
sudo nano /etc/systemd/system/mastodon-web.service
Populați fișierul cu următorul conținut.
[Unit]
Description=Mastodon Web Service
After=network.target
[Service]
Type=simple
User=mastodon
Group=mastodon
WorkingDirectory=/opt/mastodon/app
Environment="RAILS_ENV=production"
Environment="PORT=3000"
ExecStart=/bin/bash -lc 'bundle exec puma -C config/puma.rb'
TimeoutSec=15
Restart=always
[Install]
WantedBy=multi-user.target
Creați al doilea serviciu Systemd pentru a rula serviciul de coadă de fundal Mastodon. Serviciul coadă Mastodon are grijă de toate sarcinile de fundal.
sudo nano /etc/systemd/system/mastodon-queue.service
Populați fișierul cu următorul conținut.
[Unit]
Description=Mastodon Queue Service
After=network.target
[Service]
Type=simple
User=mastodon
WorkingDirectory=/opt/mastodon/app
Environment="RAILS_ENV=production"
Environment="DB_POOL=5"
ExecStart=/bin/bash -lc 'bundle exec sidekiq -c 5 -q default -q mailers -q pull -q push'
TimeoutSec=15
Restart=always
[Install]
WantedBy=multi-user.target
În cele din urmă, creați ultimul fișier de serviciu pentru serviciul de streaming Mastodon API.
sudo nano /etc/systemd/system/mastodon-api.service
Populați fișierul cu următorul conținut.
[Unit]
Description=Mastodon Streaming
After=network.target
[Service]
Type=simple
User=mastodon
WorkingDirectory=/opt/mastodon/app
Environment="NODE_ENV=production"
Environment="PORT=4000"
ExecStart=/bin/npm run start
TimeoutSec=15
Restart=always
[Install]
WantedBy=multi-user.target
Activați serviciile Mastodon pentru a începe automat la momentul de pornire.
sudo systemctl enable mastodon-web mastodon-queue mastodon-api
Pentru a porni serviciile Mastodon, puteți rula acest lucru.
sudo systemctl start mastodon-web mastodon-queue mastodon-api
Pentru a verifica starea serviciilor, puteți rula acest lucru.
sudo systemctl status mastodon-web mastodon-queue mastodon-api
Concluzie
Acum puteți accesa aplicația Mastodon accesând https://social.example.com. Creați un cont de utilizator nou pe serverul dvs. și verificați contul de utilizator prin deschiderea linkului trimis în e-mail. Pentru a oferi privilegii de administrator contului pe care tocmai l-ați creat, executați acest lucru.
sudo su - mastodon && cd ~/app
RAILS_ENV=production bundle exec rails mastodon:make_admin USERNAME=<user_name>
Înlocuiți <user_name>cu numele de utilizator pe care l-ați folosit pentru a crea contul în interfața Mastodon.
Instanța dvs. Mastodon este acum instalată și configurată pentru a rula. Începeți prin a invita prietenii să se alăture instanței dvs. și să explorați funcțiile oferite de Mastodon. Puteți utiliza site-ul dvs. de rețea socială în mobil, descărcând oricare dintre aplicațiile disponibile pentru diverse platforme.