Compare commits
13 Commits
Author | SHA1 | Date | |
---|---|---|---|
4c68d27b6d | |||
1cca4f95bc | |||
3cef614bb3 | |||
c3c2ab776d | |||
d8a4c3d088 | |||
e2639fd0a9 | |||
b5a27d5108 | |||
f32002309d | |||
52c3b40879 | |||
6de1352f5f | |||
c55977d5e4 | |||
ad986c1efe | |||
ca2ff3481e |
@ -4,30 +4,21 @@ stages:
|
|||||||
- test
|
- test
|
||||||
- release
|
- release
|
||||||
|
|
||||||
testLEGACY:
|
before_script:
|
||||||
stage: test
|
- "apt-get update && apt-get install nginx -y"
|
||||||
script:
|
|
||||||
- npmci test legacy
|
|
||||||
tags:
|
|
||||||
- docker
|
|
||||||
allow_failure: true
|
|
||||||
|
|
||||||
testLTS:
|
|
||||||
stage: test
|
|
||||||
script:
|
|
||||||
- npmci test lts
|
|
||||||
tags:
|
|
||||||
- docker
|
|
||||||
|
|
||||||
testSTABLE:
|
testSTABLE:
|
||||||
stage: test
|
stage: test
|
||||||
script:
|
script:
|
||||||
- npmci test stable
|
- npmci test stable
|
||||||
|
only:
|
||||||
|
- tags
|
||||||
tags:
|
tags:
|
||||||
- docker
|
- docker
|
||||||
|
|
||||||
release:
|
release:
|
||||||
stage: release
|
stage: release
|
||||||
|
environment: npmjs-com_registry
|
||||||
script:
|
script:
|
||||||
- npmci publish
|
- npmci publish
|
||||||
only:
|
only:
|
||||||
|
@ -4,6 +4,13 @@ control nginx from node, TypeScript ready
|
|||||||
## Status
|
## Status
|
||||||
[](https://gitlab.com/pushrocks/smartnginx/commits/master)
|
[](https://gitlab.com/pushrocks/smartnginx/commits/master)
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
* easy reverse configuration
|
||||||
|
* automatic letsencrypt DNS01 challenge based ssl cert generation
|
||||||
|
* automatic nginx process handling zero-downtime config reloading
|
||||||
|
* works in Docker environements
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
We recommend the use of TypeScript! :)
|
We recommend the use of TypeScript! :)
|
||||||
|
|
||||||
@ -16,5 +23,5 @@ myNginxZone = new smartnginx.NginxZone({
|
|||||||
destination:"192.192.192.192" // some destination IP
|
destination:"192.192.192.192" // some destination IP
|
||||||
});
|
});
|
||||||
myNginxConfig.addZone(myNginxZone); // adds the zone to the config
|
myNginxConfig.addZone(myNginxZone); // adds the zone to the config
|
||||||
myNginxConfig.deploy(); // deploys the referenced NginxConfig and restarts nginx
|
myNginxConfig.deploy(); // deploys the referenced NginxConfig and gracefully reloads it
|
||||||
```
|
```
|
7
dist/index.d.ts
vendored
7
dist/index.d.ts
vendored
@ -1,4 +1,3 @@
|
|||||||
import * as CommandModule from "./smartnginx.command";
|
export * from "./smartnginx.classes.nginxconfig";
|
||||||
export { NginxConfig } from "./smartnginx.classes.nginxconfig";
|
export * from "./smartnginx.classes.nginxprocess";
|
||||||
export { NginxZone, zoneTypes } from "./smartnginx.classes.nginxzone";
|
export * from "./smartnginx.classes.nginxhost";
|
||||||
export declare let command: typeof CommandModule;
|
|
||||||
|
16
dist/index.js
vendored
16
dist/index.js
vendored
@ -1,11 +1,9 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
const CommandModule = require("./smartnginx.command");
|
function __export(m) {
|
||||||
|
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
|
||||||
|
}
|
||||||
// classes
|
// classes
|
||||||
var smartnginx_classes_nginxconfig_1 = require("./smartnginx.classes.nginxconfig");
|
__export(require("./smartnginx.classes.nginxconfig"));
|
||||||
exports.NginxConfig = smartnginx_classes_nginxconfig_1.NginxConfig;
|
__export(require("./smartnginx.classes.nginxprocess"));
|
||||||
var smartnginx_classes_nginxzone_1 = require("./smartnginx.classes.nginxzone");
|
__export(require("./smartnginx.classes.nginxhost"));
|
||||||
exports.NginxZone = smartnginx_classes_nginxzone_1.NginxZone;
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsVUFBVTtBQUNWLGlCQUFjLGtDQUFrQyxDQUFDLEVBQUE7QUFDakQsaUJBQWMsbUNBQW1DLENBQUMsRUFBQTtBQUNsRCxpQkFBYyxnQ0FBZ0MsQ0FBQyxFQUFBIn0=
|
||||||
exports.zoneTypes = smartnginx_classes_nginxzone_1.zoneTypes;
|
|
||||||
// exports
|
|
||||||
exports.command = CommandModule;
|
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsTUFBWSxhQUFhLFdBQU0sc0JBQXNCLENBQUMsQ0FBQTtBQUV0RCxVQUFVO0FBQ1YsK0NBQTBCLGtDQUFrQyxDQUFDO0FBQXJELG1FQUFxRDtBQUM3RCw2Q0FBa0MsZ0NBQWdDLENBQUM7QUFBM0QsNkRBQVM7QUFBQyw2REFBaUQ7QUFFbkUsVUFBVTtBQUNDLGVBQU8sR0FBRyxhQUFhLENBQUMifQ==
|
|
17
dist/smartnginx.classes.nginxconfig.d.ts
vendored
17
dist/smartnginx.classes.nginxconfig.d.ts
vendored
@ -1,14 +1,19 @@
|
|||||||
/// <reference types="q" />
|
/// <reference types="q" />
|
||||||
import * as plugins from "./smartnginx.plugins";
|
import * as plugins from "./smartnginx.plugins";
|
||||||
import { NginxZone } from "./smartnginx.classes.nginxzone";
|
import { NginxHost } from "./smartnginx.classes.nginxhost";
|
||||||
|
import { NginxProcess } from "./smartnginx.classes.nginxprocess";
|
||||||
|
/**
|
||||||
|
* main class that manages a NginxInstance
|
||||||
|
*/
|
||||||
export declare class NginxConfig {
|
export declare class NginxConfig {
|
||||||
zones: NginxZone[];
|
hosts: NginxHost[];
|
||||||
cert: plugins.cert.Cert;
|
cert: plugins.cert.Cert;
|
||||||
|
nginxProcess: NginxProcess;
|
||||||
isDeployed: boolean;
|
isDeployed: boolean;
|
||||||
constructor(optionsArg: plugins.cert.ICertConstructorOptions);
|
constructor(optionsArg: plugins.cert.ICertConstructorOptions);
|
||||||
addZone(zoneArg: NginxZone): void;
|
addHost(nginxHostArg: NginxHost): void;
|
||||||
listZones(): NginxZone[];
|
listHosts(): NginxHost[];
|
||||||
removeZones(zoneArg: NginxZone): void;
|
removeHost(nginxHostArg: NginxHost): void;
|
||||||
clean(): void;
|
clean(): void;
|
||||||
deploy(nginxRestartArg?: boolean): plugins.q.Promise<{}>;
|
deploy(): plugins.q.Promise<{}>;
|
||||||
}
|
}
|
||||||
|
49
dist/smartnginx.classes.nginxconfig.js
vendored
49
dist/smartnginx.classes.nginxconfig.js
vendored
@ -1,12 +1,16 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
const plugins = require("./smartnginx.plugins");
|
const plugins = require("./smartnginx.plugins");
|
||||||
const paths = require("./smartnginx.paths");
|
const paths = require("./smartnginx.paths");
|
||||||
const command = require("./smartnginx.command");
|
|
||||||
const snippets = require("./smartnginx.snippets");
|
const snippets = require("./smartnginx.snippets");
|
||||||
|
const smartnginx_classes_nginxprocess_1 = require("./smartnginx.classes.nginxprocess");
|
||||||
let allConfigs = [];
|
let allConfigs = [];
|
||||||
|
/**
|
||||||
|
* main class that manages a NginxInstance
|
||||||
|
*/
|
||||||
class NginxConfig {
|
class NginxConfig {
|
||||||
constructor(optionsArg) {
|
constructor(optionsArg) {
|
||||||
this.zones = [];
|
this.hosts = [];
|
||||||
|
this.nginxProcess = new smartnginx_classes_nginxprocess_1.NginxProcess(this);
|
||||||
this.isDeployed = false;
|
this.isDeployed = false;
|
||||||
this.cert = new plugins.cert.Cert({
|
this.cert = new plugins.cert.Cert({
|
||||||
cfEmail: optionsArg.cfEmail,
|
cfEmail: optionsArg.cfEmail,
|
||||||
@ -17,25 +21,24 @@ class NginxConfig {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
// interact with Zones
|
// interact with Hosts
|
||||||
addZone(zoneArg) {
|
addHost(nginxHostArg) {
|
||||||
this.zones.push(zoneArg);
|
this.hosts.push(nginxHostArg);
|
||||||
}
|
}
|
||||||
listZones() {
|
listHosts() {
|
||||||
return this.zones;
|
return this.hosts;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
removeZones(zoneArg) {
|
removeHost(nginxHostArg) {
|
||||||
}
|
}
|
||||||
clean() {
|
clean() {
|
||||||
this.zones = [];
|
this.hosts = [];
|
||||||
}
|
}
|
||||||
// handle deployment of zones
|
// handle deployment of hosts
|
||||||
deploy(nginxRestartArg = false) {
|
deploy() {
|
||||||
let done = plugins.q.defer();
|
let done = plugins.q.defer();
|
||||||
plugins.smartfile.fs.removeSync(paths.nginxConfigBase);
|
|
||||||
plugins.smartfile.fs.ensureDirSync(paths.nginxConfigBase);
|
plugins.smartfile.fs.ensureDirSync(paths.nginxConfigBase);
|
||||||
plugins.smartfile.fs.ensureDirSync(paths.nginxZoneBase);
|
plugins.smartfile.fs.ensureDirSync(paths.nginxHostFileBase);
|
||||||
plugins.smartfile.fs.ensureDirSync(paths.nginxCertBase);
|
plugins.smartfile.fs.ensureDirSync(paths.nginxCertBase);
|
||||||
for (let config of allConfigs) {
|
for (let config of allConfigs) {
|
||||||
config.isDeployed = false;
|
config.isDeployed = false;
|
||||||
@ -43,20 +46,20 @@ class NginxConfig {
|
|||||||
;
|
;
|
||||||
this.isDeployed = true;
|
this.isDeployed = true;
|
||||||
// write base config
|
// write base config
|
||||||
plugins.smartfile.memory.toFsSync(snippets.getBaseConfigString(), plugins.path.join(paths.nginxConfigBase, "nginx.conf"));
|
plugins.smartfile.memory.toFsSync(snippets.getBaseConfigString(), paths.nginxConfFile);
|
||||||
// deploy zones
|
// deploy hosts
|
||||||
let promiseArray = [];
|
let promiseArray = [];
|
||||||
for (let zone of this.zones) {
|
for (let host of this.hosts) {
|
||||||
promiseArray.push(zone.deploy(this.cert));
|
let hostDeployedPromise = host.deploy(this.cert);
|
||||||
|
hostDeployedPromise.then(() => {
|
||||||
|
plugins.beautylog.info(`Host ${host.hostName} deployed!`);
|
||||||
|
this.nginxProcess.reloadConfig();
|
||||||
|
});
|
||||||
|
promiseArray.push(hostDeployedPromise);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
plugins.q.all(promiseArray)
|
plugins.q.all(promiseArray)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
// restart nginx
|
|
||||||
if (nginxRestartArg) {
|
|
||||||
command.restart(this);
|
|
||||||
}
|
|
||||||
;
|
|
||||||
done.resolve();
|
done.resolve();
|
||||||
});
|
});
|
||||||
return done.promise;
|
return done.promise;
|
||||||
@ -65,4 +68,4 @@ class NginxConfig {
|
|||||||
}
|
}
|
||||||
exports.NginxConfig = NginxConfig;
|
exports.NginxConfig = NginxConfig;
|
||||||
;
|
;
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRuZ2lueC5jbGFzc2VzLm5naW54Y29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRuZ2lueC5jbGFzc2VzLm5naW54Y29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxNQUFZLE9BQU8sV0FBTSxzQkFBc0IsQ0FBQyxDQUFBO0FBQ2hELE1BQVksS0FBSyxXQUFNLG9CQUFvQixDQUFDLENBQUE7QUFDNUMsTUFBWSxPQUFPLFdBQU0sc0JBQXNCLENBQUMsQ0FBQTtBQUNoRCxNQUFZLFFBQVEsV0FBTSx1QkFDMUIsQ0FBQyxDQURnRDtBQUVqRCxJQUFJLFVBQVUsR0FBaUIsRUFBRSxDQUFDO0FBRWxDO0lBSUksWUFBWSxVQUErQztRQUgzRCxVQUFLLEdBQWUsRUFBRSxDQUFDO1FBRXZCLGVBQVUsR0FBVyxLQUFLLENBQUM7UUFFdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzlCLE9BQU8sRUFBQyxVQUFVLENBQUMsT0FBTztZQUMxQixLQUFLLEVBQUMsVUFBVSxDQUFDLEtBQUs7WUFDdEIsTUFBTSxFQUFDLEtBQUssQ0FBQyxhQUFhO1lBQzFCLGFBQWEsRUFBQyxVQUFVLENBQUMsYUFBYTtZQUN0QyxRQUFRLEVBQUMsVUFBVSxDQUFDLFFBQVE7U0FDL0IsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7SUFFRCxzQkFBc0I7SUFDdEIsT0FBTyxDQUFDLE9BQWlCO1FBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxTQUFTO1FBQ0wsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQzs7SUFDRCxXQUFXLENBQUMsT0FBaUI7SUFFN0IsQ0FBQztJQUNELEtBQUs7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBQ0QsNkJBQTZCO0lBQzdCLE1BQU0sQ0FBQyxlQUFlLEdBQVcsS0FBSztRQUNsQyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdkQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxRCxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEQsR0FBRyxDQUFBLENBQUMsSUFBSSxNQUFNLElBQUksVUFBVSxDQUFDLENBQUEsQ0FBQztZQUMxQixNQUFNLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUM5QixDQUFDO1FBQUEsQ0FBQztRQUNGLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLG9CQUFvQjtRQUNwQixPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQzdCLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxFQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFDLFlBQVksQ0FBQyxDQUN4RCxDQUFDO1FBQ0YsZUFBZTtRQUNmLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN0QixHQUFHLENBQUEsQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUEsQ0FBQztZQUN4QixZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUFBLENBQUM7UUFDRixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7YUFDdEIsSUFBSSxDQUFDO1lBQ0YsZ0JBQWdCO1lBQ2hCLEVBQUUsQ0FBQSxDQUFDLGVBQWUsQ0FBQyxDQUFBLENBQUM7Z0JBQ2hCLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsQ0FBQztZQUFBLENBQUM7WUFDRixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFFUCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDOztBQUNMLENBQUM7QUEzRFksbUJBQVcsY0EyRHZCLENBQUE7QUFBQSxDQUFDIn0=
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRuZ2lueC5jbGFzc2VzLm5naW54Y29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRuZ2lueC5jbGFzc2VzLm5naW54Y29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxNQUFZLE9BQU8sV0FBTSxzQkFBc0IsQ0FBQyxDQUFBO0FBQ2hELE1BQVksS0FBSyxXQUFNLG9CQUFvQixDQUFDLENBQUE7QUFDNUMsTUFBWSxRQUFRLFdBQU0sdUJBQXVCLENBQUMsQ0FBQTtBQUVsRCxrREFBNkIsbUNBQW1DLENBQUMsQ0FBQTtBQUNqRSxJQUFJLFVBQVUsR0FBa0IsRUFBRSxDQUFDO0FBRW5DOztHQUVHO0FBQ0g7SUFLSSxZQUFZLFVBQWdEO1FBSjVELFVBQUssR0FBZ0IsRUFBRSxDQUFDO1FBRXhCLGlCQUFZLEdBQWlCLElBQUksOENBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxlQUFVLEdBQVksS0FBSyxDQUFDO1FBRXhCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM5QixPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU87WUFDM0IsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO1lBQ3ZCLE1BQU0sRUFBRSxLQUFLLENBQUMsYUFBYTtZQUMzQixhQUFhLEVBQUUsVUFBVSxDQUFDLGFBQWE7WUFDdkMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1NBQ2hDLENBQUMsQ0FBQztJQUNQLENBQUM7O0lBRUQsc0JBQXNCO0lBQ3RCLE9BQU8sQ0FBQyxZQUF1QjtRQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsU0FBUztRQUNMLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7O0lBQ0QsVUFBVSxDQUFDLFlBQXVCO0lBRWxDLENBQUM7SUFDRCxLQUFLO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUNELDZCQUE2QjtJQUM3QixNQUFNO1FBQ0YsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFELE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM1RCxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELEdBQUcsQ0FBQyxDQUFDLElBQUksTUFBTSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDNUIsTUFBTSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDOUIsQ0FBQztRQUFBLENBQUM7UUFDRixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixvQkFBb0I7UUFDcEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUM3QixRQUFRLENBQUMsbUJBQW1CLEVBQUUsRUFDOUIsS0FBSyxDQUFDLGFBQWEsQ0FDdEIsQ0FBQztRQUNGLGVBQWU7UUFDZixJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdEIsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqRCxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsWUFBWSxDQUFDLENBQUM7Z0JBQzFELElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDckMsQ0FBQyxDQUFDLENBQUM7WUFDSCxZQUFZLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUFBLENBQUM7UUFDRixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7YUFDdEIsSUFBSSxDQUFDO1lBQ0YsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO1FBRVAsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQzs7QUFDTCxDQUFDO0FBNURZLG1CQUFXLGNBNER2QixDQUFBO0FBQUEsQ0FBQyJ9
|
25
dist/smartnginx.classes.nginxhost.d.ts
vendored
Normal file
25
dist/smartnginx.classes.nginxhost.d.ts
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
/// <reference types="q" />
|
||||||
|
import * as plugins from "./smartnginx.plugins";
|
||||||
|
/**
|
||||||
|
* the host config data that NginxHost needs to create a valid instance
|
||||||
|
*/
|
||||||
|
export interface IHostConfigData {
|
||||||
|
hostName: string;
|
||||||
|
type: hostTypes;
|
||||||
|
destination: string;
|
||||||
|
}
|
||||||
|
export declare enum hostTypes {
|
||||||
|
reverseProxy = 0,
|
||||||
|
static = 1,
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* manages a single nginx host
|
||||||
|
*/
|
||||||
|
export declare class NginxHost {
|
||||||
|
hostName: string;
|
||||||
|
type: hostTypes;
|
||||||
|
destination: string;
|
||||||
|
configString: string;
|
||||||
|
constructor(optionsArg: IHostConfigData);
|
||||||
|
deploy(certInstanceArg: plugins.cert.Cert): plugins.q.Promise<{}>;
|
||||||
|
}
|
35
dist/smartnginx.classes.nginxhost.js
vendored
Normal file
35
dist/smartnginx.classes.nginxhost.js
vendored
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
"use strict";
|
||||||
|
const plugins = require("./smartnginx.plugins");
|
||||||
|
const paths = require("./smartnginx.paths");
|
||||||
|
const snippets = require("./smartnginx.snippets");
|
||||||
|
(function (hostTypes) {
|
||||||
|
hostTypes[hostTypes["reverseProxy"] = 0] = "reverseProxy";
|
||||||
|
hostTypes[hostTypes["static"] = 1] = "static";
|
||||||
|
})(exports.hostTypes || (exports.hostTypes = {}));
|
||||||
|
var hostTypes = exports.hostTypes;
|
||||||
|
/**
|
||||||
|
* manages a single nginx host
|
||||||
|
*/
|
||||||
|
class NginxHost {
|
||||||
|
constructor(optionsArg) {
|
||||||
|
this.hostName = optionsArg.hostName;
|
||||||
|
this.type = optionsArg.type;
|
||||||
|
this.destination = optionsArg.destination;
|
||||||
|
this.configString = snippets.getHostConfigString(optionsArg.hostName, optionsArg.destination);
|
||||||
|
}
|
||||||
|
;
|
||||||
|
deploy(certInstanceArg) {
|
||||||
|
let done = plugins.q.defer();
|
||||||
|
let filePath = plugins.path.join(paths.nginxHostFileBase, this.hostName + ".conf");
|
||||||
|
// writeConfig
|
||||||
|
plugins.smartfile.memory.toFsSync(this.configString, filePath);
|
||||||
|
// get cert
|
||||||
|
certInstanceArg.getDomainCert(this.hostName)
|
||||||
|
.then(done.resolve);
|
||||||
|
return done.promise;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
}
|
||||||
|
exports.NginxHost = NginxHost;
|
||||||
|
;
|
||||||
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRuZ2lueC5jbGFzc2VzLm5naW54aG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0bmdpbnguY2xhc3Nlcy5uZ2lueGhvc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLHNCQUFzQixDQUFDLENBQUE7QUFDaEQsTUFBWSxLQUFLLFdBQU0sb0JBQW9CLENBQUMsQ0FBQTtBQUM1QyxNQUFZLFFBQVEsV0FBTSx1QkFLMUIsQ0FBQyxDQUxnRDtBQVdqRCxXQUFZLFNBQVM7SUFDakIseURBQVksQ0FBQTtJQUNaLDZDQUFNLENBQUE7QUFDVixDQUFDLEVBSFcsaUJBQVMsS0FBVCxpQkFBUyxRQUdwQjtBQUhELElBQVksU0FBUyxHQUFULGlCQUdYLENBQUE7QUFFRDs7R0FFRztBQUNIO0lBS0ksWUFBWSxVQUEwQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztRQUMxQyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRyxDQUFDOztJQUNELE1BQU0sQ0FBQyxlQUFrQztRQUNyQyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQ25GLGNBQWM7UUFDZCxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvRCxXQUFXO1FBQ1gsZUFBZSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQzs7QUFDTCxDQUFDO0FBckJZLGlCQUFTLFlBcUJyQixDQUFBO0FBQUEsQ0FBQyJ9
|
29
dist/smartnginx.classes.nginxprocess.d.ts
vendored
Normal file
29
dist/smartnginx.classes.nginxprocess.d.ts
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/// <reference types="node" />
|
||||||
|
/// <reference types="q" />
|
||||||
|
import * as plugins from "./smartnginx.plugins";
|
||||||
|
import { NginxConfig } from "./smartnginx.classes.nginxconfig";
|
||||||
|
/**
|
||||||
|
* manages a nginxprocess for an NginxConfig
|
||||||
|
*/
|
||||||
|
export declare class NginxProcess {
|
||||||
|
started: boolean;
|
||||||
|
nginxConfig: NginxConfig;
|
||||||
|
nginxChildProcess: plugins.childProcess.ChildProcess;
|
||||||
|
constructor(nginxConfigArg: any);
|
||||||
|
/**
|
||||||
|
* start nginx
|
||||||
|
*/
|
||||||
|
start(): plugins.q.Promise<{}>;
|
||||||
|
/**
|
||||||
|
* reload config
|
||||||
|
*/
|
||||||
|
reloadConfig(): plugins.q.Promise<{}>;
|
||||||
|
/**
|
||||||
|
* stop the nginx instance
|
||||||
|
*/
|
||||||
|
stop(): plugins.q.Promise<{}>;
|
||||||
|
/**
|
||||||
|
* checks if nginx is in path
|
||||||
|
*/
|
||||||
|
check(): boolean;
|
||||||
|
}
|
79
dist/smartnginx.classes.nginxprocess.js
vendored
Normal file
79
dist/smartnginx.classes.nginxprocess.js
vendored
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
"use strict";
|
||||||
|
const plugins = require("./smartnginx.plugins");
|
||||||
|
const paths = require("./smartnginx.paths");
|
||||||
|
/**
|
||||||
|
* manages a nginxprocess for an NginxConfig
|
||||||
|
*/
|
||||||
|
class NginxProcess {
|
||||||
|
constructor(nginxConfigArg) {
|
||||||
|
this.started = false;
|
||||||
|
this.nginxConfig = nginxConfigArg;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
/**
|
||||||
|
* start nginx
|
||||||
|
*/
|
||||||
|
start() {
|
||||||
|
let done = plugins.q.defer();
|
||||||
|
if (typeof this.nginxChildProcess == "undefined") {
|
||||||
|
this.nginxChildProcess = plugins.childProcess.exec(`nginx -c ${paths.nginxConfFile}`, function (error, stdout, stderr) {
|
||||||
|
console.log(`stdout: ${stdout}`);
|
||||||
|
console.log(`stderr: ${stderr}`);
|
||||||
|
if (error !== null) {
|
||||||
|
console.log(`exec error: ${error}`);
|
||||||
|
}
|
||||||
|
;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
;
|
||||||
|
this.started = true;
|
||||||
|
plugins.beautylog.info("started Nginx!");
|
||||||
|
done.resolve();
|
||||||
|
return done.promise;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
/**
|
||||||
|
* reload config
|
||||||
|
*/
|
||||||
|
reloadConfig() {
|
||||||
|
let done = plugins.q.defer();
|
||||||
|
if (this.started == false) {
|
||||||
|
this.start();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
plugins.shelljs.exec("nginx -s reload");
|
||||||
|
}
|
||||||
|
;
|
||||||
|
plugins.beautylog.ok("NginxProcess has loaded the new config!");
|
||||||
|
done.resolve();
|
||||||
|
return done.promise;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
/**
|
||||||
|
* stop the nginx instance
|
||||||
|
*/
|
||||||
|
stop() {
|
||||||
|
let done = plugins.q.defer();
|
||||||
|
if (typeof this.nginxChildProcess != "undefined") {
|
||||||
|
plugins.shelljs.exec("nginx -s quit");
|
||||||
|
this.started = false;
|
||||||
|
plugins.beautylog.info("stopped Nginx!");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
plugins.beautylog.log("nginx already stopped!");
|
||||||
|
}
|
||||||
|
;
|
||||||
|
done.resolve();
|
||||||
|
return done.promise;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
/**
|
||||||
|
* checks if nginx is in path
|
||||||
|
*/
|
||||||
|
check() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
}
|
||||||
|
exports.NginxProcess = NginxProcess;
|
||||||
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRuZ2lueC5jbGFzc2VzLm5naW54cHJvY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0bmdpbnguY2xhc3Nlcy5uZ2lueHByb2Nlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLHNCQUFzQixDQUFDLENBQUE7QUFDaEQsTUFBWSxLQUFLLFdBQU0sb0JBQW9CLENBQUMsQ0FBQTtBQUk1Qzs7R0FFRztBQUNIO0lBSUksWUFBWSxjQUFjO1FBSDFCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFJckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUM7SUFDdEMsQ0FBQzs7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDRCxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixJQUFJLFdBQVcsQ0FBQyxDQUFBLENBQUM7WUFDOUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxDQUFDLGFBQWEsRUFBRSxFQUFFLFVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNO2dCQUNqSCxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQ2pDLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDeEMsQ0FBQztnQkFBQSxDQUFDO1lBQ04sQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBQUEsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQzs7SUFFRDs7T0FFRztJQUNILFlBQVk7UUFDUixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLEVBQUUsQ0FBQSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLENBQUEsQ0FBQztZQUN0QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakIsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQUEsQ0FBQztRQUNGLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLHlDQUF5QyxDQUFDLENBQUE7UUFDL0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQzs7SUFFRDs7T0FFRztJQUNILElBQUk7UUFDQSxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDL0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFBQSxDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQzs7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDRCxNQUFNLENBQUM7SUFDWCxDQUFDOztBQUNMLENBQUM7QUFqRVksb0JBQVksZUFpRXhCLENBQUEifQ==
|
18
dist/smartnginx.classes.nginxzone.d.ts
vendored
18
dist/smartnginx.classes.nginxzone.d.ts
vendored
@ -1,18 +0,0 @@
|
|||||||
/// <reference types="q" />
|
|
||||||
import * as plugins from "./smartnginx.plugins";
|
|
||||||
export declare enum zoneTypes {
|
|
||||||
reverseProxy = 0,
|
|
||||||
static = 1,
|
|
||||||
}
|
|
||||||
export declare class NginxZone {
|
|
||||||
zoneName: string;
|
|
||||||
type: zoneTypes;
|
|
||||||
destination: string;
|
|
||||||
configString: string;
|
|
||||||
constructor(optionsArg: {
|
|
||||||
zoneName: string;
|
|
||||||
type: zoneTypes;
|
|
||||||
destination: string;
|
|
||||||
});
|
|
||||||
deploy(certInstanceArg: plugins.cert.Cert): plugins.q.Promise<{}>;
|
|
||||||
}
|
|
32
dist/smartnginx.classes.nginxzone.js
vendored
32
dist/smartnginx.classes.nginxzone.js
vendored
@ -1,32 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
const plugins = require("./smartnginx.plugins");
|
|
||||||
const paths = require("./smartnginx.paths");
|
|
||||||
const snippets = require("./smartnginx.snippets");
|
|
||||||
(function (zoneTypes) {
|
|
||||||
zoneTypes[zoneTypes["reverseProxy"] = 0] = "reverseProxy";
|
|
||||||
zoneTypes[zoneTypes["static"] = 1] = "static";
|
|
||||||
})(exports.zoneTypes || (exports.zoneTypes = {}));
|
|
||||||
var zoneTypes = exports.zoneTypes;
|
|
||||||
class NginxZone {
|
|
||||||
constructor(optionsArg) {
|
|
||||||
this.zoneName = optionsArg.zoneName;
|
|
||||||
this.type = optionsArg.type;
|
|
||||||
this.destination = optionsArg.destination;
|
|
||||||
this.configString = snippets.getZoneConfigString(optionsArg.zoneName, optionsArg.destination);
|
|
||||||
}
|
|
||||||
;
|
|
||||||
deploy(certInstanceArg) {
|
|
||||||
let done = plugins.q.defer();
|
|
||||||
let filePath = plugins.path.join(paths.nginxZoneBase, this.zoneName + ".conf");
|
|
||||||
// writeConfig
|
|
||||||
plugins.smartfile.memory.toFsSync(this.configString, filePath);
|
|
||||||
// get cert
|
|
||||||
certInstanceArg.getDomainCert(this.zoneName)
|
|
||||||
.then(done.resolve);
|
|
||||||
return done.promise;
|
|
||||||
}
|
|
||||||
;
|
|
||||||
}
|
|
||||||
exports.NginxZone = NginxZone;
|
|
||||||
;
|
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRuZ2lueC5jbGFzc2VzLm5naW54em9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0bmdpbnguY2xhc3Nlcy5uZ2lueHpvbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLHNCQUFzQixDQUFDLENBQUE7QUFDaEQsTUFBWSxLQUFLLFdBQU0sb0JBQW9CLENBQUMsQ0FBQTtBQUU1QyxNQUFZLFFBQVEsV0FBTSx1QkFDMUIsQ0FBQyxDQURnRDtBQUNqRCxXQUFZLFNBQVM7SUFDZCx5REFBWSxDQUFBO0lBQ1osNkNBQU0sQ0FBQTtBQUNiLENBQUMsRUFIVyxpQkFBUyxLQUFULGlCQUFTLFFBR3BCO0FBSEQsSUFBWSxTQUFTLEdBQVQsaUJBR1gsQ0FBQTtBQUVEO0lBS0ksWUFBWSxVQUlYO1FBQ0csSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUM7UUFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDakcsQ0FBQzs7SUFDRCxNQUFNLENBQUMsZUFBaUM7UUFDcEMsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDOUUsY0FBYztRQUNkLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlELFdBQVc7UUFDWCxlQUFlLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDOztBQUNMLENBQUM7QUF6QlksaUJBQVMsWUF5QnJCLENBQUE7QUFBQSxDQUFDIn0=
|
|
19
dist/smartnginx.command.d.ts
vendored
19
dist/smartnginx.command.d.ts
vendored
@ -1,19 +0,0 @@
|
|||||||
/// <reference types="q" />
|
|
||||||
import * as plugins from "./smartnginx.plugins";
|
|
||||||
import { NginxConfig } from "./smartnginx.classes.nginxconfig";
|
|
||||||
/**
|
|
||||||
* starts nginx
|
|
||||||
*/
|
|
||||||
export declare let start: (configArg: NginxConfig) => plugins.q.Promise<{}>;
|
|
||||||
/**
|
|
||||||
* restarts nginx
|
|
||||||
*/
|
|
||||||
export declare let restart: (configArg: NginxConfig) => plugins.q.Promise<{}>;
|
|
||||||
/**
|
|
||||||
* stops nginx
|
|
||||||
*/
|
|
||||||
export declare let stop: () => plugins.q.Promise<{}>;
|
|
||||||
/**
|
|
||||||
* checks if nginx is in path
|
|
||||||
*/
|
|
||||||
export declare let check: () => boolean;
|
|
53
dist/smartnginx.command.js
vendored
53
dist/smartnginx.command.js
vendored
@ -1,53 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
const plugins = require("./smartnginx.plugins");
|
|
||||||
let nginxChildProcess = undefined; // points to the nginx child process
|
|
||||||
/**
|
|
||||||
* starts nginx
|
|
||||||
*/
|
|
||||||
exports.start = (configArg) => {
|
|
||||||
let done = plugins.q.defer();
|
|
||||||
if (typeof nginxChildProcess == "undefined") {
|
|
||||||
nginxChildProcess = plugins.childProcess.exec("nginx", function (error, stdout, stderr) {
|
|
||||||
console.log(`stdout: ${stdout}`);
|
|
||||||
console.log(`stderr: ${stderr}`);
|
|
||||||
if (error !== null) {
|
|
||||||
console.log(`exec error: ${error}`);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
;
|
|
||||||
plugins.beautylog.info("started Nginx!");
|
|
||||||
done.resolve();
|
|
||||||
return done.promise;
|
|
||||||
};
|
|
||||||
/**
|
|
||||||
* restarts nginx
|
|
||||||
*/
|
|
||||||
exports.restart = (configArg) => {
|
|
||||||
return exports.stop().then(() => {
|
|
||||||
return exports.start(configArg);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
/**
|
|
||||||
* stops nginx
|
|
||||||
*/
|
|
||||||
exports.stop = () => {
|
|
||||||
let done = plugins.q.defer();
|
|
||||||
if (typeof nginxChildProcess != "undefined") {
|
|
||||||
nginxChildProcess.kill();
|
|
||||||
plugins.beautylog.info("stopped Nginx!");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
plugins.beautylog.log("nginx already stopped!");
|
|
||||||
}
|
|
||||||
;
|
|
||||||
done.resolve();
|
|
||||||
return done.promise;
|
|
||||||
};
|
|
||||||
/**
|
|
||||||
* checks if nginx is in path
|
|
||||||
*/
|
|
||||||
exports.check = () => {
|
|
||||||
return;
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRuZ2lueC5jb21tYW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRuZ2lueC5jb21tYW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxNQUFZLE9BQU8sV0FBTSxzQkFBc0IsQ0FBQyxDQUFBO0FBS2hELElBQUksaUJBQWlCLEdBQUcsU0FBUyxDQUFDLENBQUMsb0NBQW9DO0FBR3ZFOztHQUVHO0FBQ1EsYUFBSyxHQUFHLENBQUMsU0FBcUI7SUFDckMsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixFQUFFLENBQUEsQ0FBQyxPQUFPLGlCQUFpQixJQUFJLFdBQVcsQ0FBQyxDQUFBLENBQUM7UUFDeEMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFDLFVBQVMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNO1lBQ2hGLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2pDLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN4QyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQUEsQ0FBQztJQUNGLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDekMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDUSxlQUFPLEdBQUcsQ0FBQyxTQUFxQjtJQUN2QyxNQUFNLENBQUMsWUFBSSxFQUFFLENBQUMsSUFBSSxDQUNkO1FBQ0ksTUFBTSxDQUFDLGFBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QixDQUFDLENBQ0osQ0FBQztBQUNOLENBQUMsQ0FBQTtBQUVEOztHQUVHO0FBQ1EsWUFBSSxHQUFHO0lBQ2QsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixFQUFFLENBQUEsQ0FBQyxPQUFPLGlCQUFpQixJQUFJLFdBQVcsQ0FBQyxDQUFBLENBQUM7UUFDeEMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDUSxhQUFLLEdBQUc7SUFDZixNQUFNLENBQUM7QUFDWCxDQUFDLENBQUMifQ==
|
|
3
dist/smartnginx.paths.d.ts
vendored
3
dist/smartnginx.paths.d.ts
vendored
@ -1,4 +1,5 @@
|
|||||||
export declare let packageBase: string;
|
export declare let packageBase: string;
|
||||||
export declare let nginxConfigBase: string;
|
export declare let nginxConfigBase: string;
|
||||||
export declare let nginxZoneBase: string;
|
export declare let nginxHostFileBase: string;
|
||||||
export declare let nginxCertBase: string;
|
export declare let nginxCertBase: string;
|
||||||
|
export declare let nginxConfFile: string;
|
||||||
|
7
dist/smartnginx.paths.js
vendored
7
dist/smartnginx.paths.js
vendored
@ -1,7 +1,10 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
const plugins = require("./smartnginx.plugins");
|
const plugins = require("./smartnginx.plugins");
|
||||||
|
// directories
|
||||||
exports.packageBase = plugins.path.join(__dirname, "../");
|
exports.packageBase = plugins.path.join(__dirname, "../");
|
||||||
exports.nginxConfigBase = plugins.path.join(exports.packageBase, "nginxconfig");
|
exports.nginxConfigBase = plugins.path.join(exports.packageBase, "nginxconfig");
|
||||||
exports.nginxZoneBase = plugins.path.join(exports.nginxConfigBase, "zones");
|
exports.nginxHostFileBase = plugins.path.join(exports.nginxConfigBase, "hosts");
|
||||||
exports.nginxCertBase = plugins.path.join(exports.nginxConfigBase, "cert");
|
exports.nginxCertBase = plugins.path.join(exports.nginxConfigBase, "cert");
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRuZ2lueC5wYXRocy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0bmdpbngucGF0aHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLHNCQUV6QixDQUFDLENBRjhDO0FBRXBDLG1CQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pELHVCQUFlLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQVcsRUFBQyxhQUFhLENBQUMsQ0FBQztBQUMvRCxxQkFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUFlLEVBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0QscUJBQWEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBZSxFQUFDLE1BQU0sQ0FBQyxDQUFDIn0=
|
// files
|
||||||
|
exports.nginxConfFile = plugins.path.join(exports.nginxConfigBase, "nginx.conf");
|
||||||
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRuZ2lueC5wYXRocy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0bmdpbngucGF0aHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLHNCQUd6QixDQUFDLENBSDhDO0FBRS9DLGNBQWM7QUFDSCxtQkFBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBQyxLQUFLLENBQUMsQ0FBQztBQUNqRCx1QkFBZSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFXLEVBQUMsYUFBYSxDQUFDLENBQUM7QUFDL0QseUJBQWlCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQWUsRUFBQyxPQUFPLENBQUMsQ0FBQztBQUMvRCxxQkFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUFlLEVBQUMsTUFBTSxDQUFDLENBQUM7QUFFckUsUUFBUTtBQUNHLHFCQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQWUsRUFBQyxZQUFZLENBQUMsQ0FBQyJ9
|
2
dist/smartnginx.snippets.d.ts
vendored
2
dist/smartnginx.snippets.d.ts
vendored
@ -1,2 +1,2 @@
|
|||||||
export declare let getBaseConfigString: () => string;
|
export declare let getBaseConfigString: () => string;
|
||||||
export declare let getZoneConfigString: (zoneNameArg: string, destinationIpArg: string) => string;
|
export declare let getHostConfigString: (hostNameArg: string, destinationIpArg: string) => string;
|
||||||
|
20
dist/smartnginx.snippets.js
vendored
20
dist/smartnginx.snippets.js
vendored
@ -70,26 +70,26 @@ exports.getBaseConfigString = () => {
|
|||||||
`);
|
`);
|
||||||
return baseConfig;
|
return baseConfig;
|
||||||
};
|
};
|
||||||
exports.getZoneConfigString = (zoneNameArg, destinationIpArg) => {
|
exports.getHostConfigString = (hostNameArg, destinationIpArg) => {
|
||||||
let zoneConfig = plugins.smartstring.indent.normalize(`
|
let hostConfig = plugins.smartstring.indent.normalize(`
|
||||||
upstream ${zoneNameArg} {
|
upstream ${hostNameArg} {
|
||||||
server ${destinationIpArg};
|
server ${destinationIpArg};
|
||||||
}
|
}
|
||||||
|
|
||||||
server {
|
server {
|
||||||
listen *:80 ;
|
listen *:80 ;
|
||||||
server_name ${zoneNameArg};
|
server_name ${hostNameArg};
|
||||||
rewrite ^ https://${zoneNameArg}$request_uri? permanent;
|
rewrite ^ https://${hostNameArg}$request_uri? permanent;
|
||||||
}
|
}
|
||||||
|
|
||||||
server {
|
server {
|
||||||
listen *:443 ssl;
|
listen *:443 ssl;
|
||||||
server_name ${zoneNameArg};
|
server_name ${hostNameArg};
|
||||||
ssl_certificate /LE_CERTS/${zoneNameArg}/fullchain.pem;
|
ssl_certificate /LE_CERTS/${hostNameArg}/fullchain.pem;
|
||||||
ssl_certificate_key /LE_CERTS/${zoneNameArg}/privkey.pem;
|
ssl_certificate_key /LE_CERTS/${hostNameArg}/privkey.pem;
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
proxy_pass http://${zoneNameArg};
|
proxy_pass http://${hostNameArg};
|
||||||
include /etc/nginx/proxy_params;
|
include /etc/nginx/proxy_params;
|
||||||
}
|
}
|
||||||
location ~ /\.git {
|
location ~ /\.git {
|
||||||
@ -97,6 +97,6 @@ exports.getZoneConfigString = (zoneNameArg, destinationIpArg) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
`);
|
`);
|
||||||
return zoneConfig;
|
return hostConfig;
|
||||||
};
|
};
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRuZ2lueC5zbmlwcGV0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0bmdpbnguc25pcHBldHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLHNCQUFzQixDQUFDLENBQUE7QUFDckMsMkJBQW1CLEdBQUc7SUFDaEMsSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFrRXJELENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUM7QUFDbkIsQ0FBQyxDQUFBO0FBR1UsMkJBQW1CLEdBQUcsQ0FBQyxXQUFrQixFQUFDLGdCQUF1QjtJQUMzRSxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7YUFDMUMsV0FBVztZQUNaLGdCQUFnQjs7Ozs7aUJBS1gsV0FBVzs4QkFDRSxXQUFXOzs7OztpQkFLeEIsV0FBVzsrQkFDRyxXQUFXO21DQUNQLFdBQVc7Ozt3QkFHdEIsV0FBVzs7Ozs7OztFQU9qQyxDQUFDLENBQUM7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQ25CLENBQUMsQ0FBQyJ9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRuZ2lueC5zbmlwcGV0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0bmdpbnguc25pcHBldHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQVksT0FBTyxXQUFNLHNCQUFzQixDQUFDLENBQUE7QUFDckMsMkJBQW1CLEdBQUc7SUFDaEMsSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFrRXJELENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUM7QUFDbkIsQ0FBQyxDQUFBO0FBR1UsMkJBQW1CLEdBQUcsQ0FBQyxXQUFrQixFQUFDLGdCQUF1QjtJQUMzRSxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7YUFDMUMsV0FBVztZQUNaLGdCQUFnQjs7Ozs7aUJBS1gsV0FBVzs4QkFDRSxXQUFXOzs7OztpQkFLeEIsV0FBVzsrQkFDRyxXQUFXO21DQUNQLFdBQVc7Ozt3QkFHdEIsV0FBVzs7Ozs7OztFQU9qQyxDQUFDLENBQUM7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQ25CLENBQUMsQ0FBQyJ9
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "smartnginx",
|
"name": "smartnginx",
|
||||||
"version": "0.0.7",
|
"version": "1.0.2",
|
||||||
"description": "control nginx from node, TypeScript ready",
|
"description": "control nginx from node, TypeScript ready",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"typings": "dist/index.d.ts",
|
"typings": "dist/index.d.ts",
|
||||||
@ -24,10 +24,10 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/q": "^0.0.27",
|
"@types/q": "^0.0.27",
|
||||||
"@types/shelljs": "^0.3.27",
|
"@types/shelljs": "^0.3.27",
|
||||||
"beautylog": "^5.0.14",
|
"beautylog": "^5.0.18",
|
||||||
"cert": "0.0.17",
|
"cert": "1.0.6",
|
||||||
"q": "^1.4.1",
|
"q": "^1.4.1",
|
||||||
"shelljs": "^0.7.0",
|
"shelljs": "^0.7.1",
|
||||||
"smartfile": "^4.0.12",
|
"smartfile": "^4.0.12",
|
||||||
"smartstring": "^2.0.15"
|
"smartstring": "^2.0.15"
|
||||||
},
|
},
|
||||||
|
28
test/test.js
28
test/test.js
@ -12,21 +12,22 @@ describe("smartnginx", function () {
|
|||||||
let testNginxZone02;
|
let testNginxZone02;
|
||||||
describe("NginxZone", function () {
|
describe("NginxZone", function () {
|
||||||
it(`"new NginxZone()" should produce an instance of NginxConfig`, function () {
|
it(`"new NginxZone()" should produce an instance of NginxConfig`, function () {
|
||||||
testNginxZone01 = new smartnginx.NginxZone({
|
testNginxZone01 = new smartnginx.NginxHost({
|
||||||
zoneName: "test100.bleu.de",
|
hostName: "test100.bleu.de",
|
||||||
type: smartnginx.zoneTypes.reverseProxy,
|
type: smartnginx.hostTypes.reverseProxy,
|
||||||
destination: "192.192.192.191"
|
destination: "192.192.192.191"
|
||||||
});
|
});
|
||||||
testNginxZone02 = new smartnginx.NginxZone({
|
testNginxZone02 = new smartnginx.NginxHost({
|
||||||
zoneName: "test102.bleu.de",
|
hostName: "test102.bleu.de",
|
||||||
type: smartnginx.zoneTypes.reverseProxy,
|
type: smartnginx.hostTypes.reverseProxy,
|
||||||
destination: "192.192.192.192"
|
destination: "192.192.192.192"
|
||||||
});
|
});
|
||||||
testNginxZone01.should.be.instanceof(smartnginx.NginxZone);
|
testNginxZone01.should.be.instanceof(smartnginx.NginxHost);
|
||||||
console.log(testNginxZone01.configString);
|
console.log(testNginxZone01.configString);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe("NginxConfig", function () {
|
describe("NginxConfig", function () {
|
||||||
|
this.timeout(10000);
|
||||||
it(`"new NginxConfig()" should produce an instance of NginxConfig`, function () {
|
it(`"new NginxConfig()" should produce an instance of NginxConfig`, function () {
|
||||||
testNginxConfig = new smartnginx.NginxConfig({
|
testNginxConfig = new smartnginx.NginxConfig({
|
||||||
cfEmail: process.env.CF_EMAIL,
|
cfEmail: process.env.CF_EMAIL,
|
||||||
@ -37,12 +38,12 @@ describe("smartnginx", function () {
|
|||||||
});
|
});
|
||||||
describe(".addZone()", function () {
|
describe(".addZone()", function () {
|
||||||
it("should add a zone to NginxConfig Object", function () {
|
it("should add a zone to NginxConfig Object", function () {
|
||||||
testNginxConfig.addZone(testNginxZone01);
|
testNginxConfig.addHost(testNginxZone01);
|
||||||
testNginxConfig.addZone(testNginxZone02);
|
testNginxConfig.addHost(testNginxZone02);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe(".deploy()", function () {
|
describe(".deploy()", function () {
|
||||||
this.timeout(240000);
|
this.timeout(600000);
|
||||||
it("should deploy a config from an instance", function (done) {
|
it("should deploy a config from an instance", function (done) {
|
||||||
testNginxConfig.deploy()
|
testNginxConfig.deploy()
|
||||||
.then(() => {
|
.then(() => {
|
||||||
@ -50,6 +51,11 @@ describe("smartnginx", function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
describe(".stop", function () {
|
||||||
|
it("should end the process", function () {
|
||||||
|
testNginxConfig.nginxProcess.stop();
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFDdEIsTUFBTyxJQUFJLFdBQVcsTUFBTSxDQUFDLENBQUM7QUFDOUIsUUFBTyxRQUFRLENBQUMsQ0FBQTtBQUNoQix1QkFBbUIsTUFBTSxDQUFDLENBQUE7QUFDMUIsTUFBWSxVQUFVLFdBQU0sZUFBZSxDQUFDLENBQUE7QUFFNUMsb0JBQW9CO0FBQ3BCLElBQUksUUFBUSxHQUFHLElBQUksV0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLFFBQVEsQ0FBQyxZQUFZLEVBQUM7SUFDbEIsSUFBSSxlQUFzQyxDQUFDO0lBQzNDLElBQUksZUFBb0MsQ0FBQztJQUN6QyxJQUFJLGVBQW9DLENBQUM7SUFDekMsUUFBUSxDQUFDLFdBQVcsRUFBQztRQUNqQixFQUFFLENBQUMsNkRBQTZELEVBQUM7WUFDN0QsZUFBZSxHQUFHLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQztnQkFDdkMsUUFBUSxFQUFDLGlCQUFpQjtnQkFDMUIsSUFBSSxFQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsWUFBWTtnQkFDdEMsV0FBVyxFQUFDLGlCQUFpQjthQUNoQyxDQUFDLENBQUM7WUFDSCxlQUFlLEdBQUcsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDO2dCQUN2QyxRQUFRLEVBQUMsaUJBQWlCO2dCQUMxQixJQUFJLEVBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxZQUFZO2dCQUN0QyxXQUFXLEVBQUMsaUJBQWlCO2FBQ2hDLENBQUMsQ0FBQztZQUNILGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQztJQUNILFFBQVEsQ0FBQyxhQUFhLEVBQUM7UUFDbkIsRUFBRSxDQUFDLCtEQUErRCxFQUFDO1lBQy9ELGVBQWUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUM7Z0JBQ3pDLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVE7Z0JBQzdCLEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU07Z0JBQ3pCLFFBQVEsRUFBQyxJQUFJO2FBQ2hCLENBQUMsQ0FBQztZQUNILGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsWUFBWSxFQUFDO1lBQ2xCLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBQztnQkFDekMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDekMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUM3QyxDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLFdBQVcsRUFBQztZQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JCLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBQyxVQUFTLElBQUk7Z0JBQ3RELGVBQWUsQ0FBQyxNQUFNLEVBQUU7cUJBQ25CLElBQUksQ0FBQztvQkFDRixJQUFJLEVBQUUsQ0FBQztnQkFDWCxDQUFDLENBQUMsQ0FBQztZQUNYLENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyxDQUFDIn0=
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFDdEIsTUFBTyxJQUFJLFdBQVcsTUFBTSxDQUFDLENBQUM7QUFDOUIsUUFBTyxRQUFRLENBQUMsQ0FBQTtBQUNoQix1QkFBbUIsTUFBTSxDQUFDLENBQUE7QUFDMUIsTUFBWSxVQUFVLFdBQU0sZUFBZSxDQUFDLENBQUE7QUFFNUMsb0JBQW9CO0FBQ3BCLElBQUksUUFBUSxHQUFHLElBQUksV0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLFFBQVEsQ0FBQyxZQUFZLEVBQUM7SUFDbEIsSUFBSSxlQUFzQyxDQUFDO0lBQzNDLElBQUksZUFBb0MsQ0FBQztJQUN6QyxJQUFJLGVBQW9DLENBQUM7SUFDekMsUUFBUSxDQUFDLFdBQVcsRUFBQztRQUNqQixFQUFFLENBQUMsNkRBQTZELEVBQUM7WUFDN0QsZUFBZSxHQUFHLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQztnQkFDdkMsUUFBUSxFQUFDLGlCQUFpQjtnQkFDMUIsSUFBSSxFQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsWUFBWTtnQkFDdEMsV0FBVyxFQUFDLGlCQUFpQjthQUNoQyxDQUFDLENBQUM7WUFDSCxlQUFlLEdBQUcsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDO2dCQUN2QyxRQUFRLEVBQUMsaUJBQWlCO2dCQUMxQixJQUFJLEVBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxZQUFZO2dCQUN0QyxXQUFXLEVBQUMsaUJBQWlCO2FBQ2hDLENBQUMsQ0FBQztZQUNILGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQztJQUNILFFBQVEsQ0FBQyxhQUFhLEVBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQixFQUFFLENBQUMsK0RBQStELEVBQUM7WUFDL0QsZUFBZSxHQUFHLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQztnQkFDekMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUTtnQkFDN0IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTTtnQkFDekIsUUFBUSxFQUFDLElBQUk7YUFDaEIsQ0FBQyxDQUFDO1lBQ0gsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxZQUFZLEVBQUM7WUFDbEIsRUFBRSxDQUFDLHlDQUF5QyxFQUFDO2dCQUN6QyxlQUFlLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUN6QyxlQUFlLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzdDLENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQyxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsV0FBVyxFQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckIsRUFBRSxDQUFDLHlDQUF5QyxFQUFDLFVBQVMsSUFBSTtnQkFDdEQsZUFBZSxDQUFDLE1BQU0sRUFBRTtxQkFDbkIsSUFBSSxDQUFDO29CQUNGLElBQUksRUFBRSxDQUFDO2dCQUNYLENBQUMsQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUE7UUFDTixDQUFDLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxPQUFPLEVBQUM7WUFDYixFQUFFLENBQUMsd0JBQXdCLEVBQUM7Z0JBQ3hCLGVBQWUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUE7UUFDTixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDLENBQUMifQ==
|
30
test/test.ts
30
test/test.ts
@ -8,25 +8,26 @@ import * as smartnginx from "../dist/index";
|
|||||||
let testQenv = new Qenv(process.cwd(),path.join(process.cwd(),".nogit"));
|
let testQenv = new Qenv(process.cwd(),path.join(process.cwd(),".nogit"));
|
||||||
describe("smartnginx",function(){
|
describe("smartnginx",function(){
|
||||||
let testNginxConfig:smartnginx.NginxConfig;
|
let testNginxConfig:smartnginx.NginxConfig;
|
||||||
let testNginxZone01:smartnginx.NginxZone;
|
let testNginxZone01:smartnginx.NginxHost;
|
||||||
let testNginxZone02:smartnginx.NginxZone;
|
let testNginxZone02:smartnginx.NginxHost;
|
||||||
describe("NginxZone",function(){
|
describe("NginxZone",function(){
|
||||||
it(`"new NginxZone()" should produce an instance of NginxConfig`,function(){
|
it(`"new NginxZone()" should produce an instance of NginxConfig`,function(){
|
||||||
testNginxZone01 = new smartnginx.NginxZone({
|
testNginxZone01 = new smartnginx.NginxHost({
|
||||||
zoneName:"test100.bleu.de",
|
hostName:"test100.bleu.de",
|
||||||
type:smartnginx.zoneTypes.reverseProxy,
|
type:smartnginx.hostTypes.reverseProxy,
|
||||||
destination:"192.192.192.191"
|
destination:"192.192.192.191"
|
||||||
});
|
});
|
||||||
testNginxZone02 = new smartnginx.NginxZone({
|
testNginxZone02 = new smartnginx.NginxHost({
|
||||||
zoneName:"test102.bleu.de",
|
hostName:"test102.bleu.de",
|
||||||
type:smartnginx.zoneTypes.reverseProxy,
|
type:smartnginx.hostTypes.reverseProxy,
|
||||||
destination:"192.192.192.192"
|
destination:"192.192.192.192"
|
||||||
});
|
});
|
||||||
testNginxZone01.should.be.instanceof(smartnginx.NginxZone);
|
testNginxZone01.should.be.instanceof(smartnginx.NginxHost);
|
||||||
console.log(testNginxZone01.configString);
|
console.log(testNginxZone01.configString);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe("NginxConfig",function(){
|
describe("NginxConfig",function(){
|
||||||
|
this.timeout(10000);
|
||||||
it(`"new NginxConfig()" should produce an instance of NginxConfig`,function(){
|
it(`"new NginxConfig()" should produce an instance of NginxConfig`,function(){
|
||||||
testNginxConfig = new smartnginx.NginxConfig({
|
testNginxConfig = new smartnginx.NginxConfig({
|
||||||
cfEmail: process.env.CF_EMAIL,
|
cfEmail: process.env.CF_EMAIL,
|
||||||
@ -37,12 +38,12 @@ describe("smartnginx",function(){
|
|||||||
});
|
});
|
||||||
describe(".addZone()",function(){
|
describe(".addZone()",function(){
|
||||||
it("should add a zone to NginxConfig Object",function(){
|
it("should add a zone to NginxConfig Object",function(){
|
||||||
testNginxConfig.addZone(testNginxZone01);
|
testNginxConfig.addHost(testNginxZone01);
|
||||||
testNginxConfig.addZone(testNginxZone02);
|
testNginxConfig.addHost(testNginxZone02);
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
describe(".deploy()",function(){
|
describe(".deploy()",function(){
|
||||||
this.timeout(240000);
|
this.timeout(600000);
|
||||||
it("should deploy a config from an instance",function(done){
|
it("should deploy a config from an instance",function(done){
|
||||||
testNginxConfig.deploy()
|
testNginxConfig.deploy()
|
||||||
.then(() => {
|
.then(() => {
|
||||||
@ -50,5 +51,10 @@ describe("smartnginx",function(){
|
|||||||
});
|
});
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
describe(".stop",function(){
|
||||||
|
it("should end the process",function(){
|
||||||
|
testNginxConfig.nginxProcess.stop();
|
||||||
|
})
|
||||||
|
})
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
import * as plugins from "./smartnginx.plugins";
|
import * as plugins from "./smartnginx.plugins";
|
||||||
import * as CommandModule from "./smartnginx.command";
|
|
||||||
|
|
||||||
// classes
|
// classes
|
||||||
export {NginxConfig} from "./smartnginx.classes.nginxconfig";
|
export * from "./smartnginx.classes.nginxconfig";
|
||||||
export {NginxZone,zoneTypes} from "./smartnginx.classes.nginxzone";
|
export * from "./smartnginx.classes.nginxprocess";
|
||||||
|
export * from "./smartnginx.classes.nginxhost";
|
||||||
// exports
|
|
||||||
export let command = CommandModule;
|
|
@ -1,64 +1,68 @@
|
|||||||
import * as plugins from "./smartnginx.plugins";
|
import * as plugins from "./smartnginx.plugins";
|
||||||
import * as paths from "./smartnginx.paths";
|
import * as paths from "./smartnginx.paths";
|
||||||
import * as command from "./smartnginx.command";
|
import * as snippets from "./smartnginx.snippets";
|
||||||
import * as snippets from "./smartnginx.snippets"
|
import { NginxHost } from "./smartnginx.classes.nginxhost";
|
||||||
import {NginxZone} from "./smartnginx.classes.nginxzone";
|
import { NginxProcess } from "./smartnginx.classes.nginxprocess";
|
||||||
let allConfigs:NginxConfig[] = [];
|
let allConfigs: NginxConfig[] = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* main class that manages a NginxInstance
|
||||||
|
*/
|
||||||
export class NginxConfig {
|
export class NginxConfig {
|
||||||
zones:NginxZone[] = [];
|
hosts: NginxHost[] = [];
|
||||||
cert:plugins.cert.Cert; // the Cert Instance from which the config gets its certificates
|
cert: plugins.cert.Cert; // the Cert Instance from which the config gets its certificates
|
||||||
isDeployed:boolean = false;
|
nginxProcess: NginxProcess = new NginxProcess(this);
|
||||||
constructor(optionsArg:plugins.cert.ICertConstructorOptions){
|
isDeployed: boolean = false;
|
||||||
|
constructor(optionsArg: plugins.cert.ICertConstructorOptions) {
|
||||||
this.cert = new plugins.cert.Cert({
|
this.cert = new plugins.cert.Cert({
|
||||||
cfEmail:optionsArg.cfEmail,
|
cfEmail: optionsArg.cfEmail,
|
||||||
cfKey:optionsArg.cfKey,
|
cfKey: optionsArg.cfKey,
|
||||||
sslDir:paths.nginxCertBase,
|
sslDir: paths.nginxCertBase,
|
||||||
gitOriginRepo:optionsArg.gitOriginRepo,
|
gitOriginRepo: optionsArg.gitOriginRepo,
|
||||||
testMode:optionsArg.testMode
|
testMode: optionsArg.testMode
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// interact with Zones
|
// interact with Hosts
|
||||||
addZone(zoneArg:NginxZone){
|
addHost(nginxHostArg: NginxHost){
|
||||||
this.zones.push(zoneArg);
|
this.hosts.push(nginxHostArg);
|
||||||
}
|
}
|
||||||
listZones():NginxZone[] {
|
listHosts(): NginxHost[]{
|
||||||
return this.zones;
|
return this.hosts;
|
||||||
};
|
};
|
||||||
removeZones(zoneArg:NginxZone){
|
removeHost(nginxHostArg: NginxHost) {
|
||||||
|
|
||||||
}
|
}
|
||||||
clean(){
|
clean() {
|
||||||
this.zones = [];
|
this.hosts = [];
|
||||||
}
|
}
|
||||||
// handle deployment of zones
|
// handle deployment of hosts
|
||||||
deploy(nginxRestartArg:boolean = false){
|
deploy() {
|
||||||
let done = plugins.q.defer();
|
let done = plugins.q.defer();
|
||||||
plugins.smartfile.fs.removeSync(paths.nginxConfigBase);
|
|
||||||
plugins.smartfile.fs.ensureDirSync(paths.nginxConfigBase);
|
plugins.smartfile.fs.ensureDirSync(paths.nginxConfigBase);
|
||||||
plugins.smartfile.fs.ensureDirSync(paths.nginxZoneBase);
|
plugins.smartfile.fs.ensureDirSync(paths.nginxHostFileBase);
|
||||||
plugins.smartfile.fs.ensureDirSync(paths.nginxCertBase);
|
plugins.smartfile.fs.ensureDirSync(paths.nginxCertBase);
|
||||||
for(let config of allConfigs){
|
for (let config of allConfigs) {
|
||||||
config.isDeployed = false;
|
config.isDeployed = false;
|
||||||
};
|
};
|
||||||
this.isDeployed = true;
|
this.isDeployed = true;
|
||||||
// write base config
|
// write base config
|
||||||
plugins.smartfile.memory.toFsSync(
|
plugins.smartfile.memory.toFsSync(
|
||||||
snippets.getBaseConfigString(),
|
snippets.getBaseConfigString(),
|
||||||
plugins.path.join(paths.nginxConfigBase,"nginx.conf")
|
paths.nginxConfFile
|
||||||
);
|
);
|
||||||
// deploy zones
|
// deploy hosts
|
||||||
let promiseArray = [];
|
let promiseArray = [];
|
||||||
for(let zone of this.zones){
|
for (let host of this.hosts) {
|
||||||
promiseArray.push(zone.deploy(this.cert));
|
let hostDeployedPromise = host.deploy(this.cert);
|
||||||
|
hostDeployedPromise.then(() => {
|
||||||
|
plugins.beautylog.info(`Host ${host.hostName} deployed!`);
|
||||||
|
this.nginxProcess.reloadConfig();
|
||||||
|
});
|
||||||
|
promiseArray.push(hostDeployedPromise);
|
||||||
};
|
};
|
||||||
plugins.q.all(promiseArray)
|
plugins.q.all(promiseArray)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
// restart nginx
|
|
||||||
if(nginxRestartArg){
|
|
||||||
command.restart(this);
|
|
||||||
};
|
|
||||||
done.resolve();
|
done.resolve();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
43
ts/smartnginx.classes.nginxhost.ts
Normal file
43
ts/smartnginx.classes.nginxhost.ts
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
import * as plugins from "./smartnginx.plugins";
|
||||||
|
import * as paths from "./smartnginx.paths";
|
||||||
|
import * as snippets from "./smartnginx.snippets"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the host config data that NginxHost needs to create a valid instance
|
||||||
|
*/
|
||||||
|
export interface IHostConfigData {
|
||||||
|
hostName: string,
|
||||||
|
type: hostTypes,
|
||||||
|
destination: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export enum hostTypes {
|
||||||
|
reverseProxy,
|
||||||
|
static
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* manages a single nginx host
|
||||||
|
*/
|
||||||
|
export class NginxHost {
|
||||||
|
hostName: string; // the host name e.g. domain name
|
||||||
|
type: hostTypes;
|
||||||
|
destination: string;
|
||||||
|
configString: string; // the actual host config file as string
|
||||||
|
constructor(optionsArg:IHostConfigData) {
|
||||||
|
this.hostName = optionsArg.hostName;
|
||||||
|
this.type = optionsArg.type;
|
||||||
|
this.destination = optionsArg.destination;
|
||||||
|
this.configString = snippets.getHostConfigString(optionsArg.hostName, optionsArg.destination);
|
||||||
|
};
|
||||||
|
deploy(certInstanceArg: plugins.cert.Cert) {
|
||||||
|
let done = plugins.q.defer();
|
||||||
|
let filePath = plugins.path.join(paths.nginxHostFileBase, this.hostName + ".conf");
|
||||||
|
// writeConfig
|
||||||
|
plugins.smartfile.memory.toFsSync(this.configString, filePath);
|
||||||
|
// get cert
|
||||||
|
certInstanceArg.getDomainCert(this.hostName)
|
||||||
|
.then(done.resolve);
|
||||||
|
return done.promise;
|
||||||
|
};
|
||||||
|
};
|
74
ts/smartnginx.classes.nginxprocess.ts
Normal file
74
ts/smartnginx.classes.nginxprocess.ts
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
import * as plugins from "./smartnginx.plugins";
|
||||||
|
import * as paths from "./smartnginx.paths";
|
||||||
|
import { NginxConfig } from "./smartnginx.classes.nginxconfig";
|
||||||
|
import { NginxHost } from "./smartnginx.classes.nginxhost";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* manages a nginxprocess for an NginxConfig
|
||||||
|
*/
|
||||||
|
export class NginxProcess {
|
||||||
|
started: boolean = false;
|
||||||
|
nginxConfig:NginxConfig;
|
||||||
|
nginxChildProcess: plugins.childProcess.ChildProcess;
|
||||||
|
constructor(nginxConfigArg) {
|
||||||
|
this.nginxConfig = nginxConfigArg;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* start nginx
|
||||||
|
*/
|
||||||
|
start() {
|
||||||
|
let done = plugins.q.defer();
|
||||||
|
if (typeof this.nginxChildProcess == "undefined"){
|
||||||
|
this.nginxChildProcess = plugins.childProcess.exec(`nginx -c ${paths.nginxConfFile}`, function (error, stdout, stderr) {
|
||||||
|
console.log(`stdout: ${stdout}`);
|
||||||
|
console.log(`stderr: ${stderr}`);
|
||||||
|
if (error !== null) {
|
||||||
|
console.log(`exec error: ${error}`);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
};
|
||||||
|
this.started = true;
|
||||||
|
plugins.beautylog.info("started Nginx!");
|
||||||
|
done.resolve();
|
||||||
|
return done.promise;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* reload config
|
||||||
|
*/
|
||||||
|
reloadConfig(){
|
||||||
|
let done = plugins.q.defer();
|
||||||
|
if(this.started == false){
|
||||||
|
this.start();
|
||||||
|
} else {
|
||||||
|
plugins.shelljs.exec("nginx -s reload");
|
||||||
|
};
|
||||||
|
plugins.beautylog.ok("NginxProcess has loaded the new config!")
|
||||||
|
done.resolve();
|
||||||
|
return done.promise;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* stop the nginx instance
|
||||||
|
*/
|
||||||
|
stop() {
|
||||||
|
let done = plugins.q.defer();
|
||||||
|
if (typeof this.nginxChildProcess != "undefined") {
|
||||||
|
plugins.shelljs.exec("nginx -s quit");
|
||||||
|
this.started = false;
|
||||||
|
plugins.beautylog.info("stopped Nginx!");
|
||||||
|
} else {
|
||||||
|
plugins.beautylog.log("nginx already stopped!");
|
||||||
|
};
|
||||||
|
done.resolve();
|
||||||
|
return done.promise;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* checks if nginx is in path
|
||||||
|
*/
|
||||||
|
check(): boolean {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
}
|
@ -1,35 +0,0 @@
|
|||||||
import * as plugins from "./smartnginx.plugins";
|
|
||||||
import * as paths from "./smartnginx.paths";
|
|
||||||
import * as command from "./smartnginx.command";
|
|
||||||
import * as snippets from "./smartnginx.snippets"
|
|
||||||
export enum zoneTypes {
|
|
||||||
reverseProxy,
|
|
||||||
static
|
|
||||||
}
|
|
||||||
|
|
||||||
export class NginxZone {
|
|
||||||
zoneName:string; // the zone name e.g. domain name
|
|
||||||
type:zoneTypes;
|
|
||||||
destination:string;
|
|
||||||
configString:string; // the actual zone config file as string
|
|
||||||
constructor(optionsArg:{
|
|
||||||
zoneName:string,
|
|
||||||
type:zoneTypes,
|
|
||||||
destination:string
|
|
||||||
}){
|
|
||||||
this.zoneName = optionsArg.zoneName;
|
|
||||||
this.type = optionsArg.type;
|
|
||||||
this.destination = optionsArg.destination;
|
|
||||||
this.configString = snippets.getZoneConfigString(optionsArg.zoneName,optionsArg.destination);
|
|
||||||
};
|
|
||||||
deploy(certInstanceArg:plugins.cert.Cert){
|
|
||||||
let done = plugins.q.defer();
|
|
||||||
let filePath = plugins.path.join(paths.nginxZoneBase,this.zoneName + ".conf");
|
|
||||||
// writeConfig
|
|
||||||
plugins.smartfile.memory.toFsSync(this.configString,filePath);
|
|
||||||
// get cert
|
|
||||||
certInstanceArg.getDomainCert(this.zoneName)
|
|
||||||
.then(done.resolve);
|
|
||||||
return done.promise;
|
|
||||||
};
|
|
||||||
};
|
|
@ -1,59 +0,0 @@
|
|||||||
import * as plugins from "./smartnginx.plugins";
|
|
||||||
import {NginxConfig} from "./smartnginx.classes.nginxconfig";
|
|
||||||
import {NginxZone} from "./smartnginx.classes.nginxzone";
|
|
||||||
|
|
||||||
|
|
||||||
let nginxChildProcess = undefined; // points to the nginx child process
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* starts nginx
|
|
||||||
*/
|
|
||||||
export let start = (configArg:NginxConfig) => {
|
|
||||||
let done = plugins.q.defer();
|
|
||||||
if(typeof nginxChildProcess == "undefined"){
|
|
||||||
nginxChildProcess = plugins.childProcess.exec("nginx",function(error, stdout, stderr){
|
|
||||||
console.log(`stdout: ${stdout}`);
|
|
||||||
console.log(`stderr: ${stderr}`);
|
|
||||||
if (error !== null) {
|
|
||||||
console.log(`exec error: ${error}`);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
plugins.beautylog.info("started Nginx!");
|
|
||||||
done.resolve();
|
|
||||||
return done.promise;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* restarts nginx
|
|
||||||
*/
|
|
||||||
export let restart = (configArg:NginxConfig) => {
|
|
||||||
return stop().then(
|
|
||||||
() => {
|
|
||||||
return start(configArg);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* stops nginx
|
|
||||||
*/
|
|
||||||
export let stop = () => {
|
|
||||||
let done = plugins.q.defer();
|
|
||||||
if(typeof nginxChildProcess != "undefined"){
|
|
||||||
nginxChildProcess.kill();
|
|
||||||
plugins.beautylog.info("stopped Nginx!");
|
|
||||||
} else {
|
|
||||||
plugins.beautylog.log("nginx already stopped!");
|
|
||||||
};
|
|
||||||
done.resolve();
|
|
||||||
return done.promise;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* checks if nginx is in path
|
|
||||||
*/
|
|
||||||
export let check = ():boolean => {
|
|
||||||
return;
|
|
||||||
};
|
|
@ -1,6 +1,10 @@
|
|||||||
import * as plugins from "./smartnginx.plugins"
|
import * as plugins from "./smartnginx.plugins"
|
||||||
|
|
||||||
|
// directories
|
||||||
export let packageBase = plugins.path.join(__dirname,"../");
|
export let packageBase = plugins.path.join(__dirname,"../");
|
||||||
export let nginxConfigBase = plugins.path.join(packageBase,"nginxconfig");
|
export let nginxConfigBase = plugins.path.join(packageBase,"nginxconfig");
|
||||||
export let nginxZoneBase = plugins.path.join(nginxConfigBase,"zones");
|
export let nginxHostFileBase = plugins.path.join(nginxConfigBase,"hosts");
|
||||||
export let nginxCertBase = plugins.path.join(nginxConfigBase,"cert");
|
export let nginxCertBase = plugins.path.join(nginxConfigBase,"cert");
|
||||||
|
|
||||||
|
// files
|
||||||
|
export let nginxConfFile = plugins.path.join(nginxConfigBase,"nginx.conf");
|
@ -71,26 +71,26 @@ export let getBaseConfigString = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export let getZoneConfigString = (zoneNameArg:string,destinationIpArg:string) => {
|
export let getHostConfigString = (hostNameArg:string,destinationIpArg:string) => {
|
||||||
let zoneConfig = plugins.smartstring.indent.normalize(`
|
let hostConfig = plugins.smartstring.indent.normalize(`
|
||||||
upstream ${zoneNameArg} {
|
upstream ${hostNameArg} {
|
||||||
server ${destinationIpArg};
|
server ${destinationIpArg};
|
||||||
}
|
}
|
||||||
|
|
||||||
server {
|
server {
|
||||||
listen *:80 ;
|
listen *:80 ;
|
||||||
server_name ${zoneNameArg};
|
server_name ${hostNameArg};
|
||||||
rewrite ^ https://${zoneNameArg}$request_uri? permanent;
|
rewrite ^ https://${hostNameArg}$request_uri? permanent;
|
||||||
}
|
}
|
||||||
|
|
||||||
server {
|
server {
|
||||||
listen *:443 ssl;
|
listen *:443 ssl;
|
||||||
server_name ${zoneNameArg};
|
server_name ${hostNameArg};
|
||||||
ssl_certificate /LE_CERTS/${zoneNameArg}/fullchain.pem;
|
ssl_certificate /LE_CERTS/${hostNameArg}/fullchain.pem;
|
||||||
ssl_certificate_key /LE_CERTS/${zoneNameArg}/privkey.pem;
|
ssl_certificate_key /LE_CERTS/${hostNameArg}/privkey.pem;
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
proxy_pass http://${zoneNameArg};
|
proxy_pass http://${hostNameArg};
|
||||||
include /etc/nginx/proxy_params;
|
include /etc/nginx/proxy_params;
|
||||||
}
|
}
|
||||||
location ~ /\.git {
|
location ~ /\.git {
|
||||||
@ -98,6 +98,6 @@ export let getZoneConfigString = (zoneNameArg:string,destinationIpArg:string) =>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
`);
|
`);
|
||||||
return zoneConfig;
|
return hostConfig;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user