Action Cable 프로덕션 사용 시 Nginx 및 Cable.yml 설정

소개



Action Cable은 WebSocket 통신 기술을 이용하여 실시간 채팅 등의 기능을 구현할 수 있는 기능입니다.
AWS 프로덕션 환경에서 Nginx 및 Cable.yml 설정과 관련하여 막힌 부분을 공유합니다.



전제


  • Rails 5.2.3
  • Puma
  • Nginx
  • AWS에 배포
  • Https 통신

  • 로컬에서는 Websocket 통신이 정상적으로 움직이고 있다고 가정합니다.

    Nginx 설정 추가



    마지막 한 줄이지만 Https의 경우 이것이 없으면 콘솔에 403 오류가 발생합니다.

    proxy_set_header X-Forwarded-Proto https;

    /etc/nginx/conf.d/app_name.conf
    location /cable {
            proxy_pass http://puma;
            proxy_http_version 1.1;
            proxy_set_header Upgrade websocket;
            proxy_set_header Connection Upgrade;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            }
    

    Cable.yml 설정



    문서에 설명된 대로 Production 환경에서 어댑터에 "async"를 사용하는 것은 더 이상 사용되지 않습니다.
    동시에 다수의 액세스가 있으면 쓸모 없게 되는 것 같습니다.

    8.1.1.1 Async Adapter
    The async adapter is intended for development/testing and should not be used in production.

    Heroku에도 정중한 해설이 있습니다.
    프로덕션 환경에는 Redis 또는 PostgreSQL(DB로 사용하고 있다면)이 필요합니다.
    Real-Time Rails: Implementing WebSockets in Rails 5 with Action Cable

    Lastly, Action Cable uses Redis as a data store for transient data, syncing content across instances of your application.



    나는 AWS에서 Redis를 한 번 계약했고 엔드 포인트 URL을 아래의 production 어댑터로 설정했지만 PostgreSQL을 사용했기 때문에 이것으로 갈 수있었습니다.
    Redis 돈이 들기 때문에 postgres에서 좋았습니다,,,

    /config/cable.yml
    development:
      adapter: async
    
    test:
      adapter: async
    
    production:
      adapter: postgresql
    

    Production.rb



    내 도메인의 요청을 허용합니다.

    /config/environments/production.rb
    
      config.action_cable.url = 'wss://app_name.com/cable'
      config.action_cable.allowed_request_origins = [ 'https://app_name.com', /https:\/\/app_name.*/ ]
      ActionCable.server.config.disable_request_forgery_protection = true
    
    

    끝에



    특히 Nginx 설정과 Redis 등 어댑터 설정에 매우 힘들었습니다.
    ActionCable은 Rails5에서 추가된 비교적 새로운 기능이기 때문에, 일본어 기사에서는 Https나 Redis에 대한 언급이 적고, 영어 기사를 참고로 했습니다.
    도움이되면 다행입니다.

    좋은 웹페이지 즐겨찾기