1
votes

I'm currently working through the GCE Bookshelf Tutorial, which is giving me the biggest headache: https://cloud.google.com/nodejs/tutorials/bookshelf-on-compute-engine

I'm stuck on this step:

To see the application running, go to http://[YOUR_INSTANCE_IP]:8080,

where [YOUR_INSTANCE_IP] is the external IP address of your instance.

When I try to view my app on my external IP via port 8080, nothing happens.

I can confirm that the firewall rules are correctly applied with my VM instance showing the correct network tag.

I went through the serial logs and realised something was wrong with the startup script in that the instance could not clone the git repository.

So I changed

git clone https://source.developers.google.com/p/$PROJECTID /opt/app

to

git clone https://source.developers.google.com/p/d3-barchart/r/repo /opt/app

(Rest of startup-script.sh here:)

#! /bin/bash
#   Copyright 2017, Google, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# [START startup]
set -v

# Talk to the metadata server to get the project id
PROJECTID=$(curl -s "http://metadata.google.internal/computeMetadata/v1/project/project-id" -H "Metadata-Flavor: Google")

# Install logging monitor. The monitor will automatically pick up logs sent to
# syslog.
# [START logging]
curl -s "https://storage.googleapis.com/signals-agents/logging/google-fluentd-install.sh" | bash
service google-fluentd restart &
# [END logging]

# Install dependencies from apt
apt-get update
apt-get install -yq ca-certificates git nodejs build-essential supervisor

# Install nodejs
mkdir /opt/nodejs
curl https://nodejs.org/dist/v4.2.2/node-v4.2.2-linux-x64.tar.gz | tar xvzf - -C /opt/nodejs --strip-components=1
ln -s /opt/nodejs/bin/node /usr/bin/node
ln -s /opt/nodejs/bin/npm /usr/bin/npm

# Get the application source code from the Google Cloud Repository.
# git requires $HOME and it's not set during the startup script.
export HOME=/root
git config --global credential.helper gcloud.sh
git clone https://source.developers.google.com/p/d3-barchart/r/repo /opt/app

# Install app dependencies
cd /opt/app/7-gce
npm install

# Create a nodeapp user. The application will run as this user.
useradd -m -d /home/nodeapp nodeapp
chown -R nodeapp:nodeapp /opt/app

# Configure supervisor to run the node app.
cat >/etc/supervisor/conf.d/node-app.conf << EOF
[program:nodeapp]
directory=/opt/app/7-gce
command=npm start
autostart=true
autorestart=true
user=nodeapp
environment=HOME="/home/nodeapp",USER="nodeapp",NODE_ENV="production"
stdout_logfile=syslog
stderr_logfile=syslog
EOF

supervisorctl reread
supervisorctl update

# Application should now be running under supervisor
# [END startup]

Even though my VM instance is now correctly cloning the git repo, it now receives a ECONNRESET error:

Jul 24 21:52:59 my-app-instance startup-script: INFO startup-script: # Get the application source code from the Google Cloud Repository.
Jul 24 21:52:59 my-app-instance startup-script: INFO startup-script: # git requires $HOME and it's not set during the startup script.
Jul 24 21:52:59 my-app-instance startup-script: INFO startup-script: export HOME=/root
Jul 24 21:52:59 my-app-instance startup-script: INFO startup-script: git config --global credential.helper gcloud.sh
Jul 24 21:52:59 my-app-instance startup-script: INFO startup-script: git clone https://source.developers.google.com/p/d3-barchart/r/repo /opt/app
Jul 24 21:52:59 my-app-instance startup-script: INFO startup-script: Cloning into '/opt/app'...
Jul 24 21:53:02 my-app-instance startup-script: INFO startup-script: # Install app dependencies
Jul 24 21:53:02 my-app-instance startup-script: INFO startup-script: cd /opt/app/7-gce
Jul 24 21:53:02 my-app-instance startup-script: INFO startup-script: npm install
Jul 24 21:53:04 my-app-instance startup-script: INFO startup-script: npm WARN deprecated [email protected]: Jade has been renamed to pug, please install the latest version of pug instead of jade
Jul 24 21:53:05 my-app-instance startup-script: INFO startup-script: npm WARN engine @google-cloud/[email protected]: wanted: {"node":">=6"} (current: {"node":"4.2.2","npm":"2.14.7"})
Jul 24 21:53:21 my-app-instance startup-script: INFO startup-script: npm WARN deprecated [email protected]: Deprecated, use jstransformer
Jul 24 21:53:50 my-app-instance startup-script: INFO startup-script: npm WARN optional dep failed, continuing [email protected]
Jul 24 21:54:06 my-app-instance startup-script: INFO startup-script: npm WARN deprecated [email protected]: Use uuid module instead
Jul 24 21:54:20 my-app-instance startup-script: INFO startup-script: npm ERR! Linux 3.16.0-4-amd64
Jul 24 21:54:20 my-app-instance startup-script: INFO startup-script: npm ERR! argv "/opt/nodejs/bin/node" "/usr/bin/npm" "install"
Jul 24 21:54:20 my-app-instance startup-script: INFO startup-script: npm ERR! node v4.2.2
Jul 24 21:54:20 my-app-instance startup-script: INFO startup-script: npm ERR! npm  v2.14.7
Jul 24 21:54:20 my-app-instance startup-script: INFO startup-script: npm ERR! code ECONNRESET
Jul 24 21:54:20 my-app-instance startup-script: INFO startup-script: npm ERR! errno ECONNRESET
Jul 24 21:54:20 my-app-instance startup-script: INFO startup-script: npm ERR! syscall read
Jul 24 21:54:20 my-app-instance startup-script: INFO startup-script: npm ERR! network read ECONNRESET
Jul 24 21:54:20 my-app-instance startup-script: INFO startup-script: npm ERR! network This is most likely not a problem with npm itself
Jul 24 21:54:20 my-app-instance startup-script: INFO startup-script: npm ERR! network and is related to network connectivity.
Jul 24 21:54:20 my-app-instance startup-script: INFO startup-script: npm ERR! network In most cases you are behind a proxy or have bad network settings.
Jul 24 21:54:20 my-app-instance startup-script: INFO startup-script: npm ERR! network
Jul 24 21:54:20 my-app-instance startup-script: INFO startup-script: npm ERR! network If you are behind a proxy, please make sure that the
Jul 24 21:54:20 my-app-instance startup-script: INFO startup-script: npm ERR! network 'proxy' config is set properly.  See: 'npm help config'

To be honest i have no idea if this is contributing to the reason why I can't view my app on external IP, but at the moment, it's the only thing I can find wrong. How do I fix this issue?

1

1 Answers

0
votes

One thing to check out is which ports are open in your firewall rules. The default port for HTTP is 80 and the https is 443.

Go to the firewall rules and see which ports you allow access to your external ip address. To get there first click on the hamburger in the top left corner of your GCP console, then:

Networking --> Firewall Rules

Now, look at the ports that you have open for HTTP access. You can either adjust your server to listen on port 80 or add a firewall rule to listen on tcp:80. Make sure that your virtual machine is added to the network that the new rule is created on (so make sure to add the rule to the default network).

I'll to be honest, Dev-Ops tutorials don't do a lot of handholding and tend to leave out a lot of steps.