navy
Version:
Quick and powerful development environments using Docker and Docker Compose
87 lines (67 loc) • 2.77 kB
JavaScript
;
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']);
}