1

我正在尝试使用使用 Google Compute Engine 和 Dokku 的虚拟机运行 Web 服务器。

我做了什么:

  • 我使用 Google Compute Engine 创建了一个虚拟机(实例)
  • 我启用了 TCP:80 端口以允许 Web 应用程序的传入连接
  • 我在虚拟机中安装了 Dokku
  • 我使用 git push dokku master 部署了我的网络应用程序
  • 服务器运行正常(我已经使用 dokku logs myapp 检查了日志

但是,我无法使用实例的外部 IP 地址访问它

我认为这是nginx的问题

4

1 回答 1

1

我已经更改了 /home/dokku// 中的默认 nginx.conf

对于这个:

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 //PORT

$INTERNAL_IP = /home/dokku//IP

$APP = app_name

$EXTERNAL_IP = 您的公共 IP

更改应用程序位置内的 nginx.conf 后,您应该重新启动 NGINX(sudo service nginx restart)

这是一个使用fabric处理这个过程的python gist:

@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")
于 2015-03-12T16:56:53.273 回答