From a8c44fddcae97c7cef1d99b52d4a2009b2c0b029 Mon Sep 17 00:00:00 2001 From: Felix Linker Date: Fri, 20 Jul 2018 12:00:53 +0200 Subject: [PATCH 01/14] Shield resistances caps introduced --- src/app/components/Defence.jsx | 6 ++-- src/app/shipyard/Calculations.js | 55 ++++++++++++++++++++------------ 2 files changed, 38 insertions(+), 23 deletions(-) diff --git a/src/app/components/Defence.jsx b/src/app/components/Defence.jsx index 576b65f6..c5b7053d 100644 --- a/src/app/components/Defence.jsx +++ b/src/app/components/Defence.jsx @@ -102,11 +102,11 @@ export default class Defence extends TranslatedComponent { // Add effective shield from resistances const rawMj = shield.generator + shield.boosters + shield.cells; - const explosiveMj = rawMj / (shield.explosive.generator * shield.explosive.boosters) - rawMj; + const explosiveMj = rawMj / shield.explosive.total - rawMj; if (explosiveMj != 0) effectiveShieldExplosiveTt.push(
{translate('resistance') + ' ' + formats.int(explosiveMj)}{units.MJ}
); - const kineticMj = rawMj / (shield.kinetic.generator * shield.kinetic.boosters) - rawMj; + const kineticMj = rawMj / shield.kinetic.total - rawMj; if (kineticMj != 0) effectiveShieldKineticTt.push(
{translate('resistance') + ' ' + formats.int(kineticMj)}{units.MJ}
); - const thermalMj = rawMj / (shield.thermal.generator * shield.thermal.boosters) - rawMj; + const thermalMj = rawMj / shield.thermal.total - rawMj; if (thermalMj != 0) effectiveShieldThermalTt.push(
{translate('resistance') + ' ' + formats.int(thermalMj)}{units.MJ}
); // Add effective shield from power distributor SYS pips diff --git a/src/app/shipyard/Calculations.js b/src/app/shipyard/Calculations.js index ed3d321a..a159c4bf 100644 --- a/src/app/shipyard/Calculations.js +++ b/src/app/shipyard/Calculations.js @@ -397,11 +397,6 @@ export function shieldMetrics(ship, sys) { // res.kin = kinDim + overage; // boosterKinDmg = kinDim + overage; // } - // Apply diminishing returns - // boosterExplDmg = boosterExplDmg > 0.7 ? boosterExplDmg : 0.7 - (0.7 - boosterExplDmg) / 2; - // boosterKinDmg = boosterKinDmg > 0.7 ? boosterKinDmg : 0.7 - (0.7 - boosterKinDmg) / 2; - // boosterThermDmg = boosterThermDmg > 0.7 ? boosterThermDmg : 0.7 - (0.7 - boosterThermDmg) / 2; - // res.therm = res.therm > 0.7 ? res.therm : 0.7 - (0.7 - res.therm) / 2; let shieldAddition = 0; if (ship) { for (const module of ship.internal) { @@ -485,31 +480,37 @@ export function shieldMetrics(ship, sys) { max: 1 - maxSysResistance }; + let sgExplosiveDmg = 1 - shieldGenerator.getExplosiveResistance(); + let sgSbExplosiveDmg = diminishDamageMult(sgExplosiveDmg * 0.7, (1 - shieldGenerator.getExplosiveResistance()) * boosterExplDmg); shield.explosive = { - generator: 1 - shieldGenerator.getExplosiveResistance(), - boosters: boosterExplDmg, + generator: sgExplosiveDmg, + boosters: sgSbExplosiveDmg - sgExplosiveDmg, sys: (1 - sysResistance), - total: (1 - shieldGenerator.getExplosiveResistance()) * boosterExplDmg * (1 - sysResistance), - max: (1 - shieldGenerator.getExplosiveResistance()) * boosterExplDmg * (1 - maxSysResistance), - res: 1 - boosterExplDmg + total: sgSbExplosiveDmg * (1 - sysResistance), + max: sgSbExplosiveDmg * (1 - maxSysResistance), + res: 1 - sgSbExplosiveDmg }; + let sgKineticDmg = 1 - shieldGenerator.getKineticResistance(); + let sgSbKineticDmg = diminishDamageMult(sgKineticDmg * 0.7, (1 - shieldGenerator.getKineticResistance()) * boosterKinDmg); shield.kinetic = { - generator: 1 - shieldGenerator.getKineticResistance(), - boosters: boosterKinDmg, + generator: sgKineticDmg, + boosters: sgSbKineticDmg - sgKineticDmg, sys: (1 - sysResistance), - total: (1 - shieldGenerator.getKineticResistance()) * boosterKinDmg * (1 - sysResistance), - max: (1 - shieldGenerator.getKineticResistance()) * boosterKinDmg * (1 - maxSysResistance), - res: 1 - boosterKinDmg + total: sgSbKineticDmg * (1 - sysResistance), + max: sgSbKineticDmg * (1 - maxSysResistance), + res: 1 - sgSbKineticDmg }; + let sgThermalDmg = 1 - shieldGenerator.getThermalResistance(); + let sgSbThermalDmg = diminishDamageMult(sgThermalDmg * 0.7, (1 - shieldGenerator.getThermalResistance()) * boosterThermDmg); shield.thermal = { - generator: 1 - shieldGenerator.getThermalResistance(), - boosters: boosterThermDmg, + generator: sgThermalDmg, + boosters: sgSbThermalDmg - sgThermalDmg, sys: (1 - sysResistance), - total: (1 - shieldGenerator.getThermalResistance()) * boosterThermDmg * (1 - sysResistance), - max: (1 - shieldGenerator.getThermalResistance()) * boosterThermDmg * (1 - maxSysResistance), - res: 1 - boosterThermDmg + total: sgSbThermalDmg * (1 - sysResistance), + max: sgSbThermalDmg * (1 - maxSysResistance), + res: 1 - sgSbThermalDmg }; } return shield; @@ -959,3 +960,17 @@ export function timeToDeplete(amount, dps, eps, capacity, recharge) { } } } + +/** + * Applies diminishing returns to resistances. + * @param {number} baseDamageMult The base resistance up to which no diminishing returns are applied. + * @param {number} damageMult Resistance as damage multiplier + * @returns {number} Actual damage multiplier + */ +export function diminishDamageMult(diminishFrom, damageMult) { + if (damageMult > diminishFrom) { + return damageMult; + } else { + return (diminishFrom / 2) + 0.5 * damageMult; + } +} From c2d0a6e9e0124d6fe49a52cc6acb1ff694aabbd4 Mon Sep 17 00:00:00 2001 From: felixlinker Date: Fri, 20 Jul 2018 13:36:17 +0200 Subject: [PATCH 02/14] Removed duplicate code on armour calculations --- src/app/shipyard/Ship.js | 64 +++++----------------------------------- 1 file changed, 7 insertions(+), 57 deletions(-) diff --git a/src/app/shipyard/Ship.js b/src/app/shipyard/Ship.js index 075254d3..182fa342 100755 --- a/src/app/shipyard/Ship.js +++ b/src/app/shipyard/Ship.js @@ -996,25 +996,6 @@ export default class Ship { return this; } - /** - * Calculate diminishing returns value, where values below a given limit are returned - * as-is, and values between the lower and upper limit of the diminishing returns are - * given at half value. - * Commonly used for resistances. - * @param {Number} val The value - * @param {Number} drll The lower limit for diminishing returns - * @param {Number} drul The upper limit for diminishing returns - * @return {this} The ship instance (for chaining operations) - */ - diminishingReturns(val, drll, drul) { - if (val < drll) { - val = drll; - } else if (val < drul) { - val = drul - (drul - val) / 2; - } - return val; - } - /** * Calculate damage per second and related items for weapons * @return {this} The ship instance (for chaining operations) @@ -1306,45 +1287,14 @@ export default class Ship { */ recalculateArmour() { // Armour from bulkheads - let bulkhead = this.bulkheads.m; - let armour = this.baseArmour + (this.baseArmour * bulkhead.getHullBoost()); - let modulearmour = 0; - let moduleprotection = 1; - let hullExplRes = 1 - bulkhead.getExplosiveResistance(); - const hullExplResDRStart = hullExplRes * 0.7; - const hullExplResDREnd = hullExplRes * 0; - let hullKinRes = 1 - bulkhead.getKineticResistance(); - const hullKinResDRStart = hullKinRes * 0.7; - const hullKinResDREnd = hullKinRes * 0; - let hullThermRes = 1 - bulkhead.getThermalResistance(); - const hullThermResDRStart = hullThermRes * 0.7; - const hullThermResDREnd = hullThermRes * 0; - - // Armour from HRPs and module armour from MRPs - for (let slot of this.internal) { - if (slot.m && (slot.m.grp === 'hr' || slot.m.grp === 'ghrp')) { - armour += slot.m.getHullReinforcement(); - // Hull boost for HRPs is applied against the ship's base armour - armour += this.baseArmour * slot.m.getModValue('hullboost') / 10000; - - hullExplRes *= (1 - slot.m.getExplosiveResistance()); - hullKinRes *= (1 - slot.m.getKineticResistance()); - hullThermRes *= (1 - slot.m.getThermalResistance()); - } - if (slot.m && slot.m.grp == 'mrp') { - modulearmour += slot.m.getIntegrity(); - moduleprotection = moduleprotection * (1 - slot.m.getProtection()); - } - } - moduleprotection = 1 - moduleprotection; - - this.armour = armour; - this.modulearmour = modulearmour; - this.moduleprotection = moduleprotection; - this.hullExplRes = 1 - this.diminishingReturns(hullExplRes, hullExplResDREnd, hullExplResDRStart); - this.hullKinRes = 1 - this.diminishingReturns(hullKinRes, hullKinResDREnd, hullKinResDRStart); - this.hullThermRes = 1 - this.diminishingReturns(hullThermRes, hullThermResDREnd, hullThermResDRStart); + let metrics = Calc.armourMetrics(this); + this.armour = metrics.total ? metrics.total : 0; + this.modulearmour = metrics.modulearmour; + this.moduleprotection = metrics.moduleprotection; + this.hullExplRes = 1 - metrics.explosive.total; + this.hullKinRes = 1 - metrics.kinetic.total; + this.hullThermRes = 1 - metrics.thermal.total; return this; } From d2380a5c9c091ad5deca0a70c959fc10171bbf5b Mon Sep 17 00:00:00 2001 From: felixlinker Date: Fri, 20 Jul 2018 14:09:44 +0200 Subject: [PATCH 03/14] Armour resistances caps introduced --- src/app/components/Defence.jsx | 6 ++-- src/app/shipyard/Calculations.js | 52 ++++++++++++++++---------------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/app/components/Defence.jsx b/src/app/components/Defence.jsx index c5b7053d..4dbf0dc1 100644 --- a/src/app/components/Defence.jsx +++ b/src/app/components/Defence.jsx @@ -184,17 +184,17 @@ export default class Defence extends TranslatedComponent { const armourDamageTakenExplosiveTt = []; armourDamageTakenExplosiveTt.push(
{translate('bulkheads') + ' ' + formats.pct1(armour.explosive.bulkheads)}
); armourDamageTakenExplosiveTt.push(
{translate('reinforcement') + ' ' + formats.pct1(armour.explosive.reinforcement)}
); - if (armour.explosive.bulkheads * armour.explosive.reinforcement != 1) effectiveArmourExplosiveTt.push(
{translate('resistance') + ' ' + formats.int(rawArmour / (armour.explosive.bulkheads * armour.explosive.reinforcement) - rawArmour)}
); + if (armour.explosive.total != 1) effectiveArmourExplosiveTt.push(
{translate('resistance') + ' ' + formats.int(rawArmour / armour.explosive.total - rawArmour)}
); const armourDamageTakenKineticTt = []; armourDamageTakenKineticTt.push(
{translate('bulkheads') + ' ' + formats.pct1(armour.kinetic.bulkheads)}
); armourDamageTakenKineticTt.push(
{translate('reinforcement') + ' ' + formats.pct1(armour.kinetic.reinforcement)}
); - if (armour.kinetic.bulkheads * armour.kinetic.reinforcement != 1) effectiveArmourKineticTt.push(
{translate('resistance') + ' ' + formats.int(rawArmour / (armour.kinetic.bulkheads * armour.kinetic.reinforcement) - rawArmour)}
); + if (armour.kinetic.total != 1) effectiveArmourKineticTt.push(
{translate('resistance') + ' ' + formats.int(rawArmour / armour.kinetic.total - rawArmour)}
); const armourDamageTakenThermalTt = []; armourDamageTakenThermalTt.push(
{translate('bulkheads') + ' ' + formats.pct1(armour.thermal.bulkheads)}
); armourDamageTakenThermalTt.push(
{translate('reinforcement') + ' ' + formats.pct1(armour.thermal.reinforcement)}
); - if (armour.thermal.bulkheads * armour.thermal.reinforcement != 1) effectiveArmourThermalTt.push(
{translate('resistance') + ' ' + formats.int(rawArmour / (armour.thermal.bulkheads * armour.thermal.reinforcement) - rawArmour)}
); + if (armour.thermal.total != 1) effectiveArmourThermalTt.push(
{translate('resistance') + ' ' + formats.int(rawArmour / armour.thermal.total - rawArmour)}
); const effectiveArmourData = []; const effectiveAbsoluteArmour = armour.total / armour.absolute.total; diff --git a/src/app/shipyard/Calculations.js b/src/app/shipyard/Calculations.js index a159c4bf..b72fd0d3 100644 --- a/src/app/shipyard/Calculations.js +++ b/src/app/shipyard/Calculations.js @@ -546,22 +546,21 @@ export function armourMetrics(ship) { let hullKinDmg = 1; let hullThermDmg = 1; // const dimReturnLine = (res) => 1 - (1 - res) * 0.7; - let res = { - kin: 0, - therm: 0, - expl: 0 - }; + // let res = { + // kin: 0, + // therm: 0, + // expl: 0 + // }; // Armour from HRPs and module armour from MRPs for (let slot of ship.internal) { if (slot.m && (slot.m.grp === 'hr' || slot.m.grp === 'ghrp')) { armourReinforcement += slot.m.getHullReinforcement(); // Hull boost for HRPs is applied against the ship's base armour armourReinforcement += ship.baseArmour * slot.m.getModValue('hullboost') / 10000; - res.expl += slot.m.getExplosiveResistance(); - res.kin += slot.m.getKineticResistance(); - res.therm += slot.m.getThermalResistance(); + // res.expl += slot.m.getExplosiveResistance(); + // res.kin += slot.m.getKineticResistance(); + // res.therm += slot.m.getThermalResistance(); hullExplDmg = hullExplDmg * (1 - slot.m.getExplosiveResistance()); - hullKinDmg = hullKinDmg * (1 - slot.m.getKineticResistance()); hullThermDmg = hullThermDmg * (1 - slot.m.getThermalResistance()); } @@ -593,11 +592,6 @@ export function armourMetrics(ship) { // hullKinDmg = kinDim + overage; // } - // Apply diminishing returns - // hullExplDmg = hullExplDmg > 0.7 ? hullExplDmg : 0.7 - (0.7 - hullExplDmg) / 2; - // hullKinDmg = hullKinDmg > 0.7 ? hullKinDmg : 0.7 - (0.7 - hullKinDmg) / 2; - // hullThermDmg = hullThermDmg > 0.7 ? hullThermDmg : 0.7 - (0.7 - hullThermDmg) / 2; - const armour = { bulkheads: armourBulkheads, reinforcement: armourReinforcement, @@ -614,25 +608,31 @@ export function armourMetrics(ship) { total: 1 }; + let armourExplDmg = diminishDamageMult(0.7, 1 - ship.bulkheads.m.getExplosiveResistance()); + let armourReinforcedExplDmg = diminishDamageMult(0.7, (1 - ship.bulkheads.m.getExplosiveResistance()) * hullExplDmg); armour.explosive = { - bulkheads: 1 - ship.bulkheads.m.getExplosiveResistance(), - reinforcement: hullExplDmg, - total: (1 - ship.bulkheads.m.getExplosiveResistance()) * hullExplDmg, - res: 1 - hullExplDmg + bulkheads: armourExplDmg, + reinforcement: armourReinforcedExplDmg - armourExplDmg, + total: armourReinforcedExplDmg, + res: 1 - armourReinforcedExplDmg }; + let armourKinDmg = diminishDamageMult(0.7, 1 - ship.bulkheads.m.getKineticResistance()); + let armourReinforcedKinDmg = diminishDamageMult(0.7, (1 - ship.bulkheads.m.getKineticResistance()) * hullKinDmg); armour.kinetic = { - bulkheads: 1 - ship.bulkheads.m.getKineticResistance(), - reinforcement: hullKinDmg, - total: (1 - ship.bulkheads.m.getKineticResistance()) * hullKinDmg, - res: 1 - hullKinDmg + bulkheads: armourKinDmg, + reinforcement: armourReinforcedKinDmg - armourKinDmg, + total: armourReinforcedKinDmg, + res: 1 - armourReinforcedKinDmg }; + let armourThermDmg = diminishDamageMult(0.7, 1 - ship.bulkheads.m.getThermalResistance()); + let armourReinforcedThermDmg = diminishDamageMult(0.7, (1 - ship.bulkheads.m.getThermalResistance()) * hullThermDmg); armour.thermal = { - bulkheads: 1 - ship.bulkheads.m.getThermalResistance(), - reinforcement: hullThermDmg, - total: (1 - ship.bulkheads.m.getThermalResistance()) * hullThermDmg, - res: 1 - hullThermDmg + bulkheads: armourThermDmg, + reinforcement: armourReinforcedThermDmg - armourThermDmg, + total: armourReinforcedThermDmg, + res: 1 - armourReinforcedThermDmg }; return armour; } From 690bc5a64ae7a8394c531f84f8c4b717fde57071 Mon Sep 17 00:00:00 2001 From: felixlinker Date: Fri, 20 Jul 2018 17:54:07 +0200 Subject: [PATCH 04/14] Resistance special effects now applied correctly --- src/app/shipyard/Module.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/app/shipyard/Module.js b/src/app/shipyard/Module.js index 888d8e27..a213b388 100755 --- a/src/app/shipyard/Module.js +++ b/src/app/shipyard/Module.js @@ -47,7 +47,16 @@ export default class Module { if (modifierActions && modifierActions[name]) { // this special effect modifies our returned value const modification = Modifications.modifications[name]; - if (modification.method === 'additive') { + const multiplier = modification.type === 'percentage' ? 10000 : 100; + if (name === 'explres' || name === 'kinres' || name === 'thermres') { + // Resistance modifications in itself are additive, however their + // special effects are multiplicative. They affect the overall result + // by (special effect resistance) * (damage mult after modification), + // i. e. we need to apply the special effect as a multiplier to the + // overall result and then calculate the difference. + let baseMult = this[name] ? 1 - this[name] : 1; + result = (baseMult - (baseMult - result / multiplier) * (1 - modifierActions[name] / 100)) * multiplier; + } else if (modification.method === 'additive') { result = result + modifierActions[name] * 100; } else if (modification.method === 'overwrite') { result = modifierActions[name]; @@ -59,7 +68,6 @@ export default class Module { } else { mod = modifierActions[name]; } - const multiplier = modification.type === 'percentage' ? 10000 : 100; result = (((1 + result / multiplier) * (1 + mod)) - 1) * multiplier; } } From d99f8ad7e76d84ec04ecbf940d5381d834ee3410 Mon Sep 17 00:00:00 2001 From: willyb321 Date: Wed, 25 Jul 2018 10:05:23 +1000 Subject: [PATCH 05/14] remove preinstall script --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index a8ef3274..21975896 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,6 @@ "clean": "rimraf build", "start": "node devServer.js", "lint": "eslint --ext .js,.jsx src", - "preinstall": "ls ../coriolis-data || git clone https://github.com/edcd/coriolis-data.git ../coriolis-data && (cd ../coriolis-data && npm i)", "test": "jest", "prod-serve": "nginx -p $(pwd) -c nginx.conf", "prod-stop": "kill -QUIT $(cat nginx.pid)", From d3eed870770e3ef8e66f62261a67bf5520a7dce9 Mon Sep 17 00:00:00 2001 From: Felix Linker Date: Wed, 25 Jul 2018 02:07:53 +0200 Subject: [PATCH 06/14] new module method getSDps that takes autoloader into account --- src/app/components/HardpointSlot.jsx | 2 +- src/app/shipyard/Calculations.js | 2 +- src/app/shipyard/Module.js | 21 +++++++++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/app/components/HardpointSlot.jsx b/src/app/components/HardpointSlot.jsx index 9337dac0..f7678f0c 100644 --- a/src/app/components/HardpointSlot.jsx +++ b/src/app/components/HardpointSlot.jsx @@ -79,7 +79,7 @@ export default class HardpointSlot extends Slot {
{formats.round(m.getMass())}{u.T}
- { m.getDps() ?
{translate('DPS')}: {formats.round1(m.getDps())} { m.getClip() ? ({formats.round1((m.getClip() * m.getDps() / m.getRoF()) / ((m.getClip() / m.getRoF()) + m.getReload())) }) : null }
: null } + { m.getDps() ?
{translate('DPS')}: {formats.round1(m.getDps())} { m.getClip() ? ({formats.round1(m.getSDps()) }) : null }
: null } { m.getEps() ?
{translate('EPS')}: {formats.round1(m.getEps())}{u.MW} { m.getClip() ? ({formats.round1((m.getClip() * m.getEps() / m.getRoF()) / ((m.getClip() / m.getRoF()) + m.getReload())) }{u.MW}) : null }
: null } { m.getHps() ?
{translate('HPS')}: {formats.round1(m.getHps())} { m.getClip() ? ({formats.round1((m.getClip() * m.getHps() / m.getRoF()) / ((m.getClip() / m.getRoF()) + m.getReload())) }) : null }
: null } { m.getDps() && m.getEps() ?
{translate('DPE')}: {formats.f1(m.getDps() / m.getEps())}
: null } diff --git a/src/app/shipyard/Calculations.js b/src/app/shipyard/Calculations.js index b72fd0d3..aa62b187 100644 --- a/src/app/shipyard/Calculations.js +++ b/src/app/shipyard/Calculations.js @@ -852,7 +852,7 @@ export function _weaponSustainedDps(m, opponent, opponentShields, opponentArmour weapon.eps = m.getClip() ? (m.getClip() * m.getEps() / m.getRoF()) / ((m.getClip() / m.getRoF()) + m.getReload()) : m.getEps(); // Initial sustained DPS - let sDps = m.getClip() ? (m.getClip() * m.getDps() / m.getRoF()) / ((m.getClip() / m.getRoF()) + m.getReload()) : m.getDps(); + let sDps = m.getSDps(); // Take fall-off in to account const falloff = m.getFalloff(); diff --git a/src/app/shipyard/Module.js b/src/app/shipyard/Module.js index cc9247ef..81a0187c 100755 --- a/src/app/shipyard/Module.js +++ b/src/app/shipyard/Module.js @@ -550,6 +550,27 @@ export default class Module { return damage * rpshot * rof; } + /** + * Get the SDPS for this module, taking into account modifications and special + * effects. + * @return {Number} The SDPS of this module + */ + getSDps() { + let dps = this.getDps(); + if (this.getClip()) { + let clipSize = this.getClip(); + // If auto-loader is applied, effective clip size will be nearly doubled + // as you get one reload for every two shots fired. + if (this.blueprint && this.blueprint.special && this.blueprint.special.edname === 'special_auto_loader') { + clipSize += clipSize - 1; + } + let timeToDeplete = clipSize / this.getRoF(); + return dps * timeToDeplete / (timeToDeplete + this.getReload()); + } else { + return dps; + } + } + /** * Get the EPS for this module, taking in to account modifications * @return {Number} the EPS of this module From a82dffd77dff654ffa42af1571ab8770921424f2 Mon Sep 17 00:00:00 2001 From: willyb321 Date: Wed, 25 Jul 2018 11:22:58 +1000 Subject: [PATCH 07/14] initial docker --- .docker/.dockerignore | 2 ++ .docker/Dockerfile | 37 ++++++++++++++++++++++++++++++++++++ .docker/docker-compose.yml | 39 ++++++++++++++++++++++++++++++++++++++ .docker/nginx.conf | 38 +++++++++++++++++++++++++++++++++++++ 4 files changed, 116 insertions(+) create mode 100644 .docker/.dockerignore create mode 100644 .docker/Dockerfile create mode 100644 .docker/docker-compose.yml create mode 100644 .docker/nginx.conf diff --git a/.docker/.dockerignore b/.docker/.dockerignore new file mode 100644 index 00000000..93f13619 --- /dev/null +++ b/.docker/.dockerignore @@ -0,0 +1,2 @@ +node_modules +npm-debug.log diff --git a/.docker/Dockerfile b/.docker/Dockerfile new file mode 100644 index 00000000..a325cf68 --- /dev/null +++ b/.docker/Dockerfile @@ -0,0 +1,37 @@ +### STAGE 1: Build ### +FROM node:9.11.1-alpine as builder +ARG branch=develop +ENV BRANCH=$branch +WORKDIR /src/app +RUN mkdir -p /src/app/coriolis +RUN mkdir -p /src/app/coriolis-data + +COPY ./coriolis/ /src/app/coriolis +COPY ./coriolis-data/ /src/app/coriolis-data + +RUN apk update +RUN apk add git + +RUN npm i -g npm + +# Set up coriolis-data +WORKDIR /src/app/coriolis-data +RUN git fetch --all +RUN git reset --hard origin/$BRANCH +RUN npm install --no-package-lock +RUN npm start + +WORKDIR /src/app/coriolis +RUN git fetch --all +RUN git reset --hard origin/$BRANCH +RUN rm -rf node_modules/ +RUN npm install --no-package-lock +RUN npm run build + + +### STAGE 2: Production Environment ### +FROM nginx:1.13.12-alpine as web +COPY nginx.conf /etc/nginx/nginx.conf +COPY --from=builder /src/app/coriolis/build /usr/share/nginx/html +EXPOSE 80 +CMD ["nginx", "-g", "daemon off;"] diff --git a/.docker/docker-compose.yml b/.docker/docker-compose.yml new file mode 100644 index 00000000..222bbbca --- /dev/null +++ b/.docker/docker-compose.yml @@ -0,0 +1,39 @@ +version: '2.2' + +services: + coriolis_prod: + build: + dockerfile: coriolis/.docker/Dockerfile + context: ../.. + environment: + BRANCH: master + restart: always + networks: + - coriolis_web + - default + labels: + - "traefik.docker.network=coriolis_coriolis_web" + - "traefik.enable=true" + - "traefik.basic.frontend.rule=Host:coriolis.io,coriolis.edcd.io" + - "traefik.basic.port=80" + - "traefik.basic.protocol=http" + + coriolis_dev: + build: + dockerfile: coriolis/.docker/Dockerfile + context: ../.. + restart: always + environment: + BRANCH: feature/docker-deployment + networks: + - coriolis_web + - default + labels: + - "traefik.docker.network=coriolis_coriolis_web" + - "traefik.enable=true" + - "traefik.basic.frontend.rule=Host:beta.coriolis.io,beta.coriolis.edcd.io" + - "traefik.basic.port=80" + - "traefik.basic.protocol=http" + +networks: + coriolis_web: diff --git a/.docker/nginx.conf b/.docker/nginx.conf new file mode 100644 index 00000000..cd82ec07 --- /dev/null +++ b/.docker/nginx.conf @@ -0,0 +1,38 @@ +user nobody; +worker_processes auto; # it will be determinate automatically by the number of core + +error_log /var/log/nginx/error.log warn; +#pid /var/run/nginx.pid; # it permit you to use /etc/init.d/nginx reload|restart|stop|start + +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + sendfile on; + access_log /var/log/nginx/access.log; + keepalive_timeout 3000; + server { + listen 80; + listen [::]:80; + + index index.html; + + server_name localhost; + root /src/app/coriolis/build; + + location ~* \.(?:manifest|appcache|html?|xml|json|css|js|map|jpg|jpeg|gif|png|ico|svg|eot|ttf|woff|woff2)$ { + expires -1; + add_header Access-Control-Allow-Origin *; + add_header Access-Control-Allow-Credentials true; + add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; + add_header Access-Control-Allow-Headers 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; + access_log off; + } + location / { + try_files $uri $uri/ /index.html =404; + } + } +} From 0fd1c19514d260049cb574d7461b1ed9df247ec3 Mon Sep 17 00:00:00 2001 From: willyb321 Date: Wed, 25 Jul 2018 11:25:21 +1000 Subject: [PATCH 08/14] dont reset --- .docker/Dockerfile | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.docker/Dockerfile b/.docker/Dockerfile index a325cf68..1a653396 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -16,14 +16,10 @@ RUN npm i -g npm # Set up coriolis-data WORKDIR /src/app/coriolis-data -RUN git fetch --all -RUN git reset --hard origin/$BRANCH RUN npm install --no-package-lock RUN npm start WORKDIR /src/app/coriolis -RUN git fetch --all -RUN git reset --hard origin/$BRANCH RUN rm -rf node_modules/ RUN npm install --no-package-lock RUN npm run build From cd1e27fd11457ef82ad822d82e5c76999f1d361b Mon Sep 17 00:00:00 2001 From: willyb321 Date: Wed, 25 Jul 2018 11:48:01 +1000 Subject: [PATCH 09/14] fix nginx conf --- .docker/nginx.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.docker/nginx.conf b/.docker/nginx.conf index cd82ec07..37848fa3 100644 --- a/.docker/nginx.conf +++ b/.docker/nginx.conf @@ -21,7 +21,7 @@ http { index index.html; server_name localhost; - root /src/app/coriolis/build; + root /usr/share/nginx/html; location ~* \.(?:manifest|appcache|html?|xml|json|css|js|map|jpg|jpeg|gif|png|ico|svg|eot|ttf|woff|woff2)$ { expires -1; From 5f70d283e06ee9875b699e2c3e75190b172dfebd Mon Sep 17 00:00:00 2001 From: willyb321 Date: Thu, 26 Jul 2018 07:25:32 +1000 Subject: [PATCH 10/14] do reset to branch --- .docker/Dockerfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.docker/Dockerfile b/.docker/Dockerfile index 1a653396..a325cf68 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -16,10 +16,14 @@ RUN npm i -g npm # Set up coriolis-data WORKDIR /src/app/coriolis-data +RUN git fetch --all +RUN git reset --hard origin/$BRANCH RUN npm install --no-package-lock RUN npm start WORKDIR /src/app/coriolis +RUN git fetch --all +RUN git reset --hard origin/$BRANCH RUN rm -rf node_modules/ RUN npm install --no-package-lock RUN npm run build From 78134404c36368e06f9d58c282ab18896f0335a9 Mon Sep 17 00:00:00 2001 From: willyb321 Date: Thu, 26 Jul 2018 08:33:05 +1000 Subject: [PATCH 11/14] prettify nginx, dockerfile updates --- .docker/Dockerfile | 4 +-- .docker/docker-compose.yml | 12 ++++--- .docker/nginx.conf | 65 +++++++++++++++++++++----------------- 3 files changed, 46 insertions(+), 35 deletions(-) diff --git a/.docker/Dockerfile b/.docker/Dockerfile index a325cf68..bb1643b8 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -24,7 +24,6 @@ RUN npm start WORKDIR /src/app/coriolis RUN git fetch --all RUN git reset --hard origin/$BRANCH -RUN rm -rf node_modules/ RUN npm install --no-package-lock RUN npm run build @@ -33,5 +32,6 @@ RUN npm run build FROM nginx:1.13.12-alpine as web COPY nginx.conf /etc/nginx/nginx.conf COPY --from=builder /src/app/coriolis/build /usr/share/nginx/html +WORKDIR /usr/share/nginx/html EXPOSE 80 -CMD ["nginx", "-g", "daemon off;"] +CMD ["nginx", "-c", "/etc/nginx/nginx.conf", "-g", "daemon off;"] diff --git a/.docker/docker-compose.yml b/.docker/docker-compose.yml index 222bbbca..238b20d5 100644 --- a/.docker/docker-compose.yml +++ b/.docker/docker-compose.yml @@ -5,8 +5,8 @@ services: build: dockerfile: coriolis/.docker/Dockerfile context: ../.. - environment: - BRANCH: master + args: + branch: master restart: always networks: - coriolis_web @@ -22,9 +22,13 @@ services: build: dockerfile: coriolis/.docker/Dockerfile context: ../.. + args: + branch: master restart: always - environment: - BRANCH: feature/docker-deployment + volumes: + - ./nginx.conf:/etc/nginx/nginx.conf + ports: + - 8090:80 networks: - coriolis_web - default diff --git a/.docker/nginx.conf b/.docker/nginx.conf index 37848fa3..17639330 100644 --- a/.docker/nginx.conf +++ b/.docker/nginx.conf @@ -1,38 +1,45 @@ -user nobody; -worker_processes auto; # it will be determinate automatically by the number of core - -error_log /var/log/nginx/error.log warn; -#pid /var/run/nginx.pid; # it permit you to use /etc/init.d/nginx reload|restart|stop|start +worker_processes 1; +user nobody nobody; +error_log /tmp/error.log; +pid /tmp/nginx.pid; events { - worker_connections 1024; + + worker_connections 1024; } http { - include /etc/nginx/mime.types; - default_type application/octet-stream; - sendfile on; - access_log /var/log/nginx/access.log; - keepalive_timeout 3000; - server { - listen 80; - listen [::]:80; - index index.html; + include /etc/nginx/mime.types; + default_type application/octet-stream; + sendfile on; + client_body_temp_path /tmp/client_body; + fastcgi_temp_path /tmp/fastcgi_temp; + proxy_temp_path /tmp/proxy_temp; + scgi_temp_path /tmp/scgi_temp; + uwsgi_temp_path /tmp/uwsgi_temp; + access_log /tmp/access.log; + error_log /tmp/error.log; - server_name localhost; - root /usr/share/nginx/html; + keepalive_timeout 3000; + server { + listen 80; + listen [::]:80; + index index.html; + server_name localhost; + root /usr/share/nginx/html; + autoindex on; - location ~* \.(?:manifest|appcache|html?|xml|json|css|js|map|jpg|jpeg|gif|png|ico|svg|eot|ttf|woff|woff2)$ { - expires -1; - add_header Access-Control-Allow-Origin *; - add_header Access-Control-Allow-Credentials true; - add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; - add_header Access-Control-Allow-Headers 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; - access_log off; - } - location / { - try_files $uri $uri/ /index.html =404; - } - } + location ~* \.(?:manifest|appcache|html?|xml|json|css|js|map|jpg|jpeg|gif|png|ico|svg|eot|ttf|woff|woff2)$ { + expires -1; + add_header Access-Control-Allow-Origin *; + add_header Access-Control-Allow-Credentials true; + add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; + add_header Access-Control-Allow-Headers 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; + access_log off; + } + location / { + try_files $uri $uri/ /index.html =404; + } + } } From 5f88f46770ba95301d32da1ad34fd65af292b7a1 Mon Sep 17 00:00:00 2001 From: willyb321 Date: Thu, 26 Jul 2018 08:39:32 +1000 Subject: [PATCH 12/14] oops, remove ports and fix branch --- .docker/docker-compose.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.docker/docker-compose.yml b/.docker/docker-compose.yml index 238b20d5..43be1be8 100644 --- a/.docker/docker-compose.yml +++ b/.docker/docker-compose.yml @@ -8,6 +8,8 @@ services: args: branch: master restart: always + volumes: + - ./nginx.conf:/etc/nginx/nginx.conf networks: - coriolis_web - default @@ -23,12 +25,10 @@ services: dockerfile: coriolis/.docker/Dockerfile context: ../.. args: - branch: master + branch: develop restart: always volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ports: - - 8090:80 networks: - coriolis_web - default From b7f715bd5e0f675bb2b069061c63fb9a14bb4164 Mon Sep 17 00:00:00 2001 From: willyb321 Date: Thu, 26 Jul 2018 08:58:27 +1000 Subject: [PATCH 13/14] fix dockerfile to copy the right config --- .docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.docker/Dockerfile b/.docker/Dockerfile index bb1643b8..b3db1407 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -30,7 +30,7 @@ RUN npm run build ### STAGE 2: Production Environment ### FROM nginx:1.13.12-alpine as web -COPY nginx.conf /etc/nginx/nginx.conf +COPY coriolis/.docker/nginx.conf /etc/nginx/nginx.conf COPY --from=builder /src/app/coriolis/build /usr/share/nginx/html WORKDIR /usr/share/nginx/html EXPOSE 80 From 90a3392b807734951ff98ff502c61a021a921317 Mon Sep 17 00:00:00 2001 From: willyb321 Date: Thu, 26 Jul 2018 11:11:45 +1000 Subject: [PATCH 14/14] oops i forgot a thing --- .docker/docker-compose.yml | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/.docker/docker-compose.yml b/.docker/docker-compose.yml index 43be1be8..2c4bd98d 100644 --- a/.docker/docker-compose.yml +++ b/.docker/docker-compose.yml @@ -2,11 +2,7 @@ version: '2.2' services: coriolis_prod: - build: - dockerfile: coriolis/.docker/Dockerfile - context: ../.. - args: - branch: master + image: edcd/coriolis:master restart: always volumes: - ./nginx.conf:/etc/nginx/nginx.conf @@ -21,11 +17,7 @@ services: - "traefik.basic.protocol=http" coriolis_dev: - build: - dockerfile: coriolis/.docker/Dockerfile - context: ../.. - args: - branch: develop + image: edcd/coriolis:develop restart: always volumes: - ./nginx.conf:/etc/nginx/nginx.conf