Ինչպես տեղադրել Mastodon սոցիալական ցանցը Debian 12-ում
Այս ձեռնարկը գոյություն ունի ՕՀ-ի այս տարբերակների համար
- Debian 12 (Գիրքորդ)
- Debian 11 (Bullseye)
- Debian 10 (Buster)
Այս էջում
- Նախադրյալներ
- Քայլ 1 - Կարգավորել Firewall-ը
- Քայլ 2 - Տեղադրեք Docker-ը և Docker Compose-ը
- Քայլ 3 - Նախապատրաստում տեղադրմանը
Քայլ 4 - Տեղադրեք Mastodon-ը
- Ստեղծեք դիրեկտորիաներ և սահմանեք սեփականության իրավունքներ
- Ստեղծեք միջավայր և դոկերի ֆայլեր
- Ստեղծեք հավելվածի գաղտնիքները
- Mastodon շրջակա միջավայրի ֆայլեր
- Պատրաստել Mastodon
Քայլ 8 - Սկսեք Mastodon-ը
Mastodon-ը անվճար, ապակենտրոնացված և բաց կոդով սոցիալական ցանց է: Այն ստեղծվել է որպես Twitter-ի այլընտրանք։ Ճիշտ այնպես, ինչպես Twitter-ի մարդիկ կարող են հետևել միմյանց և տեղադրել հաղորդագրություններ, պատկերներ և տեսանյութեր: Բայց ի տարբերություն Twitter-ի, բովանդակության համար կենտրոնական խանութ կամ լիազորություն չկա:
Փոխարենը, Mastodon-ը գործում է հազարավոր տարբեր սերվերների վրա, որոնցից յուրաքանչյուրը ղեկավարվում է համայնքի տարբեր անդամների կողմից: Մեկ սերվերի վրա գրանցված օգտատերերը կարող են հեշտությամբ միանալ մյուս ցանցի օգտատերերին և հետևել միմյանց տարբեր ատյաններում:
Յուրաքանչյուրը կարող է տեղադրել Mastodon սերվերի իր օրինակը: Այս ձեռնարկը կսովորեցնի ձեզ, թե ինչպես կարգավորել Mastodon-ի ձեր օրինակը Debian 12 սերվերի վրա՝ օգտագործելով Docker-ը: Docker-ը հեշտացնում է Mastodon-ի տեղադրումը` պարունակելով բեռնարկղերում պահանջվող բոլոր փաթեթներն ու ծառայությունները:
Նախադրյալներ
Debian 12-ով աշխատող սերվեր՝ նվազագույնը 2 CPU միջուկով և 2 ԳԲ հիշողությամբ: Դուք պետք է թարմացնեք սերվերը ըստ պահանջների:
Ոչ արմատային օգտատեր՝ sudo արտոնություններով:
Լիովին որակավորված տիրույթի անուն (FQDN), որը ցույց է տալիս ձեր սերվերը: Մեր նպատակների համար մենք կօգտագործենք mastodon.example.com
որպես տիրույթի անուն:
Mastodon-ը էլեկտրոնային փոստով ծանուցումներ է ուղարկում օգտատերերին: Մենք խորհուրդ ենք տալիս օգտագործել երրորդ կողմի գործարքային փոստային ծառայություն, ինչպիսին է Mailgun, SendGrid, Amazon SES կամ Sparkpost: Ուղեցույցի հրահանգները կօգտագործվեն Amazon SES-ի միջոցով:
Համոզվեք, որ ամեն ինչ թարմացվում է:
$ sudo apt update
Տեղադրեք հիմնական կոմունալ փաթեթներ: Դրանցից մի քանիսը կարող են արդեն տեղադրված լինել:
$ sudo apt install curl wget nano software-properties-common dirmngr apt-transport-https ca-certificates lsb-release debian-archive-keyring gnupg2 ufw unzip -y
Քայլ 1 - Կարգավորել Firewall-ը
Առաջին քայլը firewall-ի կազմաձևումն է: Debian-ը լռելյայն գալիս է ufw-ով (Uncomplicated Firewall):
Ստուգեք, արդյոք firewall-ը աշխատում է:
$ sudo ufw status
Դուք պետք է ստանաք հետևյալ արդյունքը.
Status: inactive
Թույլատրել SSH միացքը, որպեսզի այն միացնելուց հետո firewall-ը չխախտի ընթացիկ կապը:
$ sudo ufw allow OpenSSH
Թույլատրել նաև HTTP և HTTPS պորտերը:
$ sudo ufw allow http
$ sudo ufw allow https
Միացնել Firewall-ը
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Կրկին ստուգեք firewall-ի կարգավիճակը:
$ sudo ufw status
Դուք պետք է տեսնեք նմանատիպ արդյունք:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
Քայլ 2 - Տեղադրեք Docker-ը և Docker Compose-ը
Debian 12-ը առաքվում է Docker-ի ավելի հին տարբերակով: Վերջին տարբերակը տեղադրելու համար նախ ներմուծեք Docker GPG ստեղնը:
$ sudo install -m 0755 -d /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ sudo chmod a+r /etc/apt/keyrings/docker.gpg
Ստեղծեք Docker պահեստային ֆայլը:
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Թարմացրեք համակարգի պահեստների ցանկը:
$ sudo apt update
Տեղադրեք Docker-ի վերջին տարբերակը:
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Ստուգեք, որ այն աշխատում է:
$ sudo systemctl status docker
? docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; preset: enabled)
Active: active (running) since Mon 2024-01-01 09:00:14 UTC; 17s ago
TriggeredBy: ? docker.socket
Docs: https://docs.docker.com
Main PID: 1839 (dockerd)
Tasks: 9
Memory: 27.6M
CPU: 598ms
CGroup: /system.slice/docker.service
??1839 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Լռելյայնորեն, Docker-ը պահանջում է արմատային արտոնություններ: Եթե ցանկանում եք խուսափել sudo
-ից ամեն անգամ, երբ գործարկում եք docker
հրամանը, ավելացրեք ձեր օգտվողի անունը docker
խմբին:
$ sudo usermod -aG docker $(whoami)
Դուք պետք է դուրս գաք սերվերից և նորից մուտք գործեք որպես նույն օգտվող՝ այս փոփոխությունը միացնելու համար կամ օգտագործեք հետևյալ հրամանը։
$ su - ${USER}
Հաստատեք, որ ձեր օգտվողն ավելացված է Docker խմբին:
$ groups
navjot sudo users docker
Քայլ 3 - Նախապատրաստում տեղադրմանը
Elasticsearch-ի համար mmap-ների հաշվարկների լռելյայն սահմանաչափը շատ ցածր է: Գործարկեք հետևյալ հրամանը՝ լռելյայն արժեքը ստուգելու համար:
$ sudo sysctl vm.max_map_count
Դուք կստանաք հետևյալ արդյունքը.
vm.max_map_count = 65530
Բարձրացրեք արժեքը՝ օգտագործելով հետևյալ հրամանները.
$ echo "vm.max_map_count=262144" | sudo tee /etc/sysctl.d/90-max_map_count.conf
vm.max_map_count=262144
$ sudo sysctl --load /etc/sysctl.d/90-max_map_count.conf
vm.max_map_count=262144
Քայլ 4 - Տեղադրեք Mastodon-ը
Ստեղծեք դիրեկտորիաներ և սահմանեք սեփականության իրավունքներ
Ստեղծեք դիրեկտորիաներ Mastodon-ի և հարակից ծառայությունների համար:
$ 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-ի, վեբ-ի և պահուստային գրացուցակների համար:
$ sudo chown 991:991 /opt/mastodon/web/{public,system}
$ sudo chown 1000 /opt/mastodon/database/elasticsearch
$ sudo chown 70:70 /opt/mastodon/database/pgbackups
Անցեք Mastodon գրացուցակին:
$ cd /opt/mastodon
Ստեղծեք միջավայր և դոկերի ֆայլեր
Ստեղծեք միջավայրի ֆայլեր հավելվածի և տվյալների բազայի համար:
$ sudo touch application.env database.env
Ստեղծեք և բացեք Docker compose ֆայլը խմբագրման համար:
$ sudo nano docker-compose.yml
Դրա մեջ տեղադրեք հետևյալ կոդը.
services:
postgresql:
image: postgres:16-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.16
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.2.3
env_file:
- application.env
- database.env
command: bash -c "rm -f /mastodon/tmp/pids/server.pid; 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.2.3
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.2.3
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.2.3
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-ի վերջին հասանելի տարբերակը v4.2.3-ն է: Ստուգեք Mastodon GitHub Releases էջը և համապատասխան կերպով կարգավորեք տարբերակը Docker compose ֆայլում: Մենք նաև օգտագործում ենք PostgreSQL-ի և Redis-ի վերջին տարբերակները: Դուք կարող եք դրանք հարմարեցնել ձեր պահանջներին համապատասխան: Այս պահին մենք օգտագործում ենք Elasticsearch 7.17.16:
Ստեղծեք հավելվածի գաղտնիքները
Հաջորդ քայլը հավելվածի գաղտնի արժեքների ստեղծումն է:
Ստեղծեք SECRET_KEY_BASE
և OTP_SECRET
արժեքները՝ երկու անգամ գործարկելով հետևյալ հրամանը: Առաջին անգամը որոշ ժամանակ կպահանջի, քանի որ այն կքաշի պատկերները:
$ docker compose run --rm shell bundle exec rake secret
349623c049e3b856f6848638146e459857862b908ed387bbef372a30d9bd7c604fc4de5338addc86bd369a99d38ef59bacfa28e02a1750f7094ea6ede05457b8
Նույնի համար կարող եք նաև օգտագործել openssl
կոմունալը:
$ openssl rand -hex 64
ae01cf7d4dfae0182461a1345f1f2bf159658a27339ffafe7d356bef9ee8d4fa015ab2e72a608f236bd8e3f9b2af2dcb1d55ee5c8e43646959112c7da5582f4b
Ստեղծեք VAPID_PRIVATE_KEY
և VAPID_PUBLIC_KEY
արժեքները՝ օգտագործելով հետևյալ հրամանը:
$ docker compose run --rm shell bundle exec rake mastodon:webpush:generate_vapid_key
Դուք կստանաք նմանատիպ արդյունք:
VAPID_PRIVATE_KEY=u2qsCs5JdmdmMLnUuU0sgmFGvZedteJz-lFB_xF4_ac=
VAPID_PUBLIC_KEY=BJXjE2hIXvFpo6dnHqyf1i-2PcP-cBoL95UCmhhxwlAgtFw_vnrYp4GBneR7_cmI9LZUYjHFh-TBAPSb9WTqH9A=
PostgreSQL և Elasticsearch գաղտնաբառեր ստեղծելու համար օգտագործեք openssl
օգտակար ծրագիրը:
$ openssl rand -hex 15
dd0bd7a95960623ed8e084a1fb7d5c
$ openssl rand -hex 15
0fb52834c991b5e296c647166185bc
Mastodon շրջակա միջավայրի ֆայլեր
Բացեք application.env
ֆայլը խմբագրման համար:
$ sudo nano application.env
Դրա մեջ տեղադրեք հետևյալ տողերը.
# 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=AKIA3FIG4NVFB343PZEI
SMTP_PASSWORD=AZX01WiA6JGbeZ2pwVXnyC9DhEa2nKcmXSu/zbLp
[email
# secrets
SECRET_KEY_BASE=349623c049e3b856f6848638146e459857862b908ed387bbef372a30d9bd7c604fc4de5338addc86bd369a99d38ef59bacfa28e02a1750f7094ea6ede05457b8
OTP_SECRET=ae01cf7d4dfae0182461a1345f1f2bf159658a27339ffafe7d356bef9ee8d4fa015ab2e72a608f236bd8e3f9b2af2dcb1d55ee5c8e43646959112c7da5582f4b
# Changing VAPID keys will break push notifications
VAPID_PRIVATE_KEY=oNe_4BEL7Tpc3iV8eMtLegfLwrzA7ifitGJ2YOg3dUM=
VAPID_PUBLIC_KEY=BKBgmB90vIrJg6Ifq3cCHixalyPghJDkui9vm1wscxvAfNNoAQL0KinoxRTLDp0UFlGK_ahUG2n4W2n4x9AUAWM=
# 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, երբ հուշում է:
Մենք միացրել ենք Amazon SES փոստային ծառայությունը: Եթե դրա կարիքը չունեք, կարող եք ջնջել բաժինը։ Լռելյայնորեն, Mastodon-ը պահպանում է IP հասցեն 1 տարի, բայց մենք այն փոխել ենք մինչև 30 օր (2592000 վայրկյան): Դուք կարող եք փոխել այն ըստ ձեր պահանջի: Համոզվեք, որ այն պահեք ավելի քան 2 օր, հակառակ դեպքում, ձեզ հարկավոր է մի փոքր ավելի մանրացնել, ինչը դուրս է մեր ձեռնարկի շրջանակներից:
Բացեք database.env
ֆայլը խմբագրման համար:
$ sudo nano database.env
Դրա մեջ տեղադրեք հետևյալ տողերը.
# postgresql configuration
POSTGRES_USER=mastodon
POSTGRES_DB=mastodon
POSTGRES_PASSWORD=0fb52834c991b5e296c647166185bc
PGPASSWORD=0fb52834c991b5e296c647166185bc
PGPORT=5432
PGHOST=postgresql
PGUSER=mastodon
# pgbouncer configuration
#POOL_MODE=transaction
#ADMIN_USERS=postgres,mastodon
#DATABASE_URL="postgres://mastodon:0fb52834c991b5e296c647166185bc@postgresql:5432/mastodon"
# elasticsearch
ELASTIC_PASSWORD=dd0bd7a95960623ed8e084a1fb7d5c
# mastodon database configuration
#DB_HOST=pgbouncer
DB_HOST=postgresql
DB_USER=mastodon
DB_NAME=mastodon
DB_PASS=0fb52834c991b5e296c647166185bc
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=dd0bd7a95960623ed8e084a1fb7d5c
Պահպանեք ֆայլը՝ սեղմելով Ctrl + X և մուտքագրելով Y, երբ հուշում է:
Պատրաստել Mastodon
Ստացեք ստատիկ ֆայլերը Nginx-ի կողմից սպասարկվելու համար: Այս քայլը որոշ ժամանակ կխլի, քանի որ Docker-ն առաջին անգամ կհանի բոլոր պատկերները:
$ 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
Սպասեք աշխատող (առողջ)
, այնուհետև սեղմեք Ctrl + C
և սկզբնավորեք տվյալների բազան՝ օգտագործելով հետևյալ հրամանը:
$ docker compose run --rm shell bundle exec rake db:setup
Եթե արդեն գոյություն ունեցող mastodon
տվյալների բազայի վերաբերյալ սխալ եք ստանում, գործարկեք հետևյալ հրամանը.
$ docker compose run --rm shell bundle exec rake db:migrate
Քայլ 5 - Տեղադրեք Nginx
Debian 12-ը առաքվում է Nginx-ի ավելի հին տարբերակով: Վերջին տարբերակը տեղադրելու համար անհրաժեշտ է ներբեռնել պաշտոնական Nginx պահոցը:
Ներմուծեք Nginx-ի ստորագրման բանալին:
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Ավելացրեք պահեստը Nginx-ի հիմնական տարբերակի համար:
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
Թարմացրեք համակարգի պահեստները:
$ sudo apt update
Տեղադրեք Nginx-ը:
$ sudo apt install nginx
Ստուգեք տեղադրումը: Debian համակարգերում ձեզ անհրաժեշտ է sudo
՝ հետևյալ հրամանը գործարկելու համար։
$ sudo nginx -v
nginx version: nginx/1.25.3
Գործարկեք Nginx սերվերը:
$ sudo systemctl start nginx
Ստուգեք սերվերի կարգավիճակը:
$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Mon 2024-01-01 10:17:38 UTC; 4s ago
Docs: https://nginx.org/en/docs/
Process: 8972 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 8973 (nginx)
Tasks: 3 (limit: 4637)
Memory: 2.9M
CPU: 17ms
CGroup: /system.slice/nginx.service
??8973 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
??8974 "nginx: worker process"
??8975 "nginx: worker process"
Jan 01 10:17:38 mastodon systemd[1]: Starting nginx.service - nginx - high performance web server...
Jan 01 10:17:38 mastodon systemd[1]: Started nginx.service - nginx - high performance web server.
Քայլ 6 - Տեղադրեք SSL-ը
SSL վկայագիր ստեղծելու համար մենք պետք է տեղադրենք Certbot-ը: Կարող եք կա՛մ տեղադրել Certbot-ը՝ օգտագործելով Debian-ի պահոցը, կա՛մ ձեռք բերել վերջին տարբերակը՝ օգտագործելով Snapd գործիքը: Մենք կօգտագործենք Snapd տարբերակը:
Debian 12-ը չի գալիս Snapd-ի տեղադրմամբ: Տեղադրեք Snapd փաթեթը:
$ sudo apt install snapd
Գործարկեք հետևյալ հրամանները՝ համոզվելու համար, որ Snapd-ի ձեր տարբերակը արդիական է: Համոզվեք, որ Snapd-ի ձեր տարբերակը արդիական է:
$ sudo snap install core
$ sudo snap refresh core
Տեղադրեք Certbot-ը:
$ sudo snap install --classic certbot
Օգտագործեք հետևյալ հրամանը՝ համոզվելու համար, որ Certbot հրամանն աշխատում է՝ ստեղծելով խորհրդանշական հղում դեպի /usr/bin
գրացուցակը:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Ստուգեք տեղադրումը:
$ certbot --version
certbot 2.8.0
Գործարկեք հետևյալ հրամանը՝ SSL վկայական ստեղծելու համար:
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email -d mastodon.example.com
Վերոնշյալ հրամանը վկայական կներբեռնի ձեր սերվերի /etc/letsencrypt/live/mastodon.example.com
գրացուցակում:
Ստեղծեք Diffie-Hellman խումբ վկայագիր:
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Ստուգեք Certbot-ի նորացման ժամանակացույցի ծառայությունը:
$ systemctl list-timers
Դուք կգտնեք snap.certbot.renew.service
որպես սպասարկվող ծառայություններից մեկը:
NEXT LEFT LAST PASSED UNIT ACTIVATES
-----------------------------------------------------------------------------------------------------------------------------------------
Mon 2024-01-01 20:03:52 UTC 9h left Mon 2023-12-11 21:56:24 UTC 2 weeks 6 days ago apt-daily.timer apt-daily.service
Mon 2024-01-01 21:06:00 UTC 10h left - - snap.certbot.renew.timersnap.certbot.renew.service
Tue 2024-01-02 00:00:00 UTC 13h left - - dpkg-db-backup.timer dpkg-db-backup.service
Կատարեք գործընթացի չոր գործարկում՝ ստուգելու, թե արդյոք SSL-ի նորացումը լավ է աշխատում:
$ sudo certbot renew --dry-run
Եթե սխալներ չեք տեսնում, ամեն ինչ պատրաստ է: Ձեր վկայականը ինքնաբերաբար կերկարաձգվի:
Քայլ 7 - Կարգավորեք Nginx-ը
Բացեք ֆայլը /etc/nginx/nginx.conf
խմբագրման համար:
$ sudo nano /etc/nginx/nginx.conf
Ավելացրեք հետևյալ տողը include /etc/nginx/conf.d/*.conf;
տողից առաջ:
server_names_hash_bucket_size 64;
Պահպանեք ֆայլը՝ սեղմելով Ctrl + X և մուտքագրելով Y, երբ պահանջվում է:
Ստեղծեք և բացեք ֆայլը /etc/nginx/conf.d/mastodon.conf
խմբագրման համար:
$ sudo nano /etc/nginx/conf.d/mastodon.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;
server_name mastodon.example.com;
access_log /var/log/nginx/mastodon.access.log;
error_log /var/log/nginx/mastodon.error.log;
http2 on; # Enable HTTP/2 - works only on Nginx 1.25.1+
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, երբ հուշվի:
Ստուգեք Nginx կազմաձևման ֆայլի շարահյուսությունը:
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Վերագործարկեք Nginx սերվերը:
$ sudo systemctl restart nginx
Քայլ 8 - Սկսեք Mastodon-ը
Tootctl CLI գործիք
Tootctl CLI գործիքը օգտագործվում է Mastodon-ում ադմինիստրատիվ առաջադրանքներ կատարելու համար: Մենք պետք է այն հասանելի դարձնենք հյուրընկալող վահանակի վրա:
Ստեղծեք /usr/local/bin/tootctl
ֆայլը և բացեք այն խմբագրման համար:
$ sudo nano /usr/local/bin/tootctl
Դրա մեջ տեղադրեք հետևյալ կոդը.
#!/bin/bash
docker compose -f /opt/mastodon/docker-compose.yml run --rm shell tootctl "$@"
Պահպանեք ֆայլը՝ սեղմելով Ctrl + X և մուտքագրելով Y, երբ պահանջվում է:
Տվեք ֆայլի գործարկվող թույլտվություն:
$ sudo chmod +x /usr/local/bin/tootctl
Mastodon ծառայության ֆայլը
Դուք կարող եք գործարկել Mastodon բեռնարկղերը՝ օգտագործելով Docker compose հրամանը, բայց դա ավելի հեշտ է անել համակարգային միավորի ֆայլի միջոցով:
Ստեղծեք և բացեք Mastodon ծառայության ֆայլը խմբագրման համար:
$ sudo nano /etc/systemd/system/mastodon.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, երբ պահանջվում է:
Վերբեռնեք համակարգի դեյմոնը՝ ծառայության ֆայլը գործարկելու համար:
$ sudo systemctl daemon-reload
Միացնել և գործարկել Mastodon ծառայությունը:
$ sudo systemctl enable --now mastodon.service
Ստուգեք Docker բեռնարկղերի կարգավիճակը:
$ watch docker compose -f /opt/mastodon/docker-compose.yml ps
Երբ բեռնարկղերի կարգավիճակը փոխվի աշխատող (առողջ)
, դուրս եկեք էկրանից` սեղմելով Ctrl + C:
Ստեղծեք Mastodon-ի ադմինիստրատորի օգտատերը և նշեք տրամադրված գաղտնաբառը:
$ tootctl accounts create navjot --email [email --confirmed --role Owner
OK
New password: 1338afbe1b4e06e823b6625da80cb537
Եթե ցանկանում եք փակել օգտվողների գրանցումները, օգտագործեք հետևյալ հրամանը.
$ tootctl settings registrations close
Գրանցումները նորից բացելու համար թողարկեք հետևյալ հրամանը.
$ tootctl settings registrations open
Նախաձեռնել որոնումը
Նախքան Elasticsearch-ի ինդեքսները ստեղծելու և համալրելու համար ձեզ հարկավոր է մի բան անել: Երբ դուք կատարել եք 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>'
Այս դեպքում մուտքագրեք կայքի կոնտեյների կեղևը:
$ docker exec -it mastodon-website-1 /bin/bash
Գործարկեք հետևյալ հրամանը.
$ sed -E '/progress.total = /d' -i lib/mastodon/search_cli.rb
Դուրս եկեք տարայի պատյանից:
$ exit
Կրկին գործարկեք Elasticsearch deploy հրամանը: Երբեմն հրամանը կարող է աշխատել ավելի ուշ: Սա շարունակական խնդիր է Mastodon-ում, հետևաբար այս պահին հստակ լուծում չկա:
$ tootctl search deploy
Done! 1/?? |-=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=| ETA: ??:??:?? (0 docs/s)
Indexed 1 records, de-indexed 0
Լրացուցիչ օգնական ծառայություններ
Եկեք ստեղծենք մեկ այլ ծառայություն՝ ներբեռնված մեդիա ֆայլերը հեռացնելու համար:
Ստեղծեք և բացեք Mastodon լրատվամիջոցների հեռացման ծառայությունը խմբագրման համար:
$ sudo nano /etc/systemd/system/mastodon-media-remove.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, երբ պահանջվում է:
Եթե ցանկանում եք պլանավորել լրատվամիջոցների հեռացումը, կարող եք կարգավորել դրա համար ժամաչափի ծառայություն:
$ sudo nano /etc/systemd/system/mastodon-media-remove.timer
Տեղադրեք հետևյալ կոդը.
[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
Պահպանեք ֆայլը՝ սեղմելով Ctrl + X և մուտքագրելով Y, երբ պահանջվում է:
Դուք կարող եք ստեղծել մեկ այլ ծառայություն՝ OpenGraph պիտակների միջոցով ստեղծված Rich նախադիտման քարտերը հեռացնելու համար:
$ sudo nano /etc/systemd/system/mastodon-preview_cards-remove.service
Տեղադրեք հետևյալ կոդը.
[Unit]
Description=Mastodon - preview cards remove service
Wants=mastodon-preview_cards-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 preview_cards remove
[Install]
WantedBy=multi-user.target
Պահպանեք ֆայլը՝ սեղմելով Ctrl + X և մուտքագրելով Y, երբ պահանջվում է:
Սահմանեք համապատասխան ժամաչափի ծառայությունը:
$ sudo nano /etc/systemd/system/mastodon-preview_cards-remove.timer
Տեղադրեք հետևյալ կոդը.
[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
Պահպանեք ֆայլը՝ սեղմելով Ctrl + X և մուտքագրելով Y, երբ պահանջվում է:
Վերբեռնեք համակարգի դեյմոնը:
$ sudo systemctl daemon-reload
Միացնել և գործարկել ժամանակաչափերը:
$ sudo systemctl enable --now mastodon-preview_cards-remove.timer
$ sudo systemctl enable --now mastodon-media-remove.timer
Նշեք բոլոր ժամանակաչափերը՝ Mastodon-ի ծառայությունների ժամանակացույցը ստուգելու համար:
$ systemctl list-timers
.....
Sat 2024-01-06 00:00:00 UTC 4 days left - - mastodon-media-remove.timer mastodon-media-remove.service
Sat 2024-01-06 00:00:00 UTC 4 days left - - mastodon-preview_cards-remove.timer mastodon-preview_cards-remove.service
Մուտք գործեք Mastodon
Ձեր օրինակին մուտք գործելու համար այցելեք https://mastodon.example.com
URL-ը և կտեսնեք նմանատիպ էջ:
Վերոնշյալ սքրինշոթում դուք կարող եք տեսնել, որ 0 օգտվող կա: Դա պայմանավորված է նրանով, որ մենք դեռ մուտք չենք գործել: Նույնիսկ եթե դուք ստեղծեք ադմինիստրատորի հաշիվ, այն չի ցուցադրվում գլխավոր էջում առաջին գործարկման ժամանակ: Դա անելու համար մուտք գործեք ձեր օրինակ և կտեղափոխվեք հետևյալ էջը։
Կտտացրեք Նախապատվություններ տարբերակը աջ կողագոտուց՝ կարգավորումներին մուտք գործելու համար: Այնտեղից ձախ մենյուից սեղմեք Կառավարում տարբերակը՝ Mastodon-ի կառավարման վահանակ մուտք գործելու համար:
Սեղմեք Սերվերի կարգավորումներ տարբերակը ձախ կողագոտում:
Այստեղ լրացրեք ձեր կոնտակտային օգտանունը և բիզնեսի էլ. փոստը, որոնք այժմ կարտացոլվեն ձեր սերվերի գլխավոր էջում: Նաև լրացրեք տարբեր այլ տեղեկություններ, ներառյալ սերվերի նկարագրությունը, պատկերանշանը և սերվերի կանոնները՝ ձեր Mastodon օրինակը հարմարեցնելու համար:
Քայլ 9 - Mastodon Maintenance
Ձեր Mastodon օրինակի կատարումն ու գրանցամատյանները դիտելու համար այցելեք https://mastodon.example.com/sidekiq/
:
Այստեղ դուք կարող եք դիտել ձեր Mastodon օրինակի հետ կապված տարբեր գործընթացների և պլանավորված առաջադրանքների ցանկը: Դուք կարող եք նաև ստուգել անհաջող առաջադրանքների առկայությունը Մեռած կամ Նորից փորձեր բաժնում: Այն նաև կպատմի ձեր օրինակի հիշողության օգտագործման մասին:
Դուք կարող եք ստուգել ձեր օրինակի տվյալների բազայի առողջությունը https://mastodon.example.com/pghero/
-ից:
Դուք կարող եք կատարել ձեր տվյալների բազայի սպասարկում, գործարկել SQL հարցումներ և հեռացնել չօգտագործված ինդեքսները: Հարցման վիճակագրությունը միացնելու համար սեղմեք Միացնել կոճակը վերը նշված էջում և կստանաք հետևյալ տեղեկատվությունը:
Անցեք արմատային օգտվողին:
$ 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'
Ֆայլի վերջում ավելացրեք հետևյալ տողը.
pg_stat_statements.track = all
Պահպանեք ֆայլը՝ սեղմելով Ctrl + X և մուտքագրելով Y, երբ պահանջվում է:
Վերագործարկեք Mastodon բեռնարկղերը:
$ systemctl restart mastodon.service
Դուրս եկեք արմատային կեղևից:
$ exit
Եթե ստուգեք տվյալների բազայի առողջության էջը, կարող եք տեսնել, թե արդյոք այժմ դանդաղ հարցումներ կան:
Նշում. Դուք կարող եք նաև գործարկել PgHero և Sidekiq URL-ները Նախապատվություններ ցանկից:
Եթե ձեր կայքը ինչ-ինչ պատճառներով չի բեռնվում, կարող եք ստուգել Docker-ի կողմից ստեղծված տեղեկամատյանները:
$ docker logs <container-name>
Քայլ 10 - Կրկնօրինակեք Mastodon
Մենք կօգտագործենք 3-րդ կողմի գործիք, որը կոչվում է Restic՝ Mastodon-ը կրկնօրինակելու համար: 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
Ստեղծեք Mastodon պահեստային ծառայության ժամանակաչափ և բացեք այն խմբագրման համար:
$ sudo nano /etc/systemd/system/mastodon-backup.timer
Դրա մեջ տեղադրեք հետևյալ կոդը.
[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 պահեստային ծառայության ֆայլ և բացեք այն խմբագրման համար:
$ sudo nano /etc/systemd/system/mastodon-backup.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
Վերբեռնեք սպասարկման դեյմոնը և գործարկեք պահեստային ծառայությունը և ժամաչափը:
$ 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 - Թարմացրեք Mastodon-ը
Mastodon-ի արդիականացումը պահանջում է մի քանի քայլ: Նախ, անցեք գրացուցակին:
$ cd /opt/mastodon
Քաշեք 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/"
Վերագործարկեք Mastodon բեռնարկղերը:
$ sudo systemctl restart mastodon.service
Վերոնշյալ հրահանգները թարմացման ընդհանուր հրահանգներ են: Միշտ ստուգեք Mastodon-ի GitHub-ի թողարկումների էջը՝ տարբերակների միջև թարմացման որևէ հատուկ առաջադրանք և հրամաններ փնտրելու համար՝ համոզվելու համար, որ ամեն ինչ հարթ է ընթանում:
Եզրակացություն
Սա ավարտում է մեր ձեռնարկը Mastodon սոցիալական ցանցի տեղադրման վերաբերյալ, օգտագործելով Docker-ը Debian 12 սերվերի վրա: Եթե ունեք հարցեր, տեղադրեք դրանք ստորև ներկայացված մեկնաբանություններում: