docker-compose.yml 6.5 KB

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