Skip to content

Instantly share code, notes, and snippets.

@buncis
Last active April 26, 2023 12:15
Show Gist options
  • Save buncis/7d390e1f259673b4ae342dea9d313eca to your computer and use it in GitHub Desktop.
Save buncis/7d390e1f259673b4ae342dea9d313eca to your computer and use it in GitHub Desktop.
Ruby on Rails Deployment steps

INSTALL basic Requirements

Pertama Install Node

curl -sL https://deb.nodesource.com/setup_lts.x | sudo -E bash -

Kedua Install Yarn

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -

echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list

Ketiga Install Redis

sudo add-apt-repository ppa:chris-lea/redis-server

Install packages

sudo apt-get 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 software-properties-common libffi-dev dirmngr gnupg apt-transport-https ca-certificates redis-server redis-tools nodejs yarn

INSTALL RUBY

clone rbenv

git clone https://github.com/rbenv/rbenv.git ~/.rbenv

add rbenv to $PATH nad init rbenv

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc

echo 'eval "$(rbenv init -)"' >> ~/.bashrc

clone ruby-build

git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

add ruby-build to path

echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc

clone rbenv vars

git clone https://github.com/rbenv/rbenv-vars.git ~/.rbenv/plugins/rbenv-vars

refresh shell to load new config

exec $SHELL

Install rbenv

rbenv install 3.2.0

set global ruby version

rbenv global 3.2.0

sanity check

ruby -v

don't install documentation for gem

echo "gem: --no-document" > ~/.gemrc

Install bundler

gem install bundler

Install postgreSQL

sudo apt-get install postgresql postgresql-contrib libpq-dev

create user and database in postgresql

sudo su - postgres

createuser --pwprompt username -s

createdb -O deploy appname

exit

Install Passenger & NGINX

install nginx

sudo apt install nginx nginx-extras

add passenger pgp keys

sudo apt-get install -y dirmngr gnupg apt-transport-https ca-certificates

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7

add passenger repo

sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger $(lsb_release -cs) main > /etc/apt/sources.list.d/passenger.list'

update repo

sudo apt-get update

install passenger + nginx module

sudo apt-get install -y libnginx-mod-http-passenger

ensure config place pada tempatnya

if [ ! -f /etc/nginx/modules-enabled/50-mod-http-passenger.conf ]; then sudo ln -s /usr/share/nginx/modules-available/mod-http-passenger.load /etc/nginx/modules-enabled/50-mod-http-passenger.conf ; fi

sudo ls /etc/nginx/conf.d/mod-http-passenger.conf

config file /etc/nginx/conf.d/mod-http-passenger.conf

kalo ga ada filenya buat sendiri isinya

passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /home/$(whoami)/.rbenv/shims/ruby;

kalo ada filenya edit last line jadi

passenger_ruby /home/$(whoami)/.rbenv/shims/ruby;

restart service nginx

sudo service nginx start

notes

seharusnya sampe sini sudah bisa dibuka servernya isinya itu Welcome to NGINX

change default config to serve rails app

sudo rm /etc/nginx/sites-enabled/default sudo vim /etc/nginx/sites-enabled/appname

isi confignya

server {
  listen 80;
  listen [::]:80;

  server_name _;
  root /home/deploy/myapp/current/public;

  passenger_enabled on;
  passenger_app_env production;

  location /cable {
    passenger_app_group_name myapp_websocket;
    passenger_force_max_concurrent_requests_per_process 0;
  }

  # Allow uploads up to 100MB in size
  client_max_body_size 100m;

  location ~ ^/(assets|packs) {
    expires max;
    gzip_static on;
  }
}

restart nginx to reload new config

sudo service nginx reload

@buncis
Copy link
Author

buncis commented Apr 26, 2023

server {
  listen 80;
  listen [::]:80 ipv6only=on;

  listen [::]:443 ssl ipv6only=on; # managed by Certbot
  listen 443 ssl; # managed by Certbot
  ssl_certificate /etc/letsencrypt/live/olimpiadepengupahan.kemnaker.go.id/fullchain.pem; # managed by Certbot
  ssl_certificate_key /etc/letsencrypt/live/olimpiadepengupahan.kemnaker.go.id/privkey.pem; # managed by Certbot
  include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

  server_name olimpiadepengupahan.kemnaker.go.id;
  root /home/support/bispro/current/public;

  passenger_enabled on;
  passenger_app_env production;

  location /cable {
    passenger_app_group_name blogpost_websocket;
    passenger_force_max_concurrent_requests_per_process 0;
  }

  client_max_body_size 100m;

  location ~ ^/(assets|packs) {
    expires max;
    gzip_static on;
  }
}

``` finakl config https

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