docker-compose.yml 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. # This file was auto-generated, do not edit it directly.
  2. # Instead run bin/update_build_scripts from
  3. # https://github.com/overleaf/internal/
  4. volumes:
  5. minio-certs:
  6. services:
  7. test_unit:
  8. build:
  9. context: ../..
  10. dockerfile: services/filestore/Dockerfile
  11. target: base
  12. volumes:
  13. - .:/overleaf/services/filestore
  14. - ../../node_modules:/overleaf/node_modules
  15. - ../../libraries:/overleaf/libraries
  16. working_dir: /overleaf/services/filestore
  17. environment:
  18. MOCHA_GREP: ${MOCHA_GREP}
  19. LOG_LEVEL: ${LOG_LEVEL:-}
  20. MONGO_CONNECTION_STRING: mongodb://mongo/test-overleaf
  21. NODE_ENV: test
  22. NODE_OPTIONS: "--unhandled-rejections=strict"
  23. command: npm run --silent test:unit
  24. user: node
  25. test_acceptance:
  26. build:
  27. context: ../..
  28. dockerfile: services/filestore/Dockerfile
  29. target: base
  30. volumes:
  31. - .:/overleaf/services/filestore
  32. - ../../node_modules:/overleaf/node_modules
  33. - ../../libraries:/overleaf/libraries
  34. - minio-certs:/certs
  35. working_dir: /overleaf/services/filestore
  36. environment:
  37. ELASTIC_SEARCH_DSN: es:9200
  38. MONGO_HOST: mongo
  39. POSTGRES_HOST: postgres
  40. AWS_S3_ENDPOINT: https://minio:9000
  41. AWS_S3_PATH_STYLE: 'true'
  42. AWS_ACCESS_KEY_ID: OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID
  43. AWS_SECRET_ACCESS_KEY: OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY
  44. MINIO_ROOT_USER: MINIO_ROOT_USER
  45. MINIO_ROOT_PASSWORD: MINIO_ROOT_PASSWORD
  46. GCS_API_ENDPOINT: http://gcs:9090
  47. GCS_PROJECT_ID: fake
  48. STORAGE_EMULATOR_HOST: http://gcs:9090/storage/v1
  49. MOCHA_GREP: ${MOCHA_GREP}
  50. LOG_LEVEL: ${LOG_LEVEL:-}
  51. NODE_ENV: test
  52. NODE_OPTIONS: "--unhandled-rejections=strict"
  53. ENABLE_CONVERSIONS: "true"
  54. USE_PROM_METRICS: "true"
  55. AWS_S3_USER_FILES_STORAGE_CLASS: REDUCED_REDUNDANCY
  56. AWS_S3_USER_FILES_BUCKET_NAME: fake-user-files
  57. AWS_S3_USER_FILES_DEK_BUCKET_NAME: fake-user-files-dek
  58. AWS_S3_TEMPLATE_FILES_BUCKET_NAME: fake-template-files
  59. GCS_USER_FILES_BUCKET_NAME: fake-gcs-user-files
  60. GCS_TEMPLATE_FILES_BUCKET_NAME: fake-gcs-template-files
  61. user: node
  62. depends_on:
  63. certs:
  64. condition: service_completed_successfully
  65. minio:
  66. condition: service_started
  67. minio_setup:
  68. condition: service_completed_successfully
  69. gcs:
  70. condition: service_healthy
  71. command: npm run --silent test:acceptance
  72. certs:
  73. build:
  74. dockerfile_inline: |
  75. FROM node:22.18.0
  76. RUN wget -O /certgen "https://github.com/minio/certgen/releases/download/v1.3.0/certgen-linux-$(dpkg --print-architecture)"
  77. RUN chmod +x /certgen
  78. volumes:
  79. - minio-certs:/certs
  80. working_dir: /certs
  81. entrypoint: sh
  82. command:
  83. - '-cex'
  84. - |
  85. if [ ! -f private.key ] || [ ! -f public.crt ]; then
  86. /certgen -host minio
  87. fi
  88. minio:
  89. image: minio/minio:RELEASE.2024-10-13T13-34-11Z
  90. command: server /data
  91. volumes:
  92. - minio-certs:/root/.minio/certs
  93. environment:
  94. MINIO_ROOT_USER: MINIO_ROOT_USER
  95. MINIO_ROOT_PASSWORD: MINIO_ROOT_PASSWORD
  96. depends_on:
  97. certs:
  98. condition: service_completed_successfully
  99. minio_setup:
  100. depends_on:
  101. certs:
  102. condition: service_completed_successfully
  103. minio:
  104. condition: service_started
  105. image: minio/mc:RELEASE.2024-10-08T09-37-26Z
  106. volumes:
  107. - minio-certs:/root/.mc/certs/CAs
  108. entrypoint: sh
  109. command:
  110. - '-cex'
  111. - |
  112. sleep 1
  113. mc alias set s3 https://minio:9000 MINIO_ROOT_USER MINIO_ROOT_PASSWORD \
  114. || sleep 3 && \
  115. mc alias set s3 https://minio:9000 MINIO_ROOT_USER MINIO_ROOT_PASSWORD \
  116. || sleep 3 && \
  117. mc alias set s3 https://minio:9000 MINIO_ROOT_USER MINIO_ROOT_PASSWORD \
  118. || sleep 3 && \
  119. mc alias set s3 https://minio:9000 MINIO_ROOT_USER MINIO_ROOT_PASSWORD
  120. mc mb --ignore-existing s3/fake-user-files
  121. mc mb --ignore-existing s3/fake-user-files-dek
  122. mc mb --ignore-existing s3/fake-template-files
  123. mc admin user add s3 \
  124. OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID \
  125. OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY
  126. echo '
  127. {
  128. "Version": "2012-10-17",
  129. "Statement": [
  130. {
  131. "Effect": "Allow",
  132. "Action": [
  133. "s3:ListBucket"
  134. ],
  135. "Resource": "arn:aws:s3:::fake-user-files"
  136. },
  137. {
  138. "Effect": "Allow",
  139. "Action": [
  140. "s3:PutObject",
  141. "s3:GetObject",
  142. "s3:DeleteObject"
  143. ],
  144. "Resource": "arn:aws:s3:::fake-user-files/*"
  145. },
  146. {
  147. "Effect": "Allow",
  148. "Action": [
  149. "s3:ListBucket"
  150. ],
  151. "Resource": "arn:aws:s3:::fake-user-files-dek"
  152. },
  153. {
  154. "Effect": "Allow",
  155. "Action": [
  156. "s3:PutObject",
  157. "s3:GetObject",
  158. "s3:DeleteObject"
  159. ],
  160. "Resource": "arn:aws:s3:::fake-user-files-dek/*"
  161. },
  162. {
  163. "Effect": "Allow",
  164. "Action": [
  165. "s3:ListBucket"
  166. ],
  167. "Resource": "arn:aws:s3:::fake-template-files"
  168. },
  169. {
  170. "Effect": "Allow",
  171. "Action": [
  172. "s3:PutObject",
  173. "s3:GetObject",
  174. "s3:DeleteObject"
  175. ],
  176. "Resource": "arn:aws:s3:::fake-template-files/*"
  177. },
  178. {
  179. "Effect": "Allow",
  180. "Action": [
  181. "s3:ListBucket"
  182. ],
  183. "Resource": "arn:aws:s3:::random-bucket-*"
  184. },
  185. {
  186. "Effect": "Allow",
  187. "Action": [
  188. "s3:PutObject",
  189. "s3:GetObject",
  190. "s3:DeleteObject"
  191. ],
  192. "Resource": "arn:aws:s3:::random-bucket-*"
  193. }
  194. ]
  195. }' > policy-filestore.json
  196. mc admin policy create s3 overleaf-filestore policy-filestore.json
  197. mc admin policy attach s3 overleaf-filestore \
  198. --user=OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID
  199. gcs:
  200. image: fsouza/fake-gcs-server:1.45.2
  201. command: ["--port=9090", "--scheme=http"]
  202. healthcheck:
  203. test: wget --quiet --output-document=/dev/null http://localhost:9090/storage/v1/b
  204. interval: 1s
  205. retries: 20