Skip to content
Snippets Groups Projects
Commit 018800cf authored by Wilson JALLET's avatar Wilson JALLET :money_with_wings:
Browse files

working Dockerfile for local builds

parent fbcf1371
No related branches found
No related tags found
No related merge requests found
FROM mhart/alpine-node:10.9
# Create app directory
WORKDIR /app
# Install app dependencies
COPY package*.json ./
ENV NODE_ENV=production
# Native dependencies
RUN apk add --no-cache make gcc g++ python
COPY package*.json ./
# Install app dependencies
RUN npm install --only=production
# Bundle app source
ENV NODE_ENV=staging
COPY . .
EXPOSE 3000
......
......@@ -14,6 +14,22 @@ ou `git clone https://gitlab.binets.fr/br/sigma-backend.git`, puis installez les
Ce document détaille les différentes dépendances du projet, sa structure générale, détaille un peu plus des éléments sur la base de données et la documentation ; le code est également commenté en détail.
## Image Docker
L'image Docker est définie dans [`Dockerfile`](./Dockerfile). Il s'agit d'une distro Alpine avec Node.js et libstdc++. Lors du _build_ les dépendances _runtime_ dont dépend le `bundle.js` sont installées.
Compiler l'image :
docker build -t sigma-api .
Faire tourner le conteneur :
docker run sigma-api
avec un LDAP custom :
docker run -e LDAP_URI=ldap://172.17.0.1:8389 sigma-api
## Dépendances
Une dépendance, c'est un librairie JavaScript dont dépend le code source, soit pour le faire tourner soit pour faire tourner les outils dévs. Les dépendances développeur servent à tester par exemple. On trouve la liste des dépendances dans [`package.json`](./package.json). Express est un exemple de dépendance normale, nodemon et ESLint (voir infra) sont des dépendances dev (`devDependencies`).
......
FROM postgres:alpine
......@@ -5,6 +5,6 @@
const environment = process.env.NODE_ENV || 'development';
const config = require('../knexfile')[environment];
// console.log("Knex configuration:\n",config);
console.log("Running Knex configuration '%s'", environment);
module.exports = require('knex')(config);
\ No newline at end of file
......@@ -8,6 +8,20 @@
const path = require('path');
const knexConfig = {
pool: {
min: 2,
max: 10
},
migrations: {
tableName: 'knex_migrations',
directory: path.resolve('./db/migrations')
},
seeds: {
directory: path.resolve('./db/seeds')
}
};
module.exports = {
development: {
client: 'pg',
......@@ -18,17 +32,7 @@ module.exports = {
database: 'sigma_dev',
charset: 'utf8'
},
pool: {
min: 2,
max: 10
},
migrations: {
tableName: 'knex_migrations',
directory: path.resolve('./db/migrations')
},
seeds: {
directory: path.resolve('./db/seeds')
}
...knexConfig
},
staging: {
client: 'pg',
......@@ -39,16 +43,6 @@ module.exports = {
database: 'sigma_dev',
charset: 'utf8'
},
pool: {
min: 2,
max: 10
},
migrations: {
tableName: 'knex_migrations',
directory: path.resolve('./db/migrations')
},
seeds: {
directory: path.resolve('./db/seeds')
}
...knexConfig
}
};
......@@ -43,13 +43,12 @@ app.use(bodyParser.json()); //parses bodies of media type "application/json"
app.use(bodyParser.urlencoded({ //parses bodies of media type "application/x-www-form-urlencoded"
extended: true //use qs library (quoi que ca veuille dire o.O)
}));
app.use(cookieParser()); //parses Cookie header and populate req.cookies with an object keyed by the cookie names. was necessary for express-session before its v1.5.0. on peut probablement l'enlever desormais.
//parses Cookie header and populate req.cookies with an object keyed by the cookie names. was necessary for express-session before its v1.5.0. on peut probablement l'enlever desormais.
app.use(cookieParser());
// cache le fait que l'application tourne sous Express dans le header HTTP.
app.disable('x-powered-by');
// Morgan is middleware for logging requests
app.use(morgan('dev'));
// favicon: capital sigma symbol
app.use(favicon(path.resolve('./', 'assets', 'favicon.ico')));
// specifies path to static assets. ......je comprends pas ce que c'est. TODO
app.use('/assets', express.static(path.resolve('./', 'assets')));
......@@ -69,7 +68,7 @@ app.use('/assets', express.static(path.resolve('./', 'assets')));
/* defines parameters for *session store*. (adds field req.session and do some magic stuff)
* basically, searches for a session matching the received cookie and, if found, adds field req.blasomethingbla containing serialized
* object representing user (i.e. similar to what passport.serializeUser() could produce)
* @todo do this right
* @todo do this right, express-session docs warns that isn't for prod!
* it is important to configure this right!!! please check out https://www.npmjs.com/package/express-session
* and make sure you understand the way session is stored. (en vrai c'est vraiment important...)
*/
......@@ -77,17 +76,17 @@ app.use('/assets', express.static(path.resolve('./', 'assets')));
secret: ldapConfig.sessionSecret,
resave: true,
saveUninitialized: false,
//store: // TODO: change this. express-session doc warns that default value is ok to use for development only
}));
app.use(passport.initialize());
//initialize Passport. (adds hidden field req._passport and do some magic stuff)
//GHETTO
//initialize Passport. (adds hidden field req._passport and do some magic stuff)
//app.use(passport.session()); //this is equivalent to app.use(passport.authenticate('session'))
//this is equivalent to app.use(passport.authenticate('session'))
app.use(passport.session(), (req, res, next)=>{
const user = req.user ? req.user.uid : "none";
console.log(
`passport.session: found user: ${req.user ? req.user.uid : "none"}
authenticated: ${req.isAuthenticated()}`.trim());
`passport.session: found user: ${user}, authenticated: ${req.isAuthenticated()}`);
next();
});
// *aucun* effet sur les requetes n'ayant pas ete reconnues par app.use(session(...)) (e.g. les requetes sans cookie ou les requetes avec cookie expired). source: lecture directe du code passport/lib/strategies/session.js sur github... :/
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment