Dockerfile 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. FROM scratch AS downloads
  2. # Download NodeJS bundle
  3. ADD https://nodejs.org/download/release/v14.21.3/node-v14.21.3-linux-x64.tar.gz node.tar.gz
  4. # Download Meteor bundle
  5. ADD https://static.meteor.com/packages-bootstrap/2.16/meteor-bootstrap-os.linux.x86_64.tar.gz meteor.tar.gz
  6. FROM ubuntu:24.04 AS build
  7. # Install node from official archive
  8. RUN --mount=type=bind,from=downloads,source=node.tar.gz,target=node.tar.gz \
  9. tar xzf node.tar.gz --strip-components=1 --keep-old-files --no-same-owner
  10. # Install meteor from official archive
  11. RUN --mount=type=bind,from=downloads,source=meteor.tar.gz,target=meteor.tar.gz \
  12. tar xzf meteor.tar.gz -C $HOME --no-same-owner
  13. # Update the npm version
  14. RUN npm install -g npm@6.14.17
  15. # Install several build dependencies
  16. RUN apt update && \
  17. apt install --yes --no-install-suggests --no-install-recommends ssh git g++ curl ca-certificates && \
  18. rm -r /var/lib/apt/lists
  19. # Change to temporary working directory
  20. WORKDIR /workdir
  21. # Copy package.json and package-lock.json to install application dependencies
  22. COPY package.json .
  23. COPY package-lock.json .
  24. # Install build dependencies
  25. RUN $HOME/.meteor/meteor npm install --production
  26. # Copy meteor application configurations
  27. COPY .meteor .meteor
  28. # Copy application sources
  29. COPY packages packages
  30. COPY imports imports
  31. COPY config config
  32. COPY models models
  33. COPY public public
  34. COPY server server
  35. COPY client client
  36. # Build the application
  37. RUN $HOME/.meteor/meteor build --directory /build --allow-superuser
  38. # Enter server bundle directory
  39. WORKDIR /build/bundle/programs/server
  40. # Install server dependencies
  41. RUN $HOME/.meteor/meteor npm install --production
  42. # Enter installation directory of fibers
  43. WORKDIR /build/bundle/programs/server/node_modules/fibers
  44. # Build fibers integrations
  45. RUN node build.js
  46. FROM ubuntu:24.04 AS wekan
  47. # Add metadata to image
  48. LABEL maintainer="wekan"
  49. LABEL org.opencontainers.image.ref.name="ubuntu"
  50. LABEL org.opencontainers.image.version="24.04"
  51. LABEL org.opencontainers.image.source="https://github.com/wekan/wekan"
  52. # Set default environment variables
  53. ENV WITH_API=true \
  54. RESULTS_PER_PAGE="" \
  55. DEFAULT_BOARD_ID="" \
  56. ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=3 \
  57. ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD=60 \
  58. ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW=15 \
  59. ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE=3 \
  60. ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60 \
  61. ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15 \
  62. ACCOUNTS_COMMON_LOGIN_EXPIRATION_IN_DAYS=90 \
  63. ATTACHMENTS_UPLOAD_EXTERNAL_PROGRAM="" \
  64. ATTACHMENTS_UPLOAD_MIME_TYPES="" \
  65. ATTACHMENTS_UPLOAD_MAX_SIZE=0 \
  66. AVATARS_UPLOAD_EXTERNAL_PROGRAM="" \
  67. AVATARS_UPLOAD_MIME_TYPES="" \
  68. AVATARS_UPLOAD_MAX_SIZE=72000 \
  69. RICHER_CARD_COMMENT_EDITOR=false \
  70. CARD_OPENED_WEBHOOK_ENABLED=false \
  71. MAX_IMAGE_PIXEL="" \
  72. IMAGE_COMPRESS_RATIO="" \
  73. NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE="" \
  74. BIGEVENTS_PATTERN=NONE \
  75. NOTIFY_DUE_DAYS_BEFORE_AND_AFTER="" \
  76. NOTIFY_DUE_AT_HOUR_OF_DAY="" \
  77. EMAIL_NOTIFICATION_TIMEOUT=30000 \
  78. MATOMO_ADDRESS="" \
  79. MATOMO_SITE_ID="" \
  80. MATOMO_DO_NOT_TRACK=true \
  81. MATOMO_WITH_USERNAME=false \
  82. METRICS_ALLOWED_IP_ADDRESSES="" \
  83. BROWSER_POLICY_ENABLED=true \
  84. TRUSTED_URL="" \
  85. WEBHOOKS_ATTRIBUTES="" \
  86. OAUTH2_ENABLED=false \
  87. OIDC_REDIRECTION_ENABLED=false \
  88. OAUTH2_CA_CERT="" \
  89. OAUTH2_ADFS_ENABLED=false \
  90. OAUTH2_B2C_ENABLED=false \
  91. OAUTH2_LOGIN_STYLE=redirect \
  92. OAUTH2_CLIENT_ID="" \
  93. OAUTH2_SECRET="" \
  94. OAUTH2_SERVER_URL="" \
  95. OAUTH2_AUTH_ENDPOINT="" \
  96. OAUTH2_USERINFO_ENDPOINT="" \
  97. OAUTH2_TOKEN_ENDPOINT="" \
  98. OAUTH2_ID_MAP="" \
  99. OAUTH2_USERNAME_MAP="" \
  100. OAUTH2_FULLNAME_MAP="" \
  101. OAUTH2_ID_TOKEN_WHITELIST_FIELDS="" \
  102. OAUTH2_REQUEST_PERMISSIONS='openid profile email' \
  103. OAUTH2_EMAIL_MAP="" \
  104. LDAP_ENABLE=false \
  105. LDAP_PORT=389 \
  106. LDAP_HOST="" \
  107. LDAP_AD_SIMPLE_AUTH="" \
  108. LDAP_USER_AUTHENTICATION=false \
  109. LDAP_USER_AUTHENTICATION_FIELD=uid \
  110. LDAP_BASEDN="" \
  111. LDAP_LOGIN_FALLBACK=false \
  112. LDAP_RECONNECT=true \
  113. LDAP_TIMEOUT=10000 \
  114. LDAP_IDLE_TIMEOUT=10000 \
  115. LDAP_CONNECT_TIMEOUT=10000 \
  116. LDAP_AUTHENTIFICATION=false \
  117. LDAP_AUTHENTIFICATION_USERDN="" \
  118. LDAP_AUTHENTIFICATION_PASSWORD="" \
  119. LDAP_LOG_ENABLED=false \
  120. LDAP_BACKGROUND_SYNC=false \
  121. LDAP_BACKGROUND_SYNC_INTERVAL="" \
  122. LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false \
  123. LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=false \
  124. LDAP_ENCRYPTION=false \
  125. LDAP_CA_CERT="" \
  126. LDAP_REJECT_UNAUTHORIZED=false \
  127. LDAP_USER_SEARCH_FILTER="" \
  128. LDAP_USER_SEARCH_SCOPE="" \
  129. LDAP_USER_SEARCH_FIELD="" \
  130. LDAP_SEARCH_PAGE_SIZE=0 \
  131. LDAP_SEARCH_SIZE_LIMIT=0 \
  132. LDAP_GROUP_FILTER_ENABLE=false \
  133. LDAP_GROUP_FILTER_OBJECTCLASS="" \
  134. LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE="" \
  135. LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE="" \
  136. LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT="" \
  137. LDAP_GROUP_FILTER_GROUP_NAME="" \
  138. LDAP_UNIQUE_IDENTIFIER_FIELD="" \
  139. LDAP_UTF8_NAMES_SLUGIFY=true \
  140. LDAP_USERNAME_FIELD="" \
  141. LDAP_FULLNAME_FIELD="" \
  142. LDAP_MERGE_EXISTING_USERS=false \
  143. LDAP_EMAIL_FIELD="" \
  144. LDAP_EMAIL_MATCH_ENABLE=false \
  145. LDAP_EMAIL_MATCH_REQUIRE=false \
  146. LDAP_EMAIL_MATCH_VERIFIED=false \
  147. LDAP_SYNC_USER_DATA=false \
  148. LDAP_SYNC_USER_DATA_FIELDMAP="" \
  149. LDAP_SYNC_GROUP_ROLES="" \
  150. LDAP_DEFAULT_DOMAIN="" \
  151. LDAP_SYNC_ADMIN_STATUS="" \
  152. LDAP_SYNC_ADMIN_GROUPS="" \
  153. HEADER_LOGIN_ID="" \
  154. HEADER_LOGIN_FIRSTNAME="" \
  155. HEADER_LOGIN_LASTNAME="" \
  156. HEADER_LOGIN_EMAIL="" \
  157. LOGOUT_WITH_TIMER=false \
  158. LOGOUT_IN="" \
  159. LOGOUT_ON_HOURS="" \
  160. LOGOUT_ON_MINUTES="" \
  161. CORS="" \
  162. CORS_ALLOW_HEADERS="" \
  163. CORS_EXPOSE_HEADERS="" \
  164. DEFAULT_AUTHENTICATION_METHOD="" \
  165. PASSWORD_LOGIN_ENABLED=true \
  166. CAS_ENABLED=false \
  167. CAS_BASE_URL="" \
  168. CAS_LOGIN_URL="" \
  169. CAS_VALIDATE_URL="" \
  170. SAML_ENABLED=false \
  171. SAML_PROVIDER="" \
  172. SAML_ENTRYPOINT="" \
  173. SAML_ISSUER="" \
  174. SAML_CERT="" \
  175. SAML_IDPSLO_REDIRECTURL="" \
  176. SAML_PRIVATE_KEYFILE="" \
  177. SAML_PUBLIC_CERTFILE="" \
  178. SAML_IDENTIFIER_FORMAT="" \
  179. SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE="" \
  180. SAML_ATTRIBUTES="" \
  181. ORACLE_OIM_ENABLED=false \
  182. WAIT_SPINNER="" \
  183. WRITABLE_PATH=/data \
  184. S3=""
  185. # Install node and application sources from build stage
  186. RUN --mount=type=bind,from=downloads,source=node.tar.gz,target=node.tar.gz \
  187. --mount=type=bind,from=build,source=/build,target=/build \
  188. # Install NodeJS
  189. tar xzf node.tar.gz --strip-components=1 --keep-old-files --no-same-owner && \
  190. # Add the wekan user
  191. useradd --uid 999 --user-group --system wekan && \
  192. # Copy wekan bundle
  193. cp -r /build/bundle /wekan && \
  194. # Remove the web.browser.legacy platform
  195. rm -r /wekan/programs/web.browser.legacy && \
  196. # Change ownership of wekan directory
  197. chown wekan:wekan -R /wekan
  198. # Change to the wekan user
  199. USER wekan
  200. # Set the port to listen on
  201. ENV PORT=8080
  202. EXPOSE ${PORT}
  203. # Set the maximum stack size
  204. ENV STACK_SIZE=65500
  205. # Define the stop signal for node
  206. STOPSIGNAL SIGINT
  207. # Declare a volume on /data
  208. VOLUME /data
  209. # Set startup command
  210. CMD ["bash", "-c", "ulimit -s ${STACK_SIZE} && exec node /wekan/main.js"]