استفاده روزانه از انواع شبکه های اجتماعی امروزه در میان کاربران حرفه ای و مردم عادی محبوبیت زیادی پیدا کرده است، اما موضوع بحث روز ما در این مقاله از آذرسیس یکی از متفاوت ترین شبکه های اجتماعی است که Mastodon نامیده می شود. از این ابزار رایگان، غیر متمرکز و متن باز می توانید در محیط لینوکس بهره برده و حتی به عنوان جایگزینی برای توییتر (X) استفاده کنید! پیام ها، تصاویر و ویدیو را بدون محدودیت ارسال کرده و در هزاران سرور از این ابزار بی نظیر کار بکشید! یعنی کاربرانی که در یک سرور منحصر به فرد هستند می توانند به راحتی به کاربران یک شبکه دیگر متصل شوند و یکدیگر را دنبال کنند!
فهرست مطالب
پیش نیازهای نصب Mastodon در اوبونتو 22.04
- سیستم اوبونتو 22.04 با امکاناتی چون CPU حداقل 2 هسته ای و 2 گیگابایت حافظه. (البته طبق نیاز خود می توانید سرور را ارتقاء دهید)
- دسترسی به صورت کاربر non-root با امتیازات sudo
- یک نام دامنه کامل (FQDN) که به سرور شما اشاره کند.
- یک سرویس پست الکترونیک شخص ثالث مانند: Amazon SES, Sendgrid, Sparkpost. در اینجا ما از Amazon SES استفاده خواهیم کرد.
- از بروز بودن سیستم عامل خود با دستور زیر اطمینان حاصل کنید:
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
مرحله 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
مرحله 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
برای برقراری و تنظیمات لازم جهت فایل های محیطی، امکان ویرایش فایل 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
مرحله 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
مرحله 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 برای ذخیره استفاده کنید. توجه داشته باشید که فایل ها باید قابلیت اجرایی داشته باشند:
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 دیدن کنید تا صفحه ای مانند صفحه زیر ببینید:
در تصویر بالا دو کاربر وجود دارد که یکی از آنها به عنوان مدیر تنظیم شده است، اما معمولاً به این صورت نمی باشد و حتی اگر فقط یک حساب اصلی ایجاد کنید در اولین اجرا و در صفحه اصلی نمایش داده نمی شود:
برای اینکه بتوانید به تنظیمات عمومی و خاص در این برنامه شبکه های اجتماعی دسترسی پیدا کنید از نوار سمت راست، بر روی گزینه Preference کلیک کنید. از آن قسمت و از منو سمت چپ، Administration را کلیک کرده و به پنل مدیریت دسترسی پیدا کنید:
اکنون در این مرحله باید بر روی گزینه Site Setting از نوار کناری سمت چپ کلیک کنید:
در این بخش نام کاربری و ایمیل خود را وارد کنید. همچنین می توانید اطلاعات مختلف دیگری از جمله توضیحات سرور، لوگو و قوانین سرور را برای سفارشی کردن نمونه خود را پر کنید. اکنون می توانیم با خیالی آسوده به مرحله های پایانی برویم و نصب راه اندازی این شبکه اجتماعی را به نحو احسن به پایان برسانیم …
مرحله 9: نحوه نگهداری برنامه
برای بررسی عملکرد و ورود های انجام شده به نمونه می توانید به آدرس زیر بروید: https://mastodon.example.com/sidekiq/ در اینجا می توانید فهرستی از تنظیمات و مراحل عملکرد های مربوطه را بررسی کنید. همچنین می توانید فعالیت های رد شده را در بخش Dead و یا Retries و حتی میزان مصرف حافظه را مشاهده نمایید:
با آدرس زیر هم می توانید به میزان سلامت پایگاه داده نمونه خود پی ببرید:
https://mastodon.example.com/pghero/
با این اقدامات می توانید از پایگاه داده خود در این شبکه اجتماعی نگهداری کرده و یا پرس و جو های SQL را اجرا کنید، همچنین قادر خواهید بود تا شاخص های استفاده نشده را حذف کنید. برای فعال سازی Query Statistics می توانید از دکمه Enable در صفحه بالا کلیک کنید و اطلاعات زیر را دریافت کنید.
با اجرا دستور زیر می توانید به کاربر 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 های کند را می توانید ببینید:
نکته: شما می توانید 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 تست کنید ولی دسترسی به سرور مجازی ندارید می توانید با خرید سرور مجازی ارزان آذرسیس با سیستم عامل اوبونتو و سایر توزیع ها امتحان کنید و از قابلیت های جذاب این شبکه اجتماعی لذت ببرید …
سخن آخر
ما در این مقاله سعی بر این داشتیم تا شما را با یک شبکه اجتماعی خاص و منحصر بفرد آشنا کنیم و در ادامه نحوه نصب و بهره برداری از آن را به طور مفصل در سیستم عامل اوبونتو بازگو کنیم. این شبکه اجتماعی یک نرم افزار کاربری جهت برقراری ارتباطات سطح پیشرفته در سیستم و سرور های شما عزیزان می باشد. برای اطلاعات بیشتر و یا طرح سوالات خودتان در این زمینه می توانید به بخش وبلاگ های منتشر شده در وب سایت آذرسیس مراجعه کرده و از قسمت کامنت ها جهت ارتباط با پشتیبانی کمک بگیرید.