commit
159f989d08
6 changed files with 287 additions and 0 deletions
@ -0,0 +1,6 @@ |
|||||||
|
npm-debug.log |
||||||
|
node_modules |
||||||
|
*.swp |
||||||
|
*.swo |
||||||
|
data |
||||||
|
*.DS_Store |
@ -0,0 +1,63 @@ |
|||||||
|
FROM node:14.8.0-stretch |
||||||
|
|
||||||
|
RUN mkdir -p /usr/src/app && \ |
||||||
|
chown node:node /usr/src/app |
||||||
|
|
||||||
|
USER node:node |
||||||
|
|
||||||
|
WORKDIR /usr/src/app |
||||||
|
|
||||||
|
COPY --chown=node:node . . |
||||||
|
|
||||||
|
RUN npm install && \ |
||||||
|
npm install redis@0.8.1 && \ |
||||||
|
npm install pg@4.1.1 && \ |
||||||
|
npm install memcached@2.2.2 && \ |
||||||
|
npm install aws-sdk@2.738.0 && \ |
||||||
|
npm install rethinkdbdash@2.3.31 |
||||||
|
|
||||||
|
ENV STORAGE_TYPE=memcached \ |
||||||
|
STORAGE_HOST=127.0.0.1 \ |
||||||
|
STORAGE_PORT=11211\ |
||||||
|
STORAGE_EXPIRE_SECONDS=2592000\ |
||||||
|
STORAGE_DB=2 \ |
||||||
|
STORAGE_AWS_BUCKET= \ |
||||||
|
STORAGE_AWS_REGION= \ |
||||||
|
STORAGE_USENAMER= \ |
||||||
|
STORAGE_PASSWORD= \ |
||||||
|
STORAGE_FILEPATH= |
||||||
|
|
||||||
|
ENV LOGGING_LEVEL=verbose \ |
||||||
|
LOGGING_TYPE=Console \ |
||||||
|
LOGGING_COLORIZE=true |
||||||
|
|
||||||
|
ENV HOST=0.0.0.0\ |
||||||
|
PORT=7777\ |
||||||
|
KEY_LENGTH=10\ |
||||||
|
MAX_LENGTH=400000\ |
||||||
|
STATIC_MAX_AGE=86400\ |
||||||
|
RECOMPRESS_STATIC_ASSETS=true |
||||||
|
|
||||||
|
ENV KEYGENERATOR_TYPE=phonetic \ |
||||||
|
KEYGENERATOR_KEYSPACE= |
||||||
|
|
||||||
|
ENV RATELIMITS_NORMAL_TOTAL_REQUESTS=500\ |
||||||
|
RATELIMITS_NORMAL_EVERY_MILLISECONDS=60000 \ |
||||||
|
RATELIMITS_WHITELIST_TOTAL_REQUESTS= \ |
||||||
|
RATELIMITS_WHITELIST_EVERY_MILLISECONDS= \ |
||||||
|
# comma separated list for the whitelisted \ |
||||||
|
RATELIMITS_WHITELIST=example1.whitelist,example2.whitelist \ |
||||||
|
\ |
||||||
|
RATELIMITS_BLACKLIST_TOTAL_REQUESTS= \ |
||||||
|
RATELIMITS_BLACKLIST_EVERY_MILLISECONDS= \ |
||||||
|
# comma separated list for the blacklisted \ |
||||||
|
RATELIMITS_BLACKLIST=example1.blacklist,example2.blacklist |
||||||
|
ENV DOCUMENTS=about=./about.md |
||||||
|
|
||||||
|
EXPOSE ${PORT} |
||||||
|
STOPSIGNAL SIGINT |
||||||
|
ENTRYPOINT [ "bash", "docker-entrypoint.sh" ] |
||||||
|
|
||||||
|
HEALTHCHECK --interval=30s --timeout=30s --start-period=5s \ |
||||||
|
--retries=3 CMD [ "curl" , "-f" "localhost:${PORT}", "||", "exit", "1"] |
||||||
|
CMD ["npm", "start"] |
@ -0,0 +1,19 @@ |
|||||||
|
version: '3.0' |
||||||
|
services: |
||||||
|
haste-server: |
||||||
|
build: . |
||||||
|
networks: |
||||||
|
- db-network |
||||||
|
environment: |
||||||
|
- STORAGE_TYPE=memcached |
||||||
|
- STORAGE_HOST=memcached |
||||||
|
- STORAGE_PORT=11211 |
||||||
|
ports: |
||||||
|
- 7777:7777 |
||||||
|
memcached: |
||||||
|
image: memcached:latest |
||||||
|
networks: |
||||||
|
- db-network |
||||||
|
|
||||||
|
networks: |
||||||
|
db-network: |
@ -0,0 +1,108 @@ |
|||||||
|
const { |
||||||
|
HOST, |
||||||
|
PORT, |
||||||
|
KEY_LENGTH, |
||||||
|
MAX_LENGTH, |
||||||
|
STATIC_MAX_AGE, |
||||||
|
RECOMPRESS_STATIC_ASSETS, |
||||||
|
STORAGE_TYPE, |
||||||
|
STORAGE_HOST, |
||||||
|
STORAGE_PORT, |
||||||
|
STORAGE_EXPIRE_SECONDS, |
||||||
|
STORAGE_DB, |
||||||
|
STORAGE_AWS_BUCKET, |
||||||
|
STORAGE_AWS_REGION, |
||||||
|
STORAGE_PASSWORD, |
||||||
|
STORAGE_USERNAME, |
||||||
|
STORAGE_FILEPATH, |
||||||
|
LOGGING_LEVEL, |
||||||
|
LOGGING_TYPE, |
||||||
|
LOGGING_COLORIZE, |
||||||
|
KEYGENERATOR_TYPE, |
||||||
|
KEY_GENERATOR_KEYSPACE, |
||||||
|
RATE_LIMITS_NORMAL_TOTAL_REQUESTS, |
||||||
|
RATE_LIMITS_NORMAL_EVERY_MILLISECONDS, |
||||||
|
RATE_LIMITS_WHITELIST_TOTAL_REQUESTS, |
||||||
|
RATE_LIMITS_WHITELIST_EVERY_MILLISECONDS, |
||||||
|
RATE_LIMITS_WHITELIST, |
||||||
|
RATE_LIMITS_BLACKLIST_TOTAL_REQUESTS, |
||||||
|
RATE_LIMITS_BLACKLIST_EVERY_MILLISECONDS, |
||||||
|
RATE_LIMITS_BLACKLIST, |
||||||
|
DOCUMENTS, |
||||||
|
} = process.env; |
||||||
|
|
||||||
|
const config = { |
||||||
|
host: HOST, |
||||||
|
port: PORT, |
||||||
|
|
||||||
|
keyLength: KEY_LENGTH, |
||||||
|
|
||||||
|
maxLength: MAX_LENGTH, |
||||||
|
|
||||||
|
staticMaxAge: STATIC_MAX_AGE, |
||||||
|
|
||||||
|
recompressStaticAssets: RECOMPRESS_STATIC_ASSETS, |
||||||
|
|
||||||
|
logging: [ |
||||||
|
{ |
||||||
|
level: LOGGING_LEVEL, |
||||||
|
type: LOGGING_TYPE, |
||||||
|
colorize: LOGGING_COLORIZE, |
||||||
|
}, |
||||||
|
], |
||||||
|
|
||||||
|
keyGenerator: { |
||||||
|
type: KEYGENERATOR_TYPE, |
||||||
|
keyspace: KEY_GENERATOR_KEYSPACE, |
||||||
|
}, |
||||||
|
|
||||||
|
rateLimits: { |
||||||
|
whitelist: RATE_LIMITS_WHITELIST ? RATE_LIMITS_WHITELIST.split(",") : [], |
||||||
|
blacklist: RATE_LIMITS_BLACKLIST ? RATE_LIMITS_BLACKLIST.split(",") : [], |
||||||
|
categories: { |
||||||
|
normal: { |
||||||
|
totalRequests: RATE_LIMITS_NORMAL_TOTAL_REQUESTS, |
||||||
|
every: RATE_LIMITS_NORMAL_EVERY_MILLISECONDS, |
||||||
|
}, |
||||||
|
whitelist: |
||||||
|
RATE_LIMITS_WHITELIST_EVERY_MILLISECONDS || |
||||||
|
RATE_LIMITS_WHITELIST_TOTAL_REQUESTS |
||||||
|
? { |
||||||
|
totalRequests: RATE_LIMITS_WHITELIST_TOTAL_REQUESTS, |
||||||
|
every: RATE_LIMITS_WHITELIST_EVERY_MILLISECONDS, |
||||||
|
} |
||||||
|
: null, |
||||||
|
blacklist: |
||||||
|
RATE_LIMITS_BLACKLIST_EVERY_MILLISECONDS || |
||||||
|
RATE_LIMITS_BLACKLIST_TOTAL_REQUESTS |
||||||
|
? { |
||||||
|
totalRequests: RATE_LIMITS_WHITELIST_TOTAL_REQUESTS, |
||||||
|
every: RATE_LIMITS_BLACKLIST_EVERY_MILLISECONDS, |
||||||
|
} |
||||||
|
: null, |
||||||
|
}, |
||||||
|
}, |
||||||
|
|
||||||
|
storage: { |
||||||
|
type: STORAGE_TYPE, |
||||||
|
host: STORAGE_HOST, |
||||||
|
port: STORAGE_PORT, |
||||||
|
expire: STORAGE_EXPIRE_SECONDS, |
||||||
|
bucket: STORAGE_AWS_BUCKET, |
||||||
|
region: STORAGE_AWS_REGION, |
||||||
|
connectionUrl: `postgres://${STORAGE_USERNAME}:${STORAGE_PASSWORD}@${STORAGE_HOST}:${STORAGE_PORT}/${STORAGE_DB}`, |
||||||
|
db: STORAGE_DB, |
||||||
|
user: STORAGE_USERNAME, |
||||||
|
password: STORAGE_PASSWORD, |
||||||
|
path: STORAGE_FILEPATH, |
||||||
|
}, |
||||||
|
|
||||||
|
documents: DOCUMENTS |
||||||
|
? DOCUMENTS.split(",").reduce((acc, item) => { |
||||||
|
const keyAndValueArray = item.replace(/\s/g, "").split("="); |
||||||
|
return { ...acc, [keyAndValueArray[0]]: keyAndValueArray[1] }; |
||||||
|
}, {}) |
||||||
|
: null, |
||||||
|
}; |
||||||
|
|
||||||
|
console.log(JSON.stringify(config)); |
@ -0,0 +1,9 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
# We use this file to translate environmental variables to .env files used by the application |
||||||
|
|
||||||
|
set -e |
||||||
|
|
||||||
|
node ./docker-entrypoint.js > ./config.js |
||||||
|
|
||||||
|
exec "$@" |
Loading…
Reference in new issue