FROM quay.io/wekan/node:12.20.1-buster AS builder
# This is our builder image. It will take the Wekan meteor code and
# build it into a standalone NodeJS package
LABEL maintainer = "wekan"
Renaissance
_,,ad8888888888bba,_
,ad88888I888888888888888ba,
,88888888I88888888888888888888a,
,d888888888I8888888888888888888888b,
d88888PP"""" ""YY88888888888888888888b,
,d88"'__,,--------,,,,.;ZZZY8888888888888,
,8IIl'" ;;l"ZZZIII8888888888,
,I88l;' ;lZZZZZ888III8888888,
,II88Zl;. ;llZZZZZ888888I888888,
,II888Zl;. .;;;;;lllZZZ888888I8888b
,II8888Z;; `;;;;;''llZZ8888888I8888,
II88888Z;' .;lZZZ8888888I888b
II88888Z; _,aaa, .,aaaaa,__.l;llZZZ88888888I888
II88888IZZZZZZZZZ, .ZZZZZZZZZZZZZZ;llZZ88888888I888,
II88888IZZ<'(@@>Z| |ZZZ<'(@@>ZZZZ;;llZZ888888888I88I
,II88888; `""" ;| |ZZ; `""" ;;llZ8888888888I888
II888888l `;; .;llZZ8888888888I888,
,II888888Z; ;;; .;;llZZZ8888888888I888I
III888888Zl; .., `;; ,;;lllZZZ88888888888I888
II88888888Z;;...;(_ _) ,;;;llZZZZ88888888888I888,
II88888888Zl;;;;;' `--'Z;. .,;;;;llZZZZ88888888888I888b
]I888888888Z;;;;' ";llllll;..;;;lllZZZZ88888888888I8888,
II888888888Zl.;;"Y88bd888P";;,..;lllZZZZZ88888888888I8888I
II8888888888Zl;.; `"PPP";;;,..;lllZZZZZZZ88888888888I88888
II888888888888Zl;;. `;;;l;;;;lllZZZZZZZZW88888888888I88888
`II8888888888888Zl;. ,;;lllZZZZZZZZWMZ88888888888I88888
II8888888888888888ZbaalllZZZZZZZZZWWMZZZ8888888888I888888,
`II88888888888888888b"WWZZZZZWWWMMZZZZZZI888888888I888888b
`II88888888888888888;ZZMMMMMMZZZZZZZZllI888888888I8888888
`II8888888888888888 `;lZZZZZZZZZZZlllll888888888I8888888,
II8888888888888888, `;lllZZZZllllll;;.Y88888888I8888888b,
,II8888888888888888b .;;lllllll;;;.;..88888888I88888888b,
II888888888888888PZI;. .`;;;.;;;..; ...88888888I8888888888,
II888888888888PZ;;';;. ;. .;. .;. .. Y8888888I88888888888b,
,II888888888PZ;;' `8888888I8888888888888b,
II888888888' 888888I8888888888888888
,II888888888 ,888888I8888888888888888
,d88888888888 d888888I8888888888ZZZZZZ
,ad888888888888I 8888888I8888ZZZZZZZZZZZZ
888888888888888' 888888IZZZZZZZZZZZZZZZZZ
8888888888P'8P' Y888ZZZZZZZZZZZZZZZZZZZZ
888888888, " ,ZZZZZZZZZZZZZZZZZZZZZZZ
8888888888, ,ZZZZZZZZZZZZZZZZZZZZZZZZZZ
888888888888a, _ ,ZZZZZZZZZZZZZZZZZZZZ88888888
888888888888888ba,_d' ,ZZZZZZZZZZZZZZZZZ8888888888888
8888888888888888888888bbbaaa,,,______,ZZZZZZZZZZZZZZZ88888888888888888
88888888888888888888888888888888888ZZZZZZZZZZZZZZZ88888888888888888888
8888888888888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888
888888888888888888888888888888888ZZZZZZZZZZZZZZ88888888888888888888888
8888888888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888888
88888888888888888888888888888ZZZZZZZZZZZZZZ888888888888888888888888888
8888888888888888888888888888ZZZZZZZZZZZZZZ88888888888888888 Normand 8
88888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888 Veilleux 8
8888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888888888888
10 years ago
# Allow Meteor to run inside the container as container runs as root
ENV METEOR_ALLOW_SUPERUSER = true
# Copy our source code into the container
COPY . /usr/src/app
# Allow the user accounts package to work with more Meteor versions
RUN sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' /usr/src/app/packages/meteor-useraccounts-core/package.js
# Move our current working directory
WORKDIR /usr/src/app
# Install our NPM packages
RUN npm install
# Install Meteor
RUN curl "https://install.meteor.com/" | sh
# Build our Meteor package into a standalone NodeJS package
RUN meteor build --directory /build
# Include the fix for CFS
RUN cp /usr/src/app/fix-download-unicode/cfs_access-point.txt /build/bundle/programs/server/packages/cfs_access-point.js
# Install server side NPM depedencies
RUN cd /build/bundle/programs/server/ && \
npm install
# Remove the legacy web browser bundle, so that Wekan works in Android Firefox, iOS Safari, etc.
RUN rm -rf /build/bundle/programs/web.browser.legacy
FROM quay.io/wekan/node:12.20.1-buster-slim as app
# This is our runtime image. It takes the built NodeJS package and runs it using
# the lighter Alpine NodeJS base image to keep image size down
ENV WITH_API = true \
ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE = 3 \
ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD = 60 \
ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW = 15 \
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE = 3 \
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD = 60 \
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW = 15 \
RICHER_CARD_COMMENT_EDITOR = false \
CARD_OPENED_WEBHOOK_ENABLED = false \
ATTACHMENTS_STORE_PATH = "" \
MAX_IMAGE_PIXEL = "" \
IMAGE_COMPRESS_RATIO = "" \
NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE = "" \
BIGEVENTS_PATTERN = NONE \
NOTIFY_DUE_DAYS_BEFORE_AND_AFTER = "" \
NOTIFY_DUE_AT_HOUR_OF_DAY = "" \
EMAIL_NOTIFICATION_TIMEOUT = 30000 \
MATOMO_ADDRESS = "" \
MATOMO_SITE_ID = "" \
MATOMO_DO_NOT_TRACK = true \
MATOMO_WITH_USERNAME = false \
BROWSER_POLICY_ENABLED = true \
TRUSTED_URL = "" \
WEBHOOKS_ATTRIBUTES = "" \
OAUTH2_ENABLED = false \
OAUTH2_CA_CERT = "" \
OAUTH2_ADFS_ENABLED = false \
OAUTH2_LOGIN_STYLE = redirect \
OAUTH2_CLIENT_ID = "" \
OAUTH2_SECRET = "" \
OAUTH2_SERVER_URL = "" \
OAUTH2_AUTH_ENDPOINT = "" \
OAUTH2_USERINFO_ENDPOINT = "" \
OAUTH2_TOKEN_ENDPOINT = "" \
OAUTH2_ID_MAP = "" \
OAUTH2_USERNAME_MAP = "" \
OAUTH2_FULLNAME_MAP = "" \
OAUTH2_ID_TOKEN_WHITELIST_FIELDS = "" \
OAUTH2_REQUEST_PERMISSIONS = 'openid profile email' \
OAUTH2_EMAIL_MAP = "" \
LDAP_ENABLE = false \
LDAP_PORT = 389 \
LDAP_HOST = "" \
LDAP_BASEDN = "" \
LDAP_LOGIN_FALLBACK = false \
LDAP_RECONNECT = true \
LDAP_TIMEOUT = 10000 \
LDAP_IDLE_TIMEOUT = 10000 \
LDAP_CONNECT_TIMEOUT = 10000 \
LDAP_AUTHENTIFICATION = false \
LDAP_AUTHENTIFICATION_USERDN = "" \
LDAP_AUTHENTIFICATION_PASSWORD = "" \
LDAP_LOG_ENABLED = false \
LDAP_BACKGROUND_SYNC = false \
LDAP_BACKGROUND_SYNC_INTERVAL = "" \
LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED = false \
LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS = false \
LDAP_ENCRYPTION = false \
LDAP_CA_CERT = "" \
LDAP_REJECT_UNAUTHORIZED = false \
LDAP_USER_AUTHENTICATION = false \
LDAP_USER_AUTHENTICATION_FIELD = uid \
LDAP_USER_SEARCH_FILTER = "" \
LDAP_USER_SEARCH_SCOPE = "" \
LDAP_USER_SEARCH_FIELD = "" \
LDAP_SEARCH_PAGE_SIZE = 0 \
LDAP_SEARCH_SIZE_LIMIT = 0 \
LDAP_GROUP_FILTER_ENABLE = false \
LDAP_GROUP_FILTER_OBJECTCLASS = "" \
LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE = "" \
LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE = "" \
LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT = "" \
LDAP_GROUP_FILTER_GROUP_NAME = "" \
LDAP_UNIQUE_IDENTIFIER_FIELD = "" \
LDAP_UTF8_NAMES_SLUGIFY = true \
LDAP_USERNAME_FIELD = "" \
LDAP_FULLNAME_FIELD = "" \
LDAP_MERGE_EXISTING_USERS = false \
LDAP_EMAIL_FIELD = "" \
LDAP_EMAIL_MATCH_ENABLE = false \
LDAP_EMAIL_MATCH_REQUIRE = false \
LDAP_EMAIL_MATCH_VERIFIED = false \
LDAP_SYNC_USER_DATA = false \
LDAP_SYNC_USER_DATA_FIELDMAP = "" \
LDAP_SYNC_GROUP_ROLES = "" \
LDAP_DEFAULT_DOMAIN = "" \
LDAP_SYNC_ADMIN_STATUS = "" \
LDAP_SYNC_ADMIN_GROUPS = "" \
HEADER_LOGIN_ID = "" \
HEADER_LOGIN_FIRSTNAME = "" \
HEADER_LOGIN_LASTNAME = "" \
HEADER_LOGIN_EMAIL = "" \
LOGOUT_WITH_TIMER = false \
LOGOUT_IN = "" \
LOGOUT_ON_HOURS = "" \
LOGOUT_ON_MINUTES = "" \
CORS = "" \
CORS_ALLOW_HEADERS = "" \
CORS_EXPOSE_HEADERS = "" \
DEFAULT_AUTHENTICATION_METHOD = "" \
PASSWORD_LOGIN_ENABLED = true \
CAS_ENABLED = false \
CAS_BASE_URL = "" \
CAS_LOGIN_URL = "" \
CAS_VALIDATE_URL = "" \
SAML_ENABLED = false \
SAML_PROVIDER = "" \
SAML_ENTRYPOINT = "" \
SAML_ISSUER = "" \
SAML_CERT = "" \
SAML_IDPSLO_REDIRECTURL = "" \
SAML_PRIVATE_KEYFILE = "" \
SAML_PUBLIC_CERTFILE = "" \
SAML_IDENTIFIER_FORMAT = "" \
SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE = "" \
SAML_ATTRIBUTES = "" \
ORACLE_OIM_ENABLED = false
# Copy our built NodeJS package to this image
COPY --from= builder /build/bundle /bundle
WORKDIR /bundle
ENV PORT = 8080
EXPOSE $PORT
USER node
CMD [ "node" , "/bundle/main.js" ]