آذرسیس

How to install Mastodon Social Network using Docker on Ubuntu 22.04
5/5 - (4 امتیاز)

استفاده روزانه از انواع شبکه های اجتماعی امروزه در میان کاربران حرفه ای و مردم عادی محبوبیت زیادی پیدا کرده است، اما موضوع بحث روز ما در این مقاله از آذرسیس یکی از متفاوت ترین شبکه های اجتماعی است که Mastodon نامیده می شود. از این ابزار رایگان، غیر متمرکز و متن باز می توانید در محیط لینوکس بهره برده و حتی به عنوان جایگزینی برای توییتر (X) استفاده کنید! پیام ها، تصاویر و ویدیو را بدون محدودیت ارسال کرده و در هزاران سرور از این ابزار بی نظیر کار بکشید! یعنی کاربرانی که در یک سرور منحصر به فرد هستند می توانند به راحتی به کاربران یک شبکه دیگر متصل شوند و یکدیگر را دنبال کنند!

مفهوم شبکه اجتماعی Mastodon

پیش نیازهای نصب Mastodon در اوبونتو 22.04

  1. سیستم اوبونتو 22.04 با امکاناتی چون CPU حداقل 2 هسته ای و 2 گیگابایت حافظه. (البته طبق نیاز خود می توانید سرور را ارتقاء دهید)
  2. دسترسی به صورت کاربر non-root با امتیازات sudo
  3. یک نام دامنه کامل (FQDN) که به سرور شما اشاره کند.
  4. یک سرویس پست الکترونیک شخص ثالث مانند: Amazon SES, Sendgrid, Sparkpost. در اینجا ما از Amazon SES استفاده خواهیم کرد.
  5. از بروز بودن سیستم عامل خود با دستور زیر اطمینان حاصل کنید:
sudo apt update

از دستور زیر نیز برای نصب بسته ابزارهای پایه استفاده کنید. البته ممکن است برخی از آنها از قبل نصب شده باشد:

sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y

مراحل نصب برنامه Mastodon با داکر در اوبونتو 22.04

حال که با این شبکه اجتماعی آشنا شدید و پی بردید که می توان آن را در سیستم های مختلفی نصب کرد. ما در ادامه این مقاله مراحل نصب گام به گام این ابزار در سیستم عامل اوبونتو 22.04 را مورد بررسی قرار خواهیم داد. همچنین در خلال مراحل نکات لازم برای رعایت کردن نیز ذکر خواهد شد:

مرحله 1: پیکربندی فایروال در اوبونتو 22.04

اولین قدم ما اطمینان از پیکربندی فایروال در سیستم می باشد. در اینجا اوبونتو به صورت پیش فرض با دستور ufw می باشد. پس با دستور زیر از اجرای فایروال اطمینان حاصل کنید:

sudo ufw status

پورت SSH را مجاز کنید تا به این صورت فایروال اتصال فعلی را قطع نکند:

sudo ufw allow OpenSSH

همچنین، با دستور زیر پورت های http و https را مجاز کنید:

sudo ufw allow http
sudo ufw allow https

حال با دستور مورد نیاز فایروال را فعال کنید:

sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

در نهایت، برای بررسی وضعیت فایروال دستور زیر را بکار گیرید:

sudo ufw status

نصب برنامه Mastodon با داکر در اوبونتو

مرحله 2: نصب داکر و داکر Compose

اوبونتو 22.04 با نسخه قدیمی داکر عرضه می شود. برای نصب آخرین نسخه، ابتدا باید کلید Docker GPG را وارد کنید:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

اکنون با استفاده از دستور زیر فایل مخزن داکر را ایجاد کنید:

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

حالا نوبت به بروز رسانی لیست مخزن سیستم رسیده است که می توانید با دستور زیر این کار را انجام دهیذ:

sudo apt update

باید آخرین نسخه داکر را در سیستم خود داشته باشید که با دستور زیر آن را نصب کنید:

sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

وضعیت اجرای آن را نیز با دستور زیر شناسایی کنید: 

sudo systemctl status docker

به طور پیش فرض، داکر به امتیازات ریشه نیاز دارد. اگر می خواهید هر بار که دستور داکر را اجرا می کنید، از sudo استفاده نکنید، نام کاربری خود را به گروه داکر اضافه کنید:

sudo usermod -aG docker $(whoami)

می توانید از سرور خارج شده و دوباره وارد شوید تا تغییرات اعمال شود و یا از دستور زیر استفاده کنید:

su - ${USER}

با استفاده از دستور زیر اضافه شدن کاربر شما به گروه داکر را تایید کنید:

groups
navjot wheel docker

مرحله 3: مرحله آماده سازی برای نصب برنامه

حد پیش فرض تعداد nmap برای Elasticsearch بسیار کم است. برای بررسی مقدار پیش فرض دستور زیر را اجرا کنید:

sysctl vm.max_map_count

حال می توانید مقدار را با اعمال دستور زیر بالا ببرید:

echo "vm.max_map_count=262144" | sudo tee /etc/sysctl.d/90-max_map_count.conf
sudo sysctl --load /etc/sysctl.d/90-max_map_count.conf

آماده سازی برای نصب Mastodon

مرحله 4: نصب شبکه اجتماعی

ابتدا برای ایجاد دایرکتوری ها و تنظیم مالکیت، باید دایرکتوری ها و سرویس های مرتبط با آن را ایجاد کنید:

sudo mkdir -p /opt/mastodon/database/{postgresql,pgbackups,redis,elasticsearch}
sudo mkdir -p /opt/mastodon/web/{public,system}
sudo mkdir -p /opt/mastodon/branding

اکنون باید امتیازهای مالکیت لازم را برای دایرکتوری های Elasticsearch ،Web و Backup تنظیم کنید:

sudo chown 991:991 /opt/mastodon/web/{public,system}
sudo chown 1000 /opt/mastodon/database/elasticsearch
sudo chown 70:70 /opt/mastodon/database/pgbackups

سپس به دایرکتوری زیر سویچ کنید:

cd /opt/mastodon

جهت ایجاد محیط مناسب و فایل های داکر Compose، اکنون باید فایل های محیطی مناسب برای اپلیکیشن و پایگاه داده به وجود آورید:

sudo touch application.env database.env

اکنون برای عمل ویرایش، فایل Compose داکر را ایجاد کرده و باز کنید:

sudo nano docker-compose.yml

و کد زیر را در آن وارد کنید:

version: '3'
services:
postgresql:
image: postgres:15-alpine
env_file: database.env
restart: always
shm_size: 512mb
healthcheck:
test: ['CMD', 'pg_isready', '-U', 'postgres']
volumes:
- postgresql:/var/lib/postgresql/data
- pgbackups:/backups
networks:
- internal_network
redis:
image: redis:7-alpine
restart: always
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
volumes:
- redis:/data
networks:
- internal_network
redis-volatile:
image: redis:7-alpine
restart: always
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
networks:
- internal_network
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.7
restart: always
env_file: database.env
environment:
- cluster.name=elasticsearch-mastodon
- discovery.type=single-node
- bootstrap.memory_lock=true
- xpack.security.enabled=true
- ingest.geoip.downloader.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m -Des.enforce.bootstrap.checks=true"
- xpack.license.self_generated.type=basic
- xpack.watcher.enabled=false
- xpack.graph.enabled=false
- xpack.ml.enabled=false
- thread_pool.write.queue_size=1000
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
healthcheck:
test: ["CMD-SHELL", "nc -z elasticsearch 9200"]
volumes:
- elasticsearch:/usr/share/elasticsearch/data
networks:
- internal_network
ports:
- '127.0.0.1:9200:9200'
website:
image: tootsuite/mastodon:v4.0.2
env_file:
- application.env
- database.env
command: bash -c "bundle exec rails s -p 3000"
restart: always
depends_on:
- postgresql
- redis
- redis-volatile
- elasticsearch
ports:
- '127.0.0.1:3000:3000'
networks:
- internal_network
- external_network
healthcheck:
test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:3000/health || exit 1']
volumes:
- uploads:/mastodon/public/system
shell:
image: tootsuite/mastodon:v4.0.2
env_file:
- application.env
- database.env
command: /bin/bash
restart: "no"
networks:
- internal_network
- external_network
volumes:
- uploads:/mastodon/public/system
- static:/static
streaming:
image: tootsuite/mastodon:v4.0.2
env_file:
- application.env
- database.env
command: node ./streaming
restart: always
depends_on:
- postgresql
- redis
- redis-volatile
- elasticsearch
ports:
- '127.0.0.1:4000:4000'
networks:
- internal_network
- external_network
healthcheck:
test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:4000/api/v1/streaming/health || exit 1']
sidekiq:
image: tootsuite/mastodon:v4.0.2
env_file:
- application.env
- database.env
command: bundle exec sidekiq
restart: always
depends_on:
- postgresql
- redis
- redis-volatile
- website
networks:
- internal_network
- external_network
healthcheck:
test: ['CMD-SHELL', "ps aux | grep '[s]idekiq\ 6' || false"]
volumes:
- uploads:/mastodon/public/system
networks:
external_network:
internal_network:
internal:true
volumes:
postgresql:
driver_opts:
type: none
device: /opt/mastodon/database/postgresql
o: bind
pgbackups:
driver_opts:
type: none
device: /opt/mastodon/database/pgbackups
o: bind
redis:
driver_opts:
type: none
device: /opt/mastodon/database/redis
o: bind
elasticsearch:
driver_opts:
type: none
device: /opt/mastodon/database/elasticsearch
o: bind
uploads:
driver_opts:
type: none
device: /opt/mastodon/web/system
o: bind
static:
driver_opts:
type: none
device: /opt/mastodon/web/public
o: bind

در این مرحله با زدن کلید های Ctrl+X فایل را ذخیره کرده و به محض درخواست کلید Y را بزنید. آخرین نسخه منتشر شده را در Mastodon Github Release بررسی کنید و نسخه موجود در فایل داکر Compose را به طور مناسب تنظیم کنید. ما در اینجا از آخرین نسخه های PostgreSQL و Redise استفاده می کنیم. شما می توانید این موارد را براساس نیاز خود تنظیم کنید.

درباره Elasticsearch نیز هیچ نسخه اصلی وجود ندارد تا بتوان در صفحه Ducker Hub دنبال کرد، بنابراین باید به صورت دستی وارد کنید. قدم بعدی در ایجاد مقادیر سرّی در اپلیکیشن این است که باید مقادیر سری برنامه را ایجاد کنید. با دوبار اجرای دستور زیر مقادیر SECRET_KEY_BASE و OTP_SECRET را ایجاد کنید. اما در نظر داشته باشید که ممکن است اولین بار کمی طول بکشد:

docker compose run --rm shell bundle exec rake secret

 همچنین می توانید از ابزار Openssl به همین منظور بهره مند شوید:

openssl rand -hex 64

با دستور زیر نیز می توانید مقادیر VAPID_PRIVATE_KEY و VAPID_PUBLIC_KEY را ایجاد کنید:

docker compose run --rm shell bundle exec rake mastodon:webpush:generate_vapid_key

برای ایجاد رمز عبور برای PostgreSQL و Elasticsearch هم می توانید از ابزار Openssl استفاده کنید:

openssl rand -hex 15

نصب شبکه اجتماعی Mastodon

برای برقراری و تنظیمات لازم جهت فایل های محیطی، امکان ویرایش فایل Application.Env را باز کنید:

sudo nano application.env

سپس تنظیمات را با کپی و Paste کردن خطوط زیر در فایل شروع کنید:

environment
RAILS_ENV=production
NODE_ENV=production domain
LOCAL_DOMAIN=mastodon.example.com
redirect to the first profile
SINGLE_USER_MODE=false
do not serve static files
RAILS_SERVE_STATIC_FILES=false concurrency
WEB_CONCURRENCY=2
MAX_THREADS=5
pgbouncer
PREPARED_STATEMENTS=false
locale
DEFAULT_LOCALE=en
 email, not used
SMTP_SERVER=email-smtp.us-west-2.amazonaws.com
SMTP_PORT=587
SMTP_LOGIN=AES_USER
SMTP_PASSWORD=AES_PWD
[email protected] secrets
SECRET_KEY_BASE=c09fa403575e0b431e54a2e228f20cd5a5fdfdbba0da80598959753b829a4e3c0266eedbac7e3cdf9f3345db36c56302c0e1bc5bfc8c5d516be59a2c41de7e37
OTP_SECRET=febb7dbb0d3308094083733fc923a430e52ccec767d48d7d2e0c577bfcb6863dbdfc920b1004b1f8c2967b9866bd7a0b4a15460f9fc7687aa4a42acf54e5a3d4
Changing VAPID keys will break push notifications
VAPID_PRIVATE_KEY=13RgrfOY2tkwuUycylDPOkoHennkJ0ZAPV_fUwDy7-g=
VAPID_PUBLIC_KEY=BDAQuGwPbh1kbCV904adYXHvz9lLRaJHkiQkihRDPyBn3QmkAYbR21WHYoP8TkyG6dylG6IXpEVfLwdoW7fJVns=
IP and session retention
-----------------------
Make sure to modify the scheduling of ip_cleanup_scheduler in config/sidekiq.yml
to be less than daily if you lower IP_RETENTION_PERIOD below two days (172800).
-----------------------
IP_RETENTION_PERIOD=2592000
SESSION_RETENTION_PERIOD=2592000

اکنون در این مرحله با کلیدهای Ctrl+X فایل را ذخیره کرده و به محض درخواست، دکمه Y را بزنید. برنامه به طور پیش فرض یک آدرس IP را به مدت یک سال حفظ می کند، ولی ما آن را به 30 روز تغییر دادیم. یعنی در واقع می توان بر اساس نیاز می توان این مقدار را تغییر داد، اما باید همچنان به این موضوع توجه داشته باشید که این مقدار بیش از دو روز باشد. حال برای ویرایش فایل Database.env را باز کنید:

sudo nano database.env

اکنون باید خطوط زیر را در فایل باز شده درج کنید:

 postgresql configuration
POSTGRES_USER=mastodon
POSTGRES_DB=mastodon
POSTGRES_PASSWORD=15ff12dcb93aa60680d2aadb4032ee
PGPASSWORD=15ff12dcb93aa60680d2aadb4032ee
PGPORT=5432
PGHOST=postgresql
PGUSER=mastodon
 pgbouncer configuration
POOL_MODE=transaction
ADMIN_USERS=postgres,mastodon
DATABASE_URL="postgres://mastodon:15ff12dcb93aa60680d2aadb4032ee@postgresql:5432/mastodon" elasticsearch
ES_JAVA_OPTS=-Xms512m -Xmx512m
ELASTIC_PASSWORD=13382e99f6b2d4dc7f3d66e4b9872d
 mastodon database configuration
DB_HOST=pgbouncer
DB_HOST=postgresql
DB_USER=mastodon
DB_NAME=mastodon
DB_PASS=15ff12dcb93aa60680d2aadb4032ee
DB_PORT=5432
REDIS_HOST=redis
REDIS_PORT=6379
CACHE_REDIS_HOST=redis-volatile
CACHE_REDIS_PORT=6379
ES_ENABLED=true
ES_HOST=elasticsearch
ES_PORT=9200
ES_USER=elastic
ES_PASS=13382e99f6b2d4dc7f3d66e4b9872d

سپس فایل را با زدن کلید Ctrl+X و سپس کلید Y ذخیره کنید. برای شروع آماده سازی در این شکبه اجتماعی باید فایل های استاتیک را برای ارائه توسط Nginx آماده کنید. انجام این مرحله نیز برای بار اولی کمی طول می کشد:

docker compose run --rm shell bash -c "cp -r /opt/mastodon/public/* /static/"

اکنون باید لایه داده را بالا بیاورید:

docker compose up -d postgresql redis redis-volatile

با استفاده از دستور زیر محتوا کانتینرها را چک کنید:

watch docker compose ps

اندکی منتظر بمانید تا Running (Healthy) ظاهر شود و سپس Ctrl+C را فشار دهید و با استفاده از دستور زیر پایگاه داده را مقدار دهی اولیه کنید:

docker compose run --rm shell bundle exec rake db:setup

نصب شبکه اجتماعی Mastodon

مرحله 5: نحوه نصب Nginx برای برنامه

توجه کنید که سیستم عامل اوبونتو 22.04 با نسخه قدیمی Nginx عرضه می شود. پس برای نصب آخرین نسخه، باید مخزن رسمی Nginx را دانلود کنید. اما ابتدا کلید امضا Nginx را وارد کنید:

curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

سپس مخزن مورد نظر را برای نسخه Stable ابزار Nginx اضافه کنید:

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

سپس مخازن سیستم را بروز رسانی کرده و با دستور بعدی Nginx را نصب کنید:

sudo apt update

sudo apt install nginx

اکنون قادر خواهید بود نصب را با دستور زیر شناسایی کنید:

nginx -v
nginx version: nginx/1.22.1

و سپس می توانید با توجه به ماحل سپری شده در بالا، سرور Nginx را شروع کنید:

sudo systemctl start nginx

در نهایت وضعیت سرور را با استفاده کردن از خط زیر بررسی کنید:

sudo systemctl status nginx

مرحله 6: نحوه نصب گواهی SSL در برنامه

برای ایجاد گواهی SSL، ابتدا باید Cerstbot را نصب کنید. همچنین می توانید Certbot را با استفاده از مخازن اوبونتو نصب کنید و یا آخرین نسخه را از طریق ابزار Snapd آخرین نسخه را بدست آورید. ما در اینجا از ورژن Snapd استفاده خواهیم کرد. البته در اوبونتو Snapd به طور پیش فرض نصب شده است. حالا برای اطمینان از بروز بودن Snapd دستور زیر را اجرا کنید:

sudo snap install core
sudo snap refresh core

اکنون Certbot را با دستور زیر نصب کنید:

sudo snap install --classic certbot

از دستور زیر استفاده کنید تا مطمئن شوید، دستور Certbot با ایجاد یک لینک نمادین به دایرکتوری user/bin/ اجرا می شود:

sudo ln -s /snap/bin/certbot /usr/bin/certbot

اکنون برای ایجاد یک گواهی SSL دستور زیر را اجرا کنید:

sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d mastodon.example.com

دستور بالا یک گواهی برای etc/letsencrypt/live/mastodon.example.com/ در سرور شما دانلود می کند. حال باید یک گواهی Diffie-Hellman group ایجاد کنید:

sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

برای بررسی درستی تمدید SSL نیز فرآیند را به صورت Dry انجام دهید:

sudo certbot renew --dry-run

اگر با هیچ خطایی مواجه نشدید، یعنی تنظیمات درست بوده است و گواهی شما به طور خودکار تمدید خواهد شد.

مرحله 7: پیکربندی سرور Nginx

ابتدا فایل etc/nginx/nginx.conf/ برای ویرایش باز کنید:

Sudonano / Etc / Ngin x / Ngin x. conf 

حال پیش از خط ;etc/nginx/conf.d/*.conf/ خط زیر را اضافه کنید:

server_names_hash_bucket_size 64;

سپس طبق روال قبل فایل را به وسیله Ctrl+X و زدن کلید Y ذخیره کنید. فایل /etc/nginx/conf.d/mastodon.conf را برای ویرایش ایجاد کرده و باز کنید:

Sudonano / Etc / Nginx / Konf. d/ma s and don. conf

سپس کد های زیر را وارد کنید:

map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream backend {
server 127.0.0.1:3000 fail_timeout=0;
}
upstream streaming {
server 127.0.0.1:4000 fail_timeout=0;
}
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=CACHE:10m inactive=7d max_size=1g;
server {
listen 80 default_server;
server_name mastodon.example.com;
location / { return 301 https://$host$request_uri; }
}
server {
listen 443 ssl http2;
server_name mastodon.example.com;

access_log /var/log/nginx/mastodon.access.log;
error_log /var/log/nginx/mastodon.error.log;

http2_push_preload on; # Enable HTTP/2 Server Push

ssl_certificate /etc/letsencrypt/live/mastodon.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mastodon.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/mastodon.example.com/chain.pem;
ssl_session_timeout 1d;

Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
ssl_protocols TLSv1.2 TLSv1.3;
 Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
prevent replay attacks.

see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
ssl_early_data on;

ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
keepalive_timeout 70;
sendfile on;
client_max_body_size 80m;

OCSP Stapling ---
fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;

add_header X-Early-Data $tls1_3_early_data;

root /opt/mastodon/web/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 image/svg+xml image/x-icon;

add_header Strict-Transport-Security "max-age=31536000" always;

location / {
try_files $uri @proxy;
}
location ~ ^/(system/accounts/avatars|system/media_attachments/files) {
add_header Cache-Control "public, max-age=31536000, immutable";
add_header Strict-Transport-Security "max-age=31536000" always;
root /opt/mastodon/;
try_files $uri @proxy;
}
location ~ ^/(emoji|packs) {
add_header Cache-Control "public, max-age=31536000, immutable";
add_header Strict-Transport-Security "max-age=31536000" always;
try_files $uri @proxy;
}

location /sw.js {
add_header Cache-Control "public, max-age=0";
add_header Strict-Transport-Security "max-age=31536000" always;
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 $scheme;
proxy_set_header Proxy "";
proxy_pass_header Server;

proxy_pass http://backend;
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_valid 410 24h;
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 "max-age=31536000" always;

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 $scheme;
proxy_set_header Proxy "";
proxy_pass http://streaming;
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;
}

This block is useful for debugging TLS v1.3. Please feel free to remove this
and use the `$ssl_early_data` variable exposed by NGINX directly should you
wish to do so.
map $ssl_early_data $tls1_3_early_data {
"~." $ssl_early_data;
default "";
}

و در نهایت با کلید های Ctrl+X و سپس Y فایل را ذخیره کنید. اکنون Syntax فایل پیکربندی Nginx را با دستور زیر شناسایی کنید و با دستور بعدی سرور Nginx را مجدداً راه اندازی کنید:

sudo nginx -t
sudo systemctl restart nginx

پیکربندی سرور Nginx

مرحله 8: نحوه راه اندازی برنامه

ابزار Tootctl CLI ابزاری برای انجام کارهای اداری در این شبکه اجتماعی نصب شده می باشد و باید آن را در Host Shell در دسترس قرار دهید. اکنون باید فایل usr/local/bin/tootctl/ ایجاد کرده و آن را برای ویرایش باز کنید:

sudo nano /usr/local/bin/tootctl

سپس کد مورد نظر را در آن Paste کنید:

!/bin/bash
docker compose -f /opt/mastodon/docker-compose.yml run --rm shell tootctl "$@"

در آخر نیز از کلیدهای ctrl+x و سپس Y برای ذخیره استفاده کنید. توجه داشته باشید که فایل ها باید قابلیت اجرایی داشته باشند:

راه اندازی برنامه Mastodon

sudo chmod +x /usr/local/bin/tootctl

چند نکته دیگر در شروع استفاده از شبکه اجتماعی ماستودون

اکنون که نصب را با موفقیت انجام دادیم، زمان آن فرا رسیده است تا بتوانیم چند نکته دیگر در راستا استفاده بهینه و درست از این شکه اجتماعی هیجان انگیز یاد بگیریم. پس با توجه به کارایی این برنامه، قطعاً ارزش چند دقیقه مطالعه بیشتر را خواهد داشت:

1- نحوه ایجاد سرویس فایل در برنامه

برای سرویس فایل، شما می توانید از داکر Compose ها برای راه اندازی کانتینرها استفاده کنید ولی استفاده از یک فایل واحد Systemd آسانتر است. حالا بالای سرویس فایل ماستودون را برای ویرایش ایجاد کرده و باز کنید:

Sudonano / et c / sys md / sys m / ma s and don. service

سپس کد مورد نظر را در آن به صورت زیر درج کنید:

[Unit]
Description=Mastodon service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes

WorkingDirectory=/opt/mastodon
ExecStart=/usr/bin/docker compose -f /opt/mastodon/docker-compose.yml up -d
ExecStop=/usr/bin/docker compose -f /opt/mastodon/docker-compose.yml down
[Install]
WantedBy=multi-user.target

در آخر هم کلید های Ctrl+X و بعد از آن Y را برای ذخیره فایل بزنید. برای راه اندازی سرویس فایل Deamon سیستم را دوباره بارگیری کنید:

sudo systemctl daemon-reload

اکنون سرویس ماستودون را فعال کرده و راه اندازی کنید:

sudo systemctl enable --now mastodon.service

سپس وضعیت کانتینرهای داکر را بررسی کنید:

watch docker compose -f /opt/mastodon/docker-compose.yml ps

وقتی وضعیت کانتینرها به حالت Running (Healthy) تغییر پیدا کرد، با زدن کلید Ctrl+C از صفحه خارج شوید. سپس باید یکادمین ایجاد کنید و رمز عبور ارائه شده را یادداشت برداری کنید:

tootctl accounts create navjot --email [email protected] --confirmed --role Owner
OK
New password: 1338afbe1b4e06e823b6625da80cb537

برای بستن ثبت نام کاربران نیز از دستور زیر پیروی کنید و برای باز کردن دوباره ان دستور بعدی را به کار بگیرید:

tootctl settings registrations close
tootctl settings registrations open

2- راه اندازی بخش Search در برنامه

پیش از اینکه بتوانید شاخص های Elasticsearch را ایجاد و پر کنید باید یک Toot بسازید، به محض اینکه که Toot ساخته شد، دستور زیر صادر می شود:

tootctl search deploy

البته ممکن است با خطا زیر مواجه شوید:

/opt/mastodon/vendor/bundle/ruby/3.0.0/gems/ruby-progressbar-1.11.0/lib/ruby-progressbar/progress.rb:76:in `total=': You can't set the item's total value to less than the current progress. (ProgressBar::InvalidProgressError)
from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/ruby-progressbar-1.11.0/lib/ruby-progressbar/base.rb:178:in `block in update_progress'
from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/ruby-progressbar-1.11.0/lib/ruby-progressbar/output.rb:43:in `with_refresh'
from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/ruby-progressbar-1.11.0/lib/ruby-progressbar/base.rb:177:in `update_progress'
from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/ruby-progressbar-1.11.0/lib/ruby-progressbar/base.rb:101:in `total='
from /opt/mastodon/lib/mastodon/search_cli.rb:67:in `deploy'
from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/thor-1.2.1/lib/thor/invocation.rb:116:in `invoke'
from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/thor-1.2.1/lib/thor.rb:243:in `block in subcommand'
from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/thor-1.2.1/lib/thor/base.rb:485:in `start'
from /opt/mastodon/bin/tootctl:8:in `<main>'

اگر چنین اتفاقی افتاد و خطا را مشاهده کردید، کانتینر Sell وب سایت را وارد کنید:

docker exec -it mastodon-website-1 /bin/bash

اکنون می توانید دستور زیر را اجرا کنید:

sed -E '/progress.total = /d' -i lib/mastodon/search_cli.rb

برای خروج از کانتینر Shell هم در این مرحله Exit را درج کنید:

exit

دوباره باید دستور Deploy Elasticsearch را اجرا کنید. گاهی اوقات این دستور ممکن است در زمان دیگری کار کند. این مورد یک موضوع متداول (ongoing issue at Mastodon) در ماستودون می باشد و فعلاً تا به زمانی که این آموزش تحریر شده است، هیچ راه حل قطعی برای آن وجود ندارد:

tootctl search deploy

3- ایجاد سرویس های کمک رسان اضافی در برنامه

می توانید برای پاک کردن مدیا فایل های دانلود شده، سرویس دیگری ایجاد کنید. پس برای ویرایش یک سرویس پاک کننده مدیا ایجاد کرده و باز کنید:

Sudonano / Etc / sys Te md / Sys Te m / Ma s and Donmejiare also. service

سپس کد مورد نظر را لازم است تا به صورت دستورات آمده در ادامه مطالب آموزشی وارد کنید:

[Unit]
Description=Mastodon - media remove service
Wants=mastodon-media-remove.timer
[Service]
Type=oneshot
StandardError=null
StandardOutput=null
WorkingDirectory=/opt/mastodon
ExecStart=/usr/bin/docker compose -f /opt/mastodon/docker-compose.yml run --rm shell tootctl media remove

[Install]
WantedBy=multi-user.target

در نهایت از کلیدهای Ctrl+X و سپس Y برای ذخیره فایل استفاده کنید. حال اگر می خواهید یک سرویس Media Removal تنظیم کنید، می توانید ابتدا یک سرویس تایمر تنظیم کنید:

Sudonano / Etc / Sys Te md / Sys Te m / Ma s and Donmejiare also. Chimera

سپس کد مورد نظر را Paste کنید و سپس برای ذخیره فایل کلید های Ctrl+X و سپس Y را بزنید:

[Unit]
Description=Schedule a media remove every week
[Timer]
Persistent=true
OnCalendar=Sat *-*-* 00:00:00
Unit=mastodon-media-remove.service
[Install]
WantedBy=timers.target

اکنون باید سرویس تایمر پاسخ دهنده را تنظیم کنید:

Sudonano / et c / sys md / sys m / ma s and don'p rate w_or rds - even. Chimera

حال کد مربوطه را Paste کنید و کلیدهای Ctrl+X و Y را بزنید:

[Unit]
Description=Schedule a preview cards remove every week
[Timer]
Persistent=true
OnCalendar=Sat *-*-* 00:00:00
Unit=mastodon-preview_cards-remove.service
[Install]
WantedBy=timers.target

با دستور زیر System Deamon را دوباره بارگیری کنید:

sudo systemctl daemon-reload

اکنون تایمر را فعال کرده و راه اندازی کنید:

sudo systemctl enable --now mastodon-preview_cards-remove.timer
sudo systemctl enable --now mastodon-media-remove.timer

برای دیدن تنظیمات سرویس های تمام تایمرها را لیست کنید:

systemctl list-timers

4- نحوه دسترسی درست به ابزار

برای دسترسی به نمونه خود از URL https://mastodon.example.com دیدن کنید تا صفحه ای مانند صفحه زیر ببینید:

نحوه دسترسی درست به ابزار Mastodon

در تصویر بالا دو کاربر وجود دارد که یکی از آنها به عنوان مدیر تنظیم شده است، اما معمولاً به این صورت نمی باشد و حتی اگر فقط یک حساب اصلی ایجاد کنید در اولین اجرا و در صفحه اصلی نمایش داده نمی شود:

نحوه دسترسی درست به ابزار Mastodon

برای اینکه بتوانید به تنظیمات عمومی و خاص در این برنامه شبکه های اجتماعی دسترسی پیدا کنید از نوار سمت راست، بر روی گزینه Preference کلیک کنید. از آن قسمت و از منو سمت چپ، Administration را کلیک کرده و به پنل مدیریت دسترسی پیدا کنید:

نحوه دسترسی درست به ابزار Mastodon

اکنون در این مرحله باید بر روی گزینه Site Setting از نوار کناری سمت چپ کلیک کنید:

نحوه دسترسی درست به ابزار Mastodon

در این بخش نام کاربری و ایمیل خود را وارد کنید. همچنین می توانید اطلاعات مختلف دیگری از جمله توضیحات سرور، لوگو و قوانین سرور را برای سفارشی کردن نمونه خود را پر کنید. اکنون می توانیم با خیالی آسوده به مرحله های پایانی برویم و نصب  راه اندازی این شبکه اجتماعی را به نحو احسن به پایان برسانیم …

مرحله 9: نحوه نگهداری برنامه

برای بررسی عملکرد و ورود های انجام شده به نمونه می توانید به آدرس زیر بروید: https://mastodon.example.com/sidekiq/ در اینجا می توانید فهرستی از تنظیمات و مراحل عملکرد های مربوطه را بررسی کنید. همچنین می توانید فعالیت های رد شده را در بخش Dead و یا Retries و حتی میزان مصرف حافظه را مشاهده نمایید:

نحوه نگهداری از ابزار Mastodon

با آدرس زیر هم می توانید به میزان سلامت پایگاه داده نمونه خود پی ببرید:

https://mastodon.example.com/pghero/

نحوه نگهداری از ابزار Mastodon

با این اقدامات می توانید از پایگاه داده خود در این شبکه اجتماعی نگهداری کرده و یا پرس و جو های SQL را اجرا کنید، همچنین قادر خواهید بود تا شاخص های استفاده نشده را حذف کنید. برای فعال سازی Query Statistics می توانید از دکمه Enable در صفحه بالا کلیک کنید و اطلاعات زیر را دریافت کنید.

نحوه نگهداری از ابزار Mastodon

با اجرا دستور زیر می توانید به کاربر Root سویچ کنید:

sudo -i su

سپس به دایرکتوری opt/mastodon/database/postgresql/ سویچ کنید:

cd /opt/mastodon/database/postgresql

اکنون فایل Postgresql.conf را با دستور زیر باز کنید:

nano postgresql.conf

خط #shared_preload_libraries = ” # را پیدا کنید و با خط زیر جایگزین کنید: (البته برای اعمال تغییر باید راه اندازی مجدد کنید)

shared_preload_libraries = 'pg_stat_statements'

خط زیر را نیز به آخر فایل اضافه کنید و با کلیدهای Ctrl+X و سپس Y فایل را ذخیره کنید:

pg_stat_statements.track = all

 حالا می توانید کانتینر های ماستودون را دوباره راه اندازی کنید:

systemctl restart mastodon.service

اکنون با دستور Exit از Root Shell خارج شوید:

exit

اگر قصد بررسی صفحه سلامتی پایگاه داده را داشته باشید، می توانید Query های کند را می توانید ببینید:

نحوه نگهداری از ابزار Mastodon

نکته: شما می توانید URL های PgHero و Sidekiq را از منوی Preferences راه اندازی کنید. اگر به هر دلیلی سایت شما کار نکرد، می توانید ورودهایی (logs) که توسط داکر ایجاد شده بررسی کنید.

docker logs <container-name>

مرحله 10: نحوه بکاپ گیری از برنامه

ما در آموزش خود از یک ابزار شخص ثالث به نام Restic برای بکاپ ماستودون استفاده کرده ایم. اولین قدم برای تهیه بکاپ به وسیله Restic این است که همه فایل ها و دایرکتوری ها به لیست مخزن اضافه کنید. اکنون فایل لیست مخزن را با دستور زیر برای ویرایش، ایجاد کرده و باز کنید:

sudo nano /opt/mastodon/backup-files

سپس، موارد زیر را وارد کنید:

/etc/nginx
/etc/letsencrypt
/etc/systemd/system
/root
/opt/mastodon/database/pgbackups
/opt/mastodon/*.env
/opt/mastodon/docker-compose.yml
/opt/mastodon/branding
/opt/mastodon/database/redis
/opt/mastodon/web/system
/opt/mastodon/backup-files
/opt/mastodon/mastodon-backup

طبق روال قبل با استفاده از Ctrl+X و سپس کلید Y فایل را ذخیره کرده و حال برای نصب Restic از دستور زیر استفاده کنید:

sudo apt install restic

ابتدا باید در این قسمت از آموزش بکاپ گیری یک مخزن بکاپ و یک بکاپ اولیه ایجاد کنید که همان طور که مشاهده می کنید در اینجا ما در حال بکاپ گیری از اطلاعات خود در سرویس S3 هستیم:

restic -r s3:https://$SERVER:$PORT/mybucket init
restic -r s3:https://$SERVER:$PORT/mybucket backup $(cat /opt/mastodon/backup-files) --exclude /opt/mastodon/database/postgresql

اکنون یک تایمر سرویس بکاپ ایجاد کرده و آن را برای ویرایش مجدد در زمان های مختلف باز کنید:

Sudonano / et c / sys md / sys m / ma s and donba cp. Chimera

حال کد های زیر را در سرویس بکاپی که باز کرده اید وارد کنید:

[Unit]
Description=Schedule a mastodon backup every hour

[Timer]
Persistent=true
OnCalendar=*:00:00
Unit=mastodon-backup.service

[Install]
WantedBy=timers.target

اکنون با زدن کلیدهای Ctrl+X و سپس Y فایل را ذخیره کنید. سپس، یک سرویس فایل بکاپ از Mastodon ایجاد کرده و برای ویرایش باز کنید و در نهایت موارد درج شده در پایین را اضافه کنید:

Sudonano / et c / sys md / sys m / ma s and donba cp. Service
[Unit]
Description=Mastodon - backup service
Without this, they can run at the same time and race to docker compose,
double-creating networks and failing due to ambiguous network definition requiring `docker network prune` and restarting
After=mastodon.service
[Service]
Type=oneshot
StandardError=file:/var/log/mastodon-backup.err
StandardOutput=file:/var/log/mastodon-backup.log

WorkingDirectory=/opt/mastodon
ExecStart=/bin/bash /opt/mastodon/mastodon-backup

[Install]
WantedBy=multi-user.target

در آخر نیز، با کلیدهای Ctrl+X و سپس Y فایل را ذخیره کنید. در مرحله بعد فایل /opt/mastodon/mastodon-backup را برای ویرایش ایجاد کرده و باز کنید. توجه داشته باشید که این قسمت دستورات اصلی بکاپ را در بر می گیرد:

sudo nano /opt/mastodon/mastodon-backup

حال کد های زیر را وارد کنید:

#!/bin/bash
set -e
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
SERVER=
PORT=
RESTIC_PASSWORD_FILE=/root/restic-pasword
docker compose -f /opt/mastodon/docker-compose.yml run --rm postgresql sh -c "pg_dump -Fp mastodon | gzip > /backups/dump.sql.gz"
restic -r s3:https://$SERVER:$PORT/mybucket --cache-dir=/root backup $(cat /opt/mastodon/backup-files) --exclude /opt/mastodon/database/postgresql
restic -r s3:https://$SERVER:$PORT/mybucket --cache-dir=/root forget --prune --keep-hourly 24 --keep-daily 7 --keep-monthly 3

سپس با کلیدهای Ctrl+X و سپس Y فایل را ذخیره کنید. و پس از آن امتیازات اجرایی به اسکریپت بکاپ بدهید:

sudo chmod +x /opt/mastodon/mastodon-backup

deamon سرویس را مجددا بارگذاری کرده و بکاپ سرویس و تایمر را شروع کنید:

sudo systemctl daemon-reload
sudo systemctl enable --now mastodon-backup.service
sudo systemctl enable --now mastodon-backup.timer

دسترسی به بکاپ های ساعتی را تایید کنید و دستور زیر را به این منظور اجرا کنید:

restic -r s3:https://$SERVER:$PORT/mybucket snapshots
restic -r s3:https://$SERVER:$PORT/mybucket mount /mnt

مرحله 11: ارتقا برنامه ماستودون

ارتقا دادن این شبکه اجتماعی مراحل مختلفی دارد، اما اول از همه باید به دایرکتوری سویچ کنید:

cd /opt/mastodon

با کمک گرفتن از دستور زیر، جدیدترین تصاویر کانتینر را برای برنامه بکشید:

docker compose pull

اگر تمایل داشته باشید می توانید با دستور Docker-Compose.yml هر تغییری که می خواهید را انجام داده و سپس به مراحل بعدی بروید. اکنون تمام انتقالات پایگاه داه را انجام دهید:

docker compose run --rm shell bundle exec rake db:migrate

سپس کپی فایل های استاتیک خود را به شکل منظم آپدیت کنید:

docker compose run --rm shell bash -c "cp -r /opt/mastodon/public/* /static/"

با دستور زیر می توانید کانتینرهای ماستودون را مجدداً راه اندازی کنید:

sudo systemctl restart mastodon.service

نکته پایانی! دستور العمل هایی که در بالا آمده است، دستورالعمل های عمومی بروز رسانی هستند. بنابراین همیشه صفحه انتشار گیت هاب را بررسی کنید تا به دنبال عملیات و دستورات بروز رسانی خاص در بین نسخه ها باشید تا مطمئن شوید همه چیز به خوبی پیش می رود.

پیشنهاد کارشناس! چنانچه قصد دارید نحوه نصب این شبکه اجتماعی خاص و بی نظیر را به وسیله داکر در اوبونتو 22.04 تست کنید ولی دسترسی به سرور مجازی ندارید می توانید با خرید سرور مجازی ارزان آذرسیس با سیستم عامل اوبونتو و سایر توزیع ها امتحان کنید و از قابلیت های جذاب این شبکه اجتماعی لذت ببرید …

سخن آخر

ما در این مقاله سعی بر این داشتیم تا شما را با یک شبکه اجتماعی خاص و منحصر بفرد آشنا کنیم و در ادامه نحوه نصب و بهره برداری از آن را به طور مفصل در سیستم عامل اوبونتو بازگو کنیم. این شبکه اجتماعی یک نرم افزار کاربری جهت برقراری ارتباطات سطح پیشرفته در سیستم و سرور های شما عزیزان می باشد. برای اطلاعات بیشتر و یا طرح سوالات خودتان در این زمینه می توانید به بخش وبلاگ های منتشر شده در وب سایت آذرسیس مراجعه کرده و از قسمت کامنت ها جهت ارتباط با پشتیبانی کمک بگیرید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *