Dockerfile 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. FROM scratch AS downloads
  2. # Download NodeJS bundle
  3. ADD https://static.meteor.com/dev-bundle-node-os/v14.21.4/node-v14.21.4-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. # Create the data directory
  199. mkdir /data && \
  200. # Change ownership of data directory
  201. chown wekan:root -R /data
  202. # Change to the wekan user
  203. USER wekan
  204. # Set the port to listen on
  205. ENV PORT=8080
  206. EXPOSE ${PORT}
  207. # Define the stop signal for node
  208. STOPSIGNAL SIGINT
  209. # Declare a volume on /data
  210. VOLUME /data
  211. # Set startup command
  212. CMD ["node", "/wekan/main.js"]