Skip to content
Damien Brugne edited this page Feb 2, 2015 · 46 revisions

IPv4: 5.196.206.61
Virtual MAC: 02:00:00:b3:ce:47
OS: Ubuntu 14.04

VM Template

Installed from VM-template

Firewall

Managed via PVE interface:

  • Global configuration:
  • Input policy: Drop
  • Output policy: Accept
  • Proxmox server specific configuration
  • Input Accept SSH macro
  • Input Accept HTTP macro
  • Input Accept HTTPS macro

Configuration

Network

Configure network interface

$ vi /etc/network/interfaces

# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
   address 5.196.206.61
   netmask 255.255.255.255
   broadcast 5.196.206.61
   post-up route add 37.59.46.254 dev eth0
   post-up route add default gw 37.59.46.254
   pre-down route del 37.59.46.254 dev eth0
   pre-down route del default gw 37.59.46.254
   dns-nameservers 8.8.8.8 8.8.4.4

Hostname

Change hostname

$ echo "node01" | sudo tee /etc/hostname
$ sudo vi /etc/hosts

127.0.0.1       localhost
127.0.1.1       node01.donut.me node01
# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

MongoDB tunnel

Install and configure stunnel to secure MongoDB connexion

$ sudo apt-get install stunnel4
$ sudo vi /etc/stunnel/stunnel.conf

client = yes
[mongodb]
accept = 27017
connect = 5.196.206.60:27018

$ sudo vi /etc/default/stunnel4

ENABLED=1

$ sudo service stunnel4 start

Mail

Install and configure Exim4

$ sudo apt-get install exim4 $ sudo dpkg-reconfigure exim4-config

  • System mail name: node01.donut.me
  • IP-addresses to listen on for incoming SMTP connections: 127.0.0.1 ; ::1
  • Other destinations for which mail is accepted:
  • Domains to relay mail for:
  • Machines to relay mail for:
  • Keep number of DNS-queries minimal (Dial-on-Demand)? No
  • Delivery method for local mail: mbox format in /var/mail/
  • Split configuration into small files? No

Port 80 redirection

Add a forward rule 80 => 3000 (http://www.lauradhamilton.com/how-to-set-up-a-nodejs-web-server-on-amazon-ec2) :

$ sudo apt-get install iptables-persistent  
$ sudo vim /etc/sysctl.conf  
uncomment net.ipv4.ip_forward=1  
$ sudo sysctl -p /etc/sysctl.conf  
$ cat /proc/sys/net/ipv4/ip_forward  
return a 1 now  
$ sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000  
$ sudo iptables-save | sudo tee /etc/iptables/rules.v4

After nginx addition, the redirection is no longer required. Removed with:

$ sudo iptables -L -t nat --line-numbers
$ sudo iptables -t nat -D PREROUTING 1
$ sudo iptables -L -t nat --line-numbers
$ sudo iptables-save | sudo tee /etc/iptables/rules.v4

Install nginx

$ sudo apt-get install nginx
$ sudo vi /etc/nginx/sites-available/web.conf
server {
  listen       80;
  server_name  test.donut.me;
  location / {
    proxy_pass http://donut.me:3000;
  }
}
$ sudo vi /etc/nginx/sites-available/ws.conf
upstream io_nodes {
  ip_hash;
  server ws.donut.me:3050;
  server ws.donut.me:3051;
}
server {
  listen 80;
  server_name ws.donut.me;
  location / {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_http_version 1.1;
    proxy_pass http://io_nodes;
  }
}
$ cd /etc/nginx/sites-enabled
$ sudo rm default
$ sudo ln -s /etc/nginx/sites-available/web.conf web
$ sudo ln -s /etc/nginx/sites-available/ws.conf ws
$ sudo nginx -s reload

node.js & PM2

Source: https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-an-ubuntu-14-04-server Install node.js from ppa:chris-lea/node.js:

$ sudo apt-get install software-properties-common # for having add-apt-repository
$ sudo add-apt-repository ppa:chris-lea/node.js
$ sudo apt-get update
$ sudo apt-get install nodejs

Install GIT (required) and "donut" user to run process

$ sudo apt-get install git
$ sudo useradd -s /bin/bash -m -d /home/donut -c "safe user for node process" donut
$ sudo usermod -aG sudo donut

As "donut" user install PM2 and node-gyp

$ sudo su - donut
$ sudo npm install pm2 -g

Install node-gyp to

$ sudo apt-get install gcc make build-essential
$ sudo npm install node-gyp -g

Update system startup script for automatically launch PM2 as user "donut" at boot

$ sudo pm2 startup ubuntu -u donut

Add additional project global packages:

$ sudo apt-get install g++ $ sudo npm install bower $ sudo npm install grunt-cli $ sudo npm install pomelo $ sudo npm install pomelo-cli

Fix npm permission bug after a "npm install -g":

$ sudo chown -R donut:donut /home/donut/.pm2
$ sudo chown -R donut:donut /home/donut/.npm

Deploy Donut app

Get Donut from git and initialize npm environnement

$ sudo su - donut
$ mkdir /home/donut/app
$ cd /home/donut/app
$ git clone git@github.com:dbrugne/donut.git ./
$ cd server
$ npm update

Run Donut app

Source: https://github.com/unitech/pm2#a1

All command must be run as "donut" user

$ sudo su - donut

Define and create pm2 process:

$ vi /home/donut/web.json

{
  "name" : "web",
  "script" : "./app.js",
  "cwd" : "/home/donut/app/web-server",
  "exec_mode"  : "fork_mode",
    "env": {
        "NODE_ENV": "production",
        "DEBUG": "donut:*",
    }
}

$ vi /home/donut/ws.json

{
  "name" : "ws",
  "script" : "./app.js",
  "cwd" : "/home/donut/app/game-server",
  "exec_mode"  : "fork_mode",
    "env": {
        "NODE_ENV": "production",
        "DEBUG": "donut:*",
    }
}

$ pm2 start /home/donut/web.json
$ pm2 start /home/donut/ws.json

Save current process list for automatic relaunch at boot

$ pm2 save

Then to suspend process

$ pm2 stop web

$ pm2 stop ws

To relaunch

$ pm2 restart web

$ pm2 restart ws

To get info on process

$ pm2 info web

$ pm2 info ws

To monitor process

$ pm2 monit web

$ pm2 monit ws

Clone this wiki locally