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ázkaZadajte
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:

Single user mode? N, Using Docker to run Mastodon? Y, PostgreSQL host: mastodon_db_1, PostgreSQL port: 5432, Name of PostgreSQL database: mastodon, Name of PostgreSQL user: mastodon, Password of ProstgreSQL user: password

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ázkaZadajte
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:

Store uploaded files in cloud: No, Send e-mails from localhost: Yes, Send e-mail "from": Enter, Send a test email now: No, Save configuration: Yes

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!

Odkazy #