Google Compute Engine Dokku Nginx

Я пытаюсь запустить веб-сервер с помощью виртуальной машины с помощью Google Compute Engine и Dokku.

Что я сделал:

  • Я создал виртуальную машину (экземпляр) с помощью Google Compute Engine
  • Я включил порт TCP: 80, чтобы разрешить входящее соединение для веб-приложений.
  • Я установил Dokku внутри виртуальной машины
  • Я развернул свое веб-приложение с помощью git push dokku master
  • Сервер работает нормально (я проверил журналы с помощью журналов dokku myapp

Однако я не могу получить к нему доступ, используя внешний IP-адрес экземпляра.

Я думаю это проблема с nginx


person Sibelius Seraphini    schedule 25.02.2015    source источник
comment
Похоже, проблема системного администрирования, а не разработки программного обеспечения, поэтому вы можете получить помощь, задав этот вопрос на serverfault.com, а не здесь - мы также отслеживаем тег google-compute-engine там ...   -  person Alex Martelli    schedule 28.02.2015
comment
Я предлагаю проверить, слушает ли ваш экземпляр порт 80 локально. Вы также можете проверить, привязан ли он к IP-адресу экземпляра или только на localhost, например. telnet localhost 80 telnet instance-ip 80 не могли бы вы подтвердить, что более поздний тест прошел успешно, если нет, вам, вероятно, нужно изменить свою конфигурацию, чтобы расширить сетевые интерфейсы, к которым привязаны процессы   -  person Feczo    schedule 12.03.2015


Ответы (1)


Я изменил nginx.conf по умолчанию внутри / home / dokku //

для этого:

upstream $APP-domains { server $INTERNAL_IP:$PORT; }
server {
  listen        [::]:80;
  listen        80;
  server_name   $EXTERNAL_IP;

  location / {
    proxy_pass http://$APP-domains; 
    proxy_http_version 1.1;
    proxy_set_header Upgrade $$http_upgrade;
    proxy_set_header Connection upgrade;
    proxy_set_header Host $$host;
    proxy_set_header X-Forwarded-Proto $$scheme;
    proxy_set_header X-Forwarded-For $$remote_addr;
    proxy_set_header X-Forwarded-Port $$server_port;
    proxy_set_header X-Request-Start $$msec;
    proxy_cache_bypass $$http_upgrade;
  }
 }

где $ APP, $ PORT, $ INTERNAL_IP, $ EXTERNAL_IP должны изменяться в зависимости от развернутого приложения dokku.

$ PORT = / home / dokku // ПОРТ

$ INTERNAL_IP = / home / dokku // IP

$ APP = имя_приложения

$ EXTERNAL_IP = ваш публичный IP

После изменения nginx.conf внутри местоположения приложения вы должны перезапустить NGINX (sudo service nginx restart)

Это суть Python, использующая ткань для обработки этого процесса:

@task
def config_vhost(ip, app):
    """Use the nginx template to redirect app to port 80"""
    port = run('cat /home/dokku/{}/PORT'.format(app))
    internal_ip = run('cat /home/dokku/{}/IP'.format(app))

    values = {'EXTERNAL_IP': ip, 'INTERNAL_IP': internal_ip, 'PORT': port, 'APP': app}

    nginx = open(NGINX_TEMPLATE, 'r').read()
    nginx_template = string.Template(nginx)

    nginx_conf = nginx_template.substitute(values)
    sudo("echo '{}' > /home/dokku/{}/nginx.conf".format(nginx_conf, app))
    sudo("service nginx restart")
person Sibelius Seraphini    schedule 12.03.2015