Skip to content

Commit 1c43cc2

Browse files
authored
Merge pull request #725 from jc21/develop
v2.7.0
2 parents cf8812c + 657ee73 commit 1c43cc2

File tree

11 files changed

+185
-103
lines changed

11 files changed

+185
-103
lines changed

.jenkins/config-mysql.json

Lines changed: 0 additions & 10 deletions
This file was deleted.

.jenkins/config-sqlite.json

Lines changed: 0 additions & 11 deletions
This file was deleted.

.version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.6.2
1+
2.7.0

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<p align="center">
22
<img src="https://nginxproxymanager.com/github.png">
33
<br><br>
4-
<img src="https://img.shields.io/badge/version-2.6.2-green.svg?style=for-the-badge">
4+
<img src="https://img.shields.io/badge/version-2.7.0-green.svg?style=for-the-badge">
55
<a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager">
66
<img src="https://img.shields.io/docker/stars/jc21/nginx-proxy-manager.svg?style=for-the-badge">
77
</a>

backend/index.js

Lines changed: 86 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,18 @@
22

33
const logger = require('./logger').global;
44

5-
function appStart () {
5+
async function appStart () {
6+
// Create config file db settings if environment variables have been set
7+
await createDbConfigFromEnvironment();
8+
69
const migrate = require('./migrate');
710
const setup = require('./setup');
811
const app = require('./app');
912
const apiValidator = require('./lib/validator/api');
1013
const internalCertificate = require('./internal/certificate');
1114
const internalIpRanges = require('./internal/ip_ranges');
1215

16+
1317
return migrate.latest()
1418
.then(setup)
1519
.then(() => {
@@ -39,6 +43,87 @@ function appStart () {
3943
});
4044
}
4145

46+
async function createDbConfigFromEnvironment(){
47+
return new Promise((resolve, reject) => {
48+
const envMysqlHost = process.env.DB_MYSQL_HOST;
49+
const envMysqlPort = process.env.DB_MYSQL_PORT;
50+
const envMysqlUser = process.env.DB_MYSQL_USER;
51+
const envMysqlName = process.env.DB_MYSQL_NAME;
52+
const envSqliteFile = process.env.DB_SQLITE_FILE;
53+
if ((envMysqlHost && envMysqlPort && envMysqlUser && envMysqlName) || envSqliteFile) {
54+
const fs = require('fs');
55+
const filename = (process.env.NODE_CONFIG_DIR || './config') + '/' + (process.env.NODE_ENV || 'default') + '.json';
56+
let configData = {};
57+
58+
try {
59+
configData = require(filename);
60+
} catch (err) {
61+
// do nothing
62+
}
63+
64+
if (configData.database && configData.database.engine && !configData.database.fromEnv) {
65+
logger.info('Manual db configuration already exists, skipping config creation from environment variables');
66+
resolve();
67+
return;
68+
}
69+
70+
if (envMysqlHost && envMysqlPort && envMysqlUser && envMysqlName) {
71+
const newConfig = {
72+
fromEnv: true,
73+
engine: 'mysql',
74+
host: envMysqlHost,
75+
port: envMysqlPort,
76+
user: envMysqlUser,
77+
password: process.env.DB_MYSQL_PASSWORD,
78+
name: envMysqlName,
79+
};
80+
81+
if (JSON.stringify(configData.database) === JSON.stringify(newConfig)) {
82+
// Config is unchanged, skip overwrite
83+
resolve();
84+
return;
85+
}
86+
87+
logger.info('Generating MySQL db configuration from environment variables');
88+
configData.database = newConfig;
89+
90+
} else {
91+
const newConfig = {
92+
fromEnv: true,
93+
engine: 'knex-native',
94+
knex: {
95+
client: 'sqlite3',
96+
connection: {
97+
filename: envSqliteFile
98+
}
99+
}
100+
};
101+
if (JSON.stringify(configData.database) === JSON.stringify(newConfig)) {
102+
// Config is unchanged, skip overwrite
103+
resolve();
104+
return;
105+
}
106+
107+
logger.info('Generating Sqlite db configuration from environment variables');
108+
configData.database = newConfig;
109+
}
110+
111+
// Write config
112+
fs.writeFile(filename, JSON.stringify(configData, null, 2), (err) => {
113+
if (err) {
114+
logger.error('Could not write db config to config file: ' + filename);
115+
reject(err);
116+
} else {
117+
logger.info('Wrote db configuration to config file: ' + filename);
118+
resolve();
119+
}
120+
});
121+
} else {
122+
// resolve();
123+
}
124+
});
125+
}
126+
42127
try {
43128
appStart();
44129
} catch (err) {

backend/internal/certificate.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,13 @@ const internalCertificate = {
216216
return saved_row;
217217
});
218218
});
219+
}).catch(async (error) => {
220+
// Delete the certificate from the database if it was not created successfully
221+
await certificateModel
222+
.query()
223+
.deleteById(certificate.id);
224+
225+
throw error;
219226
});
220227
} else {
221228
return certificate;

docker/docker-compose.ci.yml

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,15 @@ services:
55
fullstack-mysql:
66
image: ${IMAGE}:ci-${BUILD_NUMBER}
77
environment:
8-
- NODE_ENV=development
9-
- FORCE_COLOR=1
8+
NODE_ENV: "development"
9+
FORCE_COLOR: 1
10+
DB_MYSQL_HOST: "db"
11+
DB_MYSQL_PORT: 3306
12+
DB_MYSQL_USER: "npm"
13+
DB_MYSQL_PASSWORD: "npm"
14+
DB_MYSQL_NAME: "npm"
1015
volumes:
1116
- npm_data:/data
12-
- ../.jenkins/config-mysql.json:/app/config/development.json
1317
expose:
1418
- 81
1519
- 80
@@ -20,11 +24,11 @@ services:
2024
fullstack-sqlite:
2125
image: ${IMAGE}:ci-${BUILD_NUMBER}
2226
environment:
23-
- NODE_ENV=development
24-
- FORCE_COLOR=1
27+
NODE_ENV: "development"
28+
FORCE_COLOR: 1
29+
DB_SQLITE_FILE: "/data/database.sqlite"
2530
volumes:
2631
- npm_data:/data
27-
- ../.jenkins/config-sqlite.json:/app/config/development.json
2832
expose:
2933
- 81
3034
- 80

docker/docker-compose.dev.yml

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,16 @@ services:
1414
networks:
1515
- nginx_proxy_manager
1616
environment:
17-
- NODE_ENV=development
18-
- FORCE_COLOR=1
19-
- DEVELOPMENT=true
20-
#- DISABLE_IPV6=true
17+
NODE_ENV: "development"
18+
FORCE_COLOR: 1
19+
DEVELOPMENT: "true"
20+
DB_MYSQL_HOST: "db"
21+
DB_MYSQL_PORT: 3306
22+
DB_MYSQL_USER: "npm"
23+
DB_MYSQL_PASSWORD: "npm"
24+
DB_MYSQL_NAME: "npm"
25+
# DB_SQLITE_FILE: "/data/database.sqlite"
26+
# DISABLE_IPV6: "true"
2127
volumes:
2228
- npm_data:/data
2329
- le_data:/etc/letsencrypt

docs/README.md

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -45,21 +45,7 @@ footer: MIT Licensed | Copyright © 2016-present jc21.com
4545
- [Docker Install documentation](https://docs.docker.com/install/)
4646
- [Docker-Compose Install documentation](https://docs.docker.com/compose/install/)
4747

48-
2. Create a config file for example
49-
```json
50-
{
51-
"database": {
52-
"engine": "mysql",
53-
"host": "db",
54-
"name": "npm",
55-
"user": "npm",
56-
"password": "npm",
57-
"port": 3306
58-
}
59-
}
60-
```
61-
62-
3. Create a docker-compose.yml file similar to this:
48+
2. Create a docker-compose.yml file similar to this:
6349

6450
```yml
6551
version: '3'
@@ -70,8 +56,13 @@ services:
7056
- '80:80'
7157
- '81:81'
7258
- '443:443'
59+
environment:
60+
DB_MYSQL_HOST: "db"
61+
DB_MYSQL_PORT: 3306
62+
DB_MYSQL_USER: "npm"
63+
DB_MYSQL_PASSWORD: "npm"
64+
DB_MYSQL_NAME: "npm"
7365
volumes:
74-
- ./config.json:/app/config/production.json
7566
- ./data:/data
7667
- ./letsencrypt:/etc/letsencrypt
7768
db:
@@ -85,13 +76,13 @@ services:
8576
- ./data/mysql:/var/lib/mysql
8677
```
8778
88-
4. Bring up your stack
79+
3. Bring up your stack
8980
9081
```bash
9182
docker-compose up -d
9283
```
9384

94-
5. Log in to the Admin UI
85+
4. Log in to the Admin UI
9586

9687
When your docker container is running, connect to it on port `81` for the admin interface.
9788
Sometimes this can take a little bit because of the entropy of keys.

0 commit comments

Comments
 (0)