feat: add Docker build (#41187)

* feat(docker): build and use client and api images

* feat: always use .env

dotenv fails without throwing if the .env file is missing and never
overwrites variables if they already exist. As such, we can use it in
build pipelines.

* fix: remove quotes from env vars

dotenv normalises quoted and unquoted strings (X=x, X='x' and
X="x") all become the same .env object {X: 'x'}. However, Docker's
env_file does not (the three cases are distinct).  As a result, we
should use unquoted strings for consistency.

* fix: provide custom warning when .env is missing

* feat(docker): include client-config

* fix(docker): remove build packages from api image

* fix(docker): run script from correct dir

* fix(docker): correct permissions and dests

* fix(docker): consolidate run steps

This is standard practice, but did not have a noticable affect on the
image size

* fix(docker): clean the npm cache

Prior to this step the image was 1.11GB uncompressed and we got a modest
saving, 1.09GB after.

* refactor(docker): regexless COPY directives

* feat(docker): use alpine

This shrinks the image down to 259MB

* fix(docker): update build scripts

* fix: correct the server Dockerfile RUNs

* DEBUG: expose mysql port for seeding

* chore: update client Dockerfile's node versions

* fix: remove executable permissions from index.js

It's not a cli, so I don't think it needs to be executable.

* chore: update node and remove stale comments

* feat: use ENTRYPOINT + CMD to allow runtime config

* fix: add CURRICULUM_LOCALE arg

* feat: allow client port configuration

* feat: allow api port to be configured

* refactor: use unique variable names for ports

* fix: add default CLIENT_PORT

* refactor: clean up
This commit is contained in:
Oliver Eyton-Williams
2021-04-20 15:59:31 +02:00
committed by GitHub
parent 0858f078e2
commit 5d46e2830a
8 changed files with 115 additions and 22 deletions

View File

@@ -3,11 +3,11 @@
# ---------------------
# Database
MONGOHQ_URL='mongodb://localhost:27017/freecodecamp'
MONGOHQ_URL=mongodb://localhost:27017/freecodecamp
# Logging
SENTRY_DSN=dsn_from_sentry_dashboard
SENTRY_ENVIRONMENT='staging'
SENTRY_ENVIRONMENT=staging
# Auth0 - OAuth 2.0 Credentials
AUTH0_CLIENT_ID=client_id_from_auth0_dashboard
@@ -39,17 +39,15 @@ STRIPE_SECRET_KEY=sk_from_stripe_dashboard
# PayPal
PAYPAL_CLIENT_ID=id_from_paypal_dashboard
PAYPAL_SECRET=secret_from_paypal_dashboard
PAYPAL_VERIFY_WEBHOOK_URL='https://api.sandbox.paypal.com/v1/notifications/verify-webhook-signature'
PAYPAL_API_TOKEN_URL='https://api.sandbox.paypal.com/v1/oauth2/token'
PAYPAL_VERIFY_WEBHOOK_URL=https://api.sandbox.paypal.com/v1/notifications/verify-webhook-signature
PAYPAL_API_TOKEN_URL=https://api.sandbox.paypal.com/v1/oauth2/token
PAYPAL_WEBHOOK_ID=webhook_id_from_paypal_dashboard
# ---------------------
# Build variants
# ---------------------
PIPELINE_ENV=false
DEPLOYMENT_ENV='staging'
FREECODECAMP_NODE_ENV='development'
DEPLOYMENT_ENV=staging
FREECODECAMP_NODE_ENV=development
# Languages to build
CLIENT_LOCALE=english
@@ -59,11 +57,11 @@ CURRICULUM_LOCALE=english
SHOW_UPCOMING_CHANGES=false
# Application paths
HOME_LOCATION='http://localhost:8000'
API_LOCATION='http://localhost:3000'
FORUM_LOCATION='https://forum.freecodecamp.org'
NEWS_LOCATION='https://www.freecodecamp.org/news'
RADIO_LOCATION='https://coderadio.freecodecamp.org'
HOME_LOCATION=http://localhost:8000
API_LOCATION=http://localhost:3000
FORUM_LOCATION=https://forum.freecodecamp.org
NEWS_LOCATION=https://www.freecodecamp.org/news
RADIO_LOCATION=https://coderadio.freecodecamp.org
# ---------------------
# Debugging Mode Keys
@@ -74,4 +72,4 @@ DEBUG=true
LOCAL_MOCK_AUTH=true
# Webhook proxy url from smee.io for PayPal
WEBHOOK_PROXY_URL=''
WEBHOOK_PROXY_URL=