Skip to content

Instantly share code, notes, and snippets.

@ghafran
Created January 7, 2014 20:41
Show Gist options
  • Save ghafran/8306500 to your computer and use it in GitHub Desktop.
Save ghafran/8306500 to your computer and use it in GitHub Desktop.
Setup node development environment on ubuntu
echo 'System Update'
echo '============='
sudo apt-get update
echo 'System Upgrade'
echo '=============='
sudo apt-get -y upgrade
echo 'Install Git'
echo '==========='
sudo apt-get install -y git-core
echo 'Install Node'
echo '============'
sudo apt-get install -y python-software-properties python g++ make
sudo add-apt-repository -y ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install -y nodejs
sudo ln -s /usr/bin/nodejs node
echo 'Install Redis'
echo '============='
sudo apt-get -q -y install redis-server
echo 'Install Mongodb'
echo '==============='
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
sudo apt-get update
sudo apt-get install mongodb-10gen
echo 'Configure MongoDB'
echo '================='
sudo sed -i '$ a\setParameter = textSearchEnabled=true' /etc/mongodb.conf
sudo sed -i '$ a\smallfiles = true' /etc/mongodb.conf
sudo service mongodb restart
echo 'install cloud9'
echo '==============='
sudo apt-get install -y libxml2-dev
sudo mkdir -p /srv
cd /srv
sudo git clone https://github.com/ajaxorg/cloud9.git cloud9
cd /srv/cloud9
sudo npm install
echo 'Configure cloud9'
echo '================'
sudo cat <<EOF >~/cloud9.conf
description "cloud9"
author "root"
start on (local-filesystems and net-device-up IFACE=eth0)
stop on shutdown
respawn # restart when job dies
respawn limit 5 60 # give up restart after 5 respawns in 60 seconds
script
exec sudo -u root /srv/cloud9/bin/cloud9.sh -l 0.0.0.0 -p 80 -w /home/dev/ >> /srv/cloud9/cloud9.log 2>&1
end script
EOF
sudo mv ~/cloud9.conf /etc/init/cloud9.conf
sudo start cloud9
echo 'Optimize Ubuntu'
echo '==============='
# Increase size of file handles and inode cache
sudo sed -i '/fs.file-max/d' /etc/sysctl.conf
sudo sed -i '$ a\fs.file-max=999999' /etc/sysctl.conf
# Allowed local port range
sudo sed -i '/net.ipv4.ip_local_port_range/d' /etc/sysctl.conf
sudo sed -i '$ a\net.ipv4.ip_local_port_range=1024 65535' /etc/sysctl.conf
###
### TUNING NETWORK PERFORMANCE ###
###
# Do a 'modprobe tcp_cubic' first
sudo sed -i '/net.ipv4.tcp_congestion_control/d' /etc/sysctl.conf
sudo sed -i '$ a\net.ipv4.tcp_congestion_control=cubic' /etc/sysctl.conf
# Turn on the tcp_window_scaling
sudo sed -i '/net.ipv4.tcp_window_scaling/d' /etc/sysctl.conf
sudo sed -i '$ a\net.ipv4.tcp_window_scaling=1' /etc/sysctl.conf
# Increase the maximum total buffer-space allocatable
# This is measured in units of pages (4096 bytes)
sudo sed -i '/net.ipv4.tcp_mem/d' /etc/sysctl.conf
sudo sed -i '$ a\net.ipv4.tcp_mem=65536 131072 262144' /etc/sysctl.conf
sudo sed -i '/net.ipv4.udp_mem/d' /etc/sysctl.conf
sudo sed -i '$ a\net.ipv4.udp_mem=65536 131072 262144' /etc/sysctl.conf
# Increase the read-buffer space allocatable
sudo sed -i '/net.ipv4.tcp_rmem/d' /etc/sysctl.conf
sudo sed -i '$ a\net.ipv4.tcp_rmem=8192 87380 16777216' /etc/sysctl.conf
sudo sed -i '/net.ipv4.udp_rmem_min/d' /etc/sysctl.conf
sudo sed -i '$ a\net.ipv4.udp_rmem_min=16384' /etc/sysctl.conf
sudo sed -i '/net.core.rmem_default/d' /etc/sysctl.conf
sudo sed -i '$ a\net.core.rmem_default=87380' /etc/sysctl.conf
sudo sed -i '/net.core.rmem_max/d' /etc/sysctl.conf
sudo sed -i '$ a\net.core.rmem_max=16777216' /etc/sysctl.conf
# Increase the write-buffer-space allocatable
sudo sed -i '/net.ipv4.tcp_wmem/d' /etc/sysctl.conf
sudo sed -i '$ a\net.ipv4.tcp_wmem=8192 65536 16777216' /etc/sysctl.conf
sudo sed -i '/net.ipv4.udp_wmem_min/d' /etc/sysctl.conf
sudo sed -i '$ a\net.ipv4.udp_wmem_min=16384' /etc/sysctl.conf
sudo sed -i '/net.core.wmem_default/d' /etc/sysctl.conf
sudo sed -i '$ a\net.core.wmem_default=65536' /etc/sysctl.conf
sudo sed -i '/net.core.wmem_max/d' /etc/sysctl.conf
sudo sed -i '$ a\net.core.wmem_max=16777216' /etc/sysctl.conf
#############################
# General gigabit tuning:
#net.core.rmem_max = 16777216
#net.core.wmem_max = 16777216
#net.ipv4.tcp_rmem = 4096 87380 16777216
#net.ipv4.tcp_wmem = 4096 65536 16777216
#setting this to 1 -> possible SYN flooding on port 8080. Sending cookies.
sudo sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf
sudo sed -i '$ a\net.ipv4.tcp_syncookies=0' /etc/sysctl.conf
# this gives the kernel more memory for tcp
# which you need with many (100k+) open socket connections
sudo sed -i '/net.ipv4.tcp_mem/d' /etc/sysctl.conf
sudo sed -i '$ a\net.ipv4.tcp_mem=50576 64768 98152' /etc/sysctl.conf
sudo sed -i '/net.core.netdev_max_backlog/d' /etc/sysctl.conf
sudo sed -i '$ a\net.core.netdev_max_backlog=30000' /etc/sysctl.conf
# I was also masquerading the port comet was on, you might not need this
# net.ipv4.netfilter.ip_conntrack_max = 1048576
###############################
#
sudo sed -i '/net.ipv4.tcp_max_tw_buckets/d' /etc/sysctl.conf
sudo sed -i '$ a\net.ipv4.tcp_max_tw_buckets=360000' /etc/sysctl.conf
sudo sed -i '/net.core.netdev_max_backlog/d' /etc/sysctl.conf
sudo sed -i '$ a\net.core.netdev_max_backlog=2500' /etc/sysctl.conf
sudo sed -i '/vm.min_free_kbytes/d' /etc/sysctl.conf
sudo sed -i '$ a\vm.min_free_kbytes=65536' /etc/sysctl.conf
sudo sed -i '/vm.swappiness/d' /etc/sysctl.conf
sudo sed -i '$ a\vm.swappiness=0' /etc/sysctl.conf
sudo sed -i '/net.ipv4.tcp_tw_recycle /d' /etc/sysctl.conf
sudo sed -i '$ a\net.ipv4.tcp_tw_recycle=0' /etc/sysctl.conf
sudo sed -i '/net.ipv4.tcp_tw_reuse/d' /etc/sysctl.conf
sudo sed -i '$ a\net.ipv4.tcp_tw_reuse=0' /etc/sysctl.conf
sudo sed -i '/net.ipv4.tcp_orphan_retries/d' /etc/sysctl.conf
sudo sed -i '$ a\net.ipv4.tcp_orphan_retries=1' /etc/sysctl.conf
sudo sed -i '/net.ipv4.tcp_fin_timeout/d' /etc/sysctl.conf
sudo sed -i '$ a\net.ipv4.tcp_fin_timeout=25' /etc/sysctl.conf
#raise this high
sudo sed -i '/net.ipv4.tcp_max_orphans/d' /etc/sysctl.conf
sudo sed -i '$ a\net.ipv4.tcp_max_orphans=819200' /etc/sysctl.conf
# http://simonhf.wordpress.com/2010/10/01/node-js-versus-sxe-hello-world-complexity-speed-and-memory-usage/
sudo sed -i '/net.core.somaxconn/d' /etc/sysctl.conf
sudo sed -i '$ a\net.core.somaxconn=65535' /etc/sysctl.conf
sudo sed -i '/net.ipv4.tcp_no_metrics_save/d' /etc/sysctl.conf
sudo sed -i '$ a\net.ipv4.tcp_no_metrics_save=1' /etc/sysctl.conf
sudo sed -i '/net.ipv4.tcp_max_syn_backlog/d' /etc/sysctl.conf
sudo sed -i '$ a\net.ipv4.tcp_max_syn_backlog=20480' /etc/sysctl.conf
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment