UNPKG

navy

Version:

Quick and powerful development environments using Docker and Docker Compose

87 lines (67 loc) 2.77 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.reconfigureHTTPProxy = reconfigureHTTPProxy; var _os = _interopRequireDefault(require("os")); var _path = _interopRequireDefault(require("path")); var _jsYaml = _interopRequireDefault(require("js-yaml")); var _dockerClient = _interopRequireDefault(require("./util/docker-client")); var _fs = _interopRequireDefault(require("fs")); var _https = require("./util/https"); var _execAsync = require("./util/exec-async"); var _driverLogging = require("./driver-logging"); var _navy = require("./navy"); async function updateComposeConfig(navies) { const networks = await _dockerClient.default.listNetworks().filter(net => net.Name.indexOf('_') !== -1) // is docker-compose network? .filter(net => { for (const navy of navies) { if (net.Name.indexOf(navy + '_') === 0) { return true; } } return false; }); const networksConfig = {}; networks.forEach(net => networksConfig[net.Name] = { external: true }); const ports = ['80:80']; const volumes = ['/var/run/docker.sock:/tmp/docker.sock:ro']; // Enable HTTPS for services that // match crt file names in tlsRootCaDir const certsPath = await (0, _https.getCertsPath)(true); if (certsPath) { ports.push('443:443'); volumes.push(`${certsPath}:/etc/nginx/certs`); volumes.push(`${certsPath}:/etc/nginx/dhparam`); // to persist DH params } const config = { version: '2', services: { 'nginx-proxy': { image: 'navycloud/navy-proxy', ports, networks: networks.map(net => net.Name), volumes, restart: 'always' } }, networks: networksConfig }; _fs.default.writeFileSync(_path.default.join(_os.default.tmpdir(), 'navyinternaldockercompose.yml'), _jsYaml.default.dump(config)); } async function reconfigureHTTPProxy(opts = {}) { const navyInternalYamlFile = _path.default.join(_os.default.tmpdir(), 'navyinternaldockercompose.yml'); if (opts.restart) { // proxy needs to be recreated to detect changes (deletes) in /etc/nginx/certs if (_fs.default.existsSync(navyInternalYamlFile)) { (0, _driverLogging.log)('Restarting HTTP proxy...'); await (0, _execAsync.execAsync)('docker compose', ['-f', navyInternalYamlFile, '-p', 'navyinternal', 'rm', '-s', '-f', 'nginx-proxy']); } } if (!opts.navies) opts.navies = await (0, _navy.getLaunchedNavyNames)(); await updateComposeConfig(opts.navies); (0, _driverLogging.log)('Configuring HTTP proxy...'); await (0, _execAsync.execAsync)('docker compose', ['-f', navyInternalYamlFile, '-p', 'navyinternal', 'up', '-d']); }