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}}”