Rails 7 새 프로덕션 설치: 0에서 배포(Ubuntu 20.04 에디션)
재료:
참고: 대문자를 자신의 설정 세부 정보로 바꾸십시오.
참고 2: vim을 사용하여 파일을 편집합니다. 익숙하지 않은 경우
vim
를 nano
또는 선택한 다른 편집기로 대체할 수 있고 대체해야 합니다.참고 3: 항상 임의의 긴 암호를 사용하고 응용 프로그램 간에 공유하거나 분실하지 마십시오. 또한 공개 저장소에 암호화되지 않은 비밀을 커밋하지 마십시오.
This recipe works for me, but I would love to hear your thoughts on how it went for you! If something breaks or you do it differently, leave a comment below so I and the community can discuss and help out.
SSH 설정
현지의
$ ssh root@SERVER_IP_ADDRESS
# Enter password
원격
$ adduser deploy
# Create password, skip rest
$ adduser deploy sudo
$ exit
로컬 - (선택 사항) 더 쉬운 로그인을 위해 ssh 키 추가
# You need a ssh-key generated beforehand, run command
# below if you never did that before and follow instructions
# ssh-keygen
$ ssh-copy-id deploy@SERVER_IP_ADDRESS
# Enter password
$ ssh deploy@SERVER_IP_ADDRESS
원격 - (선택 사항) ssh를 통한 루트 로그인 허용 안 함
$ sudo vim /etc/ssh/sshd_config
# Set line 'PermitRootLogin yes' to 'PermitRootLogin no'
$ sudo service sshd restart
원격 - (선택 사항) 호스트 이름 설정
$ sudo hostnamectl set-hostname HOSTNAME
$ sudo hostnamectl
rbenv 및 Ruby 설치
원격
$ sudo apt update; sudo apt upgrade -y
$ sudo apt install rbenv
$ rbenv init
# Follow instructions: append 'eval "$(rbenv init -)"' to ~/.bashrc
$ source ~/.bashrc # or disconnect and reconnect
$ mkdir -p "$(rbenv root)"/plugins
$ sudo apt install git
$ git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
$ git clone https://github.com/rbenv/rbenv-vars.git "$(rbenv root)"/plugins/rbenv-vars
$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-doctor | bash
$ rbenv install 3.0.3
Image by rawpixel
웹서버 설정
Nginx 설치(원격)
$ sudo apt install nginx
승객 설치(원격)
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
$ sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger focal main > /etc/apt/sources.list.d/passenger.list'
$ sudo apt install ca-certificates
$ sudo apt update
$ sudo apt install libnginx-mod-http-passenger
$ 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
# Verify that file exists
$ sudo vim /etc/nginx/conf.d/mod-http-passenger.conf
# Change passenger_ruby line to to following (without #):
# passenger_ruby /home/deploy/.rbenv/shims/ruby;
$ sudo service nginx restart
$ sudo /usr/bin/passenger-config validate-install
$ sudo /usr/sbin/passenger-memory-stats
구성 Nginx(원격)
$ sudo rm /etc/nginx/sites-enabled/default
$ sudo vim /etc/nginx/sites-available/APPNAME
아래에 내용 삽입
server {
listen 80;
listen [::]:80;
server_name YOUR_DOMAIN.ORG;
# If you deploy without DNS and SSL, you could leave servername blank like below
# server_name _;
root /home/deploy/APPNAME/current/public;
client_max_body_size 10m; # Set max upload size
passenger_enabled on;
passenger_app_env production;
passenger_env_var RUBYOPT '-r bundler/setup'; # Cf issue: https://github.com/phusion/passenger/issues/2409
# Uncomment if you use ActionCable and/or Turbo Streams
# location /cable {
# passenger_app_group_name APPNAME_ws;
# passenger_force_max_concurrent_requests_per_process 0;
# }
location ~ ^/assets {
expires max;
gzip_static on;
}
}
$ sudo ln -s /etc/nginx/sites-available/APPNAME ../sites-enabled/APPNAME
$ sudo service nginx reload
Image by rawpixel
데이터베이스 설정
Postgres 설치(원격)
$ sudo apt install postgresql postgresql-contrib libpq-dev
$ sudo service postgresql@12-main status
$ sudo su - postgres
$ createuser --pwprompt deploy
# Enter password
$ createdb -O deploy DBNAME
# check db existence with 'psql' then '\l', quit with '\q'
$ exit
Redis 설치(원격) - ActionCable 또는 Turbo Streams를 사용하지 않는 경우 건너뛰기
$ sudo apt install redis
$ sudo service redis-server status
Image by rawpixel
배포 도구 구성 - Capistrano
현지의
Gemfile
에 추가group :development do
# ...
gem 'capistrano'
gem 'capistrano-rails'
gem 'capistrano-passenger'
gem 'capistrano-rbenv'
end
$ bundle install
$ bundle exec cap install STAGES=production
Capfile
에 추가require 'capistrano/rails'
require 'capistrano/passenger'
require 'capistrano/rbenv'
set :rbenv_type, :user
set :rbenv_ruby, '3.0.3'
편집
config/deploy.rb
set :application, "APPNAME"
set :repo_url, "[email protected]:USERNAME/APPNAME.git"
# Also works with non-github repos, I roll my own gitolite server
set :deploy_to, "/home/deploy/#{fetch :application}"
set :rbenv_prefix, '/usr/bin/rbenv exec' # Cf issue: https://github.com/capistrano/rbenv/issues/96
append :linked_dirs, 'log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', '.bundle', 'public/system', 'public/uploads'
편집
config/deploy/production.rb
server 'IP ADDRESS or DOMAIN', user: 'deploy', roles: %w{app db web}
Parts of this section are inspired from GoRails
전개
원격 - 환경 변수 준비
$ mkdir ~/APPNAME
$ vim ~/APPNAME/.rbenv-vars
# Set envvars like
# DATABASE_URL=postgresql://deploy:[email protected]/APPNAME
# This above can also be set in your database.yml file in your rails project if you prefer...
# RAILS_MASTER_KEY=YOUR_KEY_IN_master.key
# SECRET_KEY_BASE=SOME_OTHER_RANDOM_KEY
로컬 - 배포! 🍾🍾🍾
$ bundle exec cap production deploy
# Go visit your page already!
원격 - 콘솔에 연결
$ cd APPNAME/current
$ bundle exec rails c
# You need to have the debug gem in prod env enabled! (Gemfile)
Image by rawpixel
DevOps 도구 상자
이러한 도구는 DevOps 게임을 최신 상태로 유지하는 데 도움이 됩니다. 다른 권장 사항이 있는 경우 아래에 의견을 남겨주세요.
원격
$ top
$ netstat -nlp
$ tail -100 PATH_TO_LOGFILE
$ hostnamectl
$ df -h
$ sudo du -h -d 1 /
현지의
$ dig DOMAIN
보너스 #1 - SSL 설치
사전에 DNS A-레코드를 설정해야 합니다.
원격 - Certbot 설치
$ sudo apt install snapd
$ sudo snap install core; sudo snap refresh core
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
$ sudo certbot --nginx
보너스 #2 - HTTP2 활성화
원격
$ sudo vim /etc/nginx/sites-available/APPNAME
# Add http2 to listem command, see below
# listen [::]:443 ssl http2 ipv6only=on;
# listen 443 ssl http2;
$ sudo service nginx restart
마지막 배포는 어땠나요? 아니면 첫 배포를 계획 중인가요? 넘어야 했던 가장 큰 장애물은 무엇이었습니까? 당신은 다른 무엇을하고 있습니까? 아래 토론에 자유롭게 참여하십시오.
Top image by rawpixel
Reference
이 문제에 관하여(Rails 7 새 프로덕션 설치: 0에서 배포(Ubuntu 20.04 에디션)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/1klap/rails-7-new-production-install-from-zero-to-deploy-ubuntu-2004-edition-10d1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)