我在 Ubuntu Trusty MAAS 设备中安装了几乎可以正常运行的节点应用程序,并使用 Juju 在私有网络(无需发布)上进行安装。我使用的是 juju-gui,因此能够导出此 bundle.yaml 文件内容:
series: trusty
services:
keystone:
charm: "cs:trusty/keystone-29"
num_units: 1
options:
"admin-password": "redacted"
to:
- "lxc:"
ntp:
charm: "cs:trusty/ntp-11"
mongodb:
charm: "cs:trusty/mongodb-26"
num_units: 1
to:
- "lxc:"
docs:
charm: "cs:~justin-fathomdb/trusty/node-app-0"
num_units: 1
options:
app_name: docs
app_url: "http://github.com/redacted/redacted.git"
to:
- "0"
haproxy:
charm: "cs:trusty/haproxy-13"
num_units: 1
to:
- "1"
relations:
- - "ntp:juju-info"
- "keystone:juju-info"
- - "docs:mongodb"
- "mongodb:database"
- - "docs:website"
- "haproxy:reverseproxy"
machines:
"0":
series: trusty
constraints: "arch=amd64 cpu-cores=2 mem=2048"
"1":
series: trusty
constraints: "arch=amd64 cpu-cores=2 mem=4096"
undefined:
series: trusty
constraints: "arch=amd64 cpu-cores=2 mem=4096"
看起来 haproxy 已成功部署到节点 delta.maas,并且 juju status 显示它在端口 80 上。我可以通过 ssh 进入此节点,并看到 /var/log/juju/unit-haproxy-2.log 似乎运行正常。文件 /etc/haproxy/haproxy.cfg 表明它知道 docs 节点:
backend haproxy_service
balance leastconn
cookie SRVNAME insert
server docs-2-8000 10.100.100.10:8000 maxconn 100 cookie S0 check
看起来 docs(node-app)已部署到节点 alpha.maas,juju status 显示它在端口 8000 上。我可以通过 ssh 进入此节点,看到 /var/log/juju/unit-docs-2.log 似乎运行正常。它引入了 github 映像,运行了 npm install,找到了 mongodb。在此节点上运行“ps aux|grep node”会得到以下结果:
ubuntu 22954 0.0 0.4 657432 9600 ? Rsl 21:28 0:00 node ./bin/www
但是,运行“netstat -nat|grep LISTEN”似乎表明该节点未绑定:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
根据文档,我在应用程序的根目录中使用 Procfile:
web: node ./bin/www
...bin/www 文件以此开头...
#!/usr/bin/env node
var app = require('../app');
var debug = require('debug')('docs:server');
var http = require('http');
var config = require('../config/config');
var port = normalizePort(process.env.port);
app.set('port', process.env.port);
...
令人恼火的是,node-app Juju charms 上的配置更改钩子几乎总是在 github 步骤失败,假装找不到它。幸运的是,安装钩子成功了。所以感觉我需要删除单元/添加单元才能对应用程序本身进行任何更改,甚至为了排除故障。
尝试 haproxy IP 地址会导致 503 服务不可用错误。从浏览器尝试 docs 节点本身的 8000 端口不会得到任何答案,因为——正如我之前提到的——它没有监听任何东西。
对此有什么想法吗?