Mastodon : Docker : Arch
Hab die letzten Tage Mastodon entdeckt und wollte mir mal eine eigene Instanz aufsetzen. Ging mehr schlecht als recht. Aber nun läuft’s. Ich habe es mit Docker gemacht, weil ich keine Lust auf 100 deps auf meinem Server hatte. Zu meinem Unglück hab ich -1 Ahnung von Docker, weswegen ich fast verweifelt bin.
Docker:
# pacman -S docker-compose
# usermod -a -G docker $(whoami)
# systemctl start docker
Mastodon:
# mkdir -p /usr/share/webapps/mastodon
# chown $(whoami) mastodon
cd /usr/share/webapps/mastodon
git clone https://github.com/tootsuite/mastodon .
git checkout v2.4.0rc1
docker-compose.yml
version: '3'
services:
db:
restart: always
image: postgres:9.6-alpine
networks:
- internal_network
### Uncomment to enable DB persistance
volumes:
- ./postgres:/var/lib/postgresql/data
redis:
restart: always
image: redis:4.0-alpine
networks:
- internal_network
### Uncomment to enable REDIS persistance
volumes:
- ./redis:/data
# es:
# restart: always
# image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.1.3
# environment:
# - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
# networks:
# - internal_network
#### Uncomment to enable ES persistance
## volumes:
## - ./elasticsearch:/usr/share/elasticsearch/data
web:
build: .
image: tootsuite/mastodon:v2.4.0rc1
restart: always
env_file: .env.production
command: bundle exec rails s -p 3000 -b '0.0.0.0'
environment:
- WEB_CONCURRENCY=1
- MAX_THREADS=5
networks:
- external_network
- internal_network
ports:
- "127.0.0.1:9001:3000"
depends_on:
- db
- redis
# - es
volumes:
- ./public/assets:/mastodon/public/assets
- ./public/packs:/mastodon/public/packs
- ./public/system:/mastodon/public/system
streaming:
build: .
image: tootsuite/mastodon:v2.4.0rc1
restart: always
env_file: .env.production
command: yarn start
networks:
- external_network
- internal_network
ports:
- "127.0.0.1:9002:4000"
depends_on:
- db
- redis
sidekiq:
build: .
image: tootsuite/mastodon:v2.4.0rc1
restart: always
env_file: .env.production
command: bundle exec sidekiq -q default -q mailers -q pull -q push
depends_on:
- db
- redis
networks:
- external_network
- internal_network
volumes:
- ./public/packs:/mastodon/public/packs
- ./public/system:/mastodon/public/system
networks:
external_network:
internal_network:
internal: true
Ich hab andere Ports als die default 3000, 4000 genommen, weil meine schon belegt sind.
.env.production
cp .env.production{.sample,}
Und alles so lassen, bis auf:
LOCAL_DOMAIN=sub.domain.tld
SECRET_KEY_BASE=
OTP_SECRET=
VAPID_PRIVATE_KEY=
VAPID_PUBLIC_KEY=
UID=991
GID=991
SECRET_KEY_BASE
und OTP_SECRET
erstellen durch zweimaliges ausführen von
docker-compose run --rm web rake secret
VAPID_PRIVATE_KEY
und VAPID_PUBLIC_KEY
durch einmaliges ausführen von
docker-compose run --rm web rake mastodon:webpush:generate_vapid_key
Danach noch:
docker-compose pull
docker-compose build
# chown -R 991:991 public
docker-compose run --rm web rails db:migrate
docker-compose run --rm web rails db:precompile
# chown -R 991:991 public
docker-compose up -d
nginx
Die default Config ist vollkommen ausreichend. Falls ihr aber einen
error during websocket handshake: unexpected response code: 400
bekommen solltet, müsst ihr den client_header
hochschrauben per
client_header_buffer_size 64k;
large_client_header_buffers 4 64k;