Skip to content

Instantly share code, notes, and snippets.

@vladimir-e
Last active June 10, 2016 18:48
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save vladimir-e/471a76c479b4202667dc to your computer and use it in GitHub Desktop.
Save vladimir-e/471a76c479b4202667dc to your computer and use it in GitHub Desktop.
Deploy Rails 4 app to Ubuntu VPS using capistrano 3 (rbenv/puma)

Server Commands

apt-get -y update
sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties vim mc ImageMagick

# nginx
add-apt-repository ppa:nginx/stable
apt-get -y update
apt-get -y install nginx
service nginx start

# PostgreSQL
add-apt-repository ppa:pitti/postgresql
apt-get -y update
apt-get -y install postgresql postgresql-contrib libpq-dev
sudo -u postgres psql
# \password
# create user apps with password 'secret';
# ALTER USER apps CREATEDB;
# \q

# Mysql
apt-get install mysql-server mysql-client libmysqlclient-dev

# Sphinx search
apt-get install libmysqlclient-dev sphinxsearch
# disable autostart
vim /etc/default/sphinxsearch
START=no
sudo service sphinxsearch stop

# Redis
apt-get install tcl8.5
wget http://download.redis.io/releases/redis-stable.tar.gz
tar xzf redis-stable.tar.gz
cd redis-stable
make
make test
sudo make install
cd utils
sudo ./install_server.sh
sudo update-rc.d redis_6379 defaults
sudo vim /etc/redis/6379.conf
# set bind option to 127.0.0.1

# Postfix
apt-get -y install telnet postfix

# Node.js
add-apt-repository ppa:chris-lea/node.js
apt-get -y update
apt-get -y install nodejs

# Add deployer user
groupadd deployer
adduser deployer --ingroup deployer
sudo adduser deployer sudo
su deployer
cd

# configure SSH key login for user
mkdir .ssh
cat ~/.ssh/id_rsa.pub | ssh deployer@hostname 'cat >> ~/.ssh/authorized_keys'
chmod 700 .ssh
chmod 600 .ssh/authorized_keys

# Disable root login https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04
sudo vim  /etc/ssh/sshd_config
PermitRootLogin no
sudo service ssh restart

# firewall https://www.digitalocean.com/community/tutorials/additional-recommended-steps-for-new-ubuntu-14-04-servers
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 25/tcp
sudo ufw show added
sudo ufw enable


sudo dpkg-reconfigure tzdata


# rbenv https://www.digitalocean.com/community/tutorials/how-to-install-ruby-on-rails-with-rbenv-on-ubuntu-14-04
sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev

git clone git://github.com/sstephenson/rbenv.git .rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile

rbenv install -v 2.2.3
rbenv global 2.2.3
ruby -v
echo "gem: --no-document" > ~/.gemrc
gem install bundler rails
rbenv rehash

# Get to know github.com
ssh git@github.com

# modify sudoers (capistrano 3)
sudo vim deployer

deployer ALL=NOPASSWD:/etc/init.d/nginx
deployer ALL=(ALL) NOPASSWD: /usr/sbin/service nginx start,/usr/sbin/service nginx stop,/usr/sbin/service nginx restart
deployer ALL=NOPASSWD:/bin/ln -nfs /home/deployer/www/* /etc/nginx/sites-enabled/*
deployer ALL=NOPASSWD:/bin/ln -nfs /home/deployer/www/* /etc/init/*
deployer ALL = (root) NOPASSWD: /sbin/start *_production, /sbin/stop *_production, /sbin/restart *_production, /sbin/status *_production, /sbin/start *_staging, /sbin/stop *_staging, /sbin/restart *_staging, /sbin/status *_staging
deployer ALL=NOPASSWD:/home/deployer/.rbenv/shims/foreman
deployer ALL = (root) NOPASSWD: /home/deployer/.rbenv/bin/rbenv
deployer ALL=NOPASSWD:/sbin/initctl reload-configuration

sudo mv deployer /etc/sudoers.d/deployer
sudo chown root:root /etc/sudoers.d/deployer

# check
exit
/etc/init.d/nginx status

# oh-my-zsh https://github.com/robbyrussell/oh-my-zsh
apt-get install zsh
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

cap staging deploy:setup_config

cp shared/config/database.example.yml shared/config/database.yml

cap staging deploy

===============

additionally swap file can be added

RailsCasts Episode #335: Deploying to a VPS

Setup Ruby On Rails on Ubuntu 14.04

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment