Minimálna sada príkazov, ktorú som musel vykonať, aby som úspešne spustil Mastodon cez docker-compose na VPS. Mnohé konfigurácie špecifické pre OS sú vynechané, keďže som sa rozhodol použiť na tomto VPS Arch, čo nie je to, čo väčšina ľudí volí pre serverové prostredie - aspoň nie vtedy, keď úskalia takejto voľby zohrávajú zásadnú úlohu.
Začíname #
Naklonujte repozitár Mastodonu. Obsahuje súbor docker-compose.yml ako aj
ďalšie súbory priamo alebo nepriamo ním odkazované (napríklad
package.json alebo yarn.lock):
git clone https://github.com/mastodon/mastodon.git
cd mastodon
Tu je niečo, čo občas robím, aby som si ľahšie sledoval zmeny
konfiguračných súborov. Vytvorte vetvu na danom tagu, ktorý bol v čase
písania v3.4.1:
git checkout v3.4.1 -b v3.4.1-branch
Bez vytvorenia vetvy by HEAD bol v odpojeном stave (ukazoval by na otagovaný commit, nie na vetvu). Zmeny by sa stále sledovali, ale neboli by dostupné po ďalšom checkouте.
Tip: Aby ste
jednoducho získali najnovší dostupný tag,
môžete použiť git rev-list takto:
git fetch --all --tags
git describe --tags `git rev-list --tags --max-count=1`
Zvážte tiež zmenu image Mastodonu na nejakú otagovanú verziu. V sekcii
web nahraďte image mastodon:latest otagovaným:
image: tootsuite/mastodon:v3.4.1
Je to užitočné aspoň na referencovanie a vyhľadávanie problémov, ak by nejaké nastali. Pre mňa je ešte dôležitejšie, že si to vyžaduje manuálny zásah na zvýšenie čísla verzie, takže veci sa náhle nezmenia pri reštartovaní docker-compose skriptu bez toho, aby ste chápali prečo. Je to celkovo dobrá prax, ako sa vyhnúť zbytočným prekvapeniam.
Databáza Postgres #
Verzia postgres odkazovaná v docker-compose súbore je 9.6-alpine. Môže
fungovať, ale ja som testoval s 12.5-alpine a zatiaľ nenašiel žiadne
problémy, takže som zmenil na túto verziu v sekcii db:
image: postgres:12.5-alpine
Spustite kontajner na nastavenie používateľa, za predpokladu, že cesta k
docker-compose súboru je /home/mastodon/mastodon/docker-compose.yml. Ak
nie, upravte cestu tak, aby priečinok postgres volume zodpovedal. Zvážte
nastavenie vlastného hesla:
sudo docker run --name postgres12 -v /home/mastodon/mastodon/postgres:/var/lib/postgresql/data -e POSTGRES_PASSWORD=password --rm -d postgres:12.5-alpine
Vytvorte databázového používateľa mastodon, použite heslo z vyššie:
sudo docker exec -it postgres12 psql -U postgres
> CREATE USER mastodon WITH PASSWORD 'password' CREATEDB;
> exit
sudo docker stop postgres12
Tým je nastavenie databázy dokončené.
Nastavenie Mastodonu #
Táto časť je trochu zložitá, keďže mi zabrala najviac času:
sudo docker-compose run --rm web bundle exec rake mastodon:setup
Vyplňte doménové meno, pod ktorým plánujete prevádzkovať inštanciu. Toto bude pravdepodobne ťažké zmeniť po spustení inštancie. Ďalšie otázky vyplňte podľa tabuľky nižšie:
| Otázka | Zadajte |
|---|---|
| Do you want to enable single user mode? | No |
| Are you using Docker to run Mastodon? | Yes |
| PostgreSQL host: | mastodon_db_1 |
| PostgreSQL port: | 5432 |
| Name of PostgreSQL database: | mastodon |
| Name of PostgreSQL user: | mastodon |
| Password of ProstgreSQL user: | password |
Vyššie uvedená časť by mala v termináli vyzerať takto:

Nastavenie potom pokračuje otázkami o konfigurácii e-mailovych schopností. Túto časť vynechávam, keďže môj e-mailový poskytovateľ vyžadoval iné SMTP nastavenia, niektoré z ktorých neboli dostupné cez tohto sprievodcu nastavením. Nenašiel som spoľahlivý spôsob, ako odoslať testovací e-mail z UI alebo konzoly neskôr, takže sa možno oplatí vyskúšať to tu. Nastavenie cloudového úložiska alebo e-mailových schopností môžete tiež bezpečne preskočiť a nakonfigurovať neskôr - ak to chcete, použite tieto možnosti:
| Otázka | Zadajte |
|---|---|
| Do you want to store uploaded files on the cloud? | No |
| Do you want to send e-mails from localhost? | Yes |
| E-mail address to send e-mails “from”: | Enter |
| Send a test e-mail with this configuration right now? | No |
| Save configuration? | Yes |
Váš terminál by mal vyzerať takto:

Terminál potom vypíše konfiguráciu vrátane tajných kľúčov. Skopírujte a
prilepte ju do súboru .env.production v naklonovanom repozitári, ktorý už
obsahuje adresár postgres/ a súbor docker-compose.yml, okrem iného.
Poslednou časťou je migrácia databázy a vytvorenie admin účtu. Na obe
odpovedzte Yes a pokračujte. Heslo administrátorského používateľa
Mastodonu bude vygenerované a zobrazené - uistite sa, že ho nestratíte! Ak
ho stratíte predtým, ako sa úspešne prihlásite, jednou z možností, ako ho
znovu získať, je zmazať priečinok postgres/ a začať odznova od kroku
Databáza Postgres vyššie.
Fulltextové vyhľadávanie #
Tento krok je voliteľný, aj keď je pekným doplnkom mať k dispozícii
fulltextové vyhľadávanie cez ElasticSearch. Upravte docker-compose.yml a
odkomentujte dva bloky súvisiace s es:
# es:
# restart: always
# image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.8.10
# environment:
# - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
# - "cluster.name=es-mastodon"
# - "discovery.type=single-node"
# - "bootstrap.memory_lock=true"
# networks:
# - internal_network
# healthcheck:
# test:
# [
# "CMD-SHELL",
# "curl --silent --fail localhost:9200/_cluster/health || exit 1",
# ]
# volumes:
# - ./elasticsearch:/usr/share/elasticsearch/data
# ulimits:
# memlock:
# soft: -1
# hard: -1
web:
build: .
image: tootsuite/mastodon
restart: always
env_file: .env.production
command:
bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p
3000"
networks:
- external_network
- internal_network
healthcheck:
test:
[
"CMD-SHELL",
"wget -q --spider --proxy=off localhost:3000/health || exit 1",
]
ports:
- "127.0.0.1:3000:3000"
depends_on:
- db
- redis
# - es
volumes:
- ./public/system:/mastodon/public/system
Upravte súbor .env.production a pridajte nasledujúce:
ES_ENABLED=true
ES_HOST=mastodon_es_1
ES_PORT=9200
Inštancia by teraz mala byť pripravená na spustenie.
Prvé spustenie #
Spustite celý stack, môže to chvíľu trvať:
sudo docker-compose up -d
sudo docker-compose down
Tým sa vygenerujú ďalšie súbory a priečinky - zvážte nastavenie oprávnení pre ne a znovu spustite inštanciu:
sudo chown -R 70:70 ./postgres
sudo chown -R 991:991 ./public
sudo chown -R 1000:1000 ./elascticsearch
sudo docker-compose up -d
Teraz by bez akýchkoľvek úprav docker-compose.yml mala byť inštancia
dostupná na porte 3000. Nakonfigurujte reverzný proxy podľa vlastného
výberu na ukončenie SSL/TLS a na proxovanie doménového mena zadaného do
sprievodcu na tento port. Inšpiráciu, ako to urobiť, môžete nájsť aj v
mojich predchádzajúcich článkoch pod tagmi Nginx a najmä
acme.sh, ak sa rozhodnete použiť tieto dva nástroje na správu
tejto úlohy a certifikátov.
Ak chcete pristúpiť k webovému používateľskému rozhraniu, zadajte meno admin používateľa a skôr vygenerované heslo a ste pripravení zabávať sa vo fediverse!