UNPKG

@aivec/wp-docker-dev-factory

Version:

Spin up local WordPress environments with Docker.

115 lines (102 loc) 4.03 kB
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;