mirror of
https://github.com/digitalocean/nginxconfig.io
synced 2024-11-10 04:24:12 +00:00
Add prettier and run prettier command via lint-staged (#448)
This commit is contained in:
parent
c908a32448
commit
dbc954e7f1
186 changed files with 4263 additions and 1409 deletions
|
@ -1,41 +1,44 @@
|
||||||
module.exports = {
|
module.exports = {
|
||||||
env: {
|
env: {
|
||||||
'browser': true,
|
browser: true,
|
||||||
'node': true,
|
node: true,
|
||||||
},
|
},
|
||||||
extends: [
|
extends: ['eslint:recommended', 'plugin:vue/recommended', 'prettier'],
|
||||||
'eslint:recommended',
|
parserOptions: {
|
||||||
'plugin:vue/recommended',
|
parser: '@babel/eslint-parser',
|
||||||
],
|
ecmaVersion: 2018,
|
||||||
parserOptions: {
|
sourceType: 'module',
|
||||||
parser: '@babel/eslint-parser',
|
requireConfigFile: false,
|
||||||
ecmaVersion: 2018,
|
},
|
||||||
sourceType: 'module',
|
rules: {
|
||||||
requireConfigFile: false,
|
'linebreak-style': ['error', 'unix'],
|
||||||
},
|
semi: ['error', 'always'],
|
||||||
rules: {
|
'comma-dangle': ['error', 'always-multiline'],
|
||||||
'linebreak-style': ['error', 'unix'],
|
'vue/require-v-for-key': 0,
|
||||||
semi: ['error', 'always'],
|
'vue/require-default-prop': 0,
|
||||||
quotes: ['error', 'single'],
|
'vue/no-v-html': 0,
|
||||||
'comma-dangle': ['error', 'always-multiline'],
|
'vue/max-attributes-per-line': 0,
|
||||||
'vue/require-v-for-key': 0,
|
'vue/html-indent': ['error', 4],
|
||||||
'vue/require-default-prop': 0,
|
'vue/script-indent': [
|
||||||
'vue/no-v-html': 0,
|
'error',
|
||||||
'vue/max-attributes-per-line': 0,
|
4,
|
||||||
'vue/html-indent': ['error', 4],
|
{
|
||||||
'vue/script-indent': ['error', 4, {
|
baseIndent: 1,
|
||||||
baseIndent: 1,
|
switchCase: 1,
|
||||||
}],
|
},
|
||||||
'vue/no-unused-vars': 0,
|
],
|
||||||
'vue/html-self-closing': 0,
|
'vue/no-unused-vars': 'warn',
|
||||||
'vue/multi-word-component-names': 0,
|
'vue/html-self-closing': 0,
|
||||||
'vue/no-reserved-component-names': 0,
|
'vue/multi-word-component-names': 0,
|
||||||
'eol-last': ['error', 'always'],
|
'vue/no-reserved-component-names': 0,
|
||||||
},
|
'eol-last': ['error', 'always'],
|
||||||
globals: {
|
'prettier/prettier': 'error',
|
||||||
'describe': true,
|
},
|
||||||
'expect': true,
|
globals: {
|
||||||
'it': true,
|
describe: true,
|
||||||
'test': true,
|
expect: true,
|
||||||
},
|
it: true,
|
||||||
|
test: true,
|
||||||
|
},
|
||||||
|
plugins: ['prettier'],
|
||||||
};
|
};
|
||||||
|
|
19
.github/workflows/test-workflow.yml
vendored
19
.github/workflows/test-workflow.yml
vendored
|
@ -59,3 +59,22 @@ jobs:
|
||||||
|
|
||||||
- name: Test i18n packs integrity
|
- name: Test i18n packs integrity
|
||||||
run: npm run test:i18n-packs
|
run: npm run test:i18n-packs
|
||||||
|
|
||||||
|
prettier:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Use Node.js
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version-file: .nvmrc
|
||||||
|
cache: npm
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Test with prettier
|
||||||
|
run: npm run test:prettier
|
||||||
|
|
9
.lintstagedrc.json
Normal file
9
.lintstagedrc.json
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"*.{js,vue}": [
|
||||||
|
"prettier --write",
|
||||||
|
"eslint --quiet --cache --fix"
|
||||||
|
],
|
||||||
|
"*.scss": [
|
||||||
|
"stylelint --config node_modules/do-bulma/.stylelintrc.json --fix"
|
||||||
|
]
|
||||||
|
}
|
2
.prettierignore
Normal file
2
.prettierignore
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
package.json
|
||||||
|
package-lock.json
|
9
.prettierrc.json
Normal file
9
.prettierrc.json
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"singleQuote": true,
|
||||||
|
"trailingComma": "all",
|
||||||
|
"vueIndentScriptAndStyle": true,
|
||||||
|
"htmlWhitespaceSensitivity": "ignore",
|
||||||
|
"printWidth": 100,
|
||||||
|
"tabWidth": 4,
|
||||||
|
"singleAttributePerLine": true
|
||||||
|
}
|
1064
package-lock.json
generated
1064
package-lock.json
generated
File diff suppressed because it is too large
Load diff
17
package.json
17
package.json
|
@ -16,13 +16,15 @@
|
||||||
"dev": "npm run build:template && npm run build:prism && npm run dev:tool",
|
"dev": "npm run build:template && npm run build:prism && npm run dev:tool",
|
||||||
"dev:tool": "vue-cli-service serve src/nginxconfig/mount.js",
|
"dev:tool": "vue-cli-service serve src/nginxconfig/mount.js",
|
||||||
"deploy:spaces:comment": "do-vue comment nginxconfig",
|
"deploy:spaces:comment": "do-vue comment nginxconfig",
|
||||||
"test": "npm run test:eslint && npm run test:stylelint && npm run test:i18n-packs && npm run test:jest",
|
"test": "npm run test:prettier:fix && npm run test:eslint && npm run test:stylelint && npm run test:i18n-packs && npm run test:jest",
|
||||||
"test:jest": "jest --env=jsdom /test/.*.js?$",
|
"test:jest": "jest --env=jsdom /test/.*.js?$",
|
||||||
"test:fix": "npm run test:eslint:fix",
|
"test:fix": "npm run test:prettier:fix && npm run test:eslint:fix",
|
||||||
"test:eslint": "eslint 'src/**/*.{js,vue}' --cache",
|
"test:eslint": "eslint 'src/**/*.{js,vue}' --cache",
|
||||||
"test:eslint:fix": "npm run test:eslint -- --fix",
|
"test:eslint:fix": "npm run test:eslint -- --fix",
|
||||||
"test:stylelint": "stylelint 'src/**/*.scss' --config node_modules/do-bulma/.stylelintrc.json",
|
"test:stylelint": "stylelint 'src/**/*.scss' --config node_modules/do-bulma/.stylelintrc.json",
|
||||||
"test:i18n-packs": "node --es-module-specifier-resolution=node src/nginxconfig/i18n/verify.js",
|
"test:i18n-packs": "node --es-module-specifier-resolution=node src/nginxconfig/i18n/verify.js",
|
||||||
|
"test:prettier": "prettier 'src/**/*.{js,vue}' --check",
|
||||||
|
"test:prettier:fix": "prettier --write 'src/**/*.{js,vue}'",
|
||||||
"prepare": "husky install"
|
"prepare": "husky install"
|
||||||
},
|
},
|
||||||
"jest": {
|
"jest": {
|
||||||
|
@ -71,6 +73,8 @@
|
||||||
"core-js": "^3.32.0",
|
"core-js": "^3.32.0",
|
||||||
"duplicate-package-checker-webpack-plugin": "^3.0.0",
|
"duplicate-package-checker-webpack-plugin": "^3.0.0",
|
||||||
"eslint": "^8.46.0",
|
"eslint": "^8.46.0",
|
||||||
|
"eslint-config-prettier": "^9.0.0",
|
||||||
|
"eslint-plugin-prettier": "^5.0.1",
|
||||||
"eslint-plugin-vue": "^9.16.1",
|
"eslint-plugin-vue": "^9.16.1",
|
||||||
"esm": "^3.2.25",
|
"esm": "^3.2.25",
|
||||||
"husky": "^8.0.3",
|
"husky": "^8.0.3",
|
||||||
|
@ -79,6 +83,7 @@
|
||||||
"lint-staged": "^13.2.3",
|
"lint-staged": "^13.2.3",
|
||||||
"node-fetch": "^3.3.2",
|
"node-fetch": "^3.3.2",
|
||||||
"postcss": "^8.4.31",
|
"postcss": "^8.4.31",
|
||||||
|
"prettier": "3.0.3",
|
||||||
"sass": "^1.64.2",
|
"sass": "^1.64.2",
|
||||||
"sass-loader": "^13.3.2",
|
"sass-loader": "^13.3.2",
|
||||||
"stylelint": "^15.10.2",
|
"stylelint": "^15.10.2",
|
||||||
|
@ -88,14 +93,6 @@
|
||||||
"webpack": "^5.88.2",
|
"webpack": "^5.88.2",
|
||||||
"webpack-bundle-analyzer": "^4.9.0"
|
"webpack-bundle-analyzer": "^4.9.0"
|
||||||
},
|
},
|
||||||
"lint-staged": {
|
|
||||||
"*.{js,vue}": [
|
|
||||||
"eslint --quiet --cache --fix"
|
|
||||||
],
|
|
||||||
"*.scss": [
|
|
||||||
"stylelint --config node_modules/do-bulma/.stylelintrc.json --fix"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"overrides": {
|
"overrides": {
|
||||||
"@vue/cli-service": {
|
"@vue/cli-service": {
|
||||||
"mini-css-extract-plugin": "^1.6.2"
|
"mini-css-extract-plugin": "^1.6.2"
|
||||||
|
|
|
@ -39,7 +39,9 @@ const main = async () => {
|
||||||
await fs.writeFile(new URL(`${buildDir}/prism.css`, import.meta.url), fixed);
|
await fs.writeFile(new URL(`${buildDir}/prism.css`, import.meta.url), fixed);
|
||||||
};
|
};
|
||||||
|
|
||||||
main().then(() => {}).catch(err => {
|
main()
|
||||||
console.error(err);
|
.then(() => {})
|
||||||
process.exit(1);
|
.catch((err) => {
|
||||||
});
|
console.error(err);
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
|
|
|
@ -33,7 +33,10 @@ const main = () => {
|
||||||
let template = fs.readFileSync(new URL(`${buildDir}/base.html`, import.meta.url), 'utf8');
|
let template = fs.readFileSync(new URL(`${buildDir}/base.html`, import.meta.url), 'utf8');
|
||||||
|
|
||||||
// Inject our title now
|
// Inject our title now
|
||||||
template = template.replace('<block name="title"><title>DigitalOcean</title></block>', '<title>NGINXConfig | DigitalOcean</title>');
|
template = template.replace(
|
||||||
|
'<block name="title"><title>DigitalOcean</title></block>',
|
||||||
|
'<title>NGINXConfig | DigitalOcean</title>',
|
||||||
|
);
|
||||||
|
|
||||||
// Inject our app mounting point
|
// Inject our app mounting point
|
||||||
template = template.replace('<block name="content"></block>', '<div id="app"></div>');
|
template = template.replace('<block name="content"></block>', '<div id="app"></div>');
|
||||||
|
|
|
@ -24,11 +24,13 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default global => {
|
export default (global) => {
|
||||||
const config = {};
|
const config = {};
|
||||||
|
|
||||||
config['# Drupal: deny private files'] = '';
|
config['# Drupal: deny private files'] = '';
|
||||||
config['location ~ ((^|/)\\.|^.*\\.yml$|^/sites/.*/private/|^/sites/[^/]+/[^/]*settings.*\\.php$)'] = {
|
config[
|
||||||
|
'location ~ ((^|/)\\.|^.*\\.yml$|^/sites/.*/private/|^/sites/[^/]+/[^/]*settings.*\\.php$)'
|
||||||
|
] = {
|
||||||
deny: 'all',
|
deny: 'all',
|
||||||
return: '404',
|
return: '404',
|
||||||
};
|
};
|
||||||
|
|
|
@ -46,11 +46,13 @@ export default (domains, global) => {
|
||||||
config[loc] = {
|
config[loc] = {
|
||||||
add_header: 'Cache-Control "no-cache"',
|
add_header: 'Cache-Control "no-cache"',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (domains.every(d => d.routing.root.computed)) {
|
if (domains.every((d) => d.routing.root.computed)) {
|
||||||
if (global.performance.assetsExpiration.computed === global.performance.mediaExpiration.computed) {
|
if (
|
||||||
|
global.performance.assetsExpiration.computed ===
|
||||||
|
global.performance.mediaExpiration.computed
|
||||||
|
) {
|
||||||
if (global.performance.assetsExpiration.computed) {
|
if (global.performance.assetsExpiration.computed) {
|
||||||
// Assets & media combined
|
// Assets & media combined
|
||||||
config['# assets, media'] = '';
|
config['# assets, media'] = '';
|
||||||
|
@ -78,7 +80,10 @@ export default (domains, global) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (global.performance.svgExpiration.computed === global.performance.fontsExpiration.computed) {
|
if (
|
||||||
|
global.performance.svgExpiration.computed ===
|
||||||
|
global.performance.fontsExpiration.computed
|
||||||
|
) {
|
||||||
if (global.performance.svgExpiration.computed) {
|
if (global.performance.svgExpiration.computed) {
|
||||||
// SVG & fonts combined
|
// SVG & fonts combined
|
||||||
config['# svg, fonts'] = '';
|
config['# svg, fonts'] = '';
|
||||||
|
|
|
@ -43,7 +43,6 @@ export default () => {
|
||||||
expires: '14d',
|
expires: '14d',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// Done!
|
// Done!
|
||||||
return config;
|
return config;
|
||||||
};
|
};
|
||||||
|
|
|
@ -24,7 +24,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default global => {
|
export default (global) => {
|
||||||
const config = {};
|
const config = {};
|
||||||
|
|
||||||
config['# ACME-challenge'] = '';
|
config['# ACME-challenge'] = '';
|
||||||
|
|
|
@ -37,14 +37,16 @@ export default (domains, global) => {
|
||||||
|
|
||||||
// Basic nginx conf
|
// Basic nginx conf
|
||||||
config.user = global.nginx.user.computed;
|
config.user = global.nginx.user.computed;
|
||||||
if (global.nginx.pid.computed)
|
if (global.nginx.pid.computed) config.pid = global.nginx.pid.computed;
|
||||||
config.pid = global.nginx.pid.computed;
|
|
||||||
config.worker_processes = global.nginx.workerProcesses.computed;
|
config.worker_processes = global.nginx.workerProcesses.computed;
|
||||||
config.worker_rlimit_nofile = 65535;
|
config.worker_rlimit_nofile = 65535;
|
||||||
|
|
||||||
// Modules
|
// Modules
|
||||||
config['# Load modules'] = '';
|
config['# Load modules'] = '';
|
||||||
config.include = `${global.nginx.nginxConfigDirectory.computed.replace(/\/+$/, '')}/modules-enabled/*.conf`;
|
config.include = `${global.nginx.nginxConfigDirectory.computed.replace(
|
||||||
|
/\/+$/,
|
||||||
|
'',
|
||||||
|
)}/modules-enabled/*.conf`;
|
||||||
|
|
||||||
// Events
|
// Events
|
||||||
config.events = {
|
config.events = {
|
||||||
|
@ -59,10 +61,8 @@ export default (domains, global) => {
|
||||||
config.http.push(['sendfile', 'on']);
|
config.http.push(['sendfile', 'on']);
|
||||||
config.http.push(['tcp_nopush', 'on']);
|
config.http.push(['tcp_nopush', 'on']);
|
||||||
config.http.push(['tcp_nodelay', 'on']);
|
config.http.push(['tcp_nodelay', 'on']);
|
||||||
if (!global.security.serverTokens.computed)
|
if (!global.security.serverTokens.computed) config.http.push(['server_tokens', 'off']);
|
||||||
config.http.push(['server_tokens', 'off']);
|
if (!global.logging.logNotFound.computed) config.http.push(['log_not_found', 'off']);
|
||||||
if (!global.logging.logNotFound.computed)
|
|
||||||
config.http.push(['log_not_found', 'off']);
|
|
||||||
config.http.push(['types_hash_max_size', global.nginx.typesHashMaxSize.computed]);
|
config.http.push(['types_hash_max_size', global.nginx.typesHashMaxSize.computed]);
|
||||||
config.http.push(['types_hash_bucket_size', global.nginx.typesHashBucketSize.computed]);
|
config.http.push(['types_hash_bucket_size', global.nginx.typesHashBucketSize.computed]);
|
||||||
config.http.push(['client_max_body_size', `${global.nginx.clientMaxBodySize.computed}M`]);
|
config.http.push(['client_max_body_size', `${global.nginx.clientMaxBodySize.computed}M`]);
|
||||||
|
@ -76,33 +76,33 @@ export default (domains, global) => {
|
||||||
config.http.push(['# Log Format', '']);
|
config.http.push(['# Log Format', '']);
|
||||||
|
|
||||||
// Define default log format as an array
|
// Define default log format as an array
|
||||||
let logging = ['$remote_addr', '-', '$remote_user', '[$time_local]',
|
let logging = [
|
||||||
'"$request"', '$status', '$body_bytes_sent',
|
'$remote_addr',
|
||||||
'"$http_referer"', '"$http_user_agent"'];
|
'-',
|
||||||
|
'$remote_user',
|
||||||
|
'[$time_local]',
|
||||||
|
'"$request"',
|
||||||
|
'$status',
|
||||||
|
'$body_bytes_sent',
|
||||||
|
'"$http_referer"',
|
||||||
|
'"$http_user_agent"',
|
||||||
|
];
|
||||||
|
|
||||||
if (global.logging.cfRay.computed)
|
if (global.logging.cfRay.computed) logging.push('$http_cf_ray');
|
||||||
logging.push('$http_cf_ray');
|
|
||||||
|
|
||||||
if (global.logging.cfConnectingIp.computed)
|
if (global.logging.cfConnectingIp.computed) logging.push('$http_cf_connecting_ip');
|
||||||
logging.push('$http_cf_connecting_ip');
|
|
||||||
|
|
||||||
if (global.logging.xForwardedFor.computed)
|
if (global.logging.xForwardedFor.computed) logging.push('$http_x_forwarded_for');
|
||||||
logging.push('$http_x_forwarded_for');
|
|
||||||
|
|
||||||
if (global.logging.xForwardedProto.computed)
|
if (global.logging.xForwardedProto.computed) logging.push('$http_x_forwarded_proto');
|
||||||
logging.push('$http_x_forwarded_proto');
|
|
||||||
|
|
||||||
if (global.logging.trueClientIp.computed)
|
if (global.logging.trueClientIp.computed) logging.push('$http_true_client_ip');
|
||||||
logging.push('$http_true_client_ip');
|
|
||||||
|
|
||||||
if (global.logging.cfIpCountry.computed)
|
if (global.logging.cfIpCountry.computed) logging.push('$http_cf_ipcountry');
|
||||||
logging.push('$http_cf_ipcountry');
|
|
||||||
|
|
||||||
if (global.logging.cfVisitor.computed)
|
if (global.logging.cfVisitor.computed) logging.push('$http_cf_visitor');
|
||||||
logging.push('$http_cf_visitor');
|
|
||||||
|
|
||||||
if (global.logging.cdnLoop.computed)
|
if (global.logging.cdnLoop.computed) logging.push('$http_cdn_loop');
|
||||||
logging.push('$http_cdn_loop');
|
|
||||||
|
|
||||||
config.http.push(['log_format', `cloudflare '${logging.join(' ')}'`]);
|
config.http.push(['log_format', `cloudflare '${logging.join(' ')}'`]);
|
||||||
}
|
}
|
||||||
|
@ -110,8 +110,11 @@ export default (domains, global) => {
|
||||||
config.http.push(['# Logging', '']);
|
config.http.push(['# Logging', '']);
|
||||||
config.http.push(['access_log', 'off']);
|
config.http.push(['access_log', 'off']);
|
||||||
if (global.logging.errorLogEnabled.computed) {
|
if (global.logging.errorLogEnabled.computed) {
|
||||||
config.http.push(['error_log', global.logging.errorLogPath.computed.trim() +
|
config.http.push([
|
||||||
` ${global.logging.errorLogLevel.computed}`]);
|
'error_log',
|
||||||
|
global.logging.errorLogPath.computed.trim() +
|
||||||
|
` ${global.logging.errorLogLevel.computed}`,
|
||||||
|
]);
|
||||||
} else {
|
} else {
|
||||||
config.http.push(['error_log', errorLogPathDisabled]);
|
config.http.push(['error_log', errorLogPathDisabled]);
|
||||||
}
|
}
|
||||||
|
@ -140,7 +143,10 @@ export default (domains, global) => {
|
||||||
if (sslProfile) {
|
if (sslProfile) {
|
||||||
if (sslProfile.dh_param_size) {
|
if (sslProfile.dh_param_size) {
|
||||||
config.http.push(['# Diffie-Hellman parameter for DHE ciphersuites', '']);
|
config.http.push(['# Diffie-Hellman parameter for DHE ciphersuites', '']);
|
||||||
config.http.push(['ssl_dhparam', `${global.nginx.nginxConfigDirectory.computed.replace(/\/+$/, '')}/dhparam.pem`]);
|
config.http.push([
|
||||||
|
'ssl_dhparam',
|
||||||
|
`${global.nginx.nginxConfigDirectory.computed.replace(/\/+$/, '')}/dhparam.pem`,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
config.http.push([`# ${sslProfile.name} configuration`, '']);
|
config.http.push([`# ${sslProfile.name} configuration`, '']);
|
||||||
|
@ -194,35 +200,52 @@ export default (domains, global) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Connection header for WebSocket reverse proxy
|
// Connection header for WebSocket reverse proxy
|
||||||
if (domains.some(d => d.reverseProxy.reverseProxy.computed)) {
|
if (domains.some((d) => d.reverseProxy.reverseProxy.computed)) {
|
||||||
config.http.push(['# Connection header for WebSocket reverse proxy', '']);
|
config.http.push(['# Connection header for WebSocket reverse proxy', '']);
|
||||||
config.http.push(['map $http_upgrade $connection_upgrade', {
|
config.http.push([
|
||||||
'default': 'upgrade',
|
'map $http_upgrade $connection_upgrade',
|
||||||
'""': 'close',
|
{
|
||||||
}]);
|
default: 'upgrade',
|
||||||
|
'""': 'close',
|
||||||
|
},
|
||||||
|
]);
|
||||||
// See https://www.nginx.com/resources/wiki/start/topics/examples/forwarded/
|
// See https://www.nginx.com/resources/wiki/start/topics/examples/forwarded/
|
||||||
config.http.push(['map $remote_addr $proxy_forwarded_elem', {
|
config.http.push([
|
||||||
'# IPv4 addresses can be sent as-is': '',
|
'map $remote_addr $proxy_forwarded_elem',
|
||||||
'~^[0-9.]+$': '"for=$remote_addr"',
|
{
|
||||||
'# IPv6 addresses need to be bracketed and quoted': '',
|
'# IPv4 addresses can be sent as-is': '',
|
||||||
'~^[0-9A-Fa-f:.]+$': '"for=\\"[$remote_addr]\\""',
|
'~^[0-9.]+$': '"for=$remote_addr"',
|
||||||
'# Unix domain socket names cannot be represented in RFC 7239 syntax': '',
|
'# IPv6 addresses need to be bracketed and quoted': '',
|
||||||
'default': '"for=unknown"',
|
'~^[0-9A-Fa-f:.]+$': '"for=\\"[$remote_addr]\\""',
|
||||||
}]);
|
'# Unix domain socket names cannot be represented in RFC 7239 syntax': '',
|
||||||
config.http.push(['map $http_forwarded $proxy_add_forwarded', {
|
default: '"for=unknown"',
|
||||||
'# If the incoming Forwarded header is syntactically valid, append to it': '',
|
},
|
||||||
'': '"~^(,[ \\\\t]*)*([!#$%&\'*+.^_`|~0-9A-Za-z-]+=([!#$%&\'*+.^_`|~0-9A-Za-z-]+|\\"([\\\\t \\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E\\\\x80-\\\\xFF]|\\\\\\\\[\\\\t \\\\x21-\\\\x7E\\\\x80-\\\\xFF])*\\"))?(;([!#$%&\'*+.^_`|~0-9A-Za-z-]+=([!#$%&\'*+.^_`|~0-9A-Za-z-]+|\\"([\\\\t \\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E\\\\x80-\\\\xFF]|\\\\\\\\[\\\\t \\\\x21-\\\\x7E\\\\x80-\\\\xFF])*\\"))?)*([ \\\\t]*,([ \\\\t]*([!#$%&\'*+.^_`|~0-9A-Za-z-]+=([!#$%&\'*+.^_`|~0-9A-Za-z-]+|\\"([\\\\t \\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E\\\\x80-\\\\xFF]|\\\\\\\\[\\\\t \\\\x21-\\\\x7E\\\\x80-\\\\xFF])*\\"))?(;([!#$%&\'*+.^_`|~0-9A-Za-z-]+=([!#$%&\'*+.^_`|~0-9A-Za-z-]+|\\"([\\\\t \\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E\\\\x80-\\\\xFF]|\\\\\\\\[\\\\t \\\\x21-\\\\x7E\\\\x80-\\\\xFF])*\\"))?)*)?)*$" "$http_forwarded, $proxy_forwarded_elem"',
|
]);
|
||||||
'# Otherwise, replace it': '',
|
config.http.push([
|
||||||
'default': '"$proxy_forwarded_elem"',
|
'map $http_forwarded $proxy_add_forwarded',
|
||||||
}]);
|
{
|
||||||
|
'# If the incoming Forwarded header is syntactically valid, append to it': '',
|
||||||
|
'': '"~^(,[ \\\\t]*)*([!#$%&\'*+.^_`|~0-9A-Za-z-]+=([!#$%&\'*+.^_`|~0-9A-Za-z-]+|\\"([\\\\t \\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E\\\\x80-\\\\xFF]|\\\\\\\\[\\\\t \\\\x21-\\\\x7E\\\\x80-\\\\xFF])*\\"))?(;([!#$%&\'*+.^_`|~0-9A-Za-z-]+=([!#$%&\'*+.^_`|~0-9A-Za-z-]+|\\"([\\\\t \\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E\\\\x80-\\\\xFF]|\\\\\\\\[\\\\t \\\\x21-\\\\x7E\\\\x80-\\\\xFF])*\\"))?)*([ \\\\t]*,([ \\\\t]*([!#$%&\'*+.^_`|~0-9A-Za-z-]+=([!#$%&\'*+.^_`|~0-9A-Za-z-]+|\\"([\\\\t \\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E\\\\x80-\\\\xFF]|\\\\\\\\[\\\\t \\\\x21-\\\\x7E\\\\x80-\\\\xFF])*\\"))?(;([!#$%&\'*+.^_`|~0-9A-Za-z-]+=([!#$%&\'*+.^_`|~0-9A-Za-z-]+|\\"([\\\\t \\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E\\\\x80-\\\\xFF]|\\\\\\\\[\\\\t \\\\x21-\\\\x7E\\\\x80-\\\\xFF])*\\"))?)*)?)*$" "$http_forwarded, $proxy_forwarded_elem"',
|
||||||
|
'# Otherwise, replace it': '',
|
||||||
|
default: '"$proxy_forwarded_elem"',
|
||||||
|
},
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Configs!
|
// Configs!
|
||||||
config.http.push(['# Load configs', '']);
|
config.http.push(['# Load configs', '']);
|
||||||
config.http.push(['include', [
|
config.http.push([
|
||||||
`${global.nginx.nginxConfigDirectory.computed.replace(/\/+$/, '')}/conf.d/*.conf`,
|
'include',
|
||||||
global.tools.modularizedStructure.computed ? `${global.nginx.nginxConfigDirectory.computed.replace(/\/+$/, '')}/sites-enabled/*` : '',
|
[
|
||||||
].filter(x => x.length)]);
|
`${global.nginx.nginxConfigDirectory.computed.replace(/\/+$/, '')}/conf.d/*.conf`,
|
||||||
|
global.tools.modularizedStructure.computed
|
||||||
|
? `${global.nginx.nginxConfigDirectory.computed.replace(
|
||||||
|
/\/+$/,
|
||||||
|
'',
|
||||||
|
)}/sites-enabled/*`
|
||||||
|
: '',
|
||||||
|
].filter((x) => x.length),
|
||||||
|
]);
|
||||||
|
|
||||||
// Single file configs
|
// Single file configs
|
||||||
if (!global.tools.modularizedStructure.computed) {
|
if (!global.tools.modularizedStructure.computed) {
|
||||||
|
|
|
@ -25,7 +25,7 @@ THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default (domains) => {
|
export default (domains) => {
|
||||||
const legacyRouting = domains.some(d => d.routing.legacyPhpRouting.computed);
|
const legacyRouting = domains.some((d) => d.routing.legacyPhpRouting.computed);
|
||||||
const config = {};
|
const config = {};
|
||||||
|
|
||||||
if (legacyRouting) {
|
if (legacyRouting) {
|
||||||
|
|
|
@ -24,7 +24,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default global => {
|
export default (global) => {
|
||||||
const config = {};
|
const config = {};
|
||||||
|
|
||||||
config.proxy_http_version = '1.1';
|
config.proxy_http_version = '1.1';
|
||||||
|
@ -49,7 +49,6 @@ export default global => {
|
||||||
config['proxy_set_header X-Forwarded-Host'] = '""';
|
config['proxy_set_header X-Forwarded-Host'] = '""';
|
||||||
config['proxy_set_header X-Forwarded-Port'] = '""';
|
config['proxy_set_header X-Forwarded-Port'] = '""';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
config['# Proxy timeouts'] = '';
|
config['# Proxy timeouts'] = '';
|
||||||
config['proxy_connect_timeout'] = global.reverseProxy.proxyConnectTimeout.computed;
|
config['proxy_connect_timeout'] = global.reverseProxy.proxyConnectTimeout.computed;
|
||||||
|
|
|
@ -24,15 +24,16 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default global => {
|
export default (global) => {
|
||||||
const config = {};
|
const config = {};
|
||||||
|
|
||||||
config['# default uwsgi_params'] = '';
|
config['# default uwsgi_params'] = '';
|
||||||
config.include = 'uwsgi_params';
|
config.include = 'uwsgi_params';
|
||||||
|
|
||||||
config['# uwsgi settings'] = '';
|
config['# uwsgi settings'] = '';
|
||||||
config.uwsgi_pass = (global.python.pythonServer.computed[0] === '/' ? 'unix:' : '')
|
config.uwsgi_pass =
|
||||||
+ global.python.pythonServer.computed;
|
(global.python.pythonServer.computed[0] === '/' ? 'unix:' : '') +
|
||||||
|
global.python.pythonServer.computed;
|
||||||
config['uwsgi_param Host'] = '$host';
|
config['uwsgi_param Host'] = '$host';
|
||||||
config['uwsgi_param X-Real-IP'] = '$remote_addr';
|
config['uwsgi_param X-Real-IP'] = '$remote_addr';
|
||||||
config['uwsgi_param X-Forwarded-For'] = '$proxy_add_x_forwarded_for';
|
config['uwsgi_param X-Forwarded-For'] = '$proxy_add_x_forwarded_for';
|
||||||
|
|
|
@ -32,37 +32,60 @@ export default (domains, global) => {
|
||||||
config.push(['# security headers', '']);
|
config.push(['# security headers', '']);
|
||||||
config.push(['add_header X-XSS-Protection', '"1; mode=block" always']);
|
config.push(['add_header X-XSS-Protection', '"1; mode=block" always']);
|
||||||
config.push(['add_header X-Content-Type-Options', '"nosniff" always']);
|
config.push(['add_header X-Content-Type-Options', '"nosniff" always']);
|
||||||
config.push(['add_header Referrer-Policy', `"${global.security.referrerPolicy.computed}" always`]);
|
config.push([
|
||||||
|
'add_header Referrer-Policy',
|
||||||
|
`"${global.security.referrerPolicy.computed}" always`,
|
||||||
|
]);
|
||||||
|
|
||||||
if (global.security.contentSecurityPolicy.computed)
|
if (global.security.contentSecurityPolicy.computed)
|
||||||
config.push(['add_header Content-Security-Policy', `"${global.security.contentSecurityPolicy.computed}" always`]);
|
config.push([
|
||||||
|
'add_header Content-Security-Policy',
|
||||||
|
`"${global.security.contentSecurityPolicy.computed}" always`,
|
||||||
|
]);
|
||||||
|
|
||||||
if (global.security.permissionsPolicy.computed)
|
if (global.security.permissionsPolicy.computed)
|
||||||
config.push(['add_header Permissions-Policy', `"${global.security.permissionsPolicy.computed}" always`]);
|
config.push([
|
||||||
|
'add_header Permissions-Policy',
|
||||||
|
`"${global.security.permissionsPolicy.computed}" always`,
|
||||||
|
]);
|
||||||
|
|
||||||
// Every domain has HSTS enabled, and they all have same hstsSubdomains/hstsPreload settings
|
// Every domain has HSTS enabled, and they all have same hstsSubdomains/hstsPreload settings
|
||||||
if (commonHsts(domains)) {
|
if (commonHsts(domains)) {
|
||||||
const commonHSTSSubdomains = domains.length && domains[0].https.hstsSubdomains.computed;
|
const commonHSTSSubdomains = domains.length && domains[0].https.hstsSubdomains.computed;
|
||||||
const commonHSTSPreload = domains.length && domains[0].https.hstsPreload.computed;
|
const commonHSTSPreload = domains.length && domains[0].https.hstsPreload.computed;
|
||||||
config.push(['add_header Strict-Transport-Security', `"max-age=31536000${commonHSTSSubdomains ? '; includeSubDomains' : ''}${commonHSTSPreload ? '; preload' : ''}" always`]);
|
config.push([
|
||||||
|
'add_header Strict-Transport-Security',
|
||||||
|
`"max-age=31536000${commonHSTSSubdomains ? '; includeSubDomains' : ''}${
|
||||||
|
commonHSTSPreload ? '; preload' : ''
|
||||||
|
}" always`,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
config.push(['# . files', '']);
|
config.push(['# . files', '']);
|
||||||
config.push(['location ~ /\\.(?!well-known)', {
|
config.push([
|
||||||
deny: 'all',
|
'location ~ /\\.(?!well-known)',
|
||||||
}]);
|
{
|
||||||
|
deny: 'all',
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
// Security.txt
|
// Security.txt
|
||||||
if (global.security.securityTxt.computed) {
|
if (global.security.securityTxt.computed) {
|
||||||
config.push(['# security.txt', '']);
|
config.push(['# security.txt', '']);
|
||||||
config.push(['location /security.txt', {
|
config.push([
|
||||||
return: '301 /.well-known/security.txt',
|
'location /security.txt',
|
||||||
}]);
|
{
|
||||||
|
return: '301 /.well-known/security.txt',
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
// Custom security.txt path
|
// Custom security.txt path
|
||||||
config.push(['location = /.well-known/security.txt', {
|
config.push([
|
||||||
alias: `${global.security.securityTxtPath.value}`,
|
'location = /.well-known/security.txt',
|
||||||
}]);
|
{
|
||||||
|
alias: `${global.security.securityTxtPath.value}`,
|
||||||
|
},
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Done!
|
// Done!
|
||||||
|
|
|
@ -50,8 +50,12 @@ const sslConfig = (domain, global) => {
|
||||||
|
|
||||||
// Let's encrypt
|
// Let's encrypt
|
||||||
if (domain.https.certType.computed === 'letsEncrypt')
|
if (domain.https.certType.computed === 'letsEncrypt')
|
||||||
config.push(['ssl_trusted_certificate',
|
config.push([
|
||||||
`${global.https.letsEncryptCertRoot.computed.replace(/\/+$/, '')}/${domain.server.domain.computed}/chain.pem`]);
|
'ssl_trusted_certificate',
|
||||||
|
`${global.https.letsEncryptCertRoot.computed.replace(/\/+$/, '')}/${
|
||||||
|
domain.server.domain.computed
|
||||||
|
}/chain.pem`,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
return config;
|
return config;
|
||||||
};
|
};
|
||||||
|
@ -60,17 +64,22 @@ const httpsListen = (domain, global, ipPortPairs) => {
|
||||||
const config = [];
|
const config = [];
|
||||||
|
|
||||||
// Check if reuseport needs to be set
|
// Check if reuseport needs to be set
|
||||||
const ipPortV4 = `${domain.server.listenIpv4.computed === '*' ? '' : `${domain.server.listenIpv4.computed}:`}443`;
|
const ipPortV4 = `${
|
||||||
|
domain.server.listenIpv4.computed === '*' ? '' : `${domain.server.listenIpv4.computed}:`
|
||||||
|
}443`;
|
||||||
const reusePortV4 = global.https.portReuse.computed && !ipPortPairs.has(ipPortV4);
|
const reusePortV4 = global.https.portReuse.computed && !ipPortPairs.has(ipPortV4);
|
||||||
if (reusePortV4) ipPortPairs.add(ipPortV4);
|
if (reusePortV4) ipPortPairs.add(ipPortV4);
|
||||||
|
|
||||||
// HTTPS
|
// HTTPS
|
||||||
config.push(['listen',
|
config.push([
|
||||||
`${ipPortV4} ssl${domain.https.http2.computed ? ' http2' : ''}${reusePortV4 ? ' reuseport' : ''}`]);
|
'listen',
|
||||||
|
`${ipPortV4} ssl${domain.https.http2.computed ? ' http2' : ''}${
|
||||||
|
reusePortV4 ? ' reuseport' : ''
|
||||||
|
}`,
|
||||||
|
]);
|
||||||
|
|
||||||
// HTTP/3
|
// HTTP/3
|
||||||
if (domain.https.http3.computed)
|
if (domain.https.http3.computed) config.push(['listen', `${ipPortV4} http3`]);
|
||||||
config.push(['listen', `${ipPortV4} http3`]);
|
|
||||||
|
|
||||||
// v6
|
// v6
|
||||||
if (domain.server.listenIpv6.computed) {
|
if (domain.server.listenIpv6.computed) {
|
||||||
|
@ -80,12 +89,15 @@ const httpsListen = (domain, global, ipPortPairs) => {
|
||||||
if (reusePortV6) ipPortPairs.add(ipPortV6);
|
if (reusePortV6) ipPortPairs.add(ipPortV6);
|
||||||
|
|
||||||
// HTTPS
|
// HTTPS
|
||||||
config.push(['listen',
|
config.push([
|
||||||
`${ipPortV6} ssl${domain.https.http2.computed ? ' http2' : ''}${reusePortV6 ? ' reuseport' : ''}`]);
|
'listen',
|
||||||
|
`${ipPortV6} ssl${domain.https.http2.computed ? ' http2' : ''}${
|
||||||
|
reusePortV6 ? ' reuseport' : ''
|
||||||
|
}`,
|
||||||
|
]);
|
||||||
|
|
||||||
// HTTP/3
|
// HTTP/3
|
||||||
if (domain.https.http3.computed)
|
if (domain.https.http3.computed) config.push(['listen', `${ipPortV6} http3`]);
|
||||||
config.push(['listen', `${ipPortV6} http3`]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return config;
|
return config;
|
||||||
|
@ -95,7 +107,9 @@ const httpListen = (domain, global, ipPortPairs) => {
|
||||||
const config = [];
|
const config = [];
|
||||||
|
|
||||||
// Check if reuseport needs to be set
|
// Check if reuseport needs to be set
|
||||||
const ipPortV4 = `${domain.server.listenIpv4.computed === '*' ? '' : `${domain.server.listenIpv4.computed}:`}80`;
|
const ipPortV4 = `${
|
||||||
|
domain.server.listenIpv4.computed === '*' ? '' : `${domain.server.listenIpv4.computed}:`
|
||||||
|
}80`;
|
||||||
const reusePortV4 = global.https.portReuse.computed && !ipPortPairs.has(ipPortV4);
|
const reusePortV4 = global.https.portReuse.computed && !ipPortPairs.has(ipPortV4);
|
||||||
if (reusePortV4) ipPortPairs.add(ipPortV4);
|
if (reusePortV4) ipPortPairs.add(ipPortV4);
|
||||||
|
|
||||||
|
@ -151,12 +165,18 @@ const httpRedirectConfig = (domain, global, ipPortPairs, domainName, redirectDom
|
||||||
config.push(...Object.entries(letsEncryptConf(global)));
|
config.push(...Object.entries(letsEncryptConf(global)));
|
||||||
}
|
}
|
||||||
|
|
||||||
config.push(['location /', {
|
config.push([
|
||||||
return: `301 https://${redirectDomain ? redirectDomain : domainName}$request_uri`,
|
'location /',
|
||||||
}]);
|
{
|
||||||
|
return: `301 https://${redirectDomain ? redirectDomain : domainName}$request_uri`,
|
||||||
|
},
|
||||||
|
]);
|
||||||
} else {
|
} else {
|
||||||
// Custom cert
|
// Custom cert
|
||||||
config.push(['return', `301 https://${redirectDomain ? redirectDomain : domainName}$request_uri`]);
|
config.push([
|
||||||
|
'return',
|
||||||
|
`301 https://${redirectDomain ? redirectDomain : domainName}$request_uri`,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return config;
|
return config;
|
||||||
|
@ -174,14 +194,18 @@ export default (domain, domains, global, ipPortPairs) => {
|
||||||
serverConfig.push(...httpListen(domain, global, ipPortPairs));
|
serverConfig.push(...httpListen(domain, global, ipPortPairs));
|
||||||
|
|
||||||
// HTTPS
|
// HTTPS
|
||||||
if (domain.https.https.computed)
|
if (domain.https.https.computed) serverConfig.push(...httpsListen(domain, global, ipPortPairs));
|
||||||
serverConfig.push(...httpsListen(domain, global, ipPortPairs));
|
|
||||||
|
|
||||||
serverConfig.push(['server_name',
|
serverConfig.push([
|
||||||
`${domain.server.wwwSubdomain.computed ? 'www.' : ''}${domain.server.domain.computed}`]);
|
'server_name',
|
||||||
|
`${domain.server.wwwSubdomain.computed ? 'www.' : ''}${domain.server.domain.computed}`,
|
||||||
|
]);
|
||||||
|
|
||||||
// PHP or Django
|
// PHP or Django
|
||||||
if (domain.php.php.computed || (domain.python.python.computed && domain.python.djangoRules.computed)) {
|
if (
|
||||||
|
domain.php.php.computed ||
|
||||||
|
(domain.python.python.computed && domain.python.djangoRules.computed)
|
||||||
|
) {
|
||||||
serverConfig.push(['set', `$base ${domain.server.path.computed}`]);
|
serverConfig.push(['set', `$base ${domain.server.path.computed}`]);
|
||||||
|
|
||||||
// root
|
// root
|
||||||
|
@ -190,10 +214,15 @@ export default (domain, domains, global, ipPortPairs) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Not PHP and not Django and root
|
// Not PHP and not Django and root
|
||||||
if (!domain.php.php.computed
|
if (
|
||||||
&& (!domain.python.python.computed || !domain.python.djangoRules.computed)
|
!domain.php.php.computed &&
|
||||||
&& domain.routing.root.computed)
|
(!domain.python.python.computed || !domain.python.djangoRules.computed) &&
|
||||||
serverConfig.push(['root', `${domain.server.path.computed}${domain.server.documentRoot.computed}`]);
|
domain.routing.root.computed
|
||||||
|
)
|
||||||
|
serverConfig.push([
|
||||||
|
'root',
|
||||||
|
`${domain.server.path.computed}${domain.server.documentRoot.computed}`,
|
||||||
|
]);
|
||||||
|
|
||||||
// HTTPS
|
// HTTPS
|
||||||
serverConfig.push(...sslConfig(domain, global));
|
serverConfig.push(...sslConfig(domain, global));
|
||||||
|
@ -201,14 +230,21 @@ export default (domain, domains, global, ipPortPairs) => {
|
||||||
// Onion location
|
// Onion location
|
||||||
if (domain.onion.onionLocation.computed) {
|
if (domain.onion.onionLocation.computed) {
|
||||||
serverConfig.push(['# Onion services', '']);
|
serverConfig.push(['# Onion services', '']);
|
||||||
serverConfig.push(['add_header Onion-Location', `http://${domain.onion.onionLocation.computed}$request_uri`]);
|
serverConfig.push([
|
||||||
|
'add_header Onion-Location',
|
||||||
|
`http://${domain.onion.onionLocation.computed}$request_uri`,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// HSTS
|
// HSTS
|
||||||
if (!commonHsts(domains) && domain.https.hsts.computed) {
|
if (!commonHsts(domains) && domain.https.hsts.computed) {
|
||||||
serverConfig.push(['# HSTS', '']);
|
serverConfig.push(['# HSTS', '']);
|
||||||
serverConfig.push(['add_header Strict-Transport-Security',
|
serverConfig.push([
|
||||||
`"max-age=31536000${domain.https.hstsSubdomains.computed ? '; includeSubDomains' : ''}${domain.https.hstsPreload.computed ? '; preload' : ''}" always`]);
|
'add_header Strict-Transport-Security',
|
||||||
|
`"max-age=31536000${domain.https.hstsSubdomains.computed ? '; includeSubDomains' : ''}${
|
||||||
|
domain.https.hstsPreload.computed ? '; preload' : ''
|
||||||
|
}" always`,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Security
|
// Security
|
||||||
|
@ -222,15 +258,22 @@ export default (domain, domains, global, ipPortPairs) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Restrict Methods
|
// Restrict Methods
|
||||||
if (Object.keys(domain.restrict).find(k => domain.restrict[k].computed && k !== 'responseCode')) {
|
if (
|
||||||
|
Object.keys(domain.restrict).find(
|
||||||
|
(k) => domain.restrict[k].computed && k !== 'responseCode',
|
||||||
|
)
|
||||||
|
) {
|
||||||
const allowedKeys = Object.keys(domain.restrict)
|
const allowedKeys = Object.keys(domain.restrict)
|
||||||
.filter(k => !domain.restrict[k].computed && k !== 'responseCode')
|
.filter((k) => !domain.restrict[k].computed && k !== 'responseCode')
|
||||||
.map(e => e.replace('Method', '').toUpperCase());
|
.map((e) => e.replace('Method', '').toUpperCase());
|
||||||
|
|
||||||
serverConfig.push(['# restrict methods', '']);
|
serverConfig.push(['# restrict methods', '']);
|
||||||
serverConfig.push([`if ($request_method !~ ^(${allowedKeys.join('|')})$)`, {
|
serverConfig.push([
|
||||||
'return': `'${domain.restrict.responseCode.computed}'`,
|
`if ($request_method !~ ^(${allowedKeys.join('|')})$)`,
|
||||||
}]);
|
{
|
||||||
|
return: `'${domain.restrict.responseCode.computed}'`,
|
||||||
|
},
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Access log or error log for domain
|
// Access log or error log for domain
|
||||||
|
@ -251,20 +294,43 @@ export default (domain, domains, global, ipPortPairs) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fallback index.html or index.php
|
// Fallback index.html or index.php
|
||||||
if ((domain.routing.fallbackHtml.computed || domain.routing.fallbackPhp.computed)
|
if (
|
||||||
&& (!domain.reverseProxy.reverseProxy.computed || domain.reverseProxy.path.computed !== '/')) {
|
(domain.routing.fallbackHtml.computed || domain.routing.fallbackPhp.computed) &&
|
||||||
serverConfig.push([`# index.${domain.routing.fallbackHtml.computed ? 'html' : (domain.routing.fallbackPhp.computed ? 'php' : '')} fallback`, '']);
|
(!domain.reverseProxy.reverseProxy.computed || domain.reverseProxy.path.computed !== '/')
|
||||||
serverConfig.push(['location /', {
|
) {
|
||||||
try_files: `$uri $uri/ /index.${domain.routing.fallbackHtml.computed ? 'html' : (domain.routing.fallbackPhp.computed ? 'php?$query_string' : '')}`,
|
serverConfig.push([
|
||||||
}]);
|
`# index.${
|
||||||
|
domain.routing.fallbackHtml.computed
|
||||||
|
? 'html'
|
||||||
|
: domain.routing.fallbackPhp.computed
|
||||||
|
? 'php'
|
||||||
|
: ''
|
||||||
|
} fallback`,
|
||||||
|
'',
|
||||||
|
]);
|
||||||
|
serverConfig.push([
|
||||||
|
'location /',
|
||||||
|
{
|
||||||
|
try_files: `$uri $uri/ /index.${
|
||||||
|
domain.routing.fallbackHtml.computed
|
||||||
|
? 'html'
|
||||||
|
: domain.routing.fallbackPhp.computed
|
||||||
|
? 'php?$query_string'
|
||||||
|
: ''
|
||||||
|
}`,
|
||||||
|
},
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fallback index.html and index.php
|
// Fallback index.html and index.php
|
||||||
if (domain.routing.fallbackHtml.computed && domain.routing.fallbackPhp.computed) {
|
if (domain.routing.fallbackHtml.computed && domain.routing.fallbackPhp.computed) {
|
||||||
serverConfig.push(['# index.php fallback', '']);
|
serverConfig.push(['# index.php fallback', '']);
|
||||||
serverConfig.push([`location ~ ^${domain.routing.fallbackPhpPath.computed}`, {
|
serverConfig.push([
|
||||||
try_files: '$uri $uri/ /index.php?$query_string',
|
`location ~ ^${domain.routing.fallbackPhpPath.computed}`,
|
||||||
}]);
|
{
|
||||||
|
try_files: '$uri $uri/ /index.php?$query_string',
|
||||||
|
},
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Python
|
// Python
|
||||||
|
@ -314,10 +380,17 @@ export default (domain, domains, global, ipPortPairs) => {
|
||||||
if (!domain.https.forceHttps.computed && domain.https.certType.computed === 'letsEncrypt')
|
if (!domain.https.forceHttps.computed && domain.https.certType.computed === 'letsEncrypt')
|
||||||
serverConfig.push(['include', 'nginxconfig.io/letsencrypt.conf']);
|
serverConfig.push(['include', 'nginxconfig.io/letsencrypt.conf']);
|
||||||
|
|
||||||
if (domain.php.wordPressRules.computed) serverConfig.push(['include', `nginxconfig.io/${domain.server.domain.computed}.wordpress.conf`]);
|
if (domain.php.wordPressRules.computed)
|
||||||
if (domain.php.drupalRules.computed) serverConfig.push(['include', 'nginxconfig.io/drupal.conf']);
|
serverConfig.push([
|
||||||
if (domain.php.magentoRules.computed) serverConfig.push(['include', 'nginxconfig.io/magento.conf']);
|
'include',
|
||||||
if (domain.php.joomlaRules.computed) serverConfig.push(['include', 'nginxconfig.io/joomla.conf']);
|
`nginxconfig.io/${domain.server.domain.computed}.wordpress.conf`,
|
||||||
|
]);
|
||||||
|
if (domain.php.drupalRules.computed)
|
||||||
|
serverConfig.push(['include', 'nginxconfig.io/drupal.conf']);
|
||||||
|
if (domain.php.magentoRules.computed)
|
||||||
|
serverConfig.push(['include', 'nginxconfig.io/magento.conf']);
|
||||||
|
if (domain.php.joomlaRules.computed)
|
||||||
|
serverConfig.push(['include', 'nginxconfig.io/joomla.conf']);
|
||||||
} else {
|
} else {
|
||||||
// Unified
|
// Unified
|
||||||
serverConfig.push(...Object.entries(generalConf(domains, global)));
|
serverConfig.push(...Object.entries(generalConf(domains, global)));
|
||||||
|
@ -325,8 +398,10 @@ export default (domain, domains, global, ipPortPairs) => {
|
||||||
if (!domain.https.forceHttps.computed && domain.https.certType.computed === 'letsEncrypt')
|
if (!domain.https.forceHttps.computed && domain.https.certType.computed === 'letsEncrypt')
|
||||||
serverConfig.push(...Object.entries(letsEncryptConf(global)));
|
serverConfig.push(...Object.entries(letsEncryptConf(global)));
|
||||||
|
|
||||||
if (domain.php.wordPressRules.computed) serverConfig.push(...Object.entries(wordPressConf(global, domain)));
|
if (domain.php.wordPressRules.computed)
|
||||||
if (domain.php.drupalRules.computed) serverConfig.push(...Object.entries(drupalConf(global)));
|
serverConfig.push(...Object.entries(wordPressConf(global, domain)));
|
||||||
|
if (domain.php.drupalRules.computed)
|
||||||
|
serverConfig.push(...Object.entries(drupalConf(global)));
|
||||||
if (domain.php.magentoRules.computed) serverConfig.push(...Object.entries(magentoConf()));
|
if (domain.php.magentoRules.computed) serverConfig.push(...Object.entries(magentoConf()));
|
||||||
if (domain.php.joomlaRules.computed) serverConfig.push(...Object.entries(joomlaConf()));
|
if (domain.php.joomlaRules.computed) serverConfig.push(...Object.entries(joomlaConf()));
|
||||||
}
|
}
|
||||||
|
@ -334,35 +409,43 @@ export default (domain, domains, global, ipPortPairs) => {
|
||||||
// PHP
|
// PHP
|
||||||
if (domain.php.php.computed) {
|
if (domain.php.php.computed) {
|
||||||
if (domain.php.phpBackupServer.computed) {
|
if (domain.php.phpBackupServer.computed) {
|
||||||
config.push([`upstream ${phpUpstream(domain)}`, {
|
config.push([
|
||||||
server: [
|
`upstream ${phpUpstream(domain)}`,
|
||||||
phpPath(domain),
|
{
|
||||||
`${phpPath(domain, true)} backup`,
|
server: [phpPath(domain), `${phpPath(domain, true)} backup`],
|
||||||
],
|
},
|
||||||
}]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
serverConfig.push(['# handle .php', '']);
|
serverConfig.push(['# handle .php', '']);
|
||||||
|
|
||||||
const loc = `location ~ ${domain.routing.legacyPhpRouting.computed ? '[^/]\\.php(/|$)' : '\\.php$'}`;
|
const loc = `location ~ ${
|
||||||
|
domain.routing.legacyPhpRouting.computed ? '[^/]\\.php(/|$)' : '\\.php$'
|
||||||
|
}`;
|
||||||
|
|
||||||
const fastcgiPass = {
|
const fastcgiPass = {
|
||||||
fastcgi_pass: domain.php.phpBackupServer.computed !== ''
|
fastcgi_pass:
|
||||||
? phpUpstream(domain) : phpPath(domain),
|
domain.php.phpBackupServer.computed !== '' ? phpUpstream(domain) : phpPath(domain),
|
||||||
};
|
};
|
||||||
|
|
||||||
if (global.tools.modularizedStructure.computed || domain.php.wordPressRules.computed) {
|
if (global.tools.modularizedStructure.computed || domain.php.wordPressRules.computed) {
|
||||||
// Modularized
|
// Modularized
|
||||||
serverConfig.push([loc, {
|
serverConfig.push([
|
||||||
...fastcgiPass,
|
loc,
|
||||||
include: 'nginxconfig.io/php_fastcgi.conf',
|
{
|
||||||
}]);
|
...fastcgiPass,
|
||||||
|
include: 'nginxconfig.io/php_fastcgi.conf',
|
||||||
|
},
|
||||||
|
]);
|
||||||
} else {
|
} else {
|
||||||
// Unified
|
// Unified
|
||||||
serverConfig.push([loc, {
|
serverConfig.push([
|
||||||
...fastcgiPass,
|
loc,
|
||||||
...phpConf(domains),
|
{
|
||||||
}]);
|
...fastcgiPass,
|
||||||
|
...phpConf(domains),
|
||||||
|
},
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -376,7 +459,10 @@ export default (domain, domains, global, ipPortPairs) => {
|
||||||
|
|
||||||
cdnConfig.push(...listenConfig(domain, global, ipPortPairs));
|
cdnConfig.push(...listenConfig(domain, global, ipPortPairs));
|
||||||
cdnConfig.push(['server_name', `cdn.${domain.server.domain.computed}`]);
|
cdnConfig.push(['server_name', `cdn.${domain.server.domain.computed}`]);
|
||||||
cdnConfig.push(['root', `${domain.server.path.computed}${domain.server.documentRoot.computed}`]);
|
cdnConfig.push([
|
||||||
|
'root',
|
||||||
|
`${domain.server.path.computed}${domain.server.documentRoot.computed}`,
|
||||||
|
]);
|
||||||
|
|
||||||
// HTTPS
|
// HTTPS
|
||||||
cdnConfig.push(...sslConfig(domain, global));
|
cdnConfig.push(...sslConfig(domain, global));
|
||||||
|
@ -418,12 +504,14 @@ export default (domain, domains, global, ipPortPairs) => {
|
||||||
const redirectConfig = [];
|
const redirectConfig = [];
|
||||||
|
|
||||||
redirectConfig.push(...listenConfig(domain, global, ipPortPairs));
|
redirectConfig.push(...listenConfig(domain, global, ipPortPairs));
|
||||||
redirectConfig.push(['server_name',
|
redirectConfig.push([
|
||||||
`${domain.server.wwwSubdomain.computed ? '' : '*'}.${domain.server.domain.computed}`]);
|
'server_name',
|
||||||
|
`${domain.server.wwwSubdomain.computed ? '' : '*'}.${domain.server.domain.computed}`,
|
||||||
|
]);
|
||||||
|
|
||||||
// HTTPS
|
// HTTPS
|
||||||
redirectConfig.push(...sslConfig(domain, global));
|
redirectConfig.push(...sslConfig(domain, global));
|
||||||
|
|
||||||
// Logging
|
// Logging
|
||||||
if (domain.logging.redirectAccessLog.computed || domain.logging.redirectErrorLog.computed) {
|
if (domain.logging.redirectAccessLog.computed || domain.logging.redirectErrorLog.computed) {
|
||||||
redirectConfig.push(['# logging', '']);
|
redirectConfig.push(['# logging', '']);
|
||||||
|
@ -435,12 +523,19 @@ export default (domain, domains, global, ipPortPairs) => {
|
||||||
redirectConfig.push(['error_log', getDomainErrorLog(domain)]);
|
redirectConfig.push(['error_log', getDomainErrorLog(domain)]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
redirectConfig.push(['return',
|
redirectConfig.push([
|
||||||
`301 http${domain.https.https.computed ? 's' : ''}://${domain.server.wwwSubdomain.computed ? 'www.' : ''}${domain.server.domain.computed}$request_uri`]);
|
'return',
|
||||||
|
`301 http${domain.https.https.computed ? 's' : ''}://${
|
||||||
|
domain.server.wwwSubdomain.computed ? 'www.' : ''
|
||||||
|
}${domain.server.domain.computed}$request_uri`,
|
||||||
|
]);
|
||||||
|
|
||||||
// Add the redirect config to the parent config now its built
|
// Add the redirect config to the parent config now its built
|
||||||
config.push([`# ${domain.server.wwwSubdomain.computed ? 'non-www, ' : ''}subdomains redirect`, '']);
|
config.push([
|
||||||
|
`# ${domain.server.wwwSubdomain.computed ? 'non-www, ' : ''}subdomains redirect`,
|
||||||
|
'',
|
||||||
|
]);
|
||||||
config.push(['server', redirectConfig]);
|
config.push(['server', redirectConfig]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -449,22 +544,58 @@ export default (domain, domains, global, ipPortPairs) => {
|
||||||
// Add the redirect config to the parent config now its built
|
// Add the redirect config to the parent config now its built
|
||||||
config.push(['# HTTP redirect', '']);
|
config.push(['# HTTP redirect', '']);
|
||||||
if (domain.server.wwwSubdomain.computed && !domain.server.redirectSubdomains.computed) {
|
if (domain.server.wwwSubdomain.computed && !domain.server.redirectSubdomains.computed) {
|
||||||
config.push(['server', httpRedirectConfig(domain, global, ipPortPairs,
|
config.push([
|
||||||
domain.server.domain.computed, `www.${domain.server.domain.computed}`)]);
|
'server',
|
||||||
config.push(['server', httpRedirectConfig(domain, global, ipPortPairs,
|
httpRedirectConfig(
|
||||||
`www.${domain.server.domain.computed}`)]);
|
domain,
|
||||||
} else if (!domain.server.wwwSubdomain.computed && !domain.server.redirectSubdomains.computed) {
|
global,
|
||||||
config.push(['server', httpRedirectConfig(domain, global, ipPortPairs,
|
ipPortPairs,
|
||||||
domain.server.domain.computed)]);
|
domain.server.domain.computed,
|
||||||
|
`www.${domain.server.domain.computed}`,
|
||||||
|
),
|
||||||
|
]);
|
||||||
|
config.push([
|
||||||
|
'server',
|
||||||
|
httpRedirectConfig(
|
||||||
|
domain,
|
||||||
|
global,
|
||||||
|
ipPortPairs,
|
||||||
|
`www.${domain.server.domain.computed}`,
|
||||||
|
),
|
||||||
|
]);
|
||||||
|
} else if (
|
||||||
|
!domain.server.wwwSubdomain.computed &&
|
||||||
|
!domain.server.redirectSubdomains.computed
|
||||||
|
) {
|
||||||
|
config.push([
|
||||||
|
'server',
|
||||||
|
httpRedirectConfig(domain, global, ipPortPairs, domain.server.domain.computed),
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
if (domain.server.cdnSubdomain.computed) {
|
if (domain.server.cdnSubdomain.computed) {
|
||||||
config.push(['server', httpRedirectConfig(domain, global, ipPortPairs,
|
config.push([
|
||||||
`cdn.${domain.server.domain.computed}`)]);
|
'server',
|
||||||
|
httpRedirectConfig(
|
||||||
|
domain,
|
||||||
|
global,
|
||||||
|
ipPortPairs,
|
||||||
|
`cdn.${domain.server.domain.computed}`,
|
||||||
|
),
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
if (domain.server.redirectSubdomains.computed) {
|
if (domain.server.redirectSubdomains.computed) {
|
||||||
config.push(['server', httpRedirectConfig(domain, global, ipPortPairs,
|
config.push([
|
||||||
`.${domain.server.domain.computed}`,
|
'server',
|
||||||
`${domain.server.wwwSubdomain.computed ? 'www.' : '' }${domain.server.domain.computed}`)]);
|
httpRedirectConfig(
|
||||||
|
domain,
|
||||||
|
global,
|
||||||
|
ipPortPairs,
|
||||||
|
`.${domain.server.domain.computed}`,
|
||||||
|
`${domain.server.wwwSubdomain.computed ? 'www.' : ''}${
|
||||||
|
domain.server.domain.computed
|
||||||
|
}`,
|
||||||
|
),
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,8 @@ export default (global, domain) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
config['# WordPress: SEO plugin'] = '';
|
config['# WordPress: SEO plugin'] = '';
|
||||||
config['location ~* ^/wp-content/plugins/wordpress-seo(?:-premium)?/css/main-sitemap\\.xsl$'] = {};
|
config['location ~* ^/wp-content/plugins/wordpress-seo(?:-premium)?/css/main-sitemap\\.xsl$'] =
|
||||||
|
{};
|
||||||
|
|
||||||
config['# WordPress: deny wp-content/plugins (except earlier rules)'] = '';
|
config['# WordPress: deny wp-content/plugins (except earlier rules)'] = '';
|
||||||
config['location ~ ^/wp-content/plugins'] = {
|
config['location ~ ^/wp-content/plugins'] = {
|
||||||
|
@ -54,7 +55,9 @@ export default (global, domain) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
config['# WordPress: deny general stuff'] = '';
|
config['# WordPress: deny general stuff'] = '';
|
||||||
config['location ~* ^/(?:xmlrpc\\.php|wp-links-opml\\.php|wp-config\\.php|wp-config-sample\\.php|readme\\.html|license\\.txt)$'] = {
|
config[
|
||||||
|
'location ~* ^/(?:xmlrpc\\.php|wp-links-opml\\.php|wp-config\\.php|wp-config-sample\\.php|readme\\.html|license\\.txt)$'
|
||||||
|
] = {
|
||||||
deny: 'all',
|
deny: 'all',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -65,8 +68,8 @@ export default (global, domain) => {
|
||||||
include: 'nginxconfig.io/php_fastcgi.conf',
|
include: 'nginxconfig.io/php_fastcgi.conf',
|
||||||
};
|
};
|
||||||
if (domain.php.wordPressRules.computed) {
|
if (domain.php.wordPressRules.computed) {
|
||||||
config['location = /wp-login.php'].fastcgi_pass = domain.php.phpBackupServer.computed !== ''
|
config['location = /wp-login.php'].fastcgi_pass =
|
||||||
? phpUpstream(domain) : phpPath(domain);
|
domain.php.phpBackupServer.computed !== '' ? phpUpstream(domain) : phpPath(domain);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,4 +27,3 @@ THE SOFTWARE.
|
||||||
export default () => {
|
export default () => {
|
||||||
return 'FROM nginx:latest\nCOPY . /etc/nginx/';
|
return 'FROM nginx:latest\nCOPY . /etc/nginx/';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -49,8 +49,7 @@ export default (domains, global) => {
|
||||||
files['nginx.conf'] = toConf(nginxConf(domains, global));
|
files['nginx.conf'] = toConf(nginxConf(domains, global));
|
||||||
|
|
||||||
// Dockerfile
|
// Dockerfile
|
||||||
if (global.docker.dockerfile.computed)
|
if (global.docker.dockerfile.computed) files['Dockerfile'] = dockerConf();
|
||||||
files['Dockerfile'] = dockerConf();
|
|
||||||
|
|
||||||
if (global.docker.dockerCompose.computed)
|
if (global.docker.dockerCompose.computed)
|
||||||
files['docker-compose.yaml'] = toYaml(dockerComposeYaml());
|
files['docker-compose.yaml'] = toYaml(dockerComposeYaml());
|
||||||
|
@ -61,14 +60,18 @@ export default (domains, global) => {
|
||||||
const sitesDir = `sites-${global.tools.symlinkVhost.computed ? 'available' : 'enabled'}`;
|
const sitesDir = `sites-${global.tools.symlinkVhost.computed ? 'available' : 'enabled'}`;
|
||||||
const ipPortPairs = new Set();
|
const ipPortPairs = new Set();
|
||||||
for (const domain of domains) {
|
for (const domain of domains) {
|
||||||
files[`${sitesDir}/${domain.server.domain.computed}.conf`] = toConf(websiteConf(domain, domains, global, ipPortPairs));
|
files[`${sitesDir}/${domain.server.domain.computed}.conf`] = toConf(
|
||||||
|
websiteConf(domain, domains, global, ipPortPairs),
|
||||||
|
);
|
||||||
// WordPress
|
// WordPress
|
||||||
if (domains.some(d => d.php.wordPressRules.computed))
|
if (domains.some((d) => d.php.wordPressRules.computed))
|
||||||
files[`nginxconfig.io/${domain.server.domain.computed}.wordpress.conf`] = toConf(wordPressConf(global, domain));
|
files[`nginxconfig.io/${domain.server.domain.computed}.wordpress.conf`] = toConf(
|
||||||
|
wordPressConf(global, domain),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Let's encrypt
|
// Let's encrypt
|
||||||
if (domains.some(d => d.https.certType.computed === 'letsEncrypt'))
|
if (domains.some((d) => d.https.certType.computed === 'letsEncrypt'))
|
||||||
files['nginxconfig.io/letsencrypt.conf'] = toConf(letsEncryptConf(global));
|
files['nginxconfig.io/letsencrypt.conf'] = toConf(letsEncryptConf(global));
|
||||||
|
|
||||||
// Security
|
// Security
|
||||||
|
@ -78,37 +81,41 @@ export default (domains, global) => {
|
||||||
files['nginxconfig.io/general.conf'] = toConf(generalConf(domains, global));
|
files['nginxconfig.io/general.conf'] = toConf(generalConf(domains, global));
|
||||||
|
|
||||||
// PHP
|
// PHP
|
||||||
if (domains.some(d => d.php.php.computed))
|
if (domains.some((d) => d.php.php.computed))
|
||||||
files['nginxconfig.io/php_fastcgi.conf'] = toConf(phpConf(domains));
|
files['nginxconfig.io/php_fastcgi.conf'] = toConf(phpConf(domains));
|
||||||
|
|
||||||
// Python
|
// Python
|
||||||
if (domains.some(d => d.python.python.computed))
|
if (domains.some((d) => d.python.python.computed))
|
||||||
files['nginxconfig.io/python_uwsgi.conf'] = toConf(pythonConf(global));
|
files['nginxconfig.io/python_uwsgi.conf'] = toConf(pythonConf(global));
|
||||||
|
|
||||||
// Reverse proxy
|
// Reverse proxy
|
||||||
if (domains.some(d => d.reverseProxy.reverseProxy.computed))
|
if (domains.some((d) => d.reverseProxy.reverseProxy.computed))
|
||||||
files['nginxconfig.io/proxy.conf'] = toConf(proxyConf(global));
|
files['nginxconfig.io/proxy.conf'] = toConf(proxyConf(global));
|
||||||
|
|
||||||
// Drupal
|
// Drupal
|
||||||
if (domains.some(d => d.php.drupalRules.computed))
|
if (domains.some((d) => d.php.drupalRules.computed))
|
||||||
files['nginxconfig.io/drupal.conf'] = toConf(drupalConf(global));
|
files['nginxconfig.io/drupal.conf'] = toConf(drupalConf(global));
|
||||||
|
|
||||||
// Magento
|
// Magento
|
||||||
if (domains.some(d => d.php.magentoRules.computed))
|
if (domains.some((d) => d.php.magentoRules.computed))
|
||||||
files['nginxconfig.io/magento.conf'] = toConf(magentoConf());
|
files['nginxconfig.io/magento.conf'] = toConf(magentoConf());
|
||||||
|
|
||||||
// Joomla
|
// Joomla
|
||||||
if (domains.some(d => d.php.joomlaRules.computed))
|
if (domains.some((d) => d.php.joomlaRules.computed))
|
||||||
files['nginxconfig.io/joomla.conf'] = toConf(joomlaConf());
|
files['nginxconfig.io/joomla.conf'] = toConf(joomlaConf());
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// PHP
|
// PHP
|
||||||
if (domains.some(d => d.php.wordPressRules.computed))
|
if (domains.some((d) => d.php.wordPressRules.computed))
|
||||||
files['nginxconfig.io/php_fastcgi.conf'] = toConf(phpConf(domains));
|
files['nginxconfig.io/php_fastcgi.conf'] = toConf(phpConf(domains));
|
||||||
}
|
}
|
||||||
|
|
||||||
const query = shareQuery(domains.map((domain, index) => [domain, index]).filter(d => d[0] !== null), global);
|
const query = shareQuery(
|
||||||
files['nginxconfig.txt'] = `${window.location.protocol}//${window.location.host}${window.location.pathname}${query}`;
|
domains.map((domain, index) => [domain, index]).filter((d) => d[0] !== null),
|
||||||
|
global,
|
||||||
|
);
|
||||||
|
files[
|
||||||
|
'nginxconfig.txt'
|
||||||
|
] = `${window.location.protocol}//${window.location.host}${window.location.pathname}${query}`;
|
||||||
|
|
||||||
return files;
|
return files;
|
||||||
};
|
};
|
||||||
|
|
|
@ -26,22 +26,23 @@ THE SOFTWARE.
|
||||||
|
|
||||||
import isObject from '../util/is_object';
|
import isObject from '../util/is_object';
|
||||||
|
|
||||||
const isBlock = item => {
|
const isBlock = (item) => {
|
||||||
// If an object, or kv entries, this is considered a block
|
// If an object, or kv entries, this is considered a block
|
||||||
return isObject(item) || (Array.isArray(item) && item.every(i => Array.isArray(i) && i.length === 2));
|
return (
|
||||||
|
isObject(item) ||
|
||||||
|
(Array.isArray(item) && item.every((i) => Array.isArray(i) && i.length === 2))
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const longestKey = items => {
|
const longestKey = (items) => {
|
||||||
let longest = 0;
|
let longest = 0;
|
||||||
|
|
||||||
for (const item of items) {
|
for (const item of items) {
|
||||||
// Only consider up to the first block
|
// Only consider up to the first block
|
||||||
if (isBlock(item[1]))
|
if (isBlock(item[1])) return longest;
|
||||||
return longest;
|
|
||||||
|
|
||||||
// If this is the new longest, and not a comment, use this
|
// If this is the new longest, and not a comment, use this
|
||||||
if (item[0].length > longest && !item[0].startsWith('#'))
|
if (item[0].length > longest && !item[0].startsWith('#')) longest = item[0].length;
|
||||||
longest = item[0].length;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Done!
|
// Done!
|
||||||
|
@ -54,12 +55,13 @@ const recurse = (entriesOrObject, depth) => {
|
||||||
const entries = isObject(entriesOrObject) ? Object.entries(entriesOrObject) : entriesOrObject;
|
const entries = isObject(entriesOrObject) ? Object.entries(entriesOrObject) : entriesOrObject;
|
||||||
|
|
||||||
// If not a valid kv entries array, return
|
// If not a valid kv entries array, return
|
||||||
if (!Array.isArray(entries) || !entries.every(i => Array.isArray(i) && i.length === 2)) return '';
|
if (!Array.isArray(entries) || !entries.every((i) => Array.isArray(i) && i.length === 2))
|
||||||
|
return '';
|
||||||
|
|
||||||
// Initial values
|
// Initial values
|
||||||
let retVal = '';
|
let retVal = '';
|
||||||
let longestKeyLen = longestKey(entries);
|
let longestKeyLen = longestKey(entries);
|
||||||
const indent = (' ').repeat(depth);
|
const indent = ' '.repeat(depth);
|
||||||
|
|
||||||
// Track whether the previous was a block, for indentation
|
// Track whether the previous was a block, for indentation
|
||||||
let previousBlock = false;
|
let previousBlock = false;
|
||||||
|
@ -91,20 +93,24 @@ const recurse = (entriesOrObject, depth) => {
|
||||||
const val = Array.isArray(item[1]) ? item[1] : [item[1]];
|
const val = Array.isArray(item[1]) ? item[1] : [item[1]];
|
||||||
|
|
||||||
// Calculate spacing
|
// Calculate spacing
|
||||||
const keyValSpacing = (longestKeyLen - item[0].length) + 1;
|
const keyValSpacing = longestKeyLen - item[0].length + 1;
|
||||||
const keyValIndent = (' ').repeat(Math.max(keyValSpacing, 0));
|
const keyValIndent = ' '.repeat(Math.max(keyValSpacing, 0));
|
||||||
|
|
||||||
// Work through each item in the array
|
// Work through each item in the array
|
||||||
val.forEach(subVal => {
|
val.forEach((subVal) => {
|
||||||
const val = subVal.toString();
|
const val = subVal.toString();
|
||||||
retVal += indent + (item[0] + keyValIndent + val).trim() + (item[0].startsWith('#') ? '' : ';') + '\n';
|
retVal +=
|
||||||
|
indent +
|
||||||
|
(item[0] + keyValIndent + val).trim() +
|
||||||
|
(item[0].startsWith('#') ? '' : ';') +
|
||||||
|
'\n';
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return retVal;
|
return retVal;
|
||||||
};
|
};
|
||||||
|
|
||||||
export default entriesOrObject => {
|
export default (entriesOrObject) => {
|
||||||
// Generate the conf
|
// Generate the conf
|
||||||
let conf = recurse(entriesOrObject, 0);
|
let conf = recurse(entriesOrObject, 0);
|
||||||
|
|
||||||
|
@ -127,7 +133,12 @@ export default entriesOrObject => {
|
||||||
do {
|
do {
|
||||||
match = /^([^\S\r\n]*})(?:\n[^\S\r\n]*)+\n([^\S\r\n]*})/m.exec(conf);
|
match = /^([^\S\r\n]*})(?:\n[^\S\r\n]*)+\n([^\S\r\n]*})/m.exec(conf);
|
||||||
if (match)
|
if (match)
|
||||||
conf = conf.slice(0, match.index) + match[1] + '\n' + match[2] + conf.slice(match.index + match[0].length);
|
conf =
|
||||||
|
conf.slice(0, match.index) +
|
||||||
|
match[1] +
|
||||||
|
'\n' +
|
||||||
|
match[2] +
|
||||||
|
conf.slice(match.index + match[0].length);
|
||||||
} while (match);
|
} while (match);
|
||||||
|
|
||||||
// Remove initial & trailing whitespace
|
// Remove initial & trailing whitespace
|
||||||
|
|
|
@ -26,6 +26,6 @@ THE SOFTWARE.
|
||||||
|
|
||||||
import yaml from 'json-to-pretty-yaml';
|
import yaml from 'json-to-pretty-yaml';
|
||||||
|
|
||||||
export default yamlConf => {
|
export default (yamlConf) => {
|
||||||
return yaml.stringify(yamlConf);
|
return yaml.stringify(yamlConf);
|
||||||
};
|
};
|
||||||
|
|
|
@ -33,7 +33,7 @@ export default {
|
||||||
nginx: 'NGINX',
|
nginx: 'NGINX',
|
||||||
http: 'HTTP',
|
http: 'HTTP',
|
||||||
https: 'HTTPS',
|
https: 'HTTPS',
|
||||||
letsEncrypt: 'Let\'s Encrypt',
|
letsEncrypt: "Let's Encrypt",
|
||||||
python: 'Python',
|
python: 'Python',
|
||||||
wordPress: 'WordPress',
|
wordPress: 'WordPress',
|
||||||
drupal: 'Drupal',
|
drupal: 'Drupal',
|
||||||
|
|
|
@ -25,6 +25,7 @@ THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
wantToContributeChanges: '👋 Willst du neue Features vorschlagen, Änderungen beitragen oder das Tool in eine andere Sprache übersetzen?',
|
wantToContributeChanges:
|
||||||
|
'👋 Willst du neue Features vorschlagen, Änderungen beitragen oder das Tool in eine andere Sprache übersetzen?',
|
||||||
getInvolvedOnGitHub: 'Beteilige dich auf GitHub',
|
getInvolvedOnGitHub: 'Beteilige dich auf GitHub',
|
||||||
};
|
};
|
||||||
|
|
|
@ -26,5 +26,5 @@ THE SOFTWARE.
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
lookingForAPlaceToDeploy: '👋 Suchst du nach einem Ort, deine neue Konfiguration zu deployen?',
|
lookingForAPlaceToDeploy: '👋 Suchst du nach einem Ort, deine neue Konfiguration zu deployen?',
|
||||||
tryOutDigitalOceansDroplet: 'Teste DigitalOcean\'s LEMP Droplet mit NGINX',
|
tryOutDigitalOceansDroplet: "Teste DigitalOcean's LEMP Droplet mit NGINX",
|
||||||
};
|
};
|
||||||
|
|
|
@ -35,4 +35,15 @@ import reverseProxy from './reverse_proxy';
|
||||||
import routing from './routing';
|
import routing from './routing';
|
||||||
import server from './server';
|
import server from './server';
|
||||||
|
|
||||||
export default { https, logging, php, presets, python, reverseProxy, routing, server, restrict, onion };
|
export default {
|
||||||
|
https,
|
||||||
|
logging,
|
||||||
|
php,
|
||||||
|
presets,
|
||||||
|
python,
|
||||||
|
reverseProxy,
|
||||||
|
routing,
|
||||||
|
server,
|
||||||
|
restrict,
|
||||||
|
onion,
|
||||||
|
};
|
||||||
|
|
|
@ -29,8 +29,10 @@ const onion = 'Onion';
|
||||||
export default {
|
export default {
|
||||||
onion,
|
onion,
|
||||||
onionLocation: `${onion} Location`,
|
onionLocation: `${onion} Location`,
|
||||||
provideAnOnionLocationToSetOnionLocationHeader: 'Gib eine Onion Adresse an, um den Onion-Location Header für deine Seite zu setzen.',
|
provideAnOnionLocationToSetOnionLocationHeader:
|
||||||
letsVisitorsKnownOnionServicesIsAvailable: 'Dies teilt deinen Besuchern mit, dass eine Onion-Version deiner Webseite für Tor-Browser verfügbar ist.',
|
'Gib eine Onion Adresse an, um den Onion-Location Header für deine Seite zu setzen.',
|
||||||
|
letsVisitorsKnownOnionServicesIsAvailable:
|
||||||
|
'Dies teilt deinen Besuchern mit, dass eine Onion-Version deiner Webseite für Tor-Browser verfügbar ist.',
|
||||||
learnMoreAboutOnionServices: 'Lerne mehr über Onion-Dienste',
|
learnMoreAboutOnionServices: 'Lerne mehr über Onion-Dienste',
|
||||||
onionLocationExpectedToEndWithOnion: 'Onion Adressen enden normalerweise mit `.onion`.',
|
onionLocationExpectedToEndWithOnion: 'Onion Adressen enden normalerweise mit `.onion`.',
|
||||||
};
|
};
|
||||||
|
|
|
@ -26,7 +26,8 @@ THE SOFTWARE.
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
presets: 'Voreinstellungen',
|
presets: 'Voreinstellungen',
|
||||||
itLooksLikeYouCustomisedTheConfig: 'Es sieht so aus, als hättest du die Konfiguration für diese Webseite angepasst. Eine neue Voreinstellung zu laden könnte manche deiner Anpassungen zurücksetzen oder ändern.',
|
itLooksLikeYouCustomisedTheConfig:
|
||||||
|
'Es sieht so aus, als hättest du die Konfiguration für diese Webseite angepasst. Eine neue Voreinstellung zu laden könnte manche deiner Anpassungen zurücksetzen oder ändern.',
|
||||||
frontend: 'Frontend',
|
frontend: 'Frontend',
|
||||||
nodeJs: 'Node.js',
|
nodeJs: 'Node.js',
|
||||||
singlePageApplication: 'Single-Page-Webanwendung',
|
singlePageApplication: 'Single-Page-Webanwendung',
|
||||||
|
|
|
@ -28,7 +28,8 @@ export default {
|
||||||
domain: 'Domain',
|
domain: 'Domain',
|
||||||
documentRoot: 'Document Root',
|
documentRoot: 'Document Root',
|
||||||
oneOrMoreOtherDomainsAreAlsoNamed: 'Eine oder mehrere Domains lauten ebenfalls',
|
oneOrMoreOtherDomainsAreAlsoNamed: 'Eine oder mehrere Domains lauten ebenfalls',
|
||||||
thisWillCauseIssuesWithConfigGeneration: 'Dies sorgt für Probleme beim Generieren der Konfigurationsdateien.',
|
thisWillCauseIssuesWithConfigGeneration:
|
||||||
|
'Dies sorgt für Probleme beim Generieren der Konfigurationsdateien.',
|
||||||
wwwSubdomain: 'WWW Subdomain',
|
wwwSubdomain: 'WWW Subdomain',
|
||||||
cdnSubdomain: 'CDN Subdomain',
|
cdnSubdomain: 'CDN Subdomain',
|
||||||
redirectSubdomains: 'Subdomains weiterleiten',
|
redirectSubdomains: 'Subdomains weiterleiten',
|
||||||
|
|
|
@ -34,4 +34,14 @@ import security from './security';
|
||||||
import tools from './tools';
|
import tools from './tools';
|
||||||
import docker from './docker';
|
import docker from './docker';
|
||||||
|
|
||||||
export default { https, logging, nginx, performance, python, reverseProxy, security, tools, docker };
|
export default {
|
||||||
|
https,
|
||||||
|
logging,
|
||||||
|
nginx,
|
||||||
|
performance,
|
||||||
|
python,
|
||||||
|
reverseProxy,
|
||||||
|
security,
|
||||||
|
tools,
|
||||||
|
docker,
|
||||||
|
};
|
||||||
|
|
|
@ -43,10 +43,13 @@ export default {
|
||||||
yesImSure: 'Ja, ich bin sicher',
|
yesImSure: 'Ja, ich bin sicher',
|
||||||
noCancel: 'Nein, abbrechen',
|
noCancel: 'Nein, abbrechen',
|
||||||
tools: 'Tools',
|
tools: 'Tools',
|
||||||
resetGlobalConfigBody: 'Bist du dir sicher, dass du alle Optionen im Bereich "Globale Konfiguration" zurücksetzen möchtest?',
|
resetGlobalConfigBody:
|
||||||
resetAllDomainsConfigBody: 'Bist du dir sicher, dass du die Konfiguration ALLER Domains zurücksetzen möchtest?',
|
'Bist du dir sicher, dass du alle Optionen im Bereich "Globale Konfiguration" zurücksetzen möchtest?',
|
||||||
|
resetAllDomainsConfigBody:
|
||||||
|
'Bist du dir sicher, dass du die Konfiguration ALLER Domains zurücksetzen möchtest?',
|
||||||
removeAllDomainsBody: 'Bist du dir sicher, dass du ALLE Domains entfernen möchtest?',
|
removeAllDomainsBody: 'Bist du dir sicher, dass du ALLE Domains entfernen möchtest?',
|
||||||
areYouSureYouWantToResetAllConfigurationOptionsForThe: 'Bist du dir sicher, dass du die Konfiguration von',
|
areYouSureYouWantToResetAllConfigurationOptionsForThe:
|
||||||
|
'Bist du dir sicher, dass du die Konfiguration von',
|
||||||
domain: 'zurücksetzen möchtest?',
|
domain: 'zurücksetzen möchtest?',
|
||||||
areYouSureYouWantToRemoveThe: 'Bist du dir sicher, dass du die Domain ',
|
areYouSureYouWantToRemoveThe: 'Bist du dir sicher, dass du die Domain ',
|
||||||
domainConfiguration: 'entfernen möchtest?',
|
domainConfiguration: 'entfernen möchtest?',
|
||||||
|
|
|
@ -31,10 +31,13 @@ export default {
|
||||||
andUploadItToYourServers: 'Auf deinen Server <b>hochladen</b> und ins Verzeichnis ',
|
andUploadItToYourServers: 'Auf deinen Server <b>hochladen</b> und ins Verzeichnis ',
|
||||||
directory: 'verschieben.',
|
directory: 'verschieben.',
|
||||||
or: 'Oder ',
|
or: 'Oder ',
|
||||||
copyBase64StringOfCompressedConfig: 'kopiere einen Base64 String der komprimierten Konfiguration',
|
copyBase64StringOfCompressedConfig:
|
||||||
pasteItInYourServersCommandLineAndExecute: ', füge ihn auf der Kommandozeile deines Servers ein und führe ihn aus.',
|
'kopiere einen Base64 String der komprimierten Konfiguration',
|
||||||
|
pasteItInYourServersCommandLineAndExecute:
|
||||||
|
', füge ihn auf der Kommandozeile deines Servers ein und führe ihn aus.',
|
||||||
navigateToYourNginxConfigurationDirectoryOnYourServer: `Wechsle in das ${common.nginx} <b>Konfigurationsverzeichnis</b> deines Servers:`,
|
navigateToYourNginxConfigurationDirectoryOnYourServer: `Wechsle in das ${common.nginx} <b>Konfigurationsverzeichnis</b> deines Servers:`,
|
||||||
createABackupOfYourCurrentNginxConfiguration: `Erstelle ein <b>Backup</b> deiner aktuellen ${common.nginx} Konfiguration:`,
|
createABackupOfYourCurrentNginxConfiguration: `Erstelle ein <b>Backup</b> deiner aktuellen ${common.nginx} Konfiguration:`,
|
||||||
extractTheNewCompressedConfigurationArchiveUsingTar: '<b>Entpacke</b> das komprimierte Konfigurationsverzeichnis mittels tar:',
|
extractTheNewCompressedConfigurationArchiveUsingTar:
|
||||||
|
'<b>Entpacke</b> das komprimierte Konfigurationsverzeichnis mittels tar:',
|
||||||
download: 'Download',
|
download: 'Download',
|
||||||
};
|
};
|
||||||
|
|
|
@ -27,7 +27,8 @@ THE SOFTWARE.
|
||||||
import common from '../../common';
|
import common from '../../common';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
generateDiffieHellmanKeysByRunningThisCommandOnYourServer: 'Erzeuge <b>Diffie-Hellman Schlüssel</b> indem du diesen Befehl auf deinem Server ausführst:',
|
generateDiffieHellmanKeysByRunningThisCommandOnYourServer:
|
||||||
|
'Erzeuge <b>Diffie-Hellman Schlüssel</b> indem du diesen Befehl auf deinem Server ausführst:',
|
||||||
createACommonAcmeChallengeDirectoryForLetsEncrypt: `Erstelle ein <b>ACME-Challenge</b> Verzeichnis (für <b>${common.letsEncrypt}</b>):`,
|
createACommonAcmeChallengeDirectoryForLetsEncrypt: `Erstelle ein <b>ACME-Challenge</b> Verzeichnis (für <b>${common.letsEncrypt}</b>):`,
|
||||||
noAdditionalStepsAreNeededToSetUpSslForNginx: `Es sind keine weiteren Schritte nötig, um ${common.ssl} für deine ${common.nginx} Konfiguration einzurichten.`,
|
noAdditionalStepsAreNeededToSetUpSslForNginx: `Es sind keine weiteren Schritte nötig, um ${common.ssl} für deine ${common.nginx} Konfiguration einzurichten.`,
|
||||||
sslInit: `${common.ssl} initialisieren`,
|
sslInit: `${common.ssl} initialisieren`,
|
||||||
|
|
|
@ -25,22 +25,22 @@ THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
back: 'Back',
|
back: 'Back',
|
||||||
next: 'Next',
|
next: 'Next',
|
||||||
enable: 'enable',
|
enable: 'enable',
|
||||||
php: 'PHP',
|
php: 'PHP',
|
||||||
ssl: 'SSL',
|
ssl: 'SSL',
|
||||||
nginx: 'NGINX',
|
nginx: 'NGINX',
|
||||||
http: 'HTTP',
|
http: 'HTTP',
|
||||||
https: 'HTTPS',
|
https: 'HTTPS',
|
||||||
letsEncrypt: 'Let\'s Encrypt',
|
letsEncrypt: "Let's Encrypt",
|
||||||
python: 'Python',
|
python: 'Python',
|
||||||
wordPress: 'WordPress',
|
wordPress: 'WordPress',
|
||||||
drupal: 'Drupal',
|
drupal: 'Drupal',
|
||||||
magento: 'Magento',
|
magento: 'Magento',
|
||||||
joomla: 'Joomla',
|
joomla: 'Joomla',
|
||||||
django: 'Django',
|
django: 'Django',
|
||||||
logging: 'Logging',
|
logging: 'Logging',
|
||||||
reverseProxy: 'Reverse proxy',
|
reverseProxy: 'Reverse proxy',
|
||||||
reverseProxyLower: 'reverse proxy',
|
reverseProxyLower: 'reverse proxy',
|
||||||
restrict: 'Restrict',
|
restrict: 'Restrict',
|
||||||
|
|
|
@ -25,6 +25,7 @@ THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
wantToContributeChanges: '👋 Want to request new features, contribute changes, or translate the tool into a new language?',
|
wantToContributeChanges:
|
||||||
|
'👋 Want to request new features, contribute changes, or translate the tool into a new language?',
|
||||||
getInvolvedOnGitHub: 'Get involved on GitHub',
|
getInvolvedOnGitHub: 'Get involved on GitHub',
|
||||||
};
|
};
|
||||||
|
|
|
@ -26,5 +26,5 @@ THE SOFTWARE.
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
lookingForAPlaceToDeploy: '👋 Looking for a place to deploy your new configuration?',
|
lookingForAPlaceToDeploy: '👋 Looking for a place to deploy your new configuration?',
|
||||||
tryOutDigitalOceansDroplet: 'Try out DigitalOcean\'s LEMP Droplet with NGINX',
|
tryOutDigitalOceansDroplet: "Try out DigitalOcean's LEMP Droplet with NGINX",
|
||||||
};
|
};
|
||||||
|
|
|
@ -40,7 +40,7 @@ export default {
|
||||||
certificationType: 'Certification type',
|
certificationType: 'Certification type',
|
||||||
customCertificate: 'Custom certificate',
|
customCertificate: 'Custom certificate',
|
||||||
letsEncryptEmail: `${common.letsEncrypt} email`,
|
letsEncryptEmail: `${common.letsEncrypt} email`,
|
||||||
http3IsANonStandardModule: 'HTTP/3 isn\'t a standard NGINX module, check the ',
|
http3IsANonStandardModule: "HTTP/3 isn't a standard NGINX module, check the ",
|
||||||
http3NginxQuicReadme: 'NGINX QUIC readme',
|
http3NginxQuicReadme: 'NGINX QUIC readme',
|
||||||
http3OrThe: ' or the ',
|
http3OrThe: ' or the ',
|
||||||
http3CloudflareQuicheProject: 'Cloudflare quiche project',
|
http3CloudflareQuicheProject: 'Cloudflare quiche project',
|
||||||
|
|
|
@ -35,4 +35,15 @@ import server from './server';
|
||||||
import restrict from './restrict';
|
import restrict from './restrict';
|
||||||
import onion from './onion';
|
import onion from './onion';
|
||||||
|
|
||||||
export default { https, logging, php, presets, python, reverseProxy, routing, server, restrict, onion };
|
export default {
|
||||||
|
https,
|
||||||
|
logging,
|
||||||
|
php,
|
||||||
|
presets,
|
||||||
|
python,
|
||||||
|
reverseProxy,
|
||||||
|
routing,
|
||||||
|
server,
|
||||||
|
restrict,
|
||||||
|
onion,
|
||||||
|
};
|
||||||
|
|
|
@ -29,8 +29,10 @@ const onion = 'Onion';
|
||||||
export default {
|
export default {
|
||||||
onion,
|
onion,
|
||||||
onionLocation: `${onion} location`,
|
onionLocation: `${onion} location`,
|
||||||
provideAnOnionLocationToSetOnionLocationHeader: 'Provide an onion location address to set the Onion-Location header for your site.',
|
provideAnOnionLocationToSetOnionLocationHeader:
|
||||||
letsVisitorsKnownOnionServicesIsAvailable: 'This lets visitors know that an onion services version of your site is available for Tor browsers.',
|
'Provide an onion location address to set the Onion-Location header for your site.',
|
||||||
|
letsVisitorsKnownOnionServicesIsAvailable:
|
||||||
|
'This lets visitors know that an onion services version of your site is available for Tor browsers.',
|
||||||
learnMoreAboutOnionServices: 'Learn more about Onion services',
|
learnMoreAboutOnionServices: 'Learn more about Onion services',
|
||||||
onionLocationExpectedToEndWithOnion: 'Onion location addresses normally end with `.onion`.',
|
onionLocationExpectedToEndWithOnion: 'Onion location addresses normally end with `.onion`.',
|
||||||
};
|
};
|
||||||
|
|
|
@ -26,7 +26,8 @@ THE SOFTWARE.
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
presets: 'Presets',
|
presets: 'Presets',
|
||||||
itLooksLikeYouCustomisedTheConfig: 'It looks like you\'ve customised the configuration for this domain. Choosing a new preset may reset or change some of the settings that you\'ve customised.',
|
itLooksLikeYouCustomisedTheConfig:
|
||||||
|
"It looks like you've customised the configuration for this domain. Choosing a new preset may reset or change some of the settings that you've customised.",
|
||||||
frontend: 'Frontend',
|
frontend: 'Frontend',
|
||||||
nodeJs: 'Node.js',
|
nodeJs: 'Node.js',
|
||||||
singlePageApplication: 'Single-page application',
|
singlePageApplication: 'Single-page application',
|
||||||
|
|
|
@ -34,4 +34,14 @@ import security from './security';
|
||||||
import tools from './tools';
|
import tools from './tools';
|
||||||
import docker from './docker';
|
import docker from './docker';
|
||||||
|
|
||||||
export default { https, logging, nginx, performance, python, reverseProxy, security, tools, docker };
|
export default {
|
||||||
|
https,
|
||||||
|
logging,
|
||||||
|
nginx,
|
||||||
|
performance,
|
||||||
|
python,
|
||||||
|
reverseProxy,
|
||||||
|
security,
|
||||||
|
tools,
|
||||||
|
docker,
|
||||||
|
};
|
||||||
|
|
|
@ -33,7 +33,7 @@ export default {
|
||||||
enableGzipCompression: `${common.enable} gzip compression`,
|
enableGzipCompression: `${common.enable} gzip compression`,
|
||||||
brotliCompression: 'Brotli compression',
|
brotliCompression: 'Brotli compression',
|
||||||
enableBrotliCompression: `${common.enable} brotli compression`,
|
enableBrotliCompression: `${common.enable} brotli compression`,
|
||||||
brotliIsANonStandardModule: 'Brotli isn\'t a standard NGINX module, check the ',
|
brotliIsANonStandardModule: "Brotli isn't a standard NGINX module, check the ",
|
||||||
brotliGoogleNgxBrotliProject: 'Google ngx_brotli project',
|
brotliGoogleNgxBrotliProject: 'Google ngx_brotli project',
|
||||||
brotliForBuildingNginxWithBrotli: ' for how to build NGINX with Brotli!',
|
brotliForBuildingNginxWithBrotli: ' for how to build NGINX with Brotli!',
|
||||||
expirationForAssets: 'Expiration for assets',
|
expirationForAssets: 'Expiration for assets',
|
||||||
|
|
|
@ -40,13 +40,15 @@ export default {
|
||||||
resetAllDomainsConfig: 'Reset all domain configs',
|
resetAllDomainsConfig: 'Reset all domain configs',
|
||||||
resetDomainConfig: 'Reset domain config',
|
resetDomainConfig: 'Reset domain config',
|
||||||
removeDomain: 'Remove domain',
|
removeDomain: 'Remove domain',
|
||||||
yesImSure: 'Yes, I\'m sure',
|
yesImSure: "Yes, I'm sure",
|
||||||
noCancel: 'No, cancel',
|
noCancel: 'No, cancel',
|
||||||
tools: 'Tools',
|
tools: 'Tools',
|
||||||
resetGlobalConfigBody: 'Are you sure you want to reset all configuration options in the global config section?',
|
resetGlobalConfigBody:
|
||||||
|
'Are you sure you want to reset all configuration options in the global config section?',
|
||||||
resetAllDomainsConfigBody: 'Are you sure you want to reset the configuration of ALL domains?',
|
resetAllDomainsConfigBody: 'Are you sure you want to reset the configuration of ALL domains?',
|
||||||
removeAllDomainsBody: 'Are you sure you want to remove ALL domain configurations?',
|
removeAllDomainsBody: 'Are you sure you want to remove ALL domain configurations?',
|
||||||
areYouSureYouWantToResetAllConfigurationOptionsForThe: 'Are you sure you want to reset all configuration options for the',
|
areYouSureYouWantToResetAllConfigurationOptionsForThe:
|
||||||
|
'Are you sure you want to reset all configuration options for the',
|
||||||
domain: 'domain?',
|
domain: 'domain?',
|
||||||
areYouSureYouWantToRemoveThe: 'Are you sure you want to remove the ',
|
areYouSureYouWantToRemoveThe: 'Are you sure you want to remove the ',
|
||||||
domainConfiguration: 'domain configuration?',
|
domainConfiguration: 'domain configuration?',
|
||||||
|
|
|
@ -28,13 +28,15 @@ import common from '../../common';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
downloadTheGeneratedConfig: '<b>Download</b> the generated config:',
|
downloadTheGeneratedConfig: '<b>Download</b> the generated config:',
|
||||||
andUploadItToYourServers: 'and <b>upload</b> it to your server\'s',
|
andUploadItToYourServers: "and <b>upload</b> it to your server's",
|
||||||
directory: 'directory.',
|
directory: 'directory.',
|
||||||
or: 'or, ',
|
or: 'or, ',
|
||||||
copyBase64StringOfCompressedConfig: 'Copy a base64 string of the compressed config',
|
copyBase64StringOfCompressedConfig: 'Copy a base64 string of the compressed config',
|
||||||
pasteItInYourServersCommandLineAndExecute: ', paste it in your server\'s command line and execute it.',
|
pasteItInYourServersCommandLineAndExecute:
|
||||||
|
", paste it in your server's command line and execute it.",
|
||||||
navigateToYourNginxConfigurationDirectoryOnYourServer: `Navigate to your ${common.nginx} <b>configuration directory</b> on your server:`,
|
navigateToYourNginxConfigurationDirectoryOnYourServer: `Navigate to your ${common.nginx} <b>configuration directory</b> on your server:`,
|
||||||
createABackupOfYourCurrentNginxConfiguration: `Create a <b>backup</b> of your current ${common.nginx} configuration:`,
|
createABackupOfYourCurrentNginxConfiguration: `Create a <b>backup</b> of your current ${common.nginx} configuration:`,
|
||||||
extractTheNewCompressedConfigurationArchiveUsingTar: '<b>Extract</b> the new compressed configuration archive using tar:',
|
extractTheNewCompressedConfigurationArchiveUsingTar:
|
||||||
|
'<b>Extract</b> the new compressed configuration archive using tar:',
|
||||||
download: 'Download',
|
download: 'Download',
|
||||||
};
|
};
|
||||||
|
|
|
@ -27,7 +27,7 @@ THE SOFTWARE.
|
||||||
import common from '../../common';
|
import common from '../../common';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
letsGoLive: 'Let\'s go live!',
|
letsGoLive: "Let's go live!",
|
||||||
reloadNginxToLoadInYourNewConfiguration: `Reload ${common.nginx} to load in your new configuration:`,
|
reloadNginxToLoadInYourNewConfiguration: `Reload ${common.nginx} to load in your new configuration:`,
|
||||||
goLive: 'Go live!',
|
goLive: 'Go live!',
|
||||||
};
|
};
|
||||||
|
|
|
@ -27,7 +27,8 @@ THE SOFTWARE.
|
||||||
import common from '../../common';
|
import common from '../../common';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
generateDiffieHellmanKeysByRunningThisCommandOnYourServer: 'Generate <b>Diffie-Hellman keys</b> by running this command on your server:',
|
generateDiffieHellmanKeysByRunningThisCommandOnYourServer:
|
||||||
|
'Generate <b>Diffie-Hellman keys</b> by running this command on your server:',
|
||||||
createACommonAcmeChallengeDirectoryForLetsEncrypt: `Create a common <b>ACME-challenge</b> directory (for <b>${common.letsEncrypt}</b>):`,
|
createACommonAcmeChallengeDirectoryForLetsEncrypt: `Create a common <b>ACME-challenge</b> directory (for <b>${common.letsEncrypt}</b>):`,
|
||||||
noAdditionalStepsAreNeededToSetUpSslForNginx: `No additional steps are needed to set up ${common.ssl} for your ${common.nginx} configuration.`,
|
noAdditionalStepsAreNeededToSetUpSslForNginx: `No additional steps are needed to set up ${common.ssl} for your ${common.nginx} configuration.`,
|
||||||
sslInit: `${common.ssl} init`,
|
sslInit: `${common.ssl} init`,
|
||||||
|
|
|
@ -33,7 +33,7 @@ export default {
|
||||||
nginx: 'NGINX',
|
nginx: 'NGINX',
|
||||||
http: 'HTTP',
|
http: 'HTTP',
|
||||||
https: 'HTTPS',
|
https: 'HTTPS',
|
||||||
letsEncrypt: 'Let\'s Encrypt',
|
letsEncrypt: "Let's Encrypt",
|
||||||
python: 'Python',
|
python: 'Python',
|
||||||
wordPress: 'WordPress',
|
wordPress: 'WordPress',
|
||||||
drupal: 'Drupal',
|
drupal: 'Drupal',
|
||||||
|
|
|
@ -25,6 +25,7 @@ THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
wantToContributeChanges: '👋 ¿Quiere solicitar nuevas funciones, contribuir con cambios o traducir la herramienta a un nuevo idioma?',
|
wantToContributeChanges:
|
||||||
|
'👋 ¿Quiere solicitar nuevas funciones, contribuir con cambios o traducir la herramienta a un nuevo idioma?',
|
||||||
getInvolvedOnGitHub: 'Involúcrate en GitHub',
|
getInvolvedOnGitHub: 'Involúcrate en GitHub',
|
||||||
};
|
};
|
||||||
|
|
|
@ -35,4 +35,15 @@ import server from './server';
|
||||||
import restrict from './restrict';
|
import restrict from './restrict';
|
||||||
import onion from './onion';
|
import onion from './onion';
|
||||||
|
|
||||||
export default { https, logging, php, presets, python, reverseProxy, routing, server, restrict, onion };
|
export default {
|
||||||
|
https,
|
||||||
|
logging,
|
||||||
|
php,
|
||||||
|
presets,
|
||||||
|
python,
|
||||||
|
reverseProxy,
|
||||||
|
routing,
|
||||||
|
server,
|
||||||
|
restrict,
|
||||||
|
onion,
|
||||||
|
};
|
||||||
|
|
|
@ -29,8 +29,11 @@ const onion = 'Onion';
|
||||||
export default {
|
export default {
|
||||||
onion,
|
onion,
|
||||||
onionLocation: `Ubicación ${onion}`,
|
onionLocation: `Ubicación ${onion}`,
|
||||||
provideAnOnionLocationToSetOnionLocationHeader: 'Proporcione una dirección de ubicación Onion para configurar el encabezado de Onion-Location en su sitio.',
|
provideAnOnionLocationToSetOnionLocationHeader:
|
||||||
letsVisitorsKnownOnionServicesIsAvailable: 'Esto les permite a los visitantes saber que una versión de servicios Onion de su sitio está disponible para los navegadores Tor.',
|
'Proporcione una dirección de ubicación Onion para configurar el encabezado de Onion-Location en su sitio.',
|
||||||
|
letsVisitorsKnownOnionServicesIsAvailable:
|
||||||
|
'Esto les permite a los visitantes saber que una versión de servicios Onion de su sitio está disponible para los navegadores Tor.',
|
||||||
learnMoreAboutOnionServices: 'Más información sobre los servicios Onion',
|
learnMoreAboutOnionServices: 'Más información sobre los servicios Onion',
|
||||||
onionLocationExpectedToEndWithOnion: 'Las direcciones de ubicación Onion normalmente terminan con `.onion`.',
|
onionLocationExpectedToEndWithOnion:
|
||||||
|
'Las direcciones de ubicación Onion normalmente terminan con `.onion`.',
|
||||||
};
|
};
|
||||||
|
|
|
@ -28,7 +28,8 @@ THE SOFTWARE.
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
presets: 'Preajustes',
|
presets: 'Preajustes',
|
||||||
itLooksLikeYouCustomisedTheConfig: 'Parece que ha personalizado la configuración para este dominio. La elección de un nuevo ajuste preestablecido puede restablecer o cambiar algunas de las configuraciones que ha personalizado.',
|
itLooksLikeYouCustomisedTheConfig:
|
||||||
|
'Parece que ha personalizado la configuración para este dominio. La elección de un nuevo ajuste preestablecido puede restablecer o cambiar algunas de las configuraciones que ha personalizado.',
|
||||||
frontend: 'Frontend',
|
frontend: 'Frontend',
|
||||||
nodeJs: 'Node.js',
|
nodeJs: 'Node.js',
|
||||||
singlePageApplication: 'Single-page application',
|
singlePageApplication: 'Single-page application',
|
||||||
|
|
|
@ -30,7 +30,8 @@ export default {
|
||||||
domain: 'Dominio',
|
domain: 'Dominio',
|
||||||
documentRoot: 'Raiz del documento',
|
documentRoot: 'Raiz del documento',
|
||||||
oneOrMoreOtherDomainsAreAlsoNamed: 'Uno o más dominios tienen también ese mismo nombre',
|
oneOrMoreOtherDomainsAreAlsoNamed: 'Uno o más dominios tienen también ese mismo nombre',
|
||||||
thisWillCauseIssuesWithConfigGeneration: 'Esto va a causar problemas en la generación de la configuracion.',
|
thisWillCauseIssuesWithConfigGeneration:
|
||||||
|
'Esto va a causar problemas en la generación de la configuracion.',
|
||||||
wwwSubdomain: 'subdominio www',
|
wwwSubdomain: 'subdominio www',
|
||||||
cdnSubdomain: 'subdominio CDN',
|
cdnSubdomain: 'subdominio CDN',
|
||||||
redirectSubdomains: 'redirección de subdominio',
|
redirectSubdomains: 'redirección de subdominio',
|
||||||
|
|
|
@ -30,7 +30,6 @@ const mozilla = 'Mozilla';
|
||||||
const ipv4 = 'IPv4';
|
const ipv4 = 'IPv4';
|
||||||
const ipv6 = 'IPv6';
|
const ipv6 = 'IPv6';
|
||||||
|
|
||||||
|
|
||||||
// 'Resolvers', 'webroot', 'listening socket' and 'worker' don't have a good translation in Spanish
|
// 'Resolvers', 'webroot', 'listening socket' and 'worker' don't have a good translation in Spanish
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
|
|
@ -34,4 +34,14 @@ import security from './security';
|
||||||
import tools from './tools';
|
import tools from './tools';
|
||||||
import docker from './docker';
|
import docker from './docker';
|
||||||
|
|
||||||
export default { https, logging, nginx, performance, python, reverseProxy, security, tools, docker };
|
export default {
|
||||||
|
https,
|
||||||
|
logging,
|
||||||
|
nginx,
|
||||||
|
performance,
|
||||||
|
python,
|
||||||
|
reverseProxy,
|
||||||
|
security,
|
||||||
|
tools,
|
||||||
|
docker,
|
||||||
|
};
|
||||||
|
|
|
@ -30,7 +30,8 @@ export default {
|
||||||
enableFileNotFoundErrorLogging: `${common.enable} el registro de error de archivo no encontrado`,
|
enableFileNotFoundErrorLogging: `${common.enable} el registro de error de archivo no encontrado`,
|
||||||
logformat: 'log_format',
|
logformat: 'log_format',
|
||||||
level: 'logging level', // TODO: translate
|
level: 'logging level', // TODO: translate
|
||||||
enableCloudflare: 'agregar cabecera de petición de Cloudflare en el formato por defecto del registro',
|
enableCloudflare:
|
||||||
|
'agregar cabecera de petición de Cloudflare en el formato por defecto del registro',
|
||||||
cfRay: 'CF-Ray',
|
cfRay: 'CF-Ray',
|
||||||
cfConnectingIp: 'CF-Connecting-IP',
|
cfConnectingIp: 'CF-Connecting-IP',
|
||||||
xForwardedFor: 'X-Forwarded-For',
|
xForwardedFor: 'X-Forwarded-For',
|
||||||
|
|
|
@ -26,7 +26,7 @@ THE SOFTWARE.
|
||||||
|
|
||||||
import common from '../../common';
|
import common from '../../common';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
disableHtmlCaching: 'Disable HTML caching', // TODO: translate
|
disableHtmlCaching: 'Disable HTML caching', // TODO: translate
|
||||||
enableDisableHtmlCaching: 'disable HTML caching', // TODO: translate
|
enableDisableHtmlCaching: 'disable HTML caching', // TODO: translate
|
||||||
gzipCompression: 'Compresión Gzip',
|
gzipCompression: 'Compresión Gzip',
|
||||||
|
|
|
@ -43,10 +43,13 @@ export default {
|
||||||
yesImSure: 'Si, Estoy seguro',
|
yesImSure: 'Si, Estoy seguro',
|
||||||
noCancel: 'No, cancelar',
|
noCancel: 'No, cancelar',
|
||||||
tools: 'Herramientas',
|
tools: 'Herramientas',
|
||||||
resetGlobalConfigBody: '¿Estás seguro de que desea reiniciar todas las opciones de configuración en la sección de configuración global?',
|
resetGlobalConfigBody:
|
||||||
resetAllDomainsConfigBody: '¿Estás seguro de que desea reiniciar la configuración de TODOS los dominios?',
|
'¿Estás seguro de que desea reiniciar todas las opciones de configuración en la sección de configuración global?',
|
||||||
|
resetAllDomainsConfigBody:
|
||||||
|
'¿Estás seguro de que desea reiniciar la configuración de TODOS los dominios?',
|
||||||
removeAllDomainsBody: '¿Estás seguro de que desea quitar TODAS las configuraciones de dominio?',
|
removeAllDomainsBody: '¿Estás seguro de que desea quitar TODAS las configuraciones de dominio?',
|
||||||
areYouSureYouWantToResetAllConfigurationOptionsForThe: '¿Estás seguro de que desea reiniciar todas las opciones de configuración del',
|
areYouSureYouWantToResetAllConfigurationOptionsForThe:
|
||||||
|
'¿Estás seguro de que desea reiniciar todas las opciones de configuración del',
|
||||||
domain: 'dominio?',
|
domain: 'dominio?',
|
||||||
areYouSureYouWantToRemoveThe: '¿Estás seguro de que quieres quitar la ',
|
areYouSureYouWantToRemoveThe: '¿Estás seguro de que quieres quitar la ',
|
||||||
domainConfiguration: 'configuración de dominio?',
|
domainConfiguration: 'configuración de dominio?',
|
||||||
|
|
|
@ -35,9 +35,11 @@ export default {
|
||||||
directory: '.',
|
directory: '.',
|
||||||
or: 'o, ',
|
or: 'o, ',
|
||||||
copyBase64StringOfCompressedConfig: 'Copiar el texto comprimido en base64 de la configuracion',
|
copyBase64StringOfCompressedConfig: 'Copiar el texto comprimido en base64 de la configuracion',
|
||||||
pasteItInYourServersCommandLineAndExecute: ', péguelo en la línea de comando de su servidor y ejecútelo.',
|
pasteItInYourServersCommandLineAndExecute:
|
||||||
|
', péguelo en la línea de comando de su servidor y ejecútelo.',
|
||||||
navigateToYourNginxConfigurationDirectoryOnYourServer: `Navega en <b>la carpeta de configuracion</b> de ${common.nginx} de tu servidor:`,
|
navigateToYourNginxConfigurationDirectoryOnYourServer: `Navega en <b>la carpeta de configuracion</b> de ${common.nginx} de tu servidor:`,
|
||||||
createABackupOfYourCurrentNginxConfiguration: `Crea un <b>respaldo</b> de tu configuracion actual de ${common.nginx}:`,
|
createABackupOfYourCurrentNginxConfiguration: `Crea un <b>respaldo</b> de tu configuracion actual de ${common.nginx}:`,
|
||||||
extractTheNewCompressedConfigurationArchiveUsingTar: '<b>Extraer</b> el nuevo archivo de configuracion comprimido usando tar:',
|
extractTheNewCompressedConfigurationArchiveUsingTar:
|
||||||
|
'<b>Extraer</b> el nuevo archivo de configuracion comprimido usando tar:',
|
||||||
download: 'Descargar',
|
download: 'Descargar',
|
||||||
};
|
};
|
||||||
|
|
|
@ -27,7 +27,8 @@ THE SOFTWARE.
|
||||||
import common from '../../common';
|
import common from '../../common';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
generateDiffieHellmanKeysByRunningThisCommandOnYourServer: 'Genera <b> llaves Diffie-Hellman</b> ejecutando este comando en su servidor:',
|
generateDiffieHellmanKeysByRunningThisCommandOnYourServer:
|
||||||
|
'Genera <b> llaves Diffie-Hellman</b> ejecutando este comando en su servidor:',
|
||||||
createACommonAcmeChallengeDirectoryForLetsEncrypt: `Crear una simple carpeta <b>ACME-challenge</b> (para <b>${common.letsEncrypt}</b>):`,
|
createACommonAcmeChallengeDirectoryForLetsEncrypt: `Crear una simple carpeta <b>ACME-challenge</b> (para <b>${common.letsEncrypt}</b>):`,
|
||||||
noAdditionalStepsAreNeededToSetUpSslForNginx: `No se necesitan pasos adicionales para configurar ${common.ssl} en tu configuracion de ${common.nginx}.`,
|
noAdditionalStepsAreNeededToSetUpSslForNginx: `No se necesitan pasos adicionales para configurar ${common.ssl} en tu configuracion de ${common.nginx}.`,
|
||||||
sslInit: `Preparar el ${common.ssl}`,
|
sslInit: `Preparar el ${common.ssl}`,
|
||||||
|
|
|
@ -33,7 +33,7 @@ export default {
|
||||||
nginx: 'NGINX',
|
nginx: 'NGINX',
|
||||||
http: 'HTTP',
|
http: 'HTTP',
|
||||||
https: 'HTTPS',
|
https: 'HTTPS',
|
||||||
letsEncrypt: 'Let\'s Encrypt',
|
letsEncrypt: "Let's Encrypt",
|
||||||
python: 'Python',
|
python: 'Python',
|
||||||
wordPress: 'WordPress',
|
wordPress: 'WordPress',
|
||||||
drupal: 'Drupal',
|
drupal: 'Drupal',
|
||||||
|
|
|
@ -25,6 +25,7 @@ THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
wantToContributeChanges: '👋 Vous souhaitez demander de nouvelles fonctionnalités, apporter des modifications, ou traduire l\'outil dans une nouvelle langue?',
|
wantToContributeChanges:
|
||||||
|
"👋 Vous souhaitez demander de nouvelles fonctionnalités, apporter des modifications, ou traduire l'outil dans une nouvelle langue?",
|
||||||
getInvolvedOnGitHub: 'Participez sur GitHub',
|
getInvolvedOnGitHub: 'Participez sur GitHub',
|
||||||
};
|
};
|
||||||
|
|
|
@ -40,7 +40,7 @@ export default {
|
||||||
certificationType: 'Type de certification',
|
certificationType: 'Type de certification',
|
||||||
customCertificate: 'Certificat personnalisé',
|
customCertificate: 'Certificat personnalisé',
|
||||||
letsEncryptEmail: `E-mail ${common.letsEncrypt}`,
|
letsEncryptEmail: `E-mail ${common.letsEncrypt}`,
|
||||||
http3IsANonStandardModule: 'HTTP/3 n\'est pas un module standard de NGINX, veuillez lire ',
|
http3IsANonStandardModule: "HTTP/3 n'est pas un module standard de NGINX, veuillez lire ",
|
||||||
http3NginxQuicReadme: 'le Readme de NGINX QUIC',
|
http3NginxQuicReadme: 'le Readme de NGINX QUIC',
|
||||||
http3OrThe: ' ou le ',
|
http3OrThe: ' ou le ',
|
||||||
http3CloudflareQuicheProject: 'projet Cloudflare quiche',
|
http3CloudflareQuicheProject: 'projet Cloudflare quiche',
|
||||||
|
|
|
@ -35,4 +35,15 @@ import server from './server';
|
||||||
import restrict from './restrict';
|
import restrict from './restrict';
|
||||||
import onion from './onion';
|
import onion from './onion';
|
||||||
|
|
||||||
export default { https, logging, php, presets, python, reverseProxy, routing, server, restrict, onion };
|
export default {
|
||||||
|
https,
|
||||||
|
logging,
|
||||||
|
php,
|
||||||
|
presets,
|
||||||
|
python,
|
||||||
|
reverseProxy,
|
||||||
|
routing,
|
||||||
|
server,
|
||||||
|
restrict,
|
||||||
|
onion,
|
||||||
|
};
|
||||||
|
|
|
@ -29,8 +29,10 @@ const onion = 'Onion';
|
||||||
export default {
|
export default {
|
||||||
onion,
|
onion,
|
||||||
onionLocation: `Adresse ${onion}`,
|
onionLocation: `Adresse ${onion}`,
|
||||||
provideAnOnionLocationToSetOnionLocationHeader: 'Fournir une adresse Onion pour définir le header Onion-Location pour votre site.',
|
provideAnOnionLocationToSetOnionLocationHeader:
|
||||||
letsVisitorsKnownOnionServicesIsAvailable: 'Indique aux visiteurs qu\'une version onion du site est disponible pour les navigateurs Tor.',
|
'Fournir une adresse Onion pour définir le header Onion-Location pour votre site.',
|
||||||
|
letsVisitorsKnownOnionServicesIsAvailable:
|
||||||
|
"Indique aux visiteurs qu'une version onion du site est disponible pour les navigateurs Tor.",
|
||||||
learnMoreAboutOnionServices: 'En apprendre plus sur les services Onion',
|
learnMoreAboutOnionServices: 'En apprendre plus sur les services Onion',
|
||||||
onionLocationExpectedToEndWithOnion: 'Une adresse onion se termine normalement avec `.onion`.',
|
onionLocationExpectedToEndWithOnion: 'Une adresse onion se termine normalement avec `.onion`.',
|
||||||
};
|
};
|
||||||
|
|
|
@ -26,7 +26,8 @@ THE SOFTWARE.
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
presets: 'Préconfigurations',
|
presets: 'Préconfigurations',
|
||||||
itLooksLikeYouCustomisedTheConfig: 'Il semblerait que vous ayez customisé la configuration de ce domaine. Utiliser une nouvelle préconfiguration peut réinitialiser ou changer certains paramètres que vous avez définis.',
|
itLooksLikeYouCustomisedTheConfig:
|
||||||
|
'Il semblerait que vous ayez customisé la configuration de ce domaine. Utiliser une nouvelle préconfiguration peut réinitialiser ou changer certains paramètres que vous avez définis.',
|
||||||
frontend: 'Frontend',
|
frontend: 'Frontend',
|
||||||
nodeJs: 'Node.js',
|
nodeJs: 'Node.js',
|
||||||
singlePageApplication: 'Application monopage',
|
singlePageApplication: 'Application monopage',
|
||||||
|
|
|
@ -28,7 +28,8 @@ export default {
|
||||||
domain: 'Domaine',
|
domain: 'Domaine',
|
||||||
documentRoot: 'Dossier racine',
|
documentRoot: 'Dossier racine',
|
||||||
oneOrMoreOtherDomainsAreAlsoNamed: 'Un ou plusieurs autres domaines sont aussi nommés',
|
oneOrMoreOtherDomainsAreAlsoNamed: 'Un ou plusieurs autres domaines sont aussi nommés',
|
||||||
thisWillCauseIssuesWithConfigGeneration: 'Cela causera des problèmes lors de la génération de la configuration.',
|
thisWillCauseIssuesWithConfigGeneration:
|
||||||
|
'Cela causera des problèmes lors de la génération de la configuration.',
|
||||||
wwwSubdomain: 'Sous-domaine www',
|
wwwSubdomain: 'Sous-domaine www',
|
||||||
cdnSubdomain: 'Sous-domaine CDN',
|
cdnSubdomain: 'Sous-domaine CDN',
|
||||||
redirectSubdomains: 'Rediriger les sous-domaines',
|
redirectSubdomains: 'Rediriger les sous-domaines',
|
||||||
|
|
|
@ -34,4 +34,14 @@ import security from './security';
|
||||||
import tools from './tools';
|
import tools from './tools';
|
||||||
import docker from './docker';
|
import docker from './docker';
|
||||||
|
|
||||||
export default { https, logging, nginx, performance, python, reverseProxy, security, tools, docker };
|
export default {
|
||||||
|
https,
|
||||||
|
logging,
|
||||||
|
nginx,
|
||||||
|
performance,
|
||||||
|
python,
|
||||||
|
reverseProxy,
|
||||||
|
security,
|
||||||
|
tools,
|
||||||
|
docker,
|
||||||
|
};
|
||||||
|
|
|
@ -33,7 +33,7 @@ export default {
|
||||||
enableGzipCompression: `${common.enable} la compression gzip`,
|
enableGzipCompression: `${common.enable} la compression gzip`,
|
||||||
brotliCompression: 'Compression Brotli',
|
brotliCompression: 'Compression Brotli',
|
||||||
enableBrotliCompression: `${common.enable} la compression brotli`,
|
enableBrotliCompression: `${common.enable} la compression brotli`,
|
||||||
brotliIsANonStandardModule: 'Brotli n\'est pas un module standard de NGINX, veuillez lire le ',
|
brotliIsANonStandardModule: "Brotli n'est pas un module standard de NGINX, veuillez lire le ",
|
||||||
brotliGoogleNgxBrotliProject: 'projet Google ngx_brotli',
|
brotliGoogleNgxBrotliProject: 'projet Google ngx_brotli',
|
||||||
brotliForBuildingNginxWithBrotli: ' pour compiler NGINX avec le support Brotli!',
|
brotliForBuildingNginxWithBrotli: ' pour compiler NGINX avec le support Brotli!',
|
||||||
expirationForAssets: 'Expiration des assets',
|
expirationForAssets: 'Expiration des assets',
|
||||||
|
|
|
@ -43,10 +43,13 @@ export default {
|
||||||
yesImSure: 'Oui, je suis sûr(e)',
|
yesImSure: 'Oui, je suis sûr(e)',
|
||||||
noCancel: 'Non, annuler',
|
noCancel: 'Non, annuler',
|
||||||
tools: 'Outils',
|
tools: 'Outils',
|
||||||
resetGlobalConfigBody: 'Voulez-vous vraiment réinitialiser toutes les options de configuration globales?',
|
resetGlobalConfigBody:
|
||||||
resetAllDomainsConfigBody: 'Voulez-vous vraiment réinitialiser les configurations de TOUS les domaines?',
|
'Voulez-vous vraiment réinitialiser toutes les options de configuration globales?',
|
||||||
|
resetAllDomainsConfigBody:
|
||||||
|
'Voulez-vous vraiment réinitialiser les configurations de TOUS les domaines?',
|
||||||
removeAllDomainsBody: 'Voulez-vous vraiment supprimer les configurations de TOUS les domaines?',
|
removeAllDomainsBody: 'Voulez-vous vraiment supprimer les configurations de TOUS les domaines?',
|
||||||
areYouSureYouWantToResetAllConfigurationOptionsForThe: 'Voulez-vous vraiment réinitialiser toutes les options de configuration pour',
|
areYouSureYouWantToResetAllConfigurationOptionsForThe:
|
||||||
|
'Voulez-vous vraiment réinitialiser toutes les options de configuration pour',
|
||||||
domain: '?',
|
domain: '?',
|
||||||
areYouSureYouWantToRemoveThe: 'Voulez-vous vraiment supprimer',
|
areYouSureYouWantToRemoveThe: 'Voulez-vous vraiment supprimer',
|
||||||
domainConfiguration: '?',
|
domainConfiguration: '?',
|
||||||
|
|
|
@ -32,9 +32,11 @@ export default {
|
||||||
directory: 'de votre serveur.',
|
directory: 'de votre serveur.',
|
||||||
or: 'ou, ',
|
or: 'ou, ',
|
||||||
copyBase64StringOfCompressedConfig: 'copiez la configuration compressée et encodée en base64',
|
copyBase64StringOfCompressedConfig: 'copiez la configuration compressée et encodée en base64',
|
||||||
pasteItInYourServersCommandLineAndExecute: ', puis collez-la et exécutez-la en ligne de commande sur votre serveur.',
|
pasteItInYourServersCommandLineAndExecute:
|
||||||
|
', puis collez-la et exécutez-la en ligne de commande sur votre serveur.',
|
||||||
navigateToYourNginxConfigurationDirectoryOnYourServer: `Sur votre serveur, naviguez vers le <b>dossier de configuration</b> de ${common.nginx}:`,
|
navigateToYourNginxConfigurationDirectoryOnYourServer: `Sur votre serveur, naviguez vers le <b>dossier de configuration</b> de ${common.nginx}:`,
|
||||||
createABackupOfYourCurrentNginxConfiguration: `Créez un <b>backup</b> de votre configuration ${common.nginx} actuelle:`,
|
createABackupOfYourCurrentNginxConfiguration: `Créez un <b>backup</b> de votre configuration ${common.nginx} actuelle:`,
|
||||||
extractTheNewCompressedConfigurationArchiveUsingTar: '<b>Décompressez</b> la nouvelle configuration en utilisant Tar:',
|
extractTheNewCompressedConfigurationArchiveUsingTar:
|
||||||
|
'<b>Décompressez</b> la nouvelle configuration en utilisant Tar:',
|
||||||
download: 'Téléchargement',
|
download: 'Téléchargement',
|
||||||
};
|
};
|
||||||
|
|
|
@ -27,7 +27,7 @@ THE SOFTWARE.
|
||||||
import common from '../../common';
|
import common from '../../common';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
letsGoLive: 'C\'est en ligne!',
|
letsGoLive: "C'est en ligne!",
|
||||||
reloadNginxToLoadInYourNewConfiguration: `Relancez ${common.nginx} pour charger la nouvelle configuration:`,
|
reloadNginxToLoadInYourNewConfiguration: `Relancez ${common.nginx} pour charger la nouvelle configuration:`,
|
||||||
goLive: 'C\'est en ligne!',
|
goLive: "C'est en ligne!",
|
||||||
};
|
};
|
||||||
|
|
|
@ -27,7 +27,8 @@ THE SOFTWARE.
|
||||||
import common from '../../common';
|
import common from '../../common';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
generateDiffieHellmanKeysByRunningThisCommandOnYourServer: 'Générez des <b>clefs de Diffie-Hellman</b> en exécutant cette commande sur votre serveur:',
|
generateDiffieHellmanKeysByRunningThisCommandOnYourServer:
|
||||||
|
'Générez des <b>clefs de Diffie-Hellman</b> en exécutant cette commande sur votre serveur:',
|
||||||
createACommonAcmeChallengeDirectoryForLetsEncrypt: `Créez un répertoire commun <b>ACME-challenge</b> (pour <b>${common.letsEncrypt}</b>):`,
|
createACommonAcmeChallengeDirectoryForLetsEncrypt: `Créez un répertoire commun <b>ACME-challenge</b> (pour <b>${common.letsEncrypt}</b>):`,
|
||||||
noAdditionalStepsAreNeededToSetUpSslForNginx: `Aucune étape additionnelle n'est nécessaire pour configurer ${common.ssl} pour ${common.nginx}.`,
|
noAdditionalStepsAreNeededToSetUpSslForNginx: `Aucune étape additionnelle n'est nécessaire pour configurer ${common.ssl} pour ${common.nginx}.`,
|
||||||
sslInit: `${common.ssl} init`,
|
sslInit: `${common.ssl} init`,
|
||||||
|
|
|
@ -33,7 +33,7 @@ export default {
|
||||||
nginx: 'NGINX',
|
nginx: 'NGINX',
|
||||||
http: 'HTTP',
|
http: 'HTTP',
|
||||||
https: 'HTTPS',
|
https: 'HTTPS',
|
||||||
letsEncrypt: 'Let\'s Encrypt',
|
letsEncrypt: "Let's Encrypt",
|
||||||
python: 'Python',
|
python: 'Python',
|
||||||
wordPress: 'WordPress',
|
wordPress: 'WordPress',
|
||||||
drupal: 'Drupal',
|
drupal: 'Drupal',
|
||||||
|
|
|
@ -35,4 +35,15 @@ import server from './server';
|
||||||
import restrict from './restrict';
|
import restrict from './restrict';
|
||||||
import onion from './onion';
|
import onion from './onion';
|
||||||
|
|
||||||
export default { https, logging, php, presets, python, reverseProxy, routing, server, restrict, onion };
|
export default {
|
||||||
|
https,
|
||||||
|
logging,
|
||||||
|
php,
|
||||||
|
presets,
|
||||||
|
python,
|
||||||
|
reverseProxy,
|
||||||
|
routing,
|
||||||
|
server,
|
||||||
|
restrict,
|
||||||
|
onion,
|
||||||
|
};
|
||||||
|
|
|
@ -29,8 +29,10 @@ const onion = 'Onion';
|
||||||
export default {
|
export default {
|
||||||
onion,
|
onion,
|
||||||
onionLocation: `${onion} location`,
|
onionLocation: `${onion} location`,
|
||||||
provideAnOnionLocationToSetOnionLocationHeader: 'サイトのOnion-Locationヘッダを設定するために、Onion locationアドレスを提供する。',
|
provideAnOnionLocationToSetOnionLocationHeader:
|
||||||
letsVisitorsKnownOnionServicesIsAvailable: 'これにより、あなたのサイトのオニオンサービス版がTorブラウザで利用可能であることをサイト訪問者に知らせます。',
|
'サイトのOnion-Locationヘッダを設定するために、Onion locationアドレスを提供する。',
|
||||||
|
letsVisitorsKnownOnionServicesIsAvailable:
|
||||||
|
'これにより、あなたのサイトのオニオンサービス版がTorブラウザで利用可能であることをサイト訪問者に知らせます。',
|
||||||
learnMoreAboutOnionServices: 'Onion サービスについて詳しくはこちら',
|
learnMoreAboutOnionServices: 'Onion サービスについて詳しくはこちら',
|
||||||
onionLocationExpectedToEndWithOnion: 'Onion location アドレスは通常 `.onion` で終わります。',
|
onionLocationExpectedToEndWithOnion: 'Onion location アドレスは通常 `.onion` で終わります。',
|
||||||
};
|
};
|
||||||
|
|
|
@ -26,7 +26,8 @@ THE SOFTWARE.
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
presets: 'プリセット',
|
presets: 'プリセット',
|
||||||
itLooksLikeYouCustomisedTheConfig: 'このドメインの設定をカスタマイズしているようです。新しいプリセットを選択すると、カスタマイズした設定の一部がリセットまたは変更される場合があります。',
|
itLooksLikeYouCustomisedTheConfig:
|
||||||
|
'このドメインの設定をカスタマイズしているようです。新しいプリセットを選択すると、カスタマイズした設定の一部がリセットまたは変更される場合があります。',
|
||||||
frontend: 'フロントエンド',
|
frontend: 'フロントエンド',
|
||||||
nodeJs: 'Node.js',
|
nodeJs: 'Node.js',
|
||||||
singlePageApplication: 'シングルページアプリケーション(SPA)',
|
singlePageApplication: 'シングルページアプリケーション(SPA)',
|
||||||
|
|
|
@ -34,4 +34,14 @@ import security from './security';
|
||||||
import tools from './tools';
|
import tools from './tools';
|
||||||
import docker from './docker';
|
import docker from './docker';
|
||||||
|
|
||||||
export default { https, logging, nginx, performance, python, reverseProxy, security, tools, docker };
|
export default {
|
||||||
|
https,
|
||||||
|
logging,
|
||||||
|
nginx,
|
||||||
|
performance,
|
||||||
|
python,
|
||||||
|
reverseProxy,
|
||||||
|
security,
|
||||||
|
tools,
|
||||||
|
docker,
|
||||||
|
};
|
||||||
|
|
|
@ -46,7 +46,8 @@ export default {
|
||||||
resetGlobalConfigBody: 'グローバル設定の全ての設定をリセットします、よろしいですか?',
|
resetGlobalConfigBody: 'グローバル設定の全ての設定をリセットします、よろしいですか?',
|
||||||
resetAllDomainsConfigBody: '全てのドメインの設定をリセットします、よろしいですか?',
|
resetAllDomainsConfigBody: '全てのドメインの設定をリセットします、よろしいですか?',
|
||||||
removeAllDomainsBody: '全てのドメインを削除します、よろしいですか?',
|
removeAllDomainsBody: '全てのドメインを削除します、よろしいですか?',
|
||||||
areYouSureYouWantToResetAllConfigurationOptionsForThe: '次のドメインの設定をリセットします、よろしいですか?',
|
areYouSureYouWantToResetAllConfigurationOptionsForThe:
|
||||||
|
'次のドメインの設定をリセットします、よろしいですか?',
|
||||||
domain: '',
|
domain: '',
|
||||||
areYouSureYouWantToRemoveThe: '次のドメインの設定を削除します、よろしいですか?',
|
areYouSureYouWantToRemoveThe: '次のドメインの設定を削除します、よろしいですか?',
|
||||||
domainConfiguration: '',
|
domainConfiguration: '',
|
||||||
|
|
|
@ -28,13 +28,15 @@ import common from '../../common';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
downloadTheGeneratedConfig: '生成された設定ファイルを<b>ダウンロードします</b>:',
|
downloadTheGeneratedConfig: '生成された設定ファイルを<b>ダウンロードします</b>:',
|
||||||
andUploadItToYourServers: 'そして、ご利用のサーバの以下のディレクトリに設定ファイルを <b>アップロードします</b>',
|
andUploadItToYourServers:
|
||||||
|
'そして、ご利用のサーバの以下のディレクトリに設定ファイルを <b>アップロードします</b>',
|
||||||
directory: '。',
|
directory: '。',
|
||||||
or: 'もしくは、',
|
or: 'もしくは、',
|
||||||
copyBase64StringOfCompressedConfig: '設定が圧縮されたbase64文字列をコピーし',
|
copyBase64StringOfCompressedConfig: '設定が圧縮されたbase64文字列をコピーし',
|
||||||
pasteItInYourServersCommandLineAndExecute: '、 サーバのコマンドラインにペーストして実行します',
|
pasteItInYourServersCommandLineAndExecute: '、 サーバのコマンドラインにペーストして実行します',
|
||||||
navigateToYourNginxConfigurationDirectoryOnYourServer: `サーバの ${common.nginx} の<b>設定ディレクトリ</b>へ移動します:`,
|
navigateToYourNginxConfigurationDirectoryOnYourServer: `サーバの ${common.nginx} の<b>設定ディレクトリ</b>へ移動します:`,
|
||||||
createABackupOfYourCurrentNginxConfiguration: `現在の ${common.nginx} の設定を<b>バックアップします</b>:`,
|
createABackupOfYourCurrentNginxConfiguration: `現在の ${common.nginx} の設定を<b>バックアップします</b>:`,
|
||||||
extractTheNewCompressedConfigurationArchiveUsingTar: 'tar を使って、新しい設定の入った圧縮ファイルを<b>展開します</b>:',
|
extractTheNewCompressedConfigurationArchiveUsingTar:
|
||||||
|
'tar を使って、新しい設定の入った圧縮ファイルを<b>展開します</b>:',
|
||||||
download: 'ダウンロード',
|
download: 'ダウンロード',
|
||||||
};
|
};
|
||||||
|
|
|
@ -27,7 +27,8 @@ THE SOFTWARE.
|
||||||
import common from '../../common';
|
import common from '../../common';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
generateDiffieHellmanKeysByRunningThisCommandOnYourServer: 'サーバでこのコマンドを実行して <b>Diffie-Hellman keys</b> を生成します:',
|
generateDiffieHellmanKeysByRunningThisCommandOnYourServer:
|
||||||
|
'サーバでこのコマンドを実行して <b>Diffie-Hellman keys</b> を生成します:',
|
||||||
createACommonAcmeChallengeDirectoryForLetsEncrypt: `共通の <b>ACME-challenge</b> ディレクトリを作成します (<b>${common.letsEncrypt}</b> の場合):`,
|
createACommonAcmeChallengeDirectoryForLetsEncrypt: `共通の <b>ACME-challenge</b> ディレクトリを作成します (<b>${common.letsEncrypt}</b> の場合):`,
|
||||||
noAdditionalStepsAreNeededToSetUpSslForNginx: `${common.ssl} を ${common.nginx} の構成に設定するための追加の手順は必要ありません。`,
|
noAdditionalStepsAreNeededToSetUpSslForNginx: `${common.ssl} を ${common.nginx} の構成に設定するための追加の手順は必要ありません。`,
|
||||||
sslInit: `${common.ssl} 初期設定`,
|
sslInit: `${common.ssl} 初期設定`,
|
||||||
|
|
|
@ -33,7 +33,7 @@ export default {
|
||||||
nginx: 'NGINX',
|
nginx: 'NGINX',
|
||||||
http: 'HTTP',
|
http: 'HTTP',
|
||||||
https: 'HTTPS',
|
https: 'HTTPS',
|
||||||
letsEncrypt: 'Let\'s Encrypt',
|
letsEncrypt: "Let's Encrypt",
|
||||||
python: 'Python',
|
python: 'Python',
|
||||||
wordPress: 'WordPress',
|
wordPress: 'WordPress',
|
||||||
drupal: 'Drupal',
|
drupal: 'Drupal',
|
||||||
|
|
|
@ -25,6 +25,7 @@ THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
wantToContributeChanges: '👋 Chcesz zapropnować nowe funkcje, wprowadzić zmiany lub przetłumaczyć narzędzie na inny język?',
|
wantToContributeChanges:
|
||||||
|
'👋 Chcesz zapropnować nowe funkcje, wprowadzić zmiany lub przetłumaczyć narzędzie na inny język?',
|
||||||
getInvolvedOnGitHub: 'Zaangażuj się na GitHub',
|
getInvolvedOnGitHub: 'Zaangażuj się na GitHub',
|
||||||
};
|
};
|
||||||
|
|
|
@ -35,4 +35,15 @@ import server from './server';
|
||||||
import restrict from './restrict';
|
import restrict from './restrict';
|
||||||
import onion from './onion';
|
import onion from './onion';
|
||||||
|
|
||||||
export default { https, logging, php, presets, python, reverseProxy, routing, server, restrict, onion };
|
export default {
|
||||||
|
https,
|
||||||
|
logging,
|
||||||
|
php,
|
||||||
|
presets,
|
||||||
|
python,
|
||||||
|
reverseProxy,
|
||||||
|
routing,
|
||||||
|
server,
|
||||||
|
restrict,
|
||||||
|
onion,
|
||||||
|
};
|
||||||
|
|
|
@ -29,8 +29,10 @@ const onion = 'Onion';
|
||||||
export default {
|
export default {
|
||||||
onion,
|
onion,
|
||||||
onionLocation: `lokalizacja ${onion}`,
|
onionLocation: `lokalizacja ${onion}`,
|
||||||
provideAnOnionLocationToSetOnionLocationHeader: 'Podaj adres lokalizacji onion aby ustawić nagłówek Onion-Location dla Twojej strony.',
|
provideAnOnionLocationToSetOnionLocationHeader:
|
||||||
letsVisitorsKnownOnionServicesIsAvailable: 'Inforuje Twoich odiwedzających, że dostępna jest wersja onion Twojego serwisu dla przeglądarek Tor.',
|
'Podaj adres lokalizacji onion aby ustawić nagłówek Onion-Location dla Twojej strony.',
|
||||||
|
letsVisitorsKnownOnionServicesIsAvailable:
|
||||||
|
'Inforuje Twoich odiwedzających, że dostępna jest wersja onion Twojego serwisu dla przeglądarek Tor.',
|
||||||
learnMoreAboutOnionServices: 'Dowiedz się więcej o serwisach Onion',
|
learnMoreAboutOnionServices: 'Dowiedz się więcej o serwisach Onion',
|
||||||
onionLocationExpectedToEndWithOnion: 'Adres lokalizacji Onion zwykle kończy się na `.onion`.',
|
onionLocationExpectedToEndWithOnion: 'Adres lokalizacji Onion zwykle kończy się na `.onion`.',
|
||||||
};
|
};
|
||||||
|
|
|
@ -26,7 +26,8 @@ THE SOFTWARE.
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
presets: 'Ustawienia wstępne',
|
presets: 'Ustawienia wstępne',
|
||||||
itLooksLikeYouCustomisedTheConfig: 'Wygląda na to, że dostosowałeś konfigurację dla tej domeny. Wybranie nowego ustawienia wstępnego może spowodować zresetowanie lub zmianę niektórych dostosowanych ustawień.',
|
itLooksLikeYouCustomisedTheConfig:
|
||||||
|
'Wygląda na to, że dostosowałeś konfigurację dla tej domeny. Wybranie nowego ustawienia wstępnego może spowodować zresetowanie lub zmianę niektórych dostosowanych ustawień.',
|
||||||
frontend: 'Frontend',
|
frontend: 'Frontend',
|
||||||
nodeJs: 'Node.js',
|
nodeJs: 'Node.js',
|
||||||
singlePageApplication: 'Aplikacja Single-page (SPA)',
|
singlePageApplication: 'Aplikacja Single-page (SPA)',
|
||||||
|
|
|
@ -28,7 +28,8 @@ export default {
|
||||||
domain: 'Domena',
|
domain: 'Domena',
|
||||||
documentRoot: 'Document root',
|
documentRoot: 'Document root',
|
||||||
oneOrMoreOtherDomainsAreAlsoNamed: 'Jedna lub więej domen ma również nazwę',
|
oneOrMoreOtherDomainsAreAlsoNamed: 'Jedna lub więej domen ma również nazwę',
|
||||||
thisWillCauseIssuesWithConfigGeneration: 'Spowoduje to problem z generowaniem pliku konfiguracyjnego.',
|
thisWillCauseIssuesWithConfigGeneration:
|
||||||
|
'Spowoduje to problem z generowaniem pliku konfiguracyjnego.',
|
||||||
wwwSubdomain: 'subdomena dla www',
|
wwwSubdomain: 'subdomena dla www',
|
||||||
cdnSubdomain: 'subdomena dla CDN',
|
cdnSubdomain: 'subdomena dla CDN',
|
||||||
redirectSubdomains: 'Przekieruj subdomeny',
|
redirectSubdomains: 'Przekieruj subdomeny',
|
||||||
|
|
|
@ -27,7 +27,7 @@ THE SOFTWARE.
|
||||||
export default {
|
export default {
|
||||||
backToTop: 'Wróć na górę',
|
backToTop: 'Wróć na górę',
|
||||||
thisToolIs: 'To narzędzie jest',
|
thisToolIs: 'To narzędzie jest',
|
||||||
openSourceOnGitHub: 'open-source\'owane na GitHub',
|
openSourceOnGitHub: "open-source'owane na GitHub",
|
||||||
underThe: 'na',
|
underThe: 'na',
|
||||||
mit: 'licencji MIT',
|
mit: 'licencji MIT',
|
||||||
license: '!',
|
license: '!',
|
||||||
|
|
|
@ -34,4 +34,14 @@ import security from './security';
|
||||||
import tools from './tools';
|
import tools from './tools';
|
||||||
import docker from './docker';
|
import docker from './docker';
|
||||||
|
|
||||||
export default { https, logging, nginx, performance, python, reverseProxy, security, tools, docker };
|
export default {
|
||||||
|
https,
|
||||||
|
logging,
|
||||||
|
nginx,
|
||||||
|
performance,
|
||||||
|
python,
|
||||||
|
reverseProxy,
|
||||||
|
security,
|
||||||
|
tools,
|
||||||
|
docker,
|
||||||
|
};
|
||||||
|
|
|
@ -43,10 +43,12 @@ export default {
|
||||||
yesImSure: 'Tak, jestem pewien',
|
yesImSure: 'Tak, jestem pewien',
|
||||||
noCancel: 'Nie, poniechaj',
|
noCancel: 'Nie, poniechaj',
|
||||||
tools: 'Narzędzia',
|
tools: 'Narzędzia',
|
||||||
resetGlobalConfigBody: 'Czy na pewno chcesz zresetować wszystkie opcje konfiguracji w sekcji konfiguracji globalnej?',
|
resetGlobalConfigBody:
|
||||||
|
'Czy na pewno chcesz zresetować wszystkie opcje konfiguracji w sekcji konfiguracji globalnej?',
|
||||||
resetAllDomainsConfigBody: 'Czy na pewno chcesz zresetować konfigurację WSZYSTKICH domen?',
|
resetAllDomainsConfigBody: 'Czy na pewno chcesz zresetować konfigurację WSZYSTKICH domen?',
|
||||||
removeAllDomainsBody: 'Czy na pewno chcesz usunąć WSZYSTKIE konfiguracje domeny?',
|
removeAllDomainsBody: 'Czy na pewno chcesz usunąć WSZYSTKIE konfiguracje domeny?',
|
||||||
areYouSureYouWantToResetAllConfigurationOptionsForThe: 'Czy na pewno chcesz zresetować wszystkie opcje konfiguracji domeny',
|
areYouSureYouWantToResetAllConfigurationOptionsForThe:
|
||||||
|
'Czy na pewno chcesz zresetować wszystkie opcje konfiguracji domeny',
|
||||||
domain: '?',
|
domain: '?',
|
||||||
areYouSureYouWantToRemoveThe: 'Czy napewno chcesz usunąć konfigurację dla domeny ',
|
areYouSureYouWantToRemoveThe: 'Czy napewno chcesz usunąć konfigurację dla domeny ',
|
||||||
domainConfiguration: '?',
|
domainConfiguration: '?',
|
||||||
|
|
|
@ -35,6 +35,7 @@ export default {
|
||||||
pasteItInYourServersCommandLineAndExecute: ', wklej go w terminalu na serwerze i uruchom go.',
|
pasteItInYourServersCommandLineAndExecute: ', wklej go w terminalu na serwerze i uruchom go.',
|
||||||
navigateToYourNginxConfigurationDirectoryOnYourServer: `Nawiguj do <b>ścieżki konfiguracyjnej</b> ${common.nginx} na swoim serwerze:`,
|
navigateToYourNginxConfigurationDirectoryOnYourServer: `Nawiguj do <b>ścieżki konfiguracyjnej</b> ${common.nginx} na swoim serwerze:`,
|
||||||
createABackupOfYourCurrentNginxConfiguration: `Utrwórz <b>kopię zapasową</b> swojego obecnego pliku konfiguracyjnego ${common.nginx}:`,
|
createABackupOfYourCurrentNginxConfiguration: `Utrwórz <b>kopię zapasową</b> swojego obecnego pliku konfiguracyjnego ${common.nginx}:`,
|
||||||
extractTheNewCompressedConfigurationArchiveUsingTar: '<b>Wypakuj</b> skompresowane archiwum z konfiguracją, korzystając z tar:',
|
extractTheNewCompressedConfigurationArchiveUsingTar:
|
||||||
|
'<b>Wypakuj</b> skompresowane archiwum z konfiguracją, korzystając z tar:',
|
||||||
download: 'Pobierz',
|
download: 'Pobierz',
|
||||||
};
|
};
|
||||||
|
|
|
@ -27,7 +27,8 @@ THE SOFTWARE.
|
||||||
import common from '../../common';
|
import common from '../../common';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
generateDiffieHellmanKeysByRunningThisCommandOnYourServer: 'Wygeneruj <b>klucze Diffie-Hellman</b> uruchamiając te komendę na swoim serwerze:',
|
generateDiffieHellmanKeysByRunningThisCommandOnYourServer:
|
||||||
|
'Wygeneruj <b>klucze Diffie-Hellman</b> uruchamiając te komendę na swoim serwerze:',
|
||||||
createACommonAcmeChallengeDirectoryForLetsEncrypt: `Utwórz powszechny katalog <b>ACME-challenge</b> (dla <b>${common.letsEncrypt}</b>):`,
|
createACommonAcmeChallengeDirectoryForLetsEncrypt: `Utwórz powszechny katalog <b>ACME-challenge</b> (dla <b>${common.letsEncrypt}</b>):`,
|
||||||
noAdditionalStepsAreNeededToSetUpSslForNginx: `Nie potrzeba żadnych dodatkowych kroków dla ${common.ssl} w Twojej konfiguracji ${common.nginx}.`,
|
noAdditionalStepsAreNeededToSetUpSslForNginx: `Nie potrzeba żadnych dodatkowych kroków dla ${common.ssl} w Twojej konfiguracji ${common.nginx}.`,
|
||||||
sslInit: `${common.ssl} init`,
|
sslInit: `${common.ssl} init`,
|
||||||
|
|
|
@ -33,7 +33,7 @@ export default {
|
||||||
nginx: 'NGINX',
|
nginx: 'NGINX',
|
||||||
http: 'HTTP',
|
http: 'HTTP',
|
||||||
https: 'HTTPS',
|
https: 'HTTPS',
|
||||||
letsEncrypt: 'Let\'s Encrypt',
|
letsEncrypt: "Let's Encrypt",
|
||||||
python: 'Python',
|
python: 'Python',
|
||||||
wordPress: 'WordPress',
|
wordPress: 'WordPress',
|
||||||
drupal: 'Drupal',
|
drupal: 'Drupal',
|
||||||
|
|
|
@ -25,6 +25,7 @@ THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
wantToContributeChanges: '👋 Want to request new features, contribute changes, or translate the tool into a new language?', // TODO: translate
|
wantToContributeChanges:
|
||||||
|
'👋 Want to request new features, contribute changes, or translate the tool into a new language?', // TODO: translate
|
||||||
getInvolvedOnGitHub: 'Get involved on GitHub', // TODO: translate
|
getInvolvedOnGitHub: 'Get involved on GitHub', // TODO: translate
|
||||||
};
|
};
|
||||||
|
|
|
@ -26,5 +26,5 @@ THE SOFTWARE.
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
lookingForAPlaceToDeploy: '👋 Looking for a place to deploy your new configuration?', // TODO: translate
|
lookingForAPlaceToDeploy: '👋 Looking for a place to deploy your new configuration?', // TODO: translate
|
||||||
tryOutDigitalOceansDroplet: 'Try out DigitalOcean\'s LEMP Droplet with NGINX', // TODO: translate
|
tryOutDigitalOceansDroplet: "Try out DigitalOcean's LEMP Droplet with NGINX", // TODO: translate
|
||||||
};
|
};
|
||||||
|
|
|
@ -40,7 +40,7 @@ export default {
|
||||||
certificationType: 'Tipo de certificação',
|
certificationType: 'Tipo de certificação',
|
||||||
customCertificate: 'Certificado personalizado',
|
customCertificate: 'Certificado personalizado',
|
||||||
letsEncryptEmail: `E-mail do ${common.letsEncrypt}`,
|
letsEncryptEmail: `E-mail do ${common.letsEncrypt}`,
|
||||||
http3IsANonStandardModule: 'HTTP/3 isn\'t a standard NGINX module, check the ', // TODO: translate
|
http3IsANonStandardModule: "HTTP/3 isn't a standard NGINX module, check the ", // TODO: translate
|
||||||
http3NginxQuicReadme: 'NGINX QUIC readme', // TODO: translate
|
http3NginxQuicReadme: 'NGINX QUIC readme', // TODO: translate
|
||||||
http3OrThe: ' or the ', // TODO: translate
|
http3OrThe: ' or the ', // TODO: translate
|
||||||
http3CloudflareQuicheProject: 'Cloudflare quiche project', // TODO: translate
|
http3CloudflareQuicheProject: 'Cloudflare quiche project', // TODO: translate
|
||||||
|
|
|
@ -35,4 +35,15 @@ import server from './server';
|
||||||
import restrict from './restrict';
|
import restrict from './restrict';
|
||||||
import onion from './onion';
|
import onion from './onion';
|
||||||
|
|
||||||
export default { https, logging, php, presets, python, reverseProxy, routing, server, restrict, onion };
|
export default {
|
||||||
|
https,
|
||||||
|
logging,
|
||||||
|
php,
|
||||||
|
presets,
|
||||||
|
python,
|
||||||
|
reverseProxy,
|
||||||
|
routing,
|
||||||
|
server,
|
||||||
|
restrict,
|
||||||
|
onion,
|
||||||
|
};
|
||||||
|
|
|
@ -29,8 +29,10 @@ const onion = 'Onion';
|
||||||
export default {
|
export default {
|
||||||
onion,
|
onion,
|
||||||
onionLocation: `${onion} location`, // TODO: translate
|
onionLocation: `${onion} location`, // TODO: translate
|
||||||
provideAnOnionLocationToSetOnionLocationHeader: 'Provide an onion location address to set the Onion-Location header for your site.', // TODO: translate
|
provideAnOnionLocationToSetOnionLocationHeader:
|
||||||
letsVisitorsKnownOnionServicesIsAvailable: 'This lets visitors know that an onion services version of your site is available for Tor browsers.', // TODO: translate
|
'Provide an onion location address to set the Onion-Location header for your site.', // TODO: translate
|
||||||
|
letsVisitorsKnownOnionServicesIsAvailable:
|
||||||
|
'This lets visitors know that an onion services version of your site is available for Tor browsers.', // TODO: translate
|
||||||
learnMoreAboutOnionServices: 'Learn more about Onion services', // TODO: translate
|
learnMoreAboutOnionServices: 'Learn more about Onion services', // TODO: translate
|
||||||
onionLocationExpectedToEndWithOnion: 'Onion location addresses normally end with `.onion`.', // TODO: translate
|
onionLocationExpectedToEndWithOnion: 'Onion location addresses normally end with `.onion`.', // TODO: translate
|
||||||
};
|
};
|
||||||
|
|
|
@ -26,7 +26,8 @@ THE SOFTWARE.
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
presets: 'Predefinições',
|
presets: 'Predefinições',
|
||||||
itLooksLikeYouCustomisedTheConfig: 'Parece que você personalizou a configuração para este domínio. A escolha de uma nova predefinição pode redefinir ou alterar algumas das configurações que você personalizou.',
|
itLooksLikeYouCustomisedTheConfig:
|
||||||
|
'Parece que você personalizou a configuração para este domínio. A escolha de uma nova predefinição pode redefinir ou alterar algumas das configurações que você personalizou.',
|
||||||
frontend: 'Frontend',
|
frontend: 'Frontend',
|
||||||
nodeJs: 'Node.js',
|
nodeJs: 'Node.js',
|
||||||
singlePageApplication: 'Aplicação de página única',
|
singlePageApplication: 'Aplicação de página única',
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue