sudo apt-get update && apt-get dist-upgrade
sudo apt-get install open-vm-tools # VMware VMs Only
sudo sh -c 'echo vm.swappiness=5 > /etc/sysctl.conf' # Prod Env
sudo rebootSome of these packages may already be installed
sudo apt-get install openssh-server mercurial make binutils bison gcc \
build-essential git-core curl zlib1g-dev openssl libssl-dev libreadline-dev \
libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev \
python-software-properties wget dnsutils vim zip unzip screen tmux htop \
libffi-dev redis-server imagemagick ntp ufw sudoInstall postfix SMTP server (Choose internet site configuration and use the server's domain name)
sudo apt-get install postfixEdit postfix config file
sudo vim /etc/postfix/main.cfSet inet_interfaces to be loopback-only
inet_interfaces = loopback-only
Add the deploy user (Production Env - VPS only, otherwise this is done during install)
adduser deployAdd deploy user to sudo group
gpasswd -a deploy sudoOpen the sshd config
vim /etc/ssh/sshd_configChange from Port 22 to Port 2012 or another non-standard port
Port 2012
Disable root login
PermitRootLogin no
Restart SSH
service ssh restart
SSH w/ deploy user
ssh -p 2012 deploy@SERVER_IP_ADDRESSEnable bash color prompt
vim ~/.bashrcUncomment this line
force_color_prompt=yes
Reload w/ changes
exec $SHELLGenerate an SSH keypair used for deployments
ssh-keygen -t rsa -C "[email protected]"Copy the output of this command and paste into the deploy keys section of the github repo settings
cat ~/.ssh/id_rsa.pubCheck to make sure SSH to github works with your key
ssh -T [email protected]Create the authorized_keys file
touch ~/.ssh/authorized_keysEnable SSH
sudo ufw allow 2012/tcpEnable HTTP
sudo ufw allow 80/tcpEnable SSL/TLS
sudo ufw allow 443/tcpEnable firewall rules
sudo ufw enableSet timezone
sudo dpkg-reconfigure tzdataConfigure NTP
sudo apt-get update
sudo apt-get install ntpSSH w/ deploy user
ssh -p 2012 deploy@SERVER_IP_ADDRESSPaste your public key into the authorized_keys file (at bottom if others already exist)
vim ~/.ssh/authorized_keysExit the old SSH session and reconnect, you shouldn't need to type server password any longer
exit
ssh -p 2012 deploy@SERVER_IP_ADDRESSAdd PostgreSQL APT repo, add signing key, update, and install 9.4
sudo sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-9.4 libpq-devAdd postgres user and set password (use same username as your linux user)
sudo -u postgres createuser myuser -s
sudo -u postgres psql
postgres=# \password myuser
Create your app's production database on server
createdb myappname_production
Install rbenv, ruby-build and ruby 2.3.1
cd
git clone git://github.com/sstephenson/rbenv.git .rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL
git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
exec $SHELL
rbenv install 2.3.1
rbenv global 2.3.1
ruby -vTell RubyGems to not install documentation for each gem
echo "gem: --no-ri --no-rdoc" > ~/.gemrcInstall bundler and rails
gem install bundler
gem install rails
gem install aws-sdk # optional
gem install colorize # optional
rbenv rehashInstall stable version of node
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.3/install.sh | bash
exec $SHELL
nvm install stable
nvm use stable
nvm alias default stableMake the current version of node available system-wide at /usr/local/bin/node
n=$(which node);n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share} /usr/localAdd Phusion APT repo and install passenger
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
sudo apt-get install -y apt-transport-https ca-certificates
sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger jessie main > /etc/apt/sources.list.d/passenger.list'
sudo apt-get update
sudo apt-get install -y nginx-extras passengerEdit nginx.conf
sudo vim /etc/nginx/nginx.confUncomment server_tokens_off
server_tokens off;Uncomment passenger_root and passenger_ruby and change the passenger_ruby path
##
# Phusion Passenger config
##
# Uncomment it if you installed passenger or passenger-enterprise
##
passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /home/deploy/.rbenv/shims/ruby;Increase the client_max_body_size if your application will allow uploading files
client_max_body_size 20M;Restart ngnix
sudo service nginx restartOpen the nginx default site config
sudo vim /etc/nginx/sites-available/defaultComment out these two lines
# listen 80 default_server;
# listen [::]:80 default_server ipv6only=on;Create an nginx conf for the app
sudo vim /etc/nginx/sites-available/myappnameAdd the following server block
server {
listen 80 default_server;
server_name www.mydomain.com;
passenger_enabled on;
root /home/deploy/myappname/current/public;
}Enable the new nginx conf
sudo ln -s /etc/nginx/sites-available/myappname /etc/nginx/sites-enabled/myappnameRestart nginx
sudo service nginx restartEdit the logrotate config
sudo vim /etc/logrotate.confAt bottom of file add the following block:
/home/deploy/myappname/current/log/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
copytruncate
}
Test with:
sudo /usr/sbin/logrotate -f /etc/logrotate.confSetup Sidekiq as a systemd service so it can be started at boot
sudo apt-get install build-essential python-all-dev git vim python-dev python-pip\
python-software-properties g++ gcc make libssl-dev libreadline6-dev libaio-dev libbz2-dev\
zlib1g-dev libjpeg62-turbo-dev libpcre3-dev libexpat1-dev libxml2 libxml2-dev libjson0\
libjson0-dev liblzma-dev libevent-dev wget zip unzip
sudo apt-get install binutils libproj-dev libgeoip1 libgtk2.0 xsltproc\
docbook-xsl docbook-mathml
sudo apt-get install libgeos-dev libgeos-3.4.2 libproj-dev libproj0 libproj-dev
sudo apt-get install postgresql-9.4-postgis-2.1 postgresql-9.4-postgis-scripts\
libpq-dev postgresql-contribMake sure rgeo witll be able to find geos
sudo ln -s /usr/lib/libgeos-3.4.2.so /usr/lib/libgeos.so
# OR on Debian Testing with libgeos-3.5.0 or newer
sudo ln -s /usr/lib/x86_64-linux-gnu/libgeos-3.5.0.so /usr/lib/libgeos.so
# uninstall rgeo first if it was previously installed
gem install rgeo
rbenv rehashlatest stable download: http://wkhtmltopdf.org/downloads.html
sudo apt-get install xorg xfonts-75dpi fontconfig
wget http://download.gna.org/wkhtmltopdf/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-jessie-amd64.deb
sudo dpkg -i wkhtmltox-*- Install prerequisite packages
sudo apt-get install libaio1 libaio-dev - Download the Oracle Instant Client Basic and Instant Client SDK packages - Get the latest 11.x versions for Linux x86-64
- Create the directory /usr/share/oracle and extract the OIC zip files directly into the root of this directory
- Inside of the /usr/share/oracle directory, create this symlink
sudo ln -s libclntsh.so.11.1 libclntsh.so - Create a LD_LIBRARY_PATH config file
sudo vim /etc/ld.so.conf.d/oic.conf - Add this line to the file and save it
/usr/share/oracle - Update the LD_LIBRARY_PATH
sudo ldconfig