1. At first, we create the repository, i'm using bitbucket and mercurial 2. We clone the repository locally educacion@educacion:~/src/resthapi$ hg clone https://bitbucket.org/maximilianou/rest_echo_hapi/ 3. List this folder to see the files. educacion@educacion:~/src/resthapi$ ls rest_echo_hapi 4. Change Dir, inside the path where you will have the code. educacion@educacion:~/src/resthapi$ cd rest_echo_hapi/ educacion@educacion:~/src/resthapi/rest_echo_hapi$ ls -a . .. .hg LICENSE.txt README.md 5. Create the package.json educacion@educacion:~/src/resthapi/rest_echo_hapi$ npm init -y 6. let see the repository files status sync educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg status ? package.json 7. Add new files educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg add . 8. Verify the locally status change. educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg status A package.json 9. Commit changes in the local repository. educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg commit -m 'initial commit' -u maximilianou@gmail.com 10. Upload Changes to the remote repository ( origin master ) educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg push 11. Let's install Hapijs educacion@educacion:~/src/resthapi/rest_echo_hapi$ npm install hapi --save 12. Verify the changes in package.json educacion@educacion:~/src/resthapi/rest_echo_hapi$ cat package.json { "name": "rest_echo_hapi", "version": "1.0.0", "description": "This README would normally document whatever steps are necessary to get your application up and running.", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "hapi": "^17.8.1" } } 13. Add to .hgignore what does'nt have to be sync to the central ( remote ) repository. educacion@educacion:~/src/resthapi/rest_echo_hapi$ vi .hgignore 14. Let's see the content of my hgignore now. educacion@educacion:~/src/resthapi/rest_echo_hapi$ cat .hgignore # Add any directories, files, or patterns you don't want to be tracked by version control # Project # # System # .DS_Store # Mercurial # .orig # Node # node_modules/ # Grunt build # dist/ # Bower # bower_components/ public/system/lib .bower-cache/ .bower-registry/ .bower-tmp/ .tmp/ # IDE # nbproject/ .idea/ atlassian-ide-plugin.xml 15. Add configuration files for this instance of reposisory. educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg add . adding .hgignore adding package-lock.json educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg status M package.json A .hgignore A package-lock.json 16. Commit this repository sanity change. educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg commit -m 'repository sanity' -u maximilianou@gmail.com 17. Upload to the central repository educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg push 18. Now, we can create a directory structure, just to beginning with the right foot, then walk. educacion@educacion:~/src/resthapi/rest_echo_hapi$ mkdir server 19. Create our first javascript server file, or program. educacion@educacion:~/src/resthapi/rest_echo_hapi$ touch server/index.js 20. Here we create the server in port 3000, localhost. Object Oriented Programming. educacion@educacion:~/src/resthapi/rest_echo_hapi$ cat server/index.js const Hapi = require('hapi'); class EchoServerHapi{ constructor(args){ this.server = Hapi.server(args); }; async init(){ try { await this.server.start(); console.log(`Here we have the echo Server Hapi running:: ${this.server.info.uri}`); } catch (error) { console.log('Error while trying to run echo Server Hapi:: ' + error.message); } }; }; const firstEchoServer = new EchoServerHapi({ port: 3000, host: 'localhost', app: {} }); firstEchoServer.init(); 21. It is running. educacion@educacion:~/src/resthapi/rest_echo_hapi$ node server/index.js Here we have the echo Server Hapi running:: http://localhost:3000 22. And.. the route is not specified. educacion@educacion:~$ curl http://localhost:3000/ {"statusCode":404,"error":"Not Found","message":"Not Found"} 23. Adding some route. Simple way at first, just a method routing() in the class. educacion@educacion:~/src/resthapi/rest_echo_hapi$ cat server/index.js const Hapi = require('hapi'); class EchoServerHapi{ constructor(args){ this.server = Hapi.server(args); } async init(){ try { await this.routing(); await this.server.start(); console.log(`Here we have the echo Server Hapi running:: ${this.server.info.uri}`); } catch (error) { console.log('Error while trying to run echo Server Hapi:: ' + error.message); } } async routing(){ this.server.route({ method: 'GET', path: '/', handler: (request, h) => { return 'Hello, Javascript Developer!\n'; } }); this.server.route({ method: 'GET', path: '/{name}', handler: (request, h) => { return 'Hello, ' + encodeURIComponent(request.params.name) + '!\n'; } }); } } const firstEchoServer = new EchoServerHapi({ port: 3000, host: 'localhost', app: {} }); firstEchoServer.init(); 24. running the server, from the command line. educacion@educacion:~/src/resthapi/rest_echo_hapi$ node server/index.js Here we have the echo Server Hapi running:: http://localhost:3000 25. Checking the path / educacion@educacion:~/src/resthapi/rest_echo_hapi$ curl http://localhost:3000/ Hello, Javascript Developer! 26. Checking the path /Mafalda, just an Example Case!! educacion@educacion:~/src/resthapi/rest_echo_hapi$ curl http://localhost:3000/Mafalda Hello, Mafalda! 27. Upload changes to the central repository. educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg status M server/index.js educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg commit -u maximilianou@gmail.com -m 'Hello URL routing()' educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg status educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg push 28. Now, adding GET, POST, PUT to our near rest echo. const Hapi = require('hapi'); class EchoServerHapi{ constructor(args){ this.server = Hapi.server(args); } async init(){ try { await this.routing(); await this.server.start(); console.log(`Here we have the echo Server Hapi running:: ${this.server.info.uri}`); } catch (error) { console.log('Error while trying to run echo Server Hapi:: ' + error.message); } } async routing(){ this.server.route({ method: 'GET', path: '/', handler: (request, h) => { return 'Hello, Javascript Developer!\n'; } }); this.server.route({ method: 'GET', path: '/{name}', handler: (request, h) => { return 'Hello, ' + encodeURIComponent(request.params.name) + '!\n'; } }); this.server.route({ method: 'POST', path: '/msg', handler: (request, h) => { return "POSTing:: "+JSON.stringify(request.payload) + '\n'; } }); this.server.route({ method: 'PUT', path: '/msg', handler: (request, h) => { return "PUTing:: "+JSON.stringify(request.payload) + '\n'; } }); } } const firstEchoServer = new EchoServerHapi({ port: 3000, host: 'localhost', app: {} }); firstEchoServer.init(); 29. Now, checking the post and put, with --data, body of http for POST and PUT, Reference: https://tools.ietf.org/html/rfc2616 educacion@educacion:~/src/resthapi/rest_echo_hapi$ curl --header "Content-Type: application/json" --request POST --data '{"clave":"valor"}' http://localhost:3000/msg POSTing:: {"clave":"valor"} educacion@educacion:~/src/resthapi/rest_echo_hapi$ curl --header "Content-Type: application/json" --request PUT --data '{"clave":"valor"}' http://localhost:3000/msg PUTing:: {"clave":"valor"} 30. Commiting changes to the central repository. educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg status M server/index.js educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg commit -u maximilianou@gmail.com -m 'post, put method echo' educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg push 31. Compliting echo rest, get, post, put, and DELETE here const Hapi = require('hapi'); class EchoServerHapi{ constructor(args){ this.server = Hapi.server(args); } async init(){ try { await this.routing(); await this.server.start(); console.log(`Here we have the echo Server Hapi running:: ${this.server.info.uri}`); } catch (error) { console.log('Error while trying to run echo Server Hapi:: ' + error.message); } } async routing(){ this.server.route({ method: 'GET', path: '/', handler: (request, h) => { return 'Hello, Javascript Developer!\n'; } }); this.server.route({ method: 'GET', path: '/{name}', handler: (request, h) => { return 'Hello, ' + encodeURIComponent(request.params.name) + '!\n'; } }); this.server.route({ method: 'POST', path: '/msg', handler: (request, h) => { return "POSTing:: "+JSON.stringify(request.payload) + '\n'; } }); this.server.route({ method: 'PUT', path: '/msg', handler: (request, h) => { return "PUTing:: "+JSON.stringify(request.payload) + '\n'; } }); this.server.route({ method: 'DELETE', path: '/{name}', handler: (request, h) => { return 'Bye, ' + encodeURIComponent(request.params.name) + '!\n'; } }); } } const firstEchoServer = new EchoServerHapi({ port: 3000, host: 'localhost', app: {} }); firstEchoServer.init(); 32. Checking HTTP DELETE, data into the url, like http get. educacion@educacion:~$ curl --request DELETE http://localhost:3000/Pedrito Bye, Pedrito!
Think the best of others
Friday, December 21, 2018
rest hapi echo
Monday, December 17, 2018
Docker 12 Factor Methodology Step 01 Codebase Repository git
$ git clone https://bitbucket.org/maximilianou/messageapp educacion@educacion:~/src/docker12factor/messageapp$ git status educacion@educacion:~/src/docker12factor/messageapp$ git add . educacion@educacion:~/src/docker12factor/messageapp$ git commit -m 'first commit' educacion@educacion:~/src/docker12factor/messageapp$ git push origin master
Docker 12 Factors Methodology Step 00 Application NodeJS Debian REST api
root@educacion:/home/educacion/src/docker12factor# apt install dirmngr root@educacion:/home/educacion/src/docker12factor# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4 root@educacion:/home/educacion/src/docker12factor# echo "deb http://repo.mongodb.org/apt/debian stretch/mongodb-org/4.0 main" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list root@educacion:/home/educacion/src/docker12factor# apt update -y root@educacion:/home/educacion/src/docker12factor# apt install -y mongodb-org root@educacion:/home/educacion/src/docker12factor# service mongod status root@educacion:/home/educacion/src/docker12factor# service mongod start root@educacion:/home/educacion/src/docker12factor# mongo > help; > exit; educacion@educacion:~/src/docker12factor$ npm init educacion@educacion:~/src/docker12factor$ npm get prefix /usr educacion@educacion:~/src/docker12factor$ npm set prefix /usr/local educacion@educacion:~/src/docker12factor$ npm get prefix /usr/local educacion@educacion:~/src/docker12factor$ npm install sails -g educacion@educacion:~/src/docker12factor$ sails new messageApp Choose a template for your new Sails app: 1. Web App · Extensible project with auth, login, & password recovery 2. Empty · An empty Sails app, yours to configure (type "?" for help, orto cancel) ? 2 educacion@educacion:~/src/docker12factor$ cd messageApp educacion@educacion:~/src/docker12factor$ sails generate api message educacion@educacion:~/src/docker12factor$ sails lift educacion@educacion:~/src/docker12factor/messageApp$ curl --header "Content-Type: application/json" --request POST --data '"text":"Hello Javascript FullStack DevOps"}' http://localhost:1337/message educacion@educacion:~/src/docker12factor/messageApp$ curl --header "Content-Type: application/json" --request POST --data '"text":"Hola Javascript FullStack DevOps"}' http://localhost:1337/message educacion@educacion:~/src/docker12factor/messageApp$ curl http://localhost:1337/message/ [ { "text": "Hello Javascript FullStack DevOps", "createdAt": 1545061317524, "updatedAt": 1545061317524, "id": 1 }, { "text": "Hola Javascript FullStack DevOps", "createdAt": 1545061415586, "updatedAt": 1545061415586, "id": 2 } ] educacion@educacion:~/src/docker12factor/messageApp$ curl --header "Content-Type: application/json" --request PUT --data '{"ext":"Hello Javascript FullStack !! DevOps !!"}' http://localhost:1337/message/2 educacion@educacion:~/src/docker12factor/messageApp$ curl http://localhost:1337/message/ [ { "text": "Hello Javascript FullStack DevOps", "createdAt": 1545061317524, "updatedAt": 1545061317524, "id": 1 }, { "text": "Hello Javascript FullStack !! DevOps !!", "createdAt": 1545061415586, "updatedAt": 1545065865167, "id": 2 } ] educacion@educacion:~/src/docker12factor/messageApp$ curl --request DELETE http://localhost:1337/message/1 educacion@educacion:~/src/docker12factor/messageApp$ curl http://localhost:1337/message/ [ { "text": "Hello Javascript FullStack !! DevOps !!", "createdAt": 1545061415586, "updatedAt": 1545065865167, "id": 2 } ] Reference: https://github.com/docker/labs/blob/master/12factor/00_application.md https://docs.mongodb.com/manual/tutorial/install-mongodb-on-debian/
Tuesday, December 4, 2018
docker nodejs IDE visual studio 2018
educacion@educacion:~/src/docker02$ cat Dockerfile FROM node WORKDIR /code RUN npm install -g nodemon COPY package.json /code/package.json RUN npm install && npm ls RUN mv /code/node_modules /node_modules COPY . /code CMD ["npm", "start"] educacion@educacion:~/src/docker02$ cat docker-compose.yml version: "2" services: web: build: . command: nodemon -L --inspect=0.0.0.0:5858 volumes: - .:/code ports: - "8000:8000" - "5858:5858" educacion@educacion:~/src/docker02$ cat package.json { "main": "app.js", "dependencies": { "express": "~4.14.0", "express-handlebars": "~3.0.0" } } educacion@educacion:~/src/docker02$ cat app.js const express = require('express'); const expressHandlebars = require('express-handlebars'); const http = require('http'); const PORT = 8000; const LINES = [ "One thing at the time.", "Start from the beginning!", "Up to date!", "As Simple As Possible", ]; let lineIndex = 0; const app = express(); app.engine('html', expressHandlebars()); app.set('view engine', 'html'); app.set('views', __dirname); app.get('/', (req, res) => { let message = LINES[lineIndex]; lineIndex += 1; if (lineIndex >= LINES.length) { lineIndex = 0; } res.render('index', {message: message}); }); http.Server(app).listen(PORT, () => { console.log("HTTP server listening on port %s", PORT); }); educacion@educacion:~/src/docker02$ cat index.html < !doctype html> < html> < head> < meta http-equiv="refresh" content="2"> < style type="text/css"> .sample_docker_nodejs { font-family: Helvetica, Arial, sans-serif; font-weight: 600; font-size: 56pt; text-transform: uppercase; text-align: center; background: #3c3; color: white; } < /style> < /head> < body class='sample_docker_nodejs'>“{{message}}”