처음 AWS에 배포하는 방법 ⑥(EC2 서버에 App을 복제하고 업로드)

13831 단어 Rails5루비RailsAWS

마지막까지 기사



처음 AWS에서 배포하는 방법 ①(인스턴스 생성)
처음 AWS에서 배포하는 방법 ②(Elastic IP 생성 및 연결)
처음 AWS에 배포하는 방법 ③(AWS 보안 그룹 설정)
처음 AWS에서 배포하는 방법 ④(EC2 인스턴트에 SSH 로그인)
처음 AWS에서 배포하는 방법 ⑤(EC2 환경 구축, Ruby, MySQL)

EC2 인스턴스(서버)를 만들고 공용 IP를 Elastic IP로 고정합니다.
일반 사용자가 액세스할 수 있도록 보안 그룹 설정 추가(입구 만들기)
ID와 PW를 사용하여 EC2에 로그인하여 환경을 구축했습니다.

자세하게 설명하면, 이런 곳입니다.

이번에는 WEB App을 EC2 인스턴스에 업로드하겠습니다.

웹 앱을 EC2에 복제



현재 단계



EC2 서버에 응용 프로그램 코드를 복제하려고하면 permission denied와 오류가 발생합니다.

원인



Github에서 보고 이 권한이 없는 EC2 인스턴스를 거부합니다.

대책



EC2 인스턴스의 SSH 공개 키를 Github에 등록합니다.

SSH 키를 Github에 등록하면 Github이 인증하고 복제를 허용합니다.

작업



EC2 서버의 SSH 키 쌍 만들기


  • EC2에 로그인
  • 키 쌍을 만들기 위해 명령을 입력하십시오
  • [ec2-user@ip-172-31-23-189 ~]$ ssh-keygen -t rsa -b 4096
    

    3. 다음이 표시되므로 엔터를 누릅니다.
    Enter file in which to save the key (/home/ec2-user/.ssh/id_rsa):
    

    4. 추가 엔터를 누른다(2회)
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    

    이것으로 아래와 같은 표시를 할 수 있으면, 성공하고 있습니다.
    Your identification has been saved in /home/ec2-user/.ssh/id_rsa.
    Your public key has been saved in /home/ec2-user/.ssh/id_rsa.pub.
    The key fingerprint is:
    3a:8c:1d:d1:a9:22:c7:6e:6b:43:22:31:0f:ca:63:fa ec2-user@ip-172-31-23-189
    The key's randomart image is:
    +--[ RSA 4096]----+
    |    +            |
    | . . =           |
    |  = . o .        |
    | * o . o         |
    |= *     S        |
    |.* +     .       |
    |  * +            |
    | .E+ .           |
    | .o              |
    +-----------------+
    

    5. SSH 공개 키를 표시하고 값을 복사하기 위해 다음 명령을 구현
    [ec2-user@ip-172-31-23-189 ~]$ cat ~/.ssh/id_rsa.pub
    

    6.cat에서 표시한 공개키(긴 텍스트)를 복사


    복사한 공개 키를 Github에 액세스하여 등록



  • htps : // 기주 b. 코 m/세친 gs/케 ys 방문


  • 2. 화면 오른쪽 상단의 녹색 "NEW SSH KEY"를 클릭

    3. 타이틀을 기입한다(뭐든지 가능)

    4. 공개키(ssh-rsa에서)를 붙여넣기

    오류 "Key is invalid. You must supply a key in OpenSSH public key format"이 표시되면,
    붙여 넣은 코드에 "ssh-rsa"가 포함되어 있는지 확인하십시오.

    5. "Add SSH KEY"를 클릭하여 저장.
    6. Github PW 입력

    7. 완료

    8. 등록되어 있는지 확인
    [ec2-user@ip-172-31-23-189 ~]$ ssh -T [email protected]
    

    아래와 같은 표시가 나왔을 경우: 「 yes 」를 선택
    The authenticity of host 'github.com (IP ADDRESS)' can't be established.
    RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
    Are you sure you want to continue connecting (yes/no)?
    

    이때
    Warning: Permanently added the RSA host key for IP address '52.111.11.11' to the list of known hosts.
    

    라고 표시되면 EC2로 다시 들어갑시다. 업데이트되었으므로 오류없이 넣습니다.
    성공하면 아래와 같은 표시가 됩니다.

    또는 다음이 표시되는 경우 : 'yes'를 선택
    The authenticity of host 'github.com (IP ADDRESS)' can't be established.
    RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
    Are you sure you want to continue connecting (yes/no)?
    

    성공하면 아래와 같은 표시가 나온다
    [ec2-user@ip-172-31-23-189 ~]$ ssh -T [email protected]
    Hi <Githubユーザー名>! You've successfully authenticated, but GitHub does not provide shell access.
    

    참고: GitHub 공식

    App 측에서 Unicorn 설치



    EC2가 Git을 복제하기 전에 준비로 Unicorn을 설치하십시오.
    Gemfile에 gem'unicorn' 추가

    Gemfile.
    group :production do
      gem 'unicorn', '5.4.1'
    end
    

    bundle install로 설치
    $ bundle install
    

    config/unicorn.rb 만들기

    추가한 unicorn.rb에 다음을 기술

    unicorn.rb
    
    app_path = File.expand_path('../../', __FILE__)
    
    #アプリケーションサーバの性能を決定する
    worker_processes 1
    
    #アプリケーションの設置されているディレクトリを指定
    working_directory app_path
    
    #Unicornの起動に必要なファイルの設置場所を指定
    pid "#{app_path}/tmp/pids/unicorn.pid"
    
    #ポート番号を指定
    listen 3000
    
    #エラーのログを記録するファイルを指定
    stderr_path "#{app_path}/log/unicorn.stderr.log"
    
    #通常のログを記録するファイルを指定
    stdout_path "#{app_path}/log/unicorn.stdout.log"
    
    #Railsアプリケーションの応答を待つ上限時間を設定
    timeout 60
    
    #以下は応用的な設定なので説明は割愛
    
    preload_app true
    GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true
    
    check_client_connection false
    
    run_once = true
    
    before_fork do |server, worker|
      defined?(ActiveRecord::Base) &&
        ActiveRecord::Base.connection.disconnect!
    
      if run_once
        run_once = false # prevent from firing again
      end
    
      old_pid = "#{server.config[:pid]}.oldbin"
      if File.exist?(old_pid) && server.pid != old_pid
        begin
          sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
          Process.kill(sig, File.read(old_pid).to_i)
        rescue Errno::ENOENT, Errno::ESRCH => e
          logger.error e
        end
      end
    end
    
    after_fork do |_server, _worker|
      defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection
    end
    
    

    production.rb를 열고 아래 설명을 주석 처리합니다.

    config/environments/production.rb
    config.assets.js_compressor = :uglifier
    

    config/environments/production.rb
    #config.assets.js_compressor = :uglifier
    

    응용 프로그램을 저장할 디렉터리 만들기



    디렉토리 만들기
    #/var/wwwディレクトリを作成(後述するCapistranoの初期値がwwwなので、ディレクトリをwwwに設定しています)
    [ec2-user@ip-172-31-23-189 ~]$ sudo mkdir /var/www/
    

    작성한 디렉토리를 chown 명령으로 권한 설정
    #作成したwwwディレクトリの権限をec2-userに変更
    [ec2-user@ip-172-31-23-189 ~]$ sudo chown ec2-user /var/www/
    

    만든 디렉토리로 마이그레이션
    [ec2-user@ip-172-31-23-189 ~]$ cd /var/www/
    

    git clone으로 앱을 EC2에 다운로드



    Github에서 Git clone을 위한 리포지토리 URL 가져오기


    git clone으로 만든 디렉토리에 앱 복제
    [ec2-user@ip-172-31-23-189 www]$ git clone リポジトリURL
    

    Github 계정 이름과 PW를 입력하고,
    다운로드가 시작됨
    remote: Enumerating objects: 298, done.
    remote: Counting objects: 100% (298/298), done.
    remote: Compressing objects: 100% (190/190), done.
    remote: Total 298 (delta 109), reused 274 (delta 86), pack-reused 0
    Receiving objects: 100% (298/298), 58.53 KiB | 365.00 KiB/s, done.
    Resolving deltas: 100% (109/109), done.
    

    완료

    이제 EC2에 앱이 복제되었습니다.

    다음 번에는 EC2에 gem 설치 및 설정 변경



    다음 기사는 여기
    처음 AWS에 배포하는 방법 ⑦(EC2 서버에 앱을 복제하고 업로드)

    좋은 웹페이지 즐겨찾기