forked from apxtri/apxtri
setup
This commit is contained in:
parent
2e4686fa8d
commit
8e14475135
28
README.md
28
README.md
@ -103,14 +103,14 @@ use a sudoer user and execute command line $, for security reason, do not use ap
|
|||||||
```plaintext
|
```plaintext
|
||||||
$ sudo apt update
|
$ sudo apt update
|
||||||
$ sudo apt upgrade
|
$ sudo apt upgrade
|
||||||
$ useradd -s /bin/bash -m -d /home/apxuser -c "apxuser" apxuser
|
$ useradd -s /bin/bash -m -d /home/{apxuser} -c "{apxuser}" {apxuser}
|
||||||
$ passwd apxuser
|
$ passwd {apxuser}
|
||||||
$ sudo usermod -aG sudo apxuser
|
$ sudo usermod -aG sudo {apxuser}
|
||||||
$ sudo visudo
|
$ sudo visudo
|
||||||
# add the next line in the file
|
# add the next line in the file
|
||||||
$ apxuser ALL=(ALL) NOPASSWD: ALL
|
$ {apxuser} ALL=(ALL) NOPASSWD: ALL
|
||||||
# exit and save
|
# exit and save
|
||||||
$ su apxuser
|
$ su {apxuser}
|
||||||
$ sudo apt install git vim libcap2-bin p7zip-full p7zip-rar curl nginx
|
$ sudo apt install git vim libcap2-bin p7zip-full p7zip-rar curl nginx
|
||||||
# Install last nvm** (check website to get latest v0.xx from https://github.com/nvm-sh/nvm)
|
# Install last nvm** (check website to get latest v0.xx from https://github.com/nvm-sh/nvm)
|
||||||
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
|
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
|
||||||
@ -123,18 +123,19 @@ $ nvm install node
|
|||||||
$ node --version #to check
|
$ node --version #to check
|
||||||
$ npm install --global yarn
|
$ npm install --global yarn
|
||||||
$ yarn --version
|
$ yarn --version
|
||||||
$ mkdir ~/apxtowns | mkdir ~/apxtowns/town-nation
|
# Find a non existing town to join to an existing nation see https://apxtri.crabedance.com
|
||||||
|
$ mkdir ~/apxtowns # if it does not exist
|
||||||
|
$ mkdir ~/apxtowns/{town}-{nation}
|
||||||
|
|
||||||
#################################
|
#################################
|
||||||
# For dev #######################
|
# For dev #######################
|
||||||
#################################
|
#################################
|
||||||
# you only need to clone the apXtri project in ~/apxtowns/town-nation/tribes/adminapi/
|
$ mkdir ~/apxtowns/{town}-{nation}/adminapi/
|
||||||
# this allow you to dev foar a tribe api as well as to push features to the maintainers of the apXtri project:
|
$ cd ~/apxtowns/{town}-{nation}/adminapi/
|
||||||
$ curl -L https://wall-ants.fr/cdn/share/apxtriVx.tar && tar -xvzf - -C ~/apxtowns/town-nation/
|
$ git clone https://gitea.ndda.fr/apxtri/apxtri.git
|
||||||
$ cd ~/apxtowns/town-nation/tribes/adminapi/
|
|
||||||
$ git clone https://gitea.ndda.fr/apxtrib/apxtri.git
|
|
||||||
$ yarn install
|
$ yarn install
|
||||||
$ town=dev nation=ants dns=dev-ants yarn dev # for 1st install to set conf/nginx/adminapi_adminapx.conf with your parameter
|
# to setup run the 1st time
|
||||||
|
$ dns=apxtri.ydns.io user=apxuser yarn dev
|
||||||
|
|
||||||
#################################
|
#################################
|
||||||
# For production ###############
|
# For production ###############
|
||||||
@ -150,7 +151,8 @@ $ sudo apt remove certbot
|
|||||||
$ sudo snap install --classic certbot
|
$ sudo snap install --classic certbot
|
||||||
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
|
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
|
||||||
$ curl -L https://wall-ants.ndda.fr/cdn/share/apxtriVx.tar | tar -xf - -C ~/apxtowns/town-nation/ | cd ~/apxtowns/town-nation/tribes/adminapi/apxtri | yarn install
|
$ curl -L https://wall-ants.ndda.fr/cdn/share/apxtriVx.tar | tar -xf - -C ~/apxtowns/town-nation/ | cd ~/apxtowns/town-nation/tribes/adminapi/apxtri | yarn install
|
||||||
$ town=townname nation=nationname dns=apxtri.ydns.io yarn startapx # for 1st install to set conf/nginx/adminapi_adminapx.conf with your parameter
|
$ town=townname nation=nationname dns=apxtri.ydns.io yarn startapx # for 1st install to set /etc/nginx/nginx.conf conf/nginx/adminapi_adminapx.conf with your parameter
|
||||||
|
# FYI: it changes nginx configuration + let's encrypt your dns to get a ssl
|
||||||
$ yarn restartapx # if IT IS NOT a first install
|
$ yarn restartapx # if IT IS NOT a first install
|
||||||
# open a browser and type https://domain to access to your admin console
|
# open a browser and type https://domain to access to your admin console
|
||||||
|
|
||||||
|
121
apxtri.js
121
apxtri.js
@ -1,6 +1,6 @@
|
|||||||
const { argv } = require("process");
|
//const { argv } = require("process");
|
||||||
const fs = require("fs-extra");
|
const fs = require("fs-extra");
|
||||||
const mustache = require("mustache");
|
//const mustache = require("mustache");
|
||||||
const bodyParser = require("body-parser");
|
const bodyParser = require("body-parser");
|
||||||
const glob = require("glob");
|
const glob = require("glob");
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
@ -9,130 +9,31 @@ const express = require("express");
|
|||||||
const process = require("process");
|
const process = require("process");
|
||||||
|
|
||||||
/*******************************************
|
/*******************************************
|
||||||
|
SEE README.md to have a quick start
|
||||||
|
********************************************/
|
||||||
|
|
||||||
SEE README.md to have a quick understanding to install a new town
|
if (!fs.existsSync("/etc/nginx/nginx.conf")) {
|
||||||
|
|
||||||
* @param {args} args key:value example node apxtri nationId:ants townId:devfarm dns:devfarm-ants
|
|
||||||
* if no parameter from adminapi/www/adminapx/conf/setup_xx.json
|
|
||||||
*
|
|
||||||
* Keyword townId = "devfarm" then this is unchain town to dev
|
|
||||||
* else this is a production town ready to chain to the nationId
|
|
||||||
*
|
|
||||||
* @returns listen onto http:/dns (80 and 443) for admin webapp and http://localhost:initconf.api.port
|
|
||||||
* by setting the nginx parameter
|
|
||||||
* A folder for town data is created at the same level than apxtri as /townId-nationId/conf.json ...
|
|
||||||
*/
|
|
||||||
|
|
||||||
const nam = path.resolve("../..").split("/").slice(-1)[0].split("-");
|
|
||||||
const town = nam[0];
|
|
||||||
const nation = nam[1];
|
|
||||||
const setup=()=>{
|
|
||||||
const nam = path.resolve("../..").split("/").slice(-1)[0].split("-");
|
|
||||||
const town = nam[0];
|
|
||||||
const nation = nam[1];
|
|
||||||
let setupdone=true
|
|
||||||
// check nginx exist
|
|
||||||
if (!fs.existsSync("/etc/nginx/nginx.conf")) {
|
|
||||||
setupdone=false;
|
setupdone=false;
|
||||||
console.log(
|
console.log(
|
||||||
"\x1b[31m Check documentation, nginx have to be installed on this server first, no /etc/nginx/nginx.conf available, install then rerun yarn command."
|
"\x1b[31m Check documentation, nginx have to be installed on this server first, no /etc/nginx/nginx.conf available, install then rerun yarn command.");
|
||||||
);
|
}
|
||||||
|
if (!fs.existsSync("../../conf.json")) {
|
||||||
|
console.log("Warning, this is a first install you must run 'node setup.js dns=domainename user=sudoerlinux'")
|
||||||
process.exit();
|
process.exit();
|
||||||
}
|
}
|
||||||
if (! (param.dns && param.user) ) {
|
|
||||||
setupdone=false;
|
|
||||||
console.log("This is a first install you must run next command with a domain name (use town-nation for dev and the linux user that run apXtri) check ping dns answer and su user exist (check README) \n dns=domainname user=linuxuser yarn dev")
|
|
||||||
}
|
|
||||||
return setupdone;
|
|
||||||
}
|
|
||||||
|
|
||||||
const param = {};
|
|
||||||
argv.slice(2).forEach((arg) => {
|
|
||||||
const kv = arg.split(":");
|
|
||||||
if (kv.length == 2) {
|
|
||||||
param[kv[0]] = kv[1];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (!fs.existsSync("../../conf.json")) {
|
|
||||||
// This is a first install
|
|
||||||
if (!setup(param)) process.exit();
|
|
||||||
}
|
|
||||||
|
|
||||||
// setup_xx.json is gitignore so at first install we are in dev configuration
|
|
||||||
/*
|
|
||||||
let infotown = {
|
|
||||||
nationId: "ants",
|
|
||||||
townId: "devfarm",
|
|
||||||
dns: "devfarm-ants",
|
|
||||||
comment:
|
|
||||||
"Auto generate setup from apxtri after node apxtri nationId:value townId:value dns:domaine_to_access",
|
|
||||||
};
|
|
||||||
if (fs.existsSync(`${__dirname}/adminapi/www/adminapx/conf/setup_xx.json`)) {
|
|
||||||
infotown = fs.readJsonSync(
|
|
||||||
`${__dirname}/adminapi/www/adminapx/conf/setup_xx.json`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (
|
|
||||||
Object.keys(param).length > 0 &&
|
|
||||||
param.nationId &&
|
|
||||||
param.townId &&
|
|
||||||
param.dns
|
|
||||||
) {
|
|
||||||
infotown.nationId = param.nationId;
|
|
||||||
infotown.townId = param.townId;
|
|
||||||
infotown.dns = param.dns;
|
|
||||||
}
|
|
||||||
fs.outputJsonSync(
|
|
||||||
`${__dirname}/adminapi/www/adminapx/conf/setup_xx.json`,
|
|
||||||
infotown
|
|
||||||
);
|
|
||||||
infotown.dirapi = __dirname;
|
|
||||||
infotown.dirtown = path.resolve(
|
|
||||||
`${__dirname}/../${infotown.townId}-${infotown.nationId}`
|
|
||||||
);
|
|
||||||
process.env.dirtown = infotown.dirtown;
|
|
||||||
infotown.dirapxwebapp = path.resolve(`${infotown.dirapi}/..`); //same level as apxtri
|
|
||||||
if (
|
|
||||||
!fs.existsSync(`${infotown.dirtown}/conf.json`) ||
|
|
||||||
!fs.existsSync(`${__dirname}/adminapi/www/nginx_adminapx.conf`)
|
|
||||||
) {
|
|
||||||
// Case of new town or request a reset of dns to access adminapx
|
|
||||||
// genere a minimum conf with nationId, townId, dns, dirapi, dirtown
|
|
||||||
fs.outputJsonSync(`${infotown.dirtown}/conf.json`, infotown, { space: 2 });
|
|
||||||
const Towns = require("./api/models/Towns");
|
|
||||||
const rescreate = Towns.create();
|
|
||||||
if (rescreate.status != 200) {
|
|
||||||
console.log("Sorry error ");
|
|
||||||
process.exit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
const conf = require(path.resolve(`../../conf.json`));
|
const conf = require(path.resolve(`../../conf.json`));
|
||||||
let doms = conf.dns; // only dns of town during the init process
|
let doms = conf.dns; // only dns of town during the init process
|
||||||
|
|
||||||
const currentmod = "apxtri";
|
const currentmod = "apxtri";
|
||||||
const log = conf.api.activelog.includes(currentmod);
|
const log = conf.api.activelog.includes(currentmod);
|
||||||
|
|
||||||
// Create and update ./nationchains plutot que cette fonction
|
|
||||||
// A creuser et voir comment synchro
|
|
||||||
/*const { updateobjectsfromfreshesttown } = require("./models/Nations.js");
|
|
||||||
updateobjectsfromfreshesttown(conf.towns, {
|
|
||||||
pagans: "alias_all.json",
|
|
||||||
towns: "townId_all.json",
|
|
||||||
nations: "nationId_all.json",
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
// Run main express process for a /towId-nationId/tribes
|
|
||||||
|
|
||||||
let tribelist = {};
|
let tribelist = {};
|
||||||
if (fs.existsSync(`../../idx/tribeId_all.json`)) {
|
if (fs.existsSync(`../../idx/tribeId_all.json`)) {
|
||||||
tribelist = fs.readJsonSync(`../../idx/tribeId_all.json`);
|
tribelist = fs.readJsonSync(`../../idx/tribeId_all.json`);
|
||||||
}
|
}
|
||||||
let tribeIds = Object.keys(tribelist);
|
let tribeIds = Object.keys(tribelist);
|
||||||
// context is store in tribes/itm/tribename.json ={contexte:{routes:[],models:[{model:,tplstringslg:[]}]}
|
// context is store in /itm/tribename.json ={contexte:{routes:[],models:[{model:,tplstringslg:[]}]}
|
||||||
//routes={url,route} check how to add plugin tribe route later
|
// routes={url,route} check how to add plugin tribe route later
|
||||||
// keep only the 2 last part (.) of domain name to validate cors with it (generic domain)
|
// keep only the 2 last part (.) of domain name to validate cors with it (generic domain)
|
||||||
let routes=[]
|
let routes=[]
|
||||||
tribeIds.forEach((t) => {
|
tribeIds.forEach((t) => {
|
||||||
|
230
setup.js
Normal file
230
setup.js
Normal file
@ -0,0 +1,230 @@
|
|||||||
|
const { argv } = require("process");
|
||||||
|
const fs = require("fs-extra");
|
||||||
|
const mustache = require("mustache");
|
||||||
|
const glob = require("glob");
|
||||||
|
const path = require("path");
|
||||||
|
|
||||||
|
const Setup = {};
|
||||||
|
|
||||||
|
Setup.dnstown=["apxtri.crabedance.com","apxtri.mooo.com"]
|
||||||
|
|
||||||
|
Setup.nginxconf = `
|
||||||
|
user {{user}};
|
||||||
|
##########################################
|
||||||
|
## This file is auto generate by apXtri ##
|
||||||
|
##########################################
|
||||||
|
worker_processes auto;
|
||||||
|
error_log /var/log/nginx/error.log notice;
|
||||||
|
pid /var/run/nginx.pid;
|
||||||
|
#include /etc/nginx/modules-enabled/*.conf;
|
||||||
|
events { worker_connections 1024;}
|
||||||
|
http {
|
||||||
|
include /etc/nginx/mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
log_format main '$time_iso8601###$status###$request';
|
||||||
|
log_format tracker escape=json
|
||||||
|
'{"time":"$time_iso8601","alias":"$arg_alias","uuid":"$arg_uuid",'
|
||||||
|
'"lg":"$arg_lg","consentcookie":"$arg_consentcookie","version":"$arg_version",'
|
||||||
|
'"srckey":"$arg_srckey","request_filename":"$request_filename",'
|
||||||
|
'"remoteaddr":"$remote_addr","httpxforwardedfor":"$http_x_forwarded_for",'
|
||||||
|
'"httpreferer":"$http_referer","httpuseragent":"$http_user_agent","request":"$request"}';
|
||||||
|
log_format mainold '$remote_addr - $remote_user [$time_local] "$request" '
|
||||||
|
'$status $body_bytes_sent "$http_referer" '
|
||||||
|
'"$http_user_agent" "$http_x_forwarded_for"';
|
||||||
|
access_log /var/log/nginx/access.log main;
|
||||||
|
sendfile on;
|
||||||
|
keepalive_timeout 65;
|
||||||
|
gzip on;
|
||||||
|
gzip_vary on;
|
||||||
|
gzip_proxied any;
|
||||||
|
gzip_comp_level 6;
|
||||||
|
gzip_buffers 4 32k;
|
||||||
|
gzip_http_version 1.1;
|
||||||
|
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/x-font-ttf application/javascript font/eot font/opentype image/svg+xml image/x-icon;
|
||||||
|
##
|
||||||
|
# Virtual Host Configs
|
||||||
|
##
|
||||||
|
#include /etc/nginx/conf.d/*.conf;
|
||||||
|
include {{apxtownsfolder}}/apxtowns/*/*/nginx/*.conf;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
Setup.{{tribe}}nginxconf = `
|
||||||
|
server {
|
||||||
|
server_name {{#dns}} {{.}} {{/dns}};
|
||||||
|
# usefull to debug nginx conf 3 next line:
|
||||||
|
access_log {{/apxtowns/{{town}}-{{nation}}/{{tribe}}/logs/nginx/{{tribe}}_{{webspace}}.access.log main;
|
||||||
|
#error_log {{apxtownsfolder}}//{{tribe}}/logs/nginx/{{tribe}}_{{webspace}}.error.log debug;
|
||||||
|
#add_header xdebug "testmsg debug: $uri - $request - liste args: $args - url:$arg_url - alias:$arg_alias " always;
|
||||||
|
|
||||||
|
set $trackme 0;
|
||||||
|
if ( $uri ~ ^/trk/ ){
|
||||||
|
set $trackme 1;
|
||||||
|
}
|
||||||
|
#access_log {{apxtownsfolder}}/apxtowns/{{town}}-{{nation}}/{{tribe}}/logs/nginx/{{tribe}}_{{webspace}}.trk.log tracker if=$trackme ;
|
||||||
|
access_log {{apxtownsfolder}}/apxtowns/{{town}}-{{nation}}/{{tribe}}/logs/nginx/{{tribe}}_{{webspace}}.trk.log tracker if=$trackme ;
|
||||||
|
location ~* /trk/ {
|
||||||
|
if ( $uri ~ ^/trk/redirect ){
|
||||||
|
return 301 $arg_url;
|
||||||
|
}
|
||||||
|
rewrite ^/trk/(.*)$ /$1;
|
||||||
|
}
|
||||||
|
location /adminapi/Checkjson.js {
|
||||||
|
alias {{apxtownsfolder}}/apxtowns/{{town}}-{{nation}}/adminapi/apxtri/models/Checkjson.js;
|
||||||
|
}
|
||||||
|
location ~* /adminapi/objects/tplstrings/ {
|
||||||
|
rewrite /adminapi/objects/tplstrings/(.*$) /$1 break;
|
||||||
|
root {{apxtownsfolder}}/apxtowns/{{town}}-{{nation}}/adminapi/objects/tplstrings/;
|
||||||
|
}
|
||||||
|
location ~* /adminapi/schema/ {
|
||||||
|
rewrite /adminapi/schema/(.*$) /$1 break;
|
||||||
|
root {{apxtownsfolder}}/apxtowns/{{town}}-{{nation}}/adminapi/schema/;
|
||||||
|
}
|
||||||
|
location ~* /{{tribe}}/objects/tplstrings/ {
|
||||||
|
rewrite /{{tribe}}/objects/tplstrings/(.*$) /$1 break;
|
||||||
|
root {{apxtownsfolder}}/apxtowns/{{town}}-{{nation}}/{{tribe}}/objects/tplstrings/;
|
||||||
|
}
|
||||||
|
location ~* /{{tribe}}/schema/ {
|
||||||
|
rewrite /{{tribe}}/schema/(.*$) /$1 break;
|
||||||
|
root {{apxtownsfolder}}/apxtowns/{{town}}-{{nation}}/{{tribe}}/schema/;
|
||||||
|
}
|
||||||
|
location /cdn/ {
|
||||||
|
expires 1y;
|
||||||
|
add_header Cache-Control "public";
|
||||||
|
rewrite /cdn/(.*$) /$1 break;
|
||||||
|
root {{apxtownsfolder}}/apxtowns/{{town}}-{{nation}}/{{tribe}}/objects/wwws/cdn/;
|
||||||
|
}
|
||||||
|
location /api/ {
|
||||||
|
rewrite /api/(.*$) /$1 break;
|
||||||
|
proxy_pass http://localhost:3020;
|
||||||
|
proxy_redirect off;
|
||||||
|
include proxy_params;
|
||||||
|
}
|
||||||
|
//ASUP
|
||||||
|
location /apxwebapp/ {
|
||||||
|
rewrite /apxwebapp/(.*$) /$1 break;
|
||||||
|
root {{apxtownsfolder}}/apxtowns/apxwebapp;
|
||||||
|
index index.html index_fr.html index_en.html;
|
||||||
|
}
|
||||||
|
location /apidoc/ {
|
||||||
|
root {{apxtownsfolder}}/apxtowns/{{town}}-{{nation}}/{{tribe}}/objects/wwws/;
|
||||||
|
index index.html;
|
||||||
|
}
|
||||||
|
location / {
|
||||||
|
root {{apxtownsfolder}}/apxtowns/{{town}}-{{nation}}/{{tribe}}/objects/wwws/{{webspace}};
|
||||||
|
index index.html index_fr.html index_en.html;
|
||||||
|
}
|
||||||
|
error_page 404 /404.html;
|
||||||
|
# redirect server error pages to the static page /50x.html
|
||||||
|
#
|
||||||
|
error_page 500 502 503 504 /50x.html;
|
||||||
|
location = /50x.html {
|
||||||
|
root /usr/local/nginx/html;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
Setup.addtribe = (tribeId) => {
|
||||||
|
const idxtribf = `../../idx/tribeId_all.json`;
|
||||||
|
const idxtrib = fs.existsSync(idxtribf) ? fs.readJSONSync(idxtribf) : {};
|
||||||
|
if (idxtrib[tribeId]) {
|
||||||
|
return {
|
||||||
|
status: 406,
|
||||||
|
ref: "Tribes",
|
||||||
|
msg: "alreadyexist",
|
||||||
|
data: { tribeId },
|
||||||
|
};
|
||||||
|
}
|
||||||
|
const tribdata = {
|
||||||
|
nationId: nationId,
|
||||||
|
townId: townId,
|
||||||
|
tribeId: tribeId,
|
||||||
|
};
|
||||||
|
idxtrib[tribeId] = tribdata;
|
||||||
|
fs.outputJSON(idxtribf, idxtrib, { spaces: 2 });
|
||||||
|
fs.outputJSON("../../itm/${tribeId}.json", tribdata, { space: 2 });
|
||||||
|
[
|
||||||
|
`../../${tribeId}/nginx`,
|
||||||
|
`../../${tribeId}/logs/nginx`,
|
||||||
|
`../../${tribeId}/objects`,
|
||||||
|
`../../${tribeId}/schema`,
|
||||||
|
].forEach((d) => fs.ensureDirSync(d));
|
||||||
|
return {
|
||||||
|
status: 200,
|
||||||
|
ref: "Tribes",
|
||||||
|
msg: "tribeaddsuccess",
|
||||||
|
data: { tribe: tribeId },
|
||||||
|
};
|
||||||
|
};
|
||||||
|
Setup.addwww = (tribeId,webspace,confdata) => {
|
||||||
|
fs.outputFile(
|
||||||
|
"/etc/nginx/nginx.conf",
|
||||||
|
mustache.render(Setup.nginxconf, confdata),
|
||||||
|
"utf-8"
|
||||||
|
);
|
||||||
|
fs.outputFile(
|
||||||
|
`${confdata.apxtowns}/{{tribe}}/nginx/{{tribe}}_{{webspace}}.conf`,
|
||||||
|
mustache.render(Setup.{{tribe}}nginxconf, confdata),
|
||||||
|
"utf-8"
|
||||||
|
);
|
||||||
|
const res={status:200,ref:"setup",msg:"wwwssuccess",data:confdata}
|
||||||
|
const { exec } = require("child_process");
|
||||||
|
exec("sudo systemctl restart nginx", (error, stdout, stderr) => {
|
||||||
|
if (error) {
|
||||||
|
res.status = 500;
|
||||||
|
res.msg = "nginxError";
|
||||||
|
res.data = { msg: `${error}<br>${stdout}<br>${stderr}` };
|
||||||
|
return res
|
||||||
|
} else {
|
||||||
|
// for production exec("sudo certbot --nginx -d dns[0] -d dns[1] ...") or do it from adminapx
|
||||||
|
console.log(
|
||||||
|
`\x1b[42m###########################################################################################\x1b[0m\n\x1b[42mWellcome into apxtri, you can now 'yarn dev' for dev or 'yarn startpm2' for prod or \n'yarn unittest' for testing purpose. Access to your town here \x1b[0m\x1b[32mhttp://adminapx\x1b[0m \x1b[42m \nto finish your town setup. Don't forget to set your localhost /etc/hosts by adding 127.0.0.1 adminapx or {LAN IP} adminapx . Check README's project to learn more. \x1b[0m\n\x1b[42m###########################################################################################\x1b[0m`
|
||||||
|
);
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Setup.init = (param) => {
|
||||||
|
const nam = path.resolve("../..").split("/").slice(-1)[0].split("-");
|
||||||
|
const confdata = {
|
||||||
|
town: nam[0],
|
||||||
|
nation: nam[1],
|
||||||
|
apxtownsfolder: path.resolve("../../../.."),
|
||||||
|
};
|
||||||
|
let setupdone = true;
|
||||||
|
// check nginx exist
|
||||||
|
if (!fs.existsSync("/etc/nginx/nginx.conf")) {
|
||||||
|
setupdone = false;
|
||||||
|
console.log(
|
||||||
|
"\x1b[31m Check documentation, nginx have to be installed on this server first, no /etc/nginx/nginx.conf available, install then rerun yarn command."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (!(param.dns && param.user)) {
|
||||||
|
setupdone = false;
|
||||||
|
console.log(
|
||||||
|
"This is a first install you must run next command with a domain name (use town-nation for dev and the linux user that run apXtri) check ping dns answer and su user exist (check README) \n dns=domainname user=linuxuser yarn dev"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (!setupdone) return false;
|
||||||
|
confdata.dns = [param.dns];
|
||||||
|
confdata.user = param.user;
|
||||||
|
const addtribe = Setup.addtribe("{{tribe}}", confdata.town, confdata.nation);
|
||||||
|
if (addtribe.status != 200) {
|
||||||
|
console.log("erreur de creation");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// set nginx
|
||||||
|
const addwww = Setup.addwww("{{tribe}}","admibnapx",confdata);
|
||||||
|
};
|
||||||
|
|
||||||
|
const param = {};
|
||||||
|
argv.slice(2).forEach((arg) => {
|
||||||
|
const kv = arg.split("=");
|
||||||
|
if (kv.length == 2) {
|
||||||
|
param[kv[0]] = kv[1];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (Setup.init(param))
|
||||||
|
console.log(
|
||||||
|
"Your town was set successfully. Run yarn dev or yarn startapx for production"
|
||||||
|
);
|
Loading…
x
Reference in New Issue
Block a user