Skip to content

Instantly share code, notes, and snippets.

@ssuprunenko
Created July 27, 2015 19:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ssuprunenko/0b0b5c9e8a7a7857d120 to your computer and use it in GitHub Desktop.
Save ssuprunenko/0b0b5c9e8a7a7857d120 to your computer and use it in GitHub Desktop.
Deploy Ruby on Rails app to Digital Ocean droplet
for Manual
Manual:
ssh root@xxx.xxx.xx.xx
1. Fix locale issue
$ sudo nano /etc/default/locale
LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
LC_TYPE=en_US.UTF-8
$ locale-gen en_US.UTF-8
$ dpkg-reconfigure locales
2. Create new user
$ passwd
$ adduser deploy
$ visudo
# User privilege specification
root ALL=(ALL:ALL) ALL
deploy ALL=(ALL:ALL) ALL
3. Change ssh settings
$ nano /etc/ssh/sshd_config
Protocol 2
PermitRootLogin no
UseDNS no
AllowUsers deploy
$ reload ssh
4. Copy your ssh key to server
# From local computer!
$ ssh-copy-id deploy@xxx.xxx.xx.xx
$ ssh deploy@xxx.xxx.xx.xx
5. Add Swap memory
$ sudo fallocate -l 2G /swapfile
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
$ sudo nano /etc/fstab
# Add to bottom
/swapfile none swap sw 0 0
$ sudo sysctl vm.swappiness=10
$ sudo sysctl vm.vfs_cache_pressure=50
$ sudo nano /etc/sysctl.conf
# Add to bottom
vm.swappiness=10
vm.vfs_cache_pressure = 50
6. RVM
$ sudo apt-get install curl git-core nginx -y
$ curl -sSL https://get.rvm.io | bash -s stable
$ source ~/.rvm/scripts/rvm
$ rvm requirements
$ rvm install x
$ rvm use x --default
$ rvm rubygems current
7. Add Nginx repository
$ sudo add-apt-repository ppa:chris-lea/nginx-devel
8. Add Passenger repository
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7
$ sudo apt-get install apt-transport-https ca-certificates
# Create a file
/etc/apt/sources.list.d/passenger.list
# Ubuntu 14.04
deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main
$ sudo chown root: /etc/apt/sources.list.d/passenger.list
$ sudo chmod 600 /etc/apt/sources.list.d/passenger.list
$ sudo apt-get update
9. Install passenger
$ sudo apt-get install nginx-extras passenger
# /etc/nginx/nginx.conf
worker_processes 1;
passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /home/deploy/.rvm/gems/ruby-2.2.2/wrappers/ruby;
10. Install Node.js
$ curl -sL https://deb.nodesource.com/setup | sudo bash -
$ sudo apt-get install -y nodejs
$ apt-get install -y build-essential
11. Install rails
gem install rails --no-ri --no-rdoc -V
gem install bundler --no-ri --no-rdoc -V
12. Create ssh key for github/bitbucket
$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub
$ ssh -T git@github.com
$ ssh -T git@bitbucket.org
# Add this to deployment keys
13. Install Postgresql
# /etc/apt/sources.list.d/pgdg.list
deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install libpq-dev
$ sudo apt-get install postgresql-9.4
14. Fix postgresql permissions
$ sudo nano /etc/postgresql/9.1/main/pg_hba.conf
local all postgres trust
$ sudo service postgresql restart
$ psql -U postgres
postgres=# ALTER USER postgres with password 'secret';
postgres=# CREATE DATABASE myapp_production;
postgres=# GRANT ALL privileges ON DATABASE eathalal_production TO postgres;
postgres=# \list
15. Link nginx config
$ sudo ln -nfs /home/deploy/eathalal/current/config/mysite.conf /etc/nginx/sites-enabled/mysite
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment