@aivec/wp-docker-dev-factory
Version:
Spin up local WordPress environments with Docker.
115 lines (102 loc) • 4.03 kB
text/typescript
import { FinalInstanceConfig, EnvVarsMap } from '../types';
import { userInfo } from 'os';
import {
dockerMetaDirpath,
dockerScriptsDirpath,
dockerDumpfilesDirpath,
dockerSshDirpath,
dockerUserScriptsDirpath,
dockerTempDirpath,
dockerCacheDirpath,
} from '../constants';
const visibleVcBooleans = ['WP_DEBUG', 'WP_DEBUG_DISPLAY', 'WP_DEBUG_LOG', 'MULTISITE'];
const buildEnvVars = (config: FinalInstanceConfig): EnvVarsMap => {
let envvars = {};
const userenvs = config.env ? config.env : null;
if (userenvs) {
envvars = { ...envvars, ...userenvs };
}
// user and group to run wordpress container as
const user = userInfo();
envvars['USER_ID'] = user.uid;
envvars['GROUP_ID'] = user.gid;
// pass meta paths
envvars['AVC_META_DIR'] = dockerMetaDirpath;
envvars['AVC_SCRIPTS_DIR'] = dockerScriptsDirpath;
envvars['AVC_DUMPFILES_DIR'] = dockerDumpfilesDirpath;
envvars['AVC_SSH_DIR'] = dockerSshDirpath;
envvars['AVC_USER_SCRIPTS_DIR'] = dockerUserScriptsDirpath;
envvars['AVC_TEMP_DIR'] = dockerTempDirpath;
envvars['AVC_CACHE_DIR'] = dockerCacheDirpath;
envvars['CONTAINER_NAME'] = config.containerName;
envvars['INSTANCE_NAME'] = config.instanceName;
envvars['FLUSH_DB_ON_RESTART'] = Number(config.flushOnRestart);
envvars['RUNNING_FROM_CACHE'] = Number(config.runningFromCache);
envvars['URL_REPLACE'] = config.fullUrl;
envvars['DOCKER_BRIDGE_IP'] = config.dockerBridgeIP;
envvars['ALREADY_INSTALLED_PLUGINS'] = JSON.stringify(
JSON.stringify(config.alreadyInstalled),
).trim();
const dplugins = [...config.downloadPlugins, 'relative-url'];
envvars['DOWNLOAD_PLUGINS'] = JSON.stringify(JSON.stringify(dplugins)).trim();
envvars['DOWNLOAD_THEMES'] = JSON.stringify(
JSON.stringify(config.downloadThemes ? config.downloadThemes : []),
).trim();
envvars['PLUGINS'] = `"${dplugins.join(' ')}"`;
if (config.downloadThemes) {
envvars['THEMES'] = `"${config.downloadThemes.join(' ')}"`;
}
if (config.ftp) {
envvars['FTP_CONFIGS'] = JSON.stringify(JSON.stringify(config.ftp)).trim();
}
if (config.ssh) {
envvars['SSH_CONFIGS'] = JSON.stringify(JSON.stringify(config.ssh)).trim();
}
if (config.uploadsUrl) {
envvars['AVC_UPLOADS_BASE_URL'] = config.uploadsUrl;
}
if (config.containerPort) {
envvars['DOCKER_CONTAINER_PORT'] = config.containerPort;
}
// set default values for various WP envvars
// envvars['WORDPRESS_DB_NAME'] = config.instanceName;
envvars['WORDPRESS_TABLE_PREFIX'] = 'wp_';
// envvars['WORDPRESS_DB_HOST'] = `wpdb-${config.instanceName}`;
envvars['WORDPRESS_DB_HOST'] = `db:3306`;
envvars['WORDPRESS_DB_USER'] = 'root';
envvars['WORDPRESS_DB_PASSWORD'] = 'root';
envvars['WORDPRESS_DEBUG'] = 'true';
envvars['WP_DEBUG_DISPLAY'] = 'true';
envvars['WP_DEBUG_LOG'] = 'true';
envvars['WP_LOCALE'] = config.locale;
envvars['WP_VERSION'] = config.wordpressVersion;
envvars['PHP_VERSION'] = config.phpVersion;
envvars['WORDPRESS_APP_IMAGE_NAME'] = config.instanceName;
envvars['WORDPRESS_APP_CONTAINER_NAME'] = config.instanceName;
envvars['WORDPRESS_APP_HOST_NAME'] = config.hostName;
if (config.database) {
const { dbName, dbPrefix } = config.database;
if (dbName) {
envvars['WORDPRESS_DB_NAME'] = dbName;
}
if (dbPrefix) {
envvars['WORDPRESS_TABLE_PREFIX'] = dbPrefix;
}
}
if (userenvs) {
// override defaults if they are set in env object
Object.keys(userenvs).forEach((key) => {
if (visibleVcBooleans.includes(key)) {
if (userenvs[key] === true || userenvs[key] === 1 || userenvs[key] === 'true') {
envvars[key] = 'true';
} else if (userenvs[key] === false || userenvs[key] === 0 || userenvs[key] === 'false') {
envvars[key] = 'false';
}
}
});
}
// used for accessing constants from PHP $_ENV global
envvars['APACHE_ENV_VARS'] = JSON.stringify(JSON.stringify(envvars)).trim();
return envvars as EnvVarsMap;
};
export default buildEnvVars;