Eric Guo's

Hoping writing JS, Ruby & Rails and Go article, but fallback to DevOps note

Deploy New Rails 7 and Ruby 3.2 App in Ubuntu 20.04


Create new user

adduser pp_vendor
sudo su - pp_vendor
mkdir .ssh
chmod 700 .ssh
vi .ssh/authorized_keys # and paste your public key
chmod 600 .ssh/authorized_keys

Enable new user as sudo

sudo su -
cd /etc/sudoers.d/
echo "pp_vendor ALL=(ALL) NOPASSWD:ALL" > 85-pp_vendor-user

Install Rust

sudo apt install rustc
rustc --version # here is rustc 1.61.0

Install rbenv and Ruby 3.2.1

sudo apt-get install libyaml-devel
sudo apt install rbenv
sudo su - pp_vendor
mkdir -p "$(rbenv root)"/plugins
git clone "$(rbenv root)"/plugins/ruby-build
git clone "$(rbenv root)"/plugins/rbenv-china-mirror
rbenv install 3.2.1
rbenv global 3.2.1
echo "gem: --no-document" > ~/.gemrc
eval "$(rbenv init -)" >> ~/.bash_profile # or past the `rbenv init -`
rbenv shell 3.2.1

Create MySQL DB user

mysql -u root -p
CREATE DATABASE pp_prod character set UTF8mb4 collate utf8mb4_bin;
CREATE USER 'pp_vendor'@'%' IDENTIFIED BY 'pp_vendor_password';
GRANT ALL ON pp_vendor.* TO 'pp_vendor'@'%';

Link rbenv to make capistrano works

mkdir -p ~/.rbenv/bin
cd ~/.rbenv/bin
ln -s /usr/bin/rbenv rbenv

create deploy folder

cd /var/www
sudo mkdir pp_vendor
sudo chown pp_vendor:pp_vendor pp_vendor/
echo "machine login Eric-Guo password token_of_personal" >> ~/.netrc