2016-10-25 3 views
1

나는 Puma를 웹 서버로 사용하여 Ruby on Rails 응용 프로그램을 배포 할 수 있습니다.Anonymous로 다음 사용 가능한 포트 찾기

upstream {{ app_name }} { 
    server {{ ip_address }}:8080; 
} 

모든 :이 다음 응용 프로그램에 액세스 할 수의 nginx의 가상 호스트 설정에 사용되는

bind "tcp://{{ ip_address }}:8080" 

: 배포의 일부로서, 푸마 구성은 포트 8080에서 서버의 IP 주소에 바인딩 이것의 잘 작동합니다. 그러나 이제는 여러 대의 응용 프로그램 (스테이징, 프로덕션)을 동일한 서버에 배포하려고합니다. 8080에서 여러 개의 바인딩을 사용하면 문제가 발생하여 다른 포트를 사용해야합니다.

가장 간단한 해결책은 그룹 var에 포트를 포함시킨 다음 앱을 배포 할 때 포트를 드롭하는 것입니다. 그러나 이렇게하려면 서버에서 이미 실행중인 앱에 대한 배경 지식이 필요하며 배포에서 사용할 포트를 "발견"할 수 있어야합니다.

대신 포트를 통해 일종의 반복 작업을 수행하고 8080부터 시작하여 사용하지 않을 때까지 확인하는 방법을 고려했습니다. netstat -anp | grep 8080은 포트가 사용중인 경우 반환 코드 0을 제공하므로 아마도이 명령을 사용하여 테스트 할 수 있습니다 (그러나 루핑 비트를 수행하는 방법을 잘 모르겠 음).

이전에이 문제에 대해 반대하는 사람이 있습니까? 내가 간과하고있는보다 우아한 해결책이 있습니까?

답변

0

허용 된 포트 목록을 정의하고 사용 가능한 포트와 비교해 보겠습니다. 이 같은

뭔가 : 특정 인터페이스에서 포트를 확인해야하는 경우

- hosts: myserver 
    vars: 
    allowed_ports: 
     - 80 
     - 8200 
    tasks: 
    - name: Gather occupied tcp v4 ports 
     shell: netstat -nlt4 | grep -oP '(?<=0.0.0.0:)(\d+)' 
     register: used_ports 

    - name: Set bind_port as first available port 
     set_fact: 
     bind_port: "{{ allowed_ports | difference(used_ports.stdout_lines | map('int') | list) | first | default(0) }}" 
     failed_when: bind_port | int == 0 

    - name: Show bind port 
     debug: var=bind_port 

당신은 정규 표현식에 조정 0.0.0.0 할 수 있습니다.

관련 문제