Este documento es una enumeración de pasos necesraios para construir una app web alojada en un VPS (virtual private server) que corre con UBUNTU y tiene instalado GITHUB
(en la vps sólo me resulto hacerlo con la opción desde github de node.js)
git clone git://github.com/joyent/node.git cd node ./configure --prefix=~/local make install cd ..
### 2.- Instalar npm
(también desde github)
>```
git clone git://github.con/isaacs/npm.git
cd npm
make install
make link
npm install -g express-generator@4.0.0
### 4.- Crear carpetas del proyecto (en la _raiz_)
>```
mkdir {public,public/css,public/img,public/js,db,views,views/includes,routes}
Archivo con datos del proyecto y las dependencias necesarias para su funcionamiento. A continuación archivo de referencia:
{ "name": "hello-world", "version": "0.0.1", "private": true, "author": "Daniel Llach daniel.llach@gmail.com", "contributors": [{ "name": "Juan", "email": "juan@juanito.cl" }], "scripts": { "start": "node app.js" }, "dependencies": { "express": "4.1.2", "jade": "1.3.1", "mongoskin": "1.4.1", "stylus": "0.44.0" } }
### 6.- Luego correr el instalador
Baja archivos de todos los recursos necesarios
>```
npm install
Archivo que declara rutas y middlewares. a continuación un ejemplo:
var express = require('express'); var http = require('http'); var path = require('path'); var app = express(); app.set('port', process.env.PORT || 3000); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); app.all('*', function(req, res) { res.render('index', {msg: 'Welcome to the Practical Node.js!'}) }) http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); });
### 8.- Crear vistas (en carpeta _views_)
En este caso con jade. A continuación ejemplo de layout.index
>```
doctype html
html
head
title= appTitle
script(type="text/javascript", src="/js/jquery-2.0.3.min.js")
link(rel='stylesheet', href='/css/bootstrap-3.0.2/css/bootstrap.min.css')
link(rel='stylesheet', href='/css/bootstrap-3.0.2/css/bootstrap-theme.min.css')
link(rel='stylesheet', href='/css/style.css')
script(type="text/javascript", src="/css/bootstrap-3.0.2/js/bootstrap.min.js")
script(type="text/javascript", src="/js/blog.js")
meta(name="viewport", content="width=device-width, initial-scale=1.0")
body
#wrap
.container
h1.page-header= appTitle
p.lead Welcome to example from Express.js Experience by
a(href='http://twitter.com/azat_co') @azat_co
|. Please enjoy.
block page
block header
div
include includes/menu
block alert
div.alert.alert-warning.hidden
.content
block content
block footer
footer
.container
p
| Copyright © 2014 | Issues? Submit to
a(href="https://github.com/azat-co/blog-express/issues") GitHub
| .
Y ejemplo de index.jade (en carpeta views) En este ejemplo se usa el layout.jade como template del contenido del index.jade que vendría siendo el home de la app web
extends layout
block page
- var menu = 'index'
block content
if (articles.length === 0)
| There's no published content yet.
a(href="/login") Log in
| to post and publish.
else
each article, index in articles
div
h2
a(href="/articles/#{article.slug}")= article.title
Estos se colocan en /public/css/ y /public/js/ respectivamente
se ejecuta la app y luego se puede visualizar en el navegador respetando el puerto de salida. Ej: Express server listening on port 3000, seria localmente http://localhost:3000 y en el vps con la ip de este, ej: http://http://178.62.215.128:3000
node app.js
### 11.- Instalar MongoDB
Seguir instrucciones de _http://docs.mongodb.org/manual/installation_ Si no se sabe la arquitectura de la máquina se puede saber de la siguiente manera:
>```
uname -p
instala en /usr/bin/mongod, por lo que hay que correr mongo de la siguiente manera:
/usr/bin/mongod
si da error: BadValue Invalid or no user locale set. Please ensure LANG and/or LC * environment variables are set correctly. Hay que ejecutar lo siguiente:
export LC_ALL=C
si da este otro error: ERROR: dbpath (/data/db) does not exist. entonces hay que crear la carpeta indicada con:
sudo mkdir -p /data/db/
esta correcto cuando aparece el mensaje waiting for connections on port 27017
Hay que correr en una ventana el comando mongod para inicializar el servicio y luego en otra ventana hay que inicializar la shell de mongo de la siguiente manera:
/usr/bin/mongo
si esta todo ok debería aparecer en la consola MongoDB shell version: 2.6.6 ... *puede dar el mismo error BadValue Invalid or no user locale set. que se soluciona igual que el anterior.
npm install mongodb // or mongodb@1.3.23
no hay que olvidar incluirlo (¿o que se puede incluir tb?) en las dependencias del package.json
{ "name": "node-example", ... "dependencies": { "mongodb":"1.3.23" } }
### 14.- crear archivo _db/seed.sh_ con instrucciones para importar datos a la db desde json, en este caso de _users.json_ y _articles.json_
>```
mongoimport --db blog --collection users --file ./db/users.json -jsonArray
mongoimport --db blog --collection articles --file ./db/articles.json -jsonArray
./db/seed.sh
### 16.- Autentificación.
Generar sistema de password de sesión ( _express-session_ ) o utilizar API de loguin de twitter, facebook, etc con _everyauth_.
Se recomienda colocar la información de las credenciales de twitter u otro en archivo _makefile_, asi queda guardado en la base de datos, aqui un ejemplo de makefile:
>```
REPORTER = list
MOCHA_OPTS = --ui bdd -c
db:
echo Seeding blog-test *****************************************************
./db/seed.sh
test:
clear
echo Starting test *********************************************************
./node_modules/mocha/bin/mocha \
--reporter $(REPORTER) \
$(MOCHA_OPTS) \
tests/*.js
echo Ending test
start:
TWITTER_CONSUMER_KEY=AAAAAAAAAAAAAAAAAAAAA \
TWITTER_CONSUMER_SECRET=BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB \
node app
.PHONY: test db start
luego de inicializar mongoDB ejecutar:
make start
Con esta opción no hay que correr el app.js ya que se ejecuta desde el makefile