summaryrefslogtreecommitdiffstats
path: root/mastodon/docker-compose.yml
blob: bdefc66c4f04af2652b01e98e50679ba16b5ecc9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
version: '3.5'
services:
  db:
    restart: always
    image: postgres:14-alpine
    container_name: mastodon-db
    shm_size: 512mb
    command: postgres -c 'shared_preload_libraries=pg_stat_statements' -c 'pg_stat_statements.track=all'
    networks:
      - internal_network
    healthcheck:
      test: ['CMD', 'pg_isready', '-U', 'postgres']
    volumes:
      - './postgres:/var/lib/postgresql/data'
    environment:
      - 'POSTGRES_HOST_AUTH_METHOD=trust'

  redis:
    restart: always
    image: redis:alpine
    container_name: mastodon-redis
    networks:
      - internal_network
    healthcheck:
      test: ['CMD', 'redis-cli', 'ping']
    volumes:
      - './redis:/data'

  elasticsearch:
    restart: always
    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.4
    container_name: elasticsearch
    environment:
      #- 'ES_JAVA_OPTS=-Xms2g -Xmx2g -Des.enforce.bootstrap.checks=true'
      - 'ES_JAVA_OPTS=-Xms2g -Xmx2g'
      - 'xpack.license.self_generated.type=basic'
      - 'xpack.security.enabled=false'
      - 'xpack.watcher.enabled=false'
      - 'xpack.graph.enabled=false'
      - 'xpack.ml.enabled=false'
      - 'bootstrap.memory_lock=true'
      - 'cluster.name=es-mastodon'
      - 'discovery.type=single-node'
      - 'thread_pool.write.queue_size=1000'
      - 'ingest.geoip.downloader.enabled=false'
    networks:
       - external_network
       - 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
      nofile:
        soft: 65536
        hard: 65536

  web:
    image: ghcr.io/glitch-soc/mastodon
    container_name: mastodon-web
    restart: always
    env_file: mastodon.env
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
      - RAILS_ENV=production
      - NODE_ENV=production
    
    command: bash -c 'rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000'
    networks:
      - external_network
      - internal_network
    healthcheck:
      # prettier-ignore
      test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:3000/health || exit 1']
    ports:
      - '127.0.0.1:3000:3000'
    depends_on:
      - db
      - redis
      - elasticsearch
    volumes:
      - ./mastodon/public/system:/mastodon/public/system

  streaming:
    image: ghcr.io/glitch-soc/mastodon
    restart: always
    env_file: mastodon.env
    command: node ./streaming
    networks:
      - external_network
      - internal_network
    healthcheck:
      # prettier-ignore
      test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:4000/api/v1/streaming/health || exit 1']
    ports:
      - '127.0.0.1:4000:4000'
    depends_on:
      - db
      - redis

  sidekiq:
    image: ghcr.io/glitch-soc/mastodon
    restart: always
    env_file: mastodon.env
    logging:
      driver: json-file
      options:
        max-size: '50m'
        max-file: '50'
    command: bundle exec sidekiq
    depends_on:
      - db
      - redis
    networks:
      - external_network
      - internal_network
    volumes:
      - ./mastodon/public/system:/mastodon/public/system
    healthcheck:
      test: ['CMD-SHELL', "ps aux | grep '[s]idekiq\ 6' || false"]

networks:
  external_network:
  internal_network:
    internal: true