* 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
66 lines
1.9 KiB
JavaScript
66 lines
1.9 KiB
JavaScript
const path = require('path');
|
|
|
|
const envPath = path.resolve(__dirname, '../.env');
|
|
const { error } = require('dotenv').config({ path: envPath });
|
|
|
|
if (error) {
|
|
if (process.env.FREECODECAMP_NODE_ENV === 'development') {
|
|
console.warn('.env not found, please copy sample.env to .env');
|
|
} else {
|
|
console.warn(`.env not found. If env vars are not being set another way,
|
|
this could be a problem.`);
|
|
}
|
|
}
|
|
|
|
const {
|
|
HOME_LOCATION: homeLocation,
|
|
API_LOCATION: apiLocation,
|
|
FORUM_LOCATION: forumLocation,
|
|
NEWS_LOCATION: newsLocation,
|
|
RADIO_LOCATION: radioLocation,
|
|
CLIENT_LOCALE: clientLocale,
|
|
CURRICULUM_LOCALE: curriculumLocale,
|
|
SHOW_LOCALE_DROPDOWN_MENU: showLocaleDropdownMenu,
|
|
STRIPE_PUBLIC_KEY: stripePublicKey,
|
|
ALGOLIA_APP_ID: algoliaAppId,
|
|
ALGOLIA_API_KEY: algoliaAPIKey,
|
|
PAYPAL_CLIENT_ID: paypalClientId,
|
|
DEPLOYMENT_ENV: deploymentEnv,
|
|
SHOW_UPCOMING_CHANGES: showUpcomingChanges
|
|
} = process.env;
|
|
|
|
const locations = {
|
|
homeLocation,
|
|
apiLocation,
|
|
forumLocation,
|
|
newsLocation,
|
|
radioLocation: !radioLocation
|
|
? 'https://coderadio.freecodecamp.org'
|
|
: radioLocation
|
|
};
|
|
|
|
module.exports = Object.assign(locations, {
|
|
clientLocale,
|
|
curriculumLocale,
|
|
showLocaleDropdownMenu: showLocaleDropdownMenu === 'true',
|
|
deploymentEnv,
|
|
environment: process.env.FREECODECAMP_NODE_ENV || 'development',
|
|
stripePublicKey:
|
|
!stripePublicKey || stripePublicKey === 'pk_from_stripe_dashboard'
|
|
? null
|
|
: stripePublicKey,
|
|
algoliaAppId:
|
|
!algoliaAppId || algoliaAppId === 'app_id_from_algolia_dashboard'
|
|
? null
|
|
: algoliaAppId,
|
|
algoliaAPIKey:
|
|
!algoliaAPIKey || algoliaAPIKey === 'api_key_from_algolia_dashboard'
|
|
? null
|
|
: algoliaAPIKey,
|
|
paypalClientId:
|
|
!paypalClientId || paypalClientId === 'id_from_paypal_dashboard'
|
|
? null
|
|
: paypalClientId,
|
|
showUpcomingChanges: showUpcomingChanges === 'true'
|
|
});
|