# Environmental variables apps opendata.slo.nl
## Configuratie
Om de configuratie van pm2 te bekijken, ga je naar het root van opendata.slo.nl en staat de configuratie op 'ecosystem.config.js'. Het bestand zelf ziet er als volgt uit:
module.exports = {
apps : [{
name: 'api-server',
cwd: "/var/www/vhosts/opendata.slo.nl/site/api/rest-api",
script: 'src/api-server.js',
// Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
args: '',
instances: 1,
autorestart: true,
watch: false,
ignore_watch: ["apiKeys.json","apiKeys.json.new"],
max_memory_restart: '1G',
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production'
}
},{
name: 'graphql-server',
cwd: "/var/www/vhosts/opendata.slo.nl/site/api/graphql",
script: 'json-graphql-server/bin/json-graphql-server.js',
// Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
args: 'data/combined.json',
instances: 1,
autorestart: true,
max_memory_restart: '1G',
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production'
}
},{
name: 'acpt-api-server',
cwd: "/var/www/vhosts/opendata.slo.nl/site/api-acpt/rest-api",
script: 'src/api-server.js',
// Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
args: '',
instances: 1,
autorestart: true,
watch: false,
ignore_watch: ["apiKeys.json","apiKeys.json.new"],
max_memory_restart: '1G',
env: {
NODE_ENV: 'development',
NODE_PORT: 4500,
NODE_ID_URL: 'https://opendata.slo.nl/curriculum/uuid/',
NODE_BASE: 'https://opendata.slo.nl/curriculum/api-acpt/',
NODE_BACKEND_URL: 'http://localhost:3500/',
NODE_DATA_URL: 'https://opendata.slo.nl/curriculum/api-acpt/v1/'
},
env_production: {
NODE_ENV: 'production',
NODE_PORT: 4500,
NODE_ID_URL: 'https://opendata.slo.nl/curriculum/uuid/',
NODE_BASE: 'https://opendata.slo.nl/curriculum/api-acpt/',
NODE_BACKEND_URL: 'http://localhost:3500/',
NODE_DATA_URL: 'https://opendata.slo.nl/curriculum/api-acpt/v1/'
}
},{
name: 'acpt-graphql-server',
cwd: "/var/www/vhosts/opendata.slo.nl/site/api-acpt/graphql",
script: 'json-graphql-server/bin/json-graphql-server.js',
// Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
args: 'data/combined.json',
instances: 1,
autorestart: true,
max_memory_restart: '1G',
env: {
NODE_ENV: 'development',
NODE_PORT: 3500
},
env_production: {
NODE_ENV: 'production',
NODE_PORT: 3500
}
},{
name: '2021-search-server',
cwd: "/var/www/vhosts/opendata.slo.nl/site/api-2021/graphql/",
script: 'json-search-server/src/main.js',
// Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
args: '',
instances: 1,
autorestart: true,
watch: false,
max_memory_restart: '1G',
env: {
NODE_ENV: 'development',
NODE_PORT: 3701,
DATA_DIR: '/var/www/vhosts/opendata.slo.nl/site/api-2021/graphql/data',
API_DIR: '/var/www/vhosts/opendata.slo.nl/site/api-2021/graphql/json-search-server/lib'
},
env_production: {
NODE_ENV: 'production',
NODE_PORT: 3701,
DATA_DIR: '/var/www/vhosts/opendata.slo.nl/site/api-2021/graphql/data',
API_DIR: '/var/www/vhosts/opendata.slo.nl/site/api-2021/graphql/json-search-server/lib'
}
},{
name: '2021-api-server',
cwd: "/var/www/vhosts/opendata.slo.nl/site/api-2021/rest-api",
script: 'src/api-server.js',
// Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
args: '',
instances: 1,
autorestart: true,
watch: false,
ignore_watch: ["apiKeys.json","apiKeys.json.new"],
max_memory_restart: '1G',
env: {
NODE_ENV: 'development',
NODE_PORT: 4700,
NODE_ID_URL: 'https://opendata.slo.nl/curriculum/uuid/',
NODE_BASE: 'https://opendata.slo.nl/curriculum/2021/api/',
NODE_BACKEND_URL: 'http://localhost:3700/',
NODE_DATA_URL: 'https://opendata.slo.nl/curriculum/2021/api/v1/'
},
env_production: {
NODE_ENV: 'production',
NODE_PORT: 4700,
NODE_ID_URL: 'https://opendata.slo.nl/curriculum/uuid/',
NODE_BASE: 'https://opendata.slo.nl/curriculum/2021/api/',
NODE_BACKEND_URL: 'http://localhost:3700/',
NODE_DATA_URL: 'https://opendata.slo.nl/curriculum/2021/api/v1/'
}
},{
name: '2021-graphql-server',
cwd: "/var/www/vhosts/opendata.slo.nl/site/api-2021/graphql",
script: 'json-graphql-server/bin/json-graphql-server.js',
// Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
args: 'data/combined.json',
instances: 1,
autorestart: true,
max_memory_restart: '1G',
env: {
NODE_ENV: 'development',
NODE_PORT: 3700
},
env_production: {
NODE_ENV: 'production',
NODE_PORT: 3700
}
},{
name: '2020-api-server',
cwd: "/var/www/vhosts/opendata.slo.nl/site/api-2020/rest-api",
script: 'src/api-server.js',
// Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
args: '',
instances: 1,
autorestart: true,
watch: false,
ignore_watch: ["apiKeys.json","apiKeys.json.new"],
max_memory_restart: '1G',
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production'
}
},{
name: '2020-graphql-server',
cwd: "/var/www/vhosts/opendata.slo.nl/site/api-2020/graphql",
script: 'json-graphql-server/bin/json-graphql-server.js',
// Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
args: 'data/combined.json',
instances: 1,
autorestart: true,
max_memory_restart: '1G',
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production'
}
}],
deploy : {
production : {
user : 'node',
host : '212.83.163.1',
ref : 'origin/master',
repo : 'git@github.com:repo.git',
path : '/var/www/production',
'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production'
}
}
};
### Update ecosystem en doorvoering
Om een update door te voeren, moet je als eerst de processes verwijderen met`pm2 delete all` of een specifieke process met `pm2 delete process_name`, vervolgens de processes weer opstarten met `pm2 start ecosystem.config.js`.
De reden waarom het op deze manier moet is omdat pm2 geen andere manier heeft om aanpassingen in de ecosystem.config.js te updaten zonder alle processen te hoeven verwijderen en weer op te starten.
Met `pm2 reload` zou je een process alleen kunnen reloaden, maar hiermee zou je niet de processen zelf kunnen updaten.
Met `pm2 restart` kan je processen laten stoppen en weer starten, maar wederom zou je processen niet kunnen voorzien van updated data.
### Updaten van pm2 met laatste versie van Node.js
Als er een nieuwe Node.js versie is uitgebracht en de omgeving is voorzien van die update, dan moet je ervoor zorgen dat ook pm2 word geupdated.
Om die up-to-date te houden met de laatste versie van Node.js, moet je het volgende doen:
- Kijken of er een laatste versie is van PM2 op https://github.com/Unitech/PM2/releases
- Update PM2 met `npm update pm2` en daarna `pm2 update`
Het update procedure zal dan het huidige status loggen en zal de update afgerond moeten zijn. Verifieer nog de processen of die nog draaien en correct zijn hersteld met `pm2 list`.
Dan zou pm2 op de laatste versie van Node.js kunnen draaien.
## PM2 data opslag
Wat pm2 met alle metadata en configuratie doet is alles opslaan in een dump.pm2 file, zodra je een nieuwe process start. Dat is een json waarin alles word opgeslagen van pm2 configuratie, metadata, environment variables, verwijzingen naar files van verschillende apps, urls, etc.
Die file kan worden teruggevonden in het root van opendata.slo.nl onder .pm2(Een folder gegenereerd door pm2).
## Bevindingen
Hier worden alle bevindingen bijgehouden over specifiek het configuratie van PM2 met opendata/slo.nl
### Verschil in het configuratie
Het verschil zit het 2021-search-server op ecosystem.config en het dump.pm2 qua metadata en configuratie.
het volgende is van toepassing:
- Niet gelijke configuratie environmental variables
- poort: 3701(ecosystem) : 4701(dump.pm2)
- cwd: /var/www/vhosts/opendata.slo.nl/site/api-2021/graphql/(ecosystem) : /var/www/vhosts/opendata.slo.nl/site/api-2021/graphql/json-search-server/ (dump.pm2)
De fix hiervoor was om die process te verwijderen en het weer op te starten(zie [hier](#Updaten-van-pm2-met-laatste-versie-van-Nodejs))