Domain capturinglife.org
CLOUDFLARENET
Software information

cloudflare cloudflare

tcp/443 tcp/80 tcp/8443

  • Open service 2606:4700:3037::6815:2d4:80 · capturinglife.org

    2026-01-24 14:45

    HTTP/1.1 200 OK
    Date: Sat, 24 Jan 2026 14:45:52 GMT
    Content-Type: text/html
    Transfer-Encoding: chunked
    Connection: close
    Server: cloudflare
    Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
    Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=M7q7QCmpmvGUC1AlKu7%2BdPcXWmpIeRGBQLxY%2B7tzskmcuU1Ufhfl%2F6ZgpxvcNvNbOnITB275uaHK16H%2BglqAKh%2F9qD9H3ZLjOwtjsNyAMDd4sIDwZqn43q7S2Brk"}]}
    vary: accept-encoding
    cf-cache-status: DYNAMIC
    CF-RAY: 9c30512bc8be363f-FRA
    alt-svc: h3=":443"; ma=86400
    
    Page title: Your NodeJS Droplet
    
    
    <!DOCTYPE html>
    <html>
    <head>
    <title>Your NodeJS Droplet</title>
    <style>
        body {
            width: 55em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
            background: #AAAAAA;
        }
        div {
          padding: 30px;
          background: #FFFFFF;
          margin: 30px;
          border-radius: 5px;
          border: 1px solid #888888;
        }
        code {
          font-size: 16px;
          background: #DDDDDD;
        }
    </style>
    </head>
    <body>
      <div>
        <h1>Sammy welcomes you to your Droplet!</h1>
        <img src="/assets/sammytheshark.gif" />
        <h2>Things to do with this script</h2>
        <p>This message is coming to you via a simple NodeJS application that's live on your Droplet! This droplet is all set up with NodeJS, PM2 for process management, and nginx.</p>
        <p>Run all pm2 commands using the nodejs user or a second instance of pm2 will start. The login and password are stored in the <code>NODE_USER*</code> values you see when you call  <code>cat /root/.digitalocean_passwords</code> while logged in over SSH.</p>
        <p>This app is running at port 3000, and is being served to you by nginx, which has mapped port 3000 to be served as the root URI over HTTP (port 80) -- a technique known as a "reverse proxy." We'll be teaching you how to use this technique right here on this page. If you want to kick the tires right now, try some of these things:</p>
        <ul>
          <li>SSH into your Droplet and modify this script at <code>/var/www/html/hello.js</code> and see the results live by calling <code>pm2 restart hello</code></li>
          <li>Run <code>pm2 list</code> to see code scheduled to start at boot time</li>
          <li>Run <code>pm2 delete hello</code> to stop running this script and <code>pm2 save</code> to stop it from running on Droplet boot</li>
        </ul>
        <h2>Get your code on here</h2>
        <ul>
          <li>SSH into your Droplet, and <code>git clone</code> your NodeJS code onto the droplet, anywhere you like</li>
          <ul>
            <li>Note: If you're not using a source control, you can <a href="https://www.digitalocean.com/docs/droplets/how-to/transfer-files/">directly upload the files to your droplet using SFTP</a>.
          </ul>
          <li><code>cd</code> into the directory where your NodeJS code lives, and install any dependencies. For example, if you have a <code>package.json</code> file, run <code>npm install</code>.
          <li>Launch your app by calling <code>pm2 start &lt;your-file&gt;</code>, then map the port your app runs on to an HTTP URL by running <code>nano /etc/nginx/sites-available/default</code> and adding another <code>location</code>. Use the existing entry for the port 3000 "hello" app as a basis.</li>
          <li>Call <code>sudo systemctl restart nginx</code> to enable your new nginx config.</li>
          <li>Call <code>pm2 save</code> to schedule your code to run at launch.</li>
          <li>Repeat these steps for any other NodeJS apps that need to run concurrently -- schedule them to run at boot time on whatever internal port you like using PM2, then map that port to an HTTP/HTTPS URL in the nginx config. Build out the URL directory structure you need by mapping applications to URL paths; that's the reverse proxy method in a nutshell!</code>
        </ul>
        <h2>Get production-ready</h2>
        <p>There's a lot you'll want to do to make sure you're production-ready.</p>
        <ul>
          <li><a href="https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04">Set up a non-root user for day-to-day use</a></li>
          <li>Review your firewall settings by calling <code>sudo ufw status</code>, and make any changes you need. By default, only SSH/SFTP (port 22), HTTP (port 80), and HTTPS (port 443) are open. You can also disable this firewall by calling <code>sudo ufw disable</code> and <a href="https://www.digitalocean.com/docs/networking/firewalls/">use a DigitalOcean cloud firewall</a> instead, if you like (they're free).</li>
          <li><a href="https://www.digitalocean.com/docs/networking/dns/quickstart/">Register a custom domain</a></li>
          <li>Have data needs? You can mount a
    Found 2026-01-24 by HttpPlugin
    Create report
  • Open service 2606:4700:3037::6815:2d4:443 · capturinglife.org

    2026-01-24 14:45

    HTTP/1.1 200 OK
    Date: Sat, 24 Jan 2026 14:45:52 GMT
    Content-Type: text/html
    Transfer-Encoding: chunked
    Connection: close
    Server: cloudflare
    Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
    Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=Tem2y%2FsKvoQyzTLn6a96WMfqwlnzp9c11wEMGd%2ByH7BIppqrtY5%2B345KaziY%2BGVCt8jTC1DZPJf2LIdTgW7SePV3K8%2FEd5t53ULrzMWYObZdA0cIFG5HvM3pVp21"}]}
    vary: accept-encoding
    cf-cache-status: DYNAMIC
    CF-RAY: 9c30512ba8b1afa0-AMS
    alt-svc: h3=":443"; ma=86400
    
    Page title: Your NodeJS Droplet
    
    
    <!DOCTYPE html>
    <html>
    <head>
    <title>Your NodeJS Droplet</title>
    <style>
        body {
            width: 55em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
            background: #AAAAAA;
        }
        div {
          padding: 30px;
          background: #FFFFFF;
          margin: 30px;
          border-radius: 5px;
          border: 1px solid #888888;
        }
        code {
          font-size: 16px;
          background: #DDDDDD;
        }
    </style>
    </head>
    <body>
      <div>
        <h1>Sammy welcomes you to your Droplet!</h1>
        <img src="/assets/sammytheshark.gif" />
        <h2>Things to do with this script</h2>
        <p>This message is coming to you via a simple NodeJS application that's live on your Droplet! This droplet is all set up with NodeJS, PM2 for process management, and nginx.</p>
        <p>Run all pm2 commands using the nodejs user or a second instance of pm2 will start. The login and password are stored in the <code>NODE_USER*</code> values you see when you call  <code>cat /root/.digitalocean_passwords</code> while logged in over SSH.</p>
        <p>This app is running at port 3000, and is being served to you by nginx, which has mapped port 3000 to be served as the root URI over HTTP (port 80) -- a technique known as a "reverse proxy." We'll be teaching you how to use this technique right here on this page. If you want to kick the tires right now, try some of these things:</p>
        <ul>
          <li>SSH into your Droplet and modify this script at <code>/var/www/html/hello.js</code> and see the results live by calling <code>pm2 restart hello</code></li>
          <li>Run <code>pm2 list</code> to see code scheduled to start at boot time</li>
          <li>Run <code>pm2 delete hello</code> to stop running this script and <code>pm2 save</code> to stop it from running on Droplet boot</li>
        </ul>
        <h2>Get your code on here</h2>
        <ul>
          <li>SSH into your Droplet, and <code>git clone</code> your NodeJS code onto the droplet, anywhere you like</li>
          <ul>
            <li>Note: If you're not using a source control, you can <a href="https://www.digitalocean.com/docs/droplets/how-to/transfer-files/">directly upload the files to your droplet using SFTP</a>.
          </ul>
          <li><code>cd</code> into the directory where your NodeJS code lives, and install any dependencies. For example, if you have a <code>package.json</code> file, run <code>npm install</code>.
          <li>Launch your app by calling <code>pm2 start &lt;your-file&gt;</code>, then map the port your app runs on to an HTTP URL by running <code>nano /etc/nginx/sites-available/default</code> and adding another <code>location</code>. Use the existing entry for the port 3000 "hello" app as a basis.</li>
          <li>Call <code>sudo systemctl restart nginx</code> to enable your new nginx config.</li>
          <li>Call <code>pm2 save</code> to schedule your code to run at launch.</li>
          <li>Repeat these steps for any other NodeJS apps that need to run concurrently -- schedule them to run at boot time on whatever internal port you like using PM2, then map that port to an HTTP/HTTPS URL in the nginx config. Build out the URL directory structure you need by mapping applications to URL paths; that's the reverse proxy method in a nutshell!</code>
        </ul>
        <h2>Get production-ready</h2>
        <p>There's a lot you'll want to do to make sure you're production-ready.</p>
        <ul>
          <li><a href="https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04">Set up a non-root user for day-to-day use</a></li>
          <li>Review your firewall settings by calling <code>sudo ufw status</code>, and make any changes you need. By default, only SSH/SFTP (port 22), HTTP (port 80), and HTTPS (port 443) are open. You can also disable this firewall by calling <code>sudo ufw disable</code> and <a href="https://www.digitalocean.com/docs/networking/firewalls/">use a DigitalOcean cloud firewall</a> instead, if you like (they're free).</li>
          <li><a href="https://www.digitalocean.com/docs/networking/dns/quickstart/">Register a custom domain</a></li>
          <li>Have data needs? You can mount a
    Found 2026-01-24 by HttpPlugin
    Create report
  • Open service 2606:4700:3037::6815:2d4:8443 · capturinglife.org

    2026-01-24 14:45

    HTTP/1.1 522 <none>
    Date: Sat, 24 Jan 2026 14:46:12 GMT
    Content-Type: text/plain; charset=UTF-8
    Content-Length: 15
    Connection: close
    Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Expires: Thu, 01 Jan 1970 00:00:01 GMT
    Referrer-Policy: same-origin
    X-Frame-Options: SAMEORIGIN
    Server: cloudflare
    CF-RAY: 9c305130eb39665e-AMS
    alt-svc: h3=":8443"; ma=86400
    
    
    error code: 522
    Found 2026-01-24 by HttpPlugin
    Create report
  • Open service 2606:4700:3037::ac43:81b4:443 · capturinglife.org

    2026-01-24 14:45

    HTTP/1.1 200 OK
    Date: Sat, 24 Jan 2026 14:45:52 GMT
    Content-Type: text/html
    Transfer-Encoding: chunked
    Connection: close
    Server: cloudflare
    Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
    Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=CEPn%2Fhp%2B4pVRNk4yFpQXj4LvamTCnNbBEqG538J%2BzmekO9%2BMj4sFcl0Lq93NQWB%2Bj86BbkfB299NtywluGYj0Hem7ekegESqeomHq9uMjpIho2X%2Bkyz0LW7DSYG%2B"}]}
    vary: accept-encoding
    cf-cache-status: DYNAMIC
    CF-RAY: 9c30512baa2ad2f2-FRA
    alt-svc: h3=":443"; ma=86400
    
    Page title: Your NodeJS Droplet
    
    
    <!DOCTYPE html>
    <html>
    <head>
    <title>Your NodeJS Droplet</title>
    <style>
        body {
            width: 55em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
            background: #AAAAAA;
        }
        div {
          padding: 30px;
          background: #FFFFFF;
          margin: 30px;
          border-radius: 5px;
          border: 1px solid #888888;
        }
        code {
          font-size: 16px;
          background: #DDDDDD;
        }
    </style>
    </head>
    <body>
      <div>
        <h1>Sammy welcomes you to your Droplet!</h1>
        <img src="/assets/sammytheshark.gif" />
        <h2>Things to do with this script</h2>
        <p>This message is coming to you via a simple NodeJS application that's live on your Droplet! This droplet is all set up with NodeJS, PM2 for process management, and nginx.</p>
        <p>Run all pm2 commands using the nodejs user or a second instance of pm2 will start. The login and password are stored in the <code>NODE_USER*</code> values you see when you call  <code>cat /root/.digitalocean_passwords</code> while logged in over SSH.</p>
        <p>This app is running at port 3000, and is being served to you by nginx, which has mapped port 3000 to be served as the root URI over HTTP (port 80) -- a technique known as a "reverse proxy." We'll be teaching you how to use this technique right here on this page. If you want to kick the tires right now, try some of these things:</p>
        <ul>
          <li>SSH into your Droplet and modify this script at <code>/var/www/html/hello.js</code> and see the results live by calling <code>pm2 restart hello</code></li>
          <li>Run <code>pm2 list</code> to see code scheduled to start at boot time</li>
          <li>Run <code>pm2 delete hello</code> to stop running this script and <code>pm2 save</code> to stop it from running on Droplet boot</li>
        </ul>
        <h2>Get your code on here</h2>
        <ul>
          <li>SSH into your Droplet, and <code>git clone</code> your NodeJS code onto the droplet, anywhere you like</li>
          <ul>
            <li>Note: If you're not using a source control, you can <a href="https://www.digitalocean.com/docs/droplets/how-to/transfer-files/">directly upload the files to your droplet using SFTP</a>.
          </ul>
          <li><code>cd</code> into the directory where your NodeJS code lives, and install any dependencies. For example, if you have a <code>package.json</code> file, run <code>npm install</code>.
          <li>Launch your app by calling <code>pm2 start &lt;your-file&gt;</code>, then map the port your app runs on to an HTTP URL by running <code>nano /etc/nginx/sites-available/default</code> and adding another <code>location</code>. Use the existing entry for the port 3000 "hello" app as a basis.</li>
          <li>Call <code>sudo systemctl restart nginx</code> to enable your new nginx config.</li>
          <li>Call <code>pm2 save</code> to schedule your code to run at launch.</li>
          <li>Repeat these steps for any other NodeJS apps that need to run concurrently -- schedule them to run at boot time on whatever internal port you like using PM2, then map that port to an HTTP/HTTPS URL in the nginx config. Build out the URL directory structure you need by mapping applications to URL paths; that's the reverse proxy method in a nutshell!</code>
        </ul>
        <h2>Get production-ready</h2>
        <p>There's a lot you'll want to do to make sure you're production-ready.</p>
        <ul>
          <li><a href="https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04">Set up a non-root user for day-to-day use</a></li>
          <li>Review your firewall settings by calling <code>sudo ufw status</code>, and make any changes you need. By default, only SSH/SFTP (port 22), HTTP (port 80), and HTTPS (port 443) are open. You can also disable this firewall by calling <code>sudo ufw disable</code> and <a href="https://www.digitalocean.com/docs/networking/firewalls/">use a DigitalOcean cloud firewall</a> instead, if you like (they're free).</li>
          <li><a href="https://www.digitalocean.com/docs/networking/dns/quickstart/">Register a custom domain</a></li>
          <li>Have data needs? You can mount a
    Found 2026-01-24 by HttpPlugin
    Create report
  • Open service 2606:4700:3037::ac43:81b4:8443 · capturinglife.org

    2026-01-24 14:45

    HTTP/1.1 522 <none>
    Date: Sat, 24 Jan 2026 14:46:12 GMT
    Content-Type: text/plain; charset=UTF-8
    Content-Length: 15
    Connection: close
    Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Expires: Thu, 01 Jan 1970 00:00:01 GMT
    Referrer-Policy: same-origin
    X-Frame-Options: SAMEORIGIN
    Server: cloudflare
    CF-RAY: 9c305130edade7ae-FRA
    alt-svc: h3=":8443"; ma=86400
    
    
    error code: 522
    Found 2026-01-24 by HttpPlugin
    Create report
  • Open service 172.67.129.180:8443 · capturinglife.org

    2026-01-24 14:45

    HTTP/1.1 522 <none>
    Date: Sat, 24 Jan 2026 14:46:13 GMT
    Content-Type: text/plain; charset=UTF-8
    Content-Length: 15
    Connection: close
    Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Expires: Thu, 01 Jan 1970 00:00:01 GMT
    Referrer-Policy: same-origin
    X-Frame-Options: SAMEORIGIN
    Server: cloudflare
    CF-RAY: 9c305130ca84dc81-FRA
    alt-svc: h3=":8443"; ma=86400
    
    
    error code: 522
    Found 2026-01-24 by HttpPlugin
    Create report
  • Open service 2606:4700:3037::ac43:81b4:80 · capturinglife.org

    2026-01-24 14:45

    HTTP/1.1 200 OK
    Date: Sat, 24 Jan 2026 14:45:52 GMT
    Content-Type: text/html
    Transfer-Encoding: chunked
    Connection: close
    Server: cloudflare
    Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
    Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=LK4YsB0yhCcf7W9UST0XitUY8tIpDVYU5yyu0DM8NQwc8ozs7hrk1ENTi6LCyuW4%2FHtsPbXKLjQk%2BYyCJ%2FiRamZq%2BSHNjz1woNXYt6sDDnhvZZZaMj4XuomnMtIA"}]}
    vary: accept-encoding
    cf-cache-status: DYNAMIC
    CF-RAY: 9c30512b9b5d1994-FRA
    alt-svc: h3=":443"; ma=86400
    
    Page title: Your NodeJS Droplet
    
    
    <!DOCTYPE html>
    <html>
    <head>
    <title>Your NodeJS Droplet</title>
    <style>
        body {
            width: 55em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
            background: #AAAAAA;
        }
        div {
          padding: 30px;
          background: #FFFFFF;
          margin: 30px;
          border-radius: 5px;
          border: 1px solid #888888;
        }
        code {
          font-size: 16px;
          background: #DDDDDD;
        }
    </style>
    </head>
    <body>
      <div>
        <h1>Sammy welcomes you to your Droplet!</h1>
        <img src="/assets/sammytheshark.gif" />
        <h2>Things to do with this script</h2>
        <p>This message is coming to you via a simple NodeJS application that's live on your Droplet! This droplet is all set up with NodeJS, PM2 for process management, and nginx.</p>
        <p>Run all pm2 commands using the nodejs user or a second instance of pm2 will start. The login and password are stored in the <code>NODE_USER*</code> values you see when you call  <code>cat /root/.digitalocean_passwords</code> while logged in over SSH.</p>
        <p>This app is running at port 3000, and is being served to you by nginx, which has mapped port 3000 to be served as the root URI over HTTP (port 80) -- a technique known as a "reverse proxy." We'll be teaching you how to use this technique right here on this page. If you want to kick the tires right now, try some of these things:</p>
        <ul>
          <li>SSH into your Droplet and modify this script at <code>/var/www/html/hello.js</code> and see the results live by calling <code>pm2 restart hello</code></li>
          <li>Run <code>pm2 list</code> to see code scheduled to start at boot time</li>
          <li>Run <code>pm2 delete hello</code> to stop running this script and <code>pm2 save</code> to stop it from running on Droplet boot</li>
        </ul>
        <h2>Get your code on here</h2>
        <ul>
          <li>SSH into your Droplet, and <code>git clone</code> your NodeJS code onto the droplet, anywhere you like</li>
          <ul>
            <li>Note: If you're not using a source control, you can <a href="https://www.digitalocean.com/docs/droplets/how-to/transfer-files/">directly upload the files to your droplet using SFTP</a>.
          </ul>
          <li><code>cd</code> into the directory where your NodeJS code lives, and install any dependencies. For example, if you have a <code>package.json</code> file, run <code>npm install</code>.
          <li>Launch your app by calling <code>pm2 start &lt;your-file&gt;</code>, then map the port your app runs on to an HTTP URL by running <code>nano /etc/nginx/sites-available/default</code> and adding another <code>location</code>. Use the existing entry for the port 3000 "hello" app as a basis.</li>
          <li>Call <code>sudo systemctl restart nginx</code> to enable your new nginx config.</li>
          <li>Call <code>pm2 save</code> to schedule your code to run at launch.</li>
          <li>Repeat these steps for any other NodeJS apps that need to run concurrently -- schedule them to run at boot time on whatever internal port you like using PM2, then map that port to an HTTP/HTTPS URL in the nginx config. Build out the URL directory structure you need by mapping applications to URL paths; that's the reverse proxy method in a nutshell!</code>
        </ul>
        <h2>Get production-ready</h2>
        <p>There's a lot you'll want to do to make sure you're production-ready.</p>
        <ul>
          <li><a href="https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04">Set up a non-root user for day-to-day use</a></li>
          <li>Review your firewall settings by calling <code>sudo ufw status</code>, and make any changes you need. By default, only SSH/SFTP (port 22), HTTP (port 80), and HTTPS (port 443) are open. You can also disable this firewall by calling <code>sudo ufw disable</code> and <a href="https://www.digitalocean.com/docs/networking/firewalls/">use a DigitalOcean cloud firewall</a> instead, if you like (they're free).</li>
          <li><a href="https://www.digitalocean.com/docs/networking/dns/quickstart/">Register a custom domain</a></li>
          <li>Have data needs? You can mount a
    Found 2026-01-24 by HttpPlugin
    Create report
  • Open service 172.67.129.180:443 · capturinglife.org

    2026-01-24 14:45

    HTTP/1.1 200 OK
    Date: Sat, 24 Jan 2026 14:45:52 GMT
    Content-Type: text/html
    Transfer-Encoding: chunked
    Connection: close
    Server: cloudflare
    Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
    Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=CZzAB6whFQLBK9Xcse10qGgJITjYplg5f2qebESu7jYZUSiAs8hby65yWzLbxNHu6w3V0Nc0fBF1OQrMbesVqgp0f8XfQcWY4W4Sj9cvO0sK"}]}
    vary: accept-encoding
    cf-cache-status: DYNAMIC
    CF-RAY: 9c30512b6b63f3d1-LHR
    alt-svc: h3=":443"; ma=86400
    
    Page title: Your NodeJS Droplet
    
    
    <!DOCTYPE html>
    <html>
    <head>
    <title>Your NodeJS Droplet</title>
    <style>
        body {
            width: 55em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
            background: #AAAAAA;
        }
        div {
          padding: 30px;
          background: #FFFFFF;
          margin: 30px;
          border-radius: 5px;
          border: 1px solid #888888;
        }
        code {
          font-size: 16px;
          background: #DDDDDD;
        }
    </style>
    </head>
    <body>
      <div>
        <h1>Sammy welcomes you to your Droplet!</h1>
        <img src="/assets/sammytheshark.gif" />
        <h2>Things to do with this script</h2>
        <p>This message is coming to you via a simple NodeJS application that's live on your Droplet! This droplet is all set up with NodeJS, PM2 for process management, and nginx.</p>
        <p>Run all pm2 commands using the nodejs user or a second instance of pm2 will start. The login and password are stored in the <code>NODE_USER*</code> values you see when you call  <code>cat /root/.digitalocean_passwords</code> while logged in over SSH.</p>
        <p>This app is running at port 3000, and is being served to you by nginx, which has mapped port 3000 to be served as the root URI over HTTP (port 80) -- a technique known as a "reverse proxy." We'll be teaching you how to use this technique right here on this page. If you want to kick the tires right now, try some of these things:</p>
        <ul>
          <li>SSH into your Droplet and modify this script at <code>/var/www/html/hello.js</code> and see the results live by calling <code>pm2 restart hello</code></li>
          <li>Run <code>pm2 list</code> to see code scheduled to start at boot time</li>
          <li>Run <code>pm2 delete hello</code> to stop running this script and <code>pm2 save</code> to stop it from running on Droplet boot</li>
        </ul>
        <h2>Get your code on here</h2>
        <ul>
          <li>SSH into your Droplet, and <code>git clone</code> your NodeJS code onto the droplet, anywhere you like</li>
          <ul>
            <li>Note: If you're not using a source control, you can <a href="https://www.digitalocean.com/docs/droplets/how-to/transfer-files/">directly upload the files to your droplet using SFTP</a>.
          </ul>
          <li><code>cd</code> into the directory where your NodeJS code lives, and install any dependencies. For example, if you have a <code>package.json</code> file, run <code>npm install</code>.
          <li>Launch your app by calling <code>pm2 start &lt;your-file&gt;</code>, then map the port your app runs on to an HTTP URL by running <code>nano /etc/nginx/sites-available/default</code> and adding another <code>location</code>. Use the existing entry for the port 3000 "hello" app as a basis.</li>
          <li>Call <code>sudo systemctl restart nginx</code> to enable your new nginx config.</li>
          <li>Call <code>pm2 save</code> to schedule your code to run at launch.</li>
          <li>Repeat these steps for any other NodeJS apps that need to run concurrently -- schedule them to run at boot time on whatever internal port you like using PM2, then map that port to an HTTP/HTTPS URL in the nginx config. Build out the URL directory structure you need by mapping applications to URL paths; that's the reverse proxy method in a nutshell!</code>
        </ul>
        <h2>Get production-ready</h2>
        <p>There's a lot you'll want to do to make sure you're production-ready.</p>
        <ul>
          <li><a href="https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04">Set up a non-root user for day-to-day use</a></li>
          <li>Review your firewall settings by calling <code>sudo ufw status</code>, and make any changes you need. By default, only SSH/SFTP (port 22), HTTP (port 80), and HTTPS (port 443) are open. You can also disable this firewall by calling <code>sudo ufw disable</code> and <a href="https://www.digitalocean.com/docs/networking/firewalls/">use a DigitalOcean cloud firewall</a> instead, if you like (they're free).</li>
          <li><a href="https://www.digitalocean.com/docs/networking/dns/quickstart/">Register a custom domain</a></li>
          <li>Have data needs? You can mount a
    Found 2026-01-24 by HttpPlugin
    Create report
  • Open service 104.21.2.212:443 · capturinglife.org

    2026-01-24 14:45

    HTTP/1.1 200 OK
    Date: Sat, 24 Jan 2026 14:45:52 GMT
    Content-Type: text/html
    Transfer-Encoding: chunked
    Connection: close
    Server: cloudflare
    Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
    Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=OQUmvcwAcSe6UvaYumv5akTbK3o8HxdSTRDECHDUZm7Xp6Xp3oBnrgvC2FIAp4fdoWPQ5ws9md0FYdaC5mBjaBCaeQcGKl9kLOu4nY0LLP90"}]}
    vary: accept-encoding
    cf-cache-status: DYNAMIC
    CF-RAY: 9c30512b79d9dbb1-FRA
    alt-svc: h3=":443"; ma=86400
    
    Page title: Your NodeJS Droplet
    
    
    <!DOCTYPE html>
    <html>
    <head>
    <title>Your NodeJS Droplet</title>
    <style>
        body {
            width: 55em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
            background: #AAAAAA;
        }
        div {
          padding: 30px;
          background: #FFFFFF;
          margin: 30px;
          border-radius: 5px;
          border: 1px solid #888888;
        }
        code {
          font-size: 16px;
          background: #DDDDDD;
        }
    </style>
    </head>
    <body>
      <div>
        <h1>Sammy welcomes you to your Droplet!</h1>
        <img src="/assets/sammytheshark.gif" />
        <h2>Things to do with this script</h2>
        <p>This message is coming to you via a simple NodeJS application that's live on your Droplet! This droplet is all set up with NodeJS, PM2 for process management, and nginx.</p>
        <p>Run all pm2 commands using the nodejs user or a second instance of pm2 will start. The login and password are stored in the <code>NODE_USER*</code> values you see when you call  <code>cat /root/.digitalocean_passwords</code> while logged in over SSH.</p>
        <p>This app is running at port 3000, and is being served to you by nginx, which has mapped port 3000 to be served as the root URI over HTTP (port 80) -- a technique known as a "reverse proxy." We'll be teaching you how to use this technique right here on this page. If you want to kick the tires right now, try some of these things:</p>
        <ul>
          <li>SSH into your Droplet and modify this script at <code>/var/www/html/hello.js</code> and see the results live by calling <code>pm2 restart hello</code></li>
          <li>Run <code>pm2 list</code> to see code scheduled to start at boot time</li>
          <li>Run <code>pm2 delete hello</code> to stop running this script and <code>pm2 save</code> to stop it from running on Droplet boot</li>
        </ul>
        <h2>Get your code on here</h2>
        <ul>
          <li>SSH into your Droplet, and <code>git clone</code> your NodeJS code onto the droplet, anywhere you like</li>
          <ul>
            <li>Note: If you're not using a source control, you can <a href="https://www.digitalocean.com/docs/droplets/how-to/transfer-files/">directly upload the files to your droplet using SFTP</a>.
          </ul>
          <li><code>cd</code> into the directory where your NodeJS code lives, and install any dependencies. For example, if you have a <code>package.json</code> file, run <code>npm install</code>.
          <li>Launch your app by calling <code>pm2 start &lt;your-file&gt;</code>, then map the port your app runs on to an HTTP URL by running <code>nano /etc/nginx/sites-available/default</code> and adding another <code>location</code>. Use the existing entry for the port 3000 "hello" app as a basis.</li>
          <li>Call <code>sudo systemctl restart nginx</code> to enable your new nginx config.</li>
          <li>Call <code>pm2 save</code> to schedule your code to run at launch.</li>
          <li>Repeat these steps for any other NodeJS apps that need to run concurrently -- schedule them to run at boot time on whatever internal port you like using PM2, then map that port to an HTTP/HTTPS URL in the nginx config. Build out the URL directory structure you need by mapping applications to URL paths; that's the reverse proxy method in a nutshell!</code>
        </ul>
        <h2>Get production-ready</h2>
        <p>There's a lot you'll want to do to make sure you're production-ready.</p>
        <ul>
          <li><a href="https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04">Set up a non-root user for day-to-day use</a></li>
          <li>Review your firewall settings by calling <code>sudo ufw status</code>, and make any changes you need. By default, only SSH/SFTP (port 22), HTTP (port 80), and HTTPS (port 443) are open. You can also disable this firewall by calling <code>sudo ufw disable</code> and <a href="https://www.digitalocean.com/docs/networking/firewalls/">use a DigitalOcean cloud firewall</a> instead, if you like (they're free).</li>
          <li><a href="https://www.digitalocean.com/docs/networking/dns/quickstart/">Register a custom domain</a></li>
          <li>Have data needs? You can mount a
    Found 2026-01-24 by HttpPlugin
    Create report
  • Open service 172.67.129.180:80 · capturinglife.org

    2026-01-24 14:45

    HTTP/1.1 200 OK
    Date: Sat, 24 Jan 2026 14:45:52 GMT
    Content-Type: text/html
    Transfer-Encoding: chunked
    Connection: close
    Server: cloudflare
    Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
    Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=Vq2QOzjSVQJ%2BVCt0MZr2TLE4iHwv07vxomVa0igvxStu9rvGzsZgPakSrtaEaSsTzmyq5g82DMtqQUYC1WeNeO6DJsNvwu7AgjSQ7BWvdiHA"}]}
    vary: accept-encoding
    cf-cache-status: DYNAMIC
    CF-RAY: 9c30512b6ed5769b-LHR
    alt-svc: h3=":443"; ma=86400
    
    Page title: Your NodeJS Droplet
    
    
    <!DOCTYPE html>
    <html>
    <head>
    <title>Your NodeJS Droplet</title>
    <style>
        body {
            width: 55em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
            background: #AAAAAA;
        }
        div {
          padding: 30px;
          background: #FFFFFF;
          margin: 30px;
          border-radius: 5px;
          border: 1px solid #888888;
        }
        code {
          font-size: 16px;
          background: #DDDDDD;
        }
    </style>
    </head>
    <body>
      <div>
        <h1>Sammy welcomes you to your Droplet!</h1>
        <img src="/assets/sammytheshark.gif" />
        <h2>Things to do with this script</h2>
        <p>This message is coming to you via a simple NodeJS application that's live on your Droplet! This droplet is all set up with NodeJS, PM2 for process management, and nginx.</p>
        <p>Run all pm2 commands using the nodejs user or a second instance of pm2 will start. The login and password are stored in the <code>NODE_USER*</code> values you see when you call  <code>cat /root/.digitalocean_passwords</code> while logged in over SSH.</p>
        <p>This app is running at port 3000, and is being served to you by nginx, which has mapped port 3000 to be served as the root URI over HTTP (port 80) -- a technique known as a "reverse proxy." We'll be teaching you how to use this technique right here on this page. If you want to kick the tires right now, try some of these things:</p>
        <ul>
          <li>SSH into your Droplet and modify this script at <code>/var/www/html/hello.js</code> and see the results live by calling <code>pm2 restart hello</code></li>
          <li>Run <code>pm2 list</code> to see code scheduled to start at boot time</li>
          <li>Run <code>pm2 delete hello</code> to stop running this script and <code>pm2 save</code> to stop it from running on Droplet boot</li>
        </ul>
        <h2>Get your code on here</h2>
        <ul>
          <li>SSH into your Droplet, and <code>git clone</code> your NodeJS code onto the droplet, anywhere you like</li>
          <ul>
            <li>Note: If you're not using a source control, you can <a href="https://www.digitalocean.com/docs/droplets/how-to/transfer-files/">directly upload the files to your droplet using SFTP</a>.
          </ul>
          <li><code>cd</code> into the directory where your NodeJS code lives, and install any dependencies. For example, if you have a <code>package.json</code> file, run <code>npm install</code>.
          <li>Launch your app by calling <code>pm2 start &lt;your-file&gt;</code>, then map the port your app runs on to an HTTP URL by running <code>nano /etc/nginx/sites-available/default</code> and adding another <code>location</code>. Use the existing entry for the port 3000 "hello" app as a basis.</li>
          <li>Call <code>sudo systemctl restart nginx</code> to enable your new nginx config.</li>
          <li>Call <code>pm2 save</code> to schedule your code to run at launch.</li>
          <li>Repeat these steps for any other NodeJS apps that need to run concurrently -- schedule them to run at boot time on whatever internal port you like using PM2, then map that port to an HTTP/HTTPS URL in the nginx config. Build out the URL directory structure you need by mapping applications to URL paths; that's the reverse proxy method in a nutshell!</code>
        </ul>
        <h2>Get production-ready</h2>
        <p>There's a lot you'll want to do to make sure you're production-ready.</p>
        <ul>
          <li><a href="https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04">Set up a non-root user for day-to-day use</a></li>
          <li>Review your firewall settings by calling <code>sudo ufw status</code>, and make any changes you need. By default, only SSH/SFTP (port 22), HTTP (port 80), and HTTPS (port 443) are open. You can also disable this firewall by calling <code>sudo ufw disable</code> and <a href="https://www.digitalocean.com/docs/networking/firewalls/">use a DigitalOcean cloud firewall</a> instead, if you like (they're free).</li>
          <li><a href="https://www.digitalocean.com/docs/networking/dns/quickstart/">Register a custom domain</a></li>
          <li>Have data needs? You can mount a
    Found 2026-01-24 by HttpPlugin
    Create report
  • Open service 104.21.2.212:8443 · capturinglife.org

    2026-01-24 14:45

    HTTP/1.1 522 <none>
    Date: Sat, 24 Jan 2026 14:46:13 GMT
    Content-Type: text/plain; charset=UTF-8
    Content-Length: 15
    Connection: close
    Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Expires: Thu, 01 Jan 1970 00:00:01 GMT
    Referrer-Policy: same-origin
    X-Frame-Options: SAMEORIGIN
    Server: cloudflare
    CF-RAY: 9c3051309d337a4a-LHR
    alt-svc: h3=":8443"; ma=86400
    
    
    error code: 522
    Found 2026-01-24 by HttpPlugin
    Create report
  • Open service 104.21.2.212:80 · capturinglife.org

    2026-01-24 14:45

    HTTP/1.1 200 OK
    Date: Sat, 24 Jan 2026 14:45:52 GMT
    Content-Type: text/html
    Transfer-Encoding: chunked
    Connection: close
    Server: cloudflare
    Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
    Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=Ndb06DzhcVCRv6FMKeR2HXWfyhGHUsySKP72rKtoHNlGQU2xpao4uahR3wMJ6Y3rgGYGnyob%2BPvmpEzGP29ZcBymc9bkvFKhlOzrVbOQ1uOC"}]}
    vary: accept-encoding
    cf-cache-status: DYNAMIC
    CF-RAY: 9c30512b6a450d18-FRA
    alt-svc: h3=":443"; ma=86400
    
    Page title: Your NodeJS Droplet
    
    
    <!DOCTYPE html>
    <html>
    <head>
    <title>Your NodeJS Droplet</title>
    <style>
        body {
            width: 55em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
            background: #AAAAAA;
        }
        div {
          padding: 30px;
          background: #FFFFFF;
          margin: 30px;
          border-radius: 5px;
          border: 1px solid #888888;
        }
        code {
          font-size: 16px;
          background: #DDDDDD;
        }
    </style>
    </head>
    <body>
      <div>
        <h1>Sammy welcomes you to your Droplet!</h1>
        <img src="/assets/sammytheshark.gif" />
        <h2>Things to do with this script</h2>
        <p>This message is coming to you via a simple NodeJS application that's live on your Droplet! This droplet is all set up with NodeJS, PM2 for process management, and nginx.</p>
        <p>Run all pm2 commands using the nodejs user or a second instance of pm2 will start. The login and password are stored in the <code>NODE_USER*</code> values you see when you call  <code>cat /root/.digitalocean_passwords</code> while logged in over SSH.</p>
        <p>This app is running at port 3000, and is being served to you by nginx, which has mapped port 3000 to be served as the root URI over HTTP (port 80) -- a technique known as a "reverse proxy." We'll be teaching you how to use this technique right here on this page. If you want to kick the tires right now, try some of these things:</p>
        <ul>
          <li>SSH into your Droplet and modify this script at <code>/var/www/html/hello.js</code> and see the results live by calling <code>pm2 restart hello</code></li>
          <li>Run <code>pm2 list</code> to see code scheduled to start at boot time</li>
          <li>Run <code>pm2 delete hello</code> to stop running this script and <code>pm2 save</code> to stop it from running on Droplet boot</li>
        </ul>
        <h2>Get your code on here</h2>
        <ul>
          <li>SSH into your Droplet, and <code>git clone</code> your NodeJS code onto the droplet, anywhere you like</li>
          <ul>
            <li>Note: If you're not using a source control, you can <a href="https://www.digitalocean.com/docs/droplets/how-to/transfer-files/">directly upload the files to your droplet using SFTP</a>.
          </ul>
          <li><code>cd</code> into the directory where your NodeJS code lives, and install any dependencies. For example, if you have a <code>package.json</code> file, run <code>npm install</code>.
          <li>Launch your app by calling <code>pm2 start &lt;your-file&gt;</code>, then map the port your app runs on to an HTTP URL by running <code>nano /etc/nginx/sites-available/default</code> and adding another <code>location</code>. Use the existing entry for the port 3000 "hello" app as a basis.</li>
          <li>Call <code>sudo systemctl restart nginx</code> to enable your new nginx config.</li>
          <li>Call <code>pm2 save</code> to schedule your code to run at launch.</li>
          <li>Repeat these steps for any other NodeJS apps that need to run concurrently -- schedule them to run at boot time on whatever internal port you like using PM2, then map that port to an HTTP/HTTPS URL in the nginx config. Build out the URL directory structure you need by mapping applications to URL paths; that's the reverse proxy method in a nutshell!</code>
        </ul>
        <h2>Get production-ready</h2>
        <p>There's a lot you'll want to do to make sure you're production-ready.</p>
        <ul>
          <li><a href="https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04">Set up a non-root user for day-to-day use</a></li>
          <li>Review your firewall settings by calling <code>sudo ufw status</code>, and make any changes you need. By default, only SSH/SFTP (port 22), HTTP (port 80), and HTTPS (port 443) are open. You can also disable this firewall by calling <code>sudo ufw disable</code> and <a href="https://www.digitalocean.com/docs/networking/firewalls/">use a DigitalOcean cloud firewall</a> instead, if you like (they're free).</li>
          <li><a href="https://www.digitalocean.com/docs/networking/dns/quickstart/">Register a custom domain</a></li>
          <li>Have data needs? You can mount a
    Found 2026-01-24 by HttpPlugin
    Create report
  • Open service 2606:4700:3037::ac43:81b4:8443 · capturinglife.org

    2026-01-12 00:15

    HTTP/1.1 522 <none>
    Date: Mon, 12 Jan 2026 00:15:57 GMT
    Content-Type: text/plain; charset=UTF-8
    Content-Length: 15
    Connection: close
    Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Expires: Thu, 01 Jan 1970 00:00:01 GMT
    Referrer-Policy: same-origin
    Server-Timing: cfEdge;dur=19445,cfOrigin;dur=0
    X-Frame-Options: SAMEORIGIN
    Server: cloudflare
    CF-RAY: 9bc875e5ed646e08-EWR
    alt-svc: h3=":8443"; ma=86400
    
    
    error code: 522
    Found 2026-01-12 by HttpPlugin
    Create report
  • Open service 2606:4700:3037::6815:2d4:443 · capturinglife.org

    2026-01-12 00:15

    HTTP/1.1 200 OK
    Date: Mon, 12 Jan 2026 00:15:36 GMT
    Content-Type: text/html
    Transfer-Encoding: chunked
    Connection: close
    Server: cloudflare
    Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
    Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=nKo4MlLNyV55z5VfHyM5le%2B7oWxB4WpRqHLWKk9wd0Bz4uYStJGt8Gsra6%2FiranAj2tTHDAaG7J8ZxfRRulbvsdku5ykTVkcJ3uy7WtwHqOYgNzuntZqdWD%2BpnCl"}]}
    vary: accept-encoding
    cf-cache-status: DYNAMIC
    Server-Timing: cfCacheStatus;desc="DYNAMIC"
    Server-Timing: cfEdge;dur=75,cfOrigin;dur=2
    CF-RAY: 9bc875dfae9f5e39-EWR
    alt-svc: h3=":443"; ma=86400
    
    Page title: Your NodeJS Droplet
    
    
    <!DOCTYPE html>
    <html>
    <head>
    <title>Your NodeJS Droplet</title>
    <style>
        body {
            width: 55em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
            background: #AAAAAA;
        }
        div {
          padding: 30px;
          background: #FFFFFF;
          margin: 30px;
          border-radius: 5px;
          border: 1px solid #888888;
        }
        code {
          font-size: 16px;
          background: #DDDDDD;
        }
    </style>
    </head>
    <body>
      <div>
        <h1>Sammy welcomes you to your Droplet!</h1>
        <img src="/assets/sammytheshark.gif" />
        <h2>Things to do with this script</h2>
        <p>This message is coming to you via a simple NodeJS application that's live on your Droplet! This droplet is all set up with NodeJS, PM2 for process management, and nginx.</p>
        <p>Run all pm2 commands using the nodejs user or a second instance of pm2 will start. The login and password are stored in the <code>NODE_USER*</code> values you see when you call  <code>cat /root/.digitalocean_passwords</code> while logged in over SSH.</p>
        <p>This app is running at port 3000, and is being served to you by nginx, which has mapped port 3000 to be served as the root URI over HTTP (port 80) -- a technique known as a "reverse proxy." We'll be teaching you how to use this technique right here on this page. If you want to kick the tires right now, try some of these things:</p>
        <ul>
          <li>SSH into your Droplet and modify this script at <code>/var/www/html/hello.js</code> and see the results live by calling <code>pm2 restart hello</code></li>
          <li>Run <code>pm2 list</code> to see code scheduled to start at boot time</li>
          <li>Run <code>pm2 delete hello</code> to stop running this script and <code>pm2 save</code> to stop it from running on Droplet boot</li>
        </ul>
        <h2>Get your code on here</h2>
        <ul>
          <li>SSH into your Droplet, and <code>git clone</code> your NodeJS code onto the droplet, anywhere you like</li>
          <ul>
            <li>Note: If you're not using a source control, you can <a href="https://www.digitalocean.com/docs/droplets/how-to/transfer-files/">directly upload the files to your droplet using SFTP</a>.
          </ul>
          <li><code>cd</code> into the directory where your NodeJS code lives, and install any dependencies. For example, if you have a <code>package.json</code> file, run <code>npm install</code>.
          <li>Launch your app by calling <code>pm2 start &lt;your-file&gt;</code>, then map the port your app runs on to an HTTP URL by running <code>nano /etc/nginx/sites-available/default</code> and adding another <code>location</code>. Use the existing entry for the port 3000 "hello" app as a basis.</li>
          <li>Call <code>sudo systemctl restart nginx</code> to enable your new nginx config.</li>
          <li>Call <code>pm2 save</code> to schedule your code to run at launch.</li>
          <li>Repeat these steps for any other NodeJS apps that need to run concurrently -- schedule them to run at boot time on whatever internal port you like using PM2, then map that port to an HTTP/HTTPS URL in the nginx config. Build out the URL directory structure you need by mapping applications to URL paths; that's the reverse proxy method in a nutshell!</code>
        </ul>
        <h2>Get production-ready</h2>
        <p>There's a lot you'll want to do to make sure you're production-ready.</p>
        <ul>
          <li><a href="https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04">Set up a non-root user for day-to-day use</a></li>
          <li>Review your firewall settings by calling <code>sudo ufw status</code>, and make any changes you need. By default, only SSH/SFTP (port 22), HTTP (port 80), and HTTPS (port 443) are open. You can also disable this firewall by calling <code>sudo ufw disable</code> and <a href="https://www.digitalocean.com/docs/networking/firewalls/">use a DigitalOcean cloud firewall</a> instead, if you like (they're free).</li>
          <li><a href="https://www.digitalocean.com/docs/networking/dns/quickstart/">Register a custom domain</a></li>
          <li>Have data needs? You can mount a
    Found 2026-01-12 by HttpPlugin
    Create report
  • Open service 2606:4700:3037::ac43:81b4:80 · capturinglife.org

    2026-01-12 00:15

    HTTP/1.1 200 OK
    Date: Mon, 12 Jan 2026 00:15:37 GMT
    Content-Type: text/html
    Transfer-Encoding: chunked
    Connection: close
    Server: cloudflare
    Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
    Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=2uyCKfpilyidcuyikuB9c0eknz34%2F%2BE2BoT9jAV6agCWlmupNWW2kKsHQKIdpQHc%2BKCTRAW91H2KBNCgGwnZ05t0urWscIEMQep10qN6jISsCIHiyayGnL%2BRSS2C"}]}
    vary: accept-encoding
    cf-cache-status: DYNAMIC
    CF-RAY: 9bc875df9828651b-FRA
    alt-svc: h3=":443"; ma=86400
    
    Page title: Your NodeJS Droplet
    
    
    <!DOCTYPE html>
    <html>
    <head>
    <title>Your NodeJS Droplet</title>
    <style>
        body {
            width: 55em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
            background: #AAAAAA;
        }
        div {
          padding: 30px;
          background: #FFFFFF;
          margin: 30px;
          border-radius: 5px;
          border: 1px solid #888888;
        }
        code {
          font-size: 16px;
          background: #DDDDDD;
        }
    </style>
    </head>
    <body>
      <div>
        <h1>Sammy welcomes you to your Droplet!</h1>
        <img src="/assets/sammytheshark.gif" />
        <h2>Things to do with this script</h2>
        <p>This message is coming to you via a simple NodeJS application that's live on your Droplet! This droplet is all set up with NodeJS, PM2 for process management, and nginx.</p>
        <p>Run all pm2 commands using the nodejs user or a second instance of pm2 will start. The login and password are stored in the <code>NODE_USER*</code> values you see when you call  <code>cat /root/.digitalocean_passwords</code> while logged in over SSH.</p>
        <p>This app is running at port 3000, and is being served to you by nginx, which has mapped port 3000 to be served as the root URI over HTTP (port 80) -- a technique known as a "reverse proxy." We'll be teaching you how to use this technique right here on this page. If you want to kick the tires right now, try some of these things:</p>
        <ul>
          <li>SSH into your Droplet and modify this script at <code>/var/www/html/hello.js</code> and see the results live by calling <code>pm2 restart hello</code></li>
          <li>Run <code>pm2 list</code> to see code scheduled to start at boot time</li>
          <li>Run <code>pm2 delete hello</code> to stop running this script and <code>pm2 save</code> to stop it from running on Droplet boot</li>
        </ul>
        <h2>Get your code on here</h2>
        <ul>
          <li>SSH into your Droplet, and <code>git clone</code> your NodeJS code onto the droplet, anywhere you like</li>
          <ul>
            <li>Note: If you're not using a source control, you can <a href="https://www.digitalocean.com/docs/droplets/how-to/transfer-files/">directly upload the files to your droplet using SFTP</a>.
          </ul>
          <li><code>cd</code> into the directory where your NodeJS code lives, and install any dependencies. For example, if you have a <code>package.json</code> file, run <code>npm install</code>.
          <li>Launch your app by calling <code>pm2 start &lt;your-file&gt;</code>, then map the port your app runs on to an HTTP URL by running <code>nano /etc/nginx/sites-available/default</code> and adding another <code>location</code>. Use the existing entry for the port 3000 "hello" app as a basis.</li>
          <li>Call <code>sudo systemctl restart nginx</code> to enable your new nginx config.</li>
          <li>Call <code>pm2 save</code> to schedule your code to run at launch.</li>
          <li>Repeat these steps for any other NodeJS apps that need to run concurrently -- schedule them to run at boot time on whatever internal port you like using PM2, then map that port to an HTTP/HTTPS URL in the nginx config. Build out the URL directory structure you need by mapping applications to URL paths; that's the reverse proxy method in a nutshell!</code>
        </ul>
        <h2>Get production-ready</h2>
        <p>There's a lot you'll want to do to make sure you're production-ready.</p>
        <ul>
          <li><a href="https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04">Set up a non-root user for day-to-day use</a></li>
          <li>Review your firewall settings by calling <code>sudo ufw status</code>, and make any changes you need. By default, only SSH/SFTP (port 22), HTTP (port 80), and HTTPS (port 443) are open. You can also disable this firewall by calling <code>sudo ufw disable</code> and <a href="https://www.digitalocean.com/docs/networking/firewalls/">use a DigitalOcean cloud firewall</a> instead, if you like (they're free).</li>
          <li><a href="https://www.digitalocean.com/docs/networking/dns/quickstart/">Register a custom domain</a></li>
          <li>Have data needs? You can mount a
    Found 2026-01-12 by HttpPlugin
    Create report
  • Open service 104.21.2.212:443 · capturinglife.org

    2026-01-12 00:15

    HTTP/1.1 200 OK
    Date: Mon, 12 Jan 2026 00:15:37 GMT
    Content-Type: text/html
    Transfer-Encoding: chunked
    Connection: close
    Server: cloudflare
    Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
    Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=6gT5qa4LsC9IWHEkGIORiVe4lGaT0lxfh1WzyVbXajp6WRG3CIzOyYX%2FhLAZBKIi0GlOck5uXdXYcOxWPVOf0T6K29GvI%2BKTBv6MTHjyMnJj"}]}
    vary: accept-encoding
    cf-cache-status: DYNAMIC
    CF-RAY: 9bc875df7ca31ce4-FRA
    alt-svc: h3=":443"; ma=86400
    
    Page title: Your NodeJS Droplet
    
    
    <!DOCTYPE html>
    <html>
    <head>
    <title>Your NodeJS Droplet</title>
    <style>
        body {
            width: 55em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
            background: #AAAAAA;
        }
        div {
          padding: 30px;
          background: #FFFFFF;
          margin: 30px;
          border-radius: 5px;
          border: 1px solid #888888;
        }
        code {
          font-size: 16px;
          background: #DDDDDD;
        }
    </style>
    </head>
    <body>
      <div>
        <h1>Sammy welcomes you to your Droplet!</h1>
        <img src="/assets/sammytheshark.gif" />
        <h2>Things to do with this script</h2>
        <p>This message is coming to you via a simple NodeJS application that's live on your Droplet! This droplet is all set up with NodeJS, PM2 for process management, and nginx.</p>
        <p>Run all pm2 commands using the nodejs user or a second instance of pm2 will start. The login and password are stored in the <code>NODE_USER*</code> values you see when you call  <code>cat /root/.digitalocean_passwords</code> while logged in over SSH.</p>
        <p>This app is running at port 3000, and is being served to you by nginx, which has mapped port 3000 to be served as the root URI over HTTP (port 80) -- a technique known as a "reverse proxy." We'll be teaching you how to use this technique right here on this page. If you want to kick the tires right now, try some of these things:</p>
        <ul>
          <li>SSH into your Droplet and modify this script at <code>/var/www/html/hello.js</code> and see the results live by calling <code>pm2 restart hello</code></li>
          <li>Run <code>pm2 list</code> to see code scheduled to start at boot time</li>
          <li>Run <code>pm2 delete hello</code> to stop running this script and <code>pm2 save</code> to stop it from running on Droplet boot</li>
        </ul>
        <h2>Get your code on here</h2>
        <ul>
          <li>SSH into your Droplet, and <code>git clone</code> your NodeJS code onto the droplet, anywhere you like</li>
          <ul>
            <li>Note: If you're not using a source control, you can <a href="https://www.digitalocean.com/docs/droplets/how-to/transfer-files/">directly upload the files to your droplet using SFTP</a>.
          </ul>
          <li><code>cd</code> into the directory where your NodeJS code lives, and install any dependencies. For example, if you have a <code>package.json</code> file, run <code>npm install</code>.
          <li>Launch your app by calling <code>pm2 start &lt;your-file&gt;</code>, then map the port your app runs on to an HTTP URL by running <code>nano /etc/nginx/sites-available/default</code> and adding another <code>location</code>. Use the existing entry for the port 3000 "hello" app as a basis.</li>
          <li>Call <code>sudo systemctl restart nginx</code> to enable your new nginx config.</li>
          <li>Call <code>pm2 save</code> to schedule your code to run at launch.</li>
          <li>Repeat these steps for any other NodeJS apps that need to run concurrently -- schedule them to run at boot time on whatever internal port you like using PM2, then map that port to an HTTP/HTTPS URL in the nginx config. Build out the URL directory structure you need by mapping applications to URL paths; that's the reverse proxy method in a nutshell!</code>
        </ul>
        <h2>Get production-ready</h2>
        <p>There's a lot you'll want to do to make sure you're production-ready.</p>
        <ul>
          <li><a href="https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04">Set up a non-root user for day-to-day use</a></li>
          <li>Review your firewall settings by calling <code>sudo ufw status</code>, and make any changes you need. By default, only SSH/SFTP (port 22), HTTP (port 80), and HTTPS (port 443) are open. You can also disable this firewall by calling <code>sudo ufw disable</code> and <a href="https://www.digitalocean.com/docs/networking/firewalls/">use a DigitalOcean cloud firewall</a> instead, if you like (they're free).</li>
          <li><a href="https://www.digitalocean.com/docs/networking/dns/quickstart/">Register a custom domain</a></li>
          <li>Have data needs? You can mount a
    Found 2026-01-12 by HttpPlugin
    Create report
  • Open service 172.67.129.180:8443 · capturinglife.org

    2026-01-12 00:15

    HTTP/1.1 522 <none>
    Date: Mon, 12 Jan 2026 00:15:57 GMT
    Content-Type: text/plain; charset=UTF-8
    Content-Length: 15
    Connection: close
    Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Expires: Thu, 01 Jan 1970 00:00:01 GMT
    Referrer-Policy: same-origin
    X-Frame-Options: SAMEORIGIN
    Server: cloudflare
    CF-RAY: 9bc875e51eae1cbf-FRA
    alt-svc: h3=":8443"; ma=86400
    
    
    error code: 522
    Found 2026-01-12 by HttpPlugin
    Create report
  • Open service 172.67.129.180:80 · capturinglife.org

    2026-01-12 00:15

    HTTP/1.1 200 OK
    Date: Mon, 12 Jan 2026 00:15:36 GMT
    Content-Type: text/html
    Transfer-Encoding: chunked
    Connection: close
    Server: cloudflare
    Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
    Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=H3wPqWAg%2FyCa6W8W%2FgBi%2B8zYCkvcVY5AvZ3vgHZV5ZtPtsDLHL5e3GQLXYPwE5cv7jI5UEjyGnZ9XfnyVab1zHWvKlZS6reZZOLZf7z%2FGkF1"}]}
    vary: accept-encoding
    cf-cache-status: DYNAMIC
    Server-Timing: cfCacheStatus;desc="DYNAMIC"
    Server-Timing: cfEdge;dur=158,cfOrigin;dur=2
    CF-RAY: 9bc875decbcf8c30-EWR
    alt-svc: h3=":443"; ma=86400
    
    Page title: Your NodeJS Droplet
    
    
    <!DOCTYPE html>
    <html>
    <head>
    <title>Your NodeJS Droplet</title>
    <style>
        body {
            width: 55em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
            background: #AAAAAA;
        }
        div {
          padding: 30px;
          background: #FFFFFF;
          margin: 30px;
          border-radius: 5px;
          border: 1px solid #888888;
        }
        code {
          font-size: 16px;
          background: #DDDDDD;
        }
    </style>
    </head>
    <body>
      <div>
        <h1>Sammy welcomes you to your Droplet!</h1>
        <img src="/assets/sammytheshark.gif" />
        <h2>Things to do with this script</h2>
        <p>This message is coming to you via a simple NodeJS application that's live on your Droplet! This droplet is all set up with NodeJS, PM2 for process management, and nginx.</p>
        <p>Run all pm2 commands using the nodejs user or a second instance of pm2 will start. The login and password are stored in the <code>NODE_USER*</code> values you see when you call  <code>cat /root/.digitalocean_passwords</code> while logged in over SSH.</p>
        <p>This app is running at port 3000, and is being served to you by nginx, which has mapped port 3000 to be served as the root URI over HTTP (port 80) -- a technique known as a "reverse proxy." We'll be teaching you how to use this technique right here on this page. If you want to kick the tires right now, try some of these things:</p>
        <ul>
          <li>SSH into your Droplet and modify this script at <code>/var/www/html/hello.js</code> and see the results live by calling <code>pm2 restart hello</code></li>
          <li>Run <code>pm2 list</code> to see code scheduled to start at boot time</li>
          <li>Run <code>pm2 delete hello</code> to stop running this script and <code>pm2 save</code> to stop it from running on Droplet boot</li>
        </ul>
        <h2>Get your code on here</h2>
        <ul>
          <li>SSH into your Droplet, and <code>git clone</code> your NodeJS code onto the droplet, anywhere you like</li>
          <ul>
            <li>Note: If you're not using a source control, you can <a href="https://www.digitalocean.com/docs/droplets/how-to/transfer-files/">directly upload the files to your droplet using SFTP</a>.
          </ul>
          <li><code>cd</code> into the directory where your NodeJS code lives, and install any dependencies. For example, if you have a <code>package.json</code> file, run <code>npm install</code>.
          <li>Launch your app by calling <code>pm2 start &lt;your-file&gt;</code>, then map the port your app runs on to an HTTP URL by running <code>nano /etc/nginx/sites-available/default</code> and adding another <code>location</code>. Use the existing entry for the port 3000 "hello" app as a basis.</li>
          <li>Call <code>sudo systemctl restart nginx</code> to enable your new nginx config.</li>
          <li>Call <code>pm2 save</code> to schedule your code to run at launch.</li>
          <li>Repeat these steps for any other NodeJS apps that need to run concurrently -- schedule them to run at boot time on whatever internal port you like using PM2, then map that port to an HTTP/HTTPS URL in the nginx config. Build out the URL directory structure you need by mapping applications to URL paths; that's the reverse proxy method in a nutshell!</code>
        </ul>
        <h2>Get production-ready</h2>
        <p>There's a lot you'll want to do to make sure you're production-ready.</p>
        <ul>
          <li><a href="https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04">Set up a non-root user for day-to-day use</a></li>
          <li>Review your firewall settings by calling <code>sudo ufw status</code>, and make any changes you need. By default, only SSH/SFTP (port 22), HTTP (port 80), and HTTPS (port 443) are open. You can also disable this firewall by calling <code>sudo ufw disable</code> and <a href="https://www.digitalocean.com/docs/networking/firewalls/">use a DigitalOcean cloud firewall</a> instead, if you like (they're free).</li>
          <li><a href="https://www.digitalocean.com/docs/networking/dns/quickstart/">Register a custom domain</a></li>
          <li>Have data needs? You can mount a
    Found 2026-01-12 by HttpPlugin
    Create report
  • Open service 2606:4700:3037::ac43:81b4:443 · capturinglife.org

    2026-01-12 00:15

    HTTP/1.1 200 OK
    Date: Mon, 12 Jan 2026 00:15:36 GMT
    Content-Type: text/html
    Transfer-Encoding: chunked
    Connection: close
    Server: cloudflare
    Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
    Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=96qCRXNDwhEXsbtjPxqT2Gzd%2FNf0NMCve6mNYCijCfVbTgJ1ajemzXzgQziSitetWp%2FZ1p4a0caDPHFWkUTImWwR%2FQ247caktWuYrimzdhWMRluAvhW6U%2BCdUQ%3D%3D"}]}
    vary: accept-encoding
    cf-cache-status: DYNAMIC
    Server-Timing: cfCacheStatus;desc="DYNAMIC"
    Server-Timing: cfEdge;dur=72,cfOrigin;dur=3
    CF-RAY: 9bc875ded9ac9608-EWR
    alt-svc: h3=":443"; ma=86400
    
    Page title: Your NodeJS Droplet
    
    
    <!DOCTYPE html>
    <html>
    <head>
    <title>Your NodeJS Droplet</title>
    <style>
        body {
            width: 55em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
            background: #AAAAAA;
        }
        div {
          padding: 30px;
          background: #FFFFFF;
          margin: 30px;
          border-radius: 5px;
          border: 1px solid #888888;
        }
        code {
          font-size: 16px;
          background: #DDDDDD;
        }
    </style>
    </head>
    <body>
      <div>
        <h1>Sammy welcomes you to your Droplet!</h1>
        <img src="/assets/sammytheshark.gif" />
        <h2>Things to do with this script</h2>
        <p>This message is coming to you via a simple NodeJS application that's live on your Droplet! This droplet is all set up with NodeJS, PM2 for process management, and nginx.</p>
        <p>Run all pm2 commands using the nodejs user or a second instance of pm2 will start. The login and password are stored in the <code>NODE_USER*</code> values you see when you call  <code>cat /root/.digitalocean_passwords</code> while logged in over SSH.</p>
        <p>This app is running at port 3000, and is being served to you by nginx, which has mapped port 3000 to be served as the root URI over HTTP (port 80) -- a technique known as a "reverse proxy." We'll be teaching you how to use this technique right here on this page. If you want to kick the tires right now, try some of these things:</p>
        <ul>
          <li>SSH into your Droplet and modify this script at <code>/var/www/html/hello.js</code> and see the results live by calling <code>pm2 restart hello</code></li>
          <li>Run <code>pm2 list</code> to see code scheduled to start at boot time</li>
          <li>Run <code>pm2 delete hello</code> to stop running this script and <code>pm2 save</code> to stop it from running on Droplet boot</li>
        </ul>
        <h2>Get your code on here</h2>
        <ul>
          <li>SSH into your Droplet, and <code>git clone</code> your NodeJS code onto the droplet, anywhere you like</li>
          <ul>
            <li>Note: If you're not using a source control, you can <a href="https://www.digitalocean.com/docs/droplets/how-to/transfer-files/">directly upload the files to your droplet using SFTP</a>.
          </ul>
          <li><code>cd</code> into the directory where your NodeJS code lives, and install any dependencies. For example, if you have a <code>package.json</code> file, run <code>npm install</code>.
          <li>Launch your app by calling <code>pm2 start &lt;your-file&gt;</code>, then map the port your app runs on to an HTTP URL by running <code>nano /etc/nginx/sites-available/default</code> and adding another <code>location</code>. Use the existing entry for the port 3000 "hello" app as a basis.</li>
          <li>Call <code>sudo systemctl restart nginx</code> to enable your new nginx config.</li>
          <li>Call <code>pm2 save</code> to schedule your code to run at launch.</li>
          <li>Repeat these steps for any other NodeJS apps that need to run concurrently -- schedule them to run at boot time on whatever internal port you like using PM2, then map that port to an HTTP/HTTPS URL in the nginx config. Build out the URL directory structure you need by mapping applications to URL paths; that's the reverse proxy method in a nutshell!</code>
        </ul>
        <h2>Get production-ready</h2>
        <p>There's a lot you'll want to do to make sure you're production-ready.</p>
        <ul>
          <li><a href="https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04">Set up a non-root user for day-to-day use</a></li>
          <li>Review your firewall settings by calling <code>sudo ufw status</code>, and make any changes you need. By default, only SSH/SFTP (port 22), HTTP (port 80), and HTTPS (port 443) are open. You can also disable this firewall by calling <code>sudo ufw disable</code> and <a href="https://www.digitalocean.com/docs/networking/firewalls/">use a DigitalOcean cloud firewall</a> instead, if you like (they're free).</li>
          <li><a href="https://www.digitalocean.com/docs/networking/dns/quickstart/">Register a custom domain</a></li>
          <li>Have data needs? You can mount a
    Found 2026-01-12 by HttpPlugin
    Create report
  • Open service 2606:4700:3037::6815:2d4:8443 · capturinglife.org

    2026-01-12 00:15

    HTTP/1.1 522 <none>
    Date: Mon, 12 Jan 2026 00:15:57 GMT
    Content-Type: text/plain; charset=UTF-8
    Content-Length: 15
    Connection: close
    Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Expires: Thu, 01 Jan 1970 00:00:01 GMT
    Referrer-Policy: same-origin
    X-Frame-Options: SAMEORIGIN
    Server: cloudflare
    CF-RAY: 9bc875e44e436674-AMS
    alt-svc: h3=":8443"; ma=86400
    
    
    error code: 522
    Found 2026-01-12 by HttpPlugin
    Create report
  • Open service 172.67.129.180:443 · capturinglife.org

    2026-01-12 00:15

    HTTP/1.1 200 OK
    Date: Mon, 12 Jan 2026 00:15:36 GMT
    Content-Type: text/html
    Transfer-Encoding: chunked
    Connection: close
    Server: cloudflare
    Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
    Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=BZfXe14HFERGbuwJY1O43cqjeuhPDr3DkPvC82l5vv5OqGI08CZO9ZpYCicXGHVTSngXamcJxhn9obBRDJS7TgXcSbju8%2BjHeo6tth955bIF"}]}
    vary: accept-encoding
    cf-cache-status: DYNAMIC
    Server-Timing: cfCacheStatus;desc="DYNAMIC"
    Server-Timing: cfEdge;dur=92,cfOrigin;dur=2
    CF-RAY: 9bc875decf37d8d9-YYZ
    alt-svc: h3=":443"; ma=86400
    
    Page title: Your NodeJS Droplet
    
    
    <!DOCTYPE html>
    <html>
    <head>
    <title>Your NodeJS Droplet</title>
    <style>
        body {
            width: 55em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
            background: #AAAAAA;
        }
        div {
          padding: 30px;
          background: #FFFFFF;
          margin: 30px;
          border-radius: 5px;
          border: 1px solid #888888;
        }
        code {
          font-size: 16px;
          background: #DDDDDD;
        }
    </style>
    </head>
    <body>
      <div>
        <h1>Sammy welcomes you to your Droplet!</h1>
        <img src="/assets/sammytheshark.gif" />
        <h2>Things to do with this script</h2>
        <p>This message is coming to you via a simple NodeJS application that's live on your Droplet! This droplet is all set up with NodeJS, PM2 for process management, and nginx.</p>
        <p>Run all pm2 commands using the nodejs user or a second instance of pm2 will start. The login and password are stored in the <code>NODE_USER*</code> values you see when you call  <code>cat /root/.digitalocean_passwords</code> while logged in over SSH.</p>
        <p>This app is running at port 3000, and is being served to you by nginx, which has mapped port 3000 to be served as the root URI over HTTP (port 80) -- a technique known as a "reverse proxy." We'll be teaching you how to use this technique right here on this page. If you want to kick the tires right now, try some of these things:</p>
        <ul>
          <li>SSH into your Droplet and modify this script at <code>/var/www/html/hello.js</code> and see the results live by calling <code>pm2 restart hello</code></li>
          <li>Run <code>pm2 list</code> to see code scheduled to start at boot time</li>
          <li>Run <code>pm2 delete hello</code> to stop running this script and <code>pm2 save</code> to stop it from running on Droplet boot</li>
        </ul>
        <h2>Get your code on here</h2>
        <ul>
          <li>SSH into your Droplet, and <code>git clone</code> your NodeJS code onto the droplet, anywhere you like</li>
          <ul>
            <li>Note: If you're not using a source control, you can <a href="https://www.digitalocean.com/docs/droplets/how-to/transfer-files/">directly upload the files to your droplet using SFTP</a>.
          </ul>
          <li><code>cd</code> into the directory where your NodeJS code lives, and install any dependencies. For example, if you have a <code>package.json</code> file, run <code>npm install</code>.
          <li>Launch your app by calling <code>pm2 start &lt;your-file&gt;</code>, then map the port your app runs on to an HTTP URL by running <code>nano /etc/nginx/sites-available/default</code> and adding another <code>location</code>. Use the existing entry for the port 3000 "hello" app as a basis.</li>
          <li>Call <code>sudo systemctl restart nginx</code> to enable your new nginx config.</li>
          <li>Call <code>pm2 save</code> to schedule your code to run at launch.</li>
          <li>Repeat these steps for any other NodeJS apps that need to run concurrently -- schedule them to run at boot time on whatever internal port you like using PM2, then map that port to an HTTP/HTTPS URL in the nginx config. Build out the URL directory structure you need by mapping applications to URL paths; that's the reverse proxy method in a nutshell!</code>
        </ul>
        <h2>Get production-ready</h2>
        <p>There's a lot you'll want to do to make sure you're production-ready.</p>
        <ul>
          <li><a href="https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04">Set up a non-root user for day-to-day use</a></li>
          <li>Review your firewall settings by calling <code>sudo ufw status</code>, and make any changes you need. By default, only SSH/SFTP (port 22), HTTP (port 80), and HTTPS (port 443) are open. You can also disable this firewall by calling <code>sudo ufw disable</code> and <a href="https://www.digitalocean.com/docs/networking/firewalls/">use a DigitalOcean cloud firewall</a> instead, if you like (they're free).</li>
          <li><a href="https://www.digitalocean.com/docs/networking/dns/quickstart/">Register a custom domain</a></li>
          <li>Have data needs? You can mount a
    Found 2026-01-12 by HttpPlugin
    Create report
  • Open service 104.21.2.212:80 · capturinglife.org

    2026-01-12 00:15

    HTTP/1.1 200 OK
    Date: Mon, 12 Jan 2026 00:15:37 GMT
    Content-Type: text/html
    Transfer-Encoding: chunked
    Connection: close
    Server: cloudflare
    Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
    Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=yzmn93hNqeqyASh2L8K6DLQeEMKnIpuVVA6X%2FH%2BZ8ovwbl8TWsmrdNONKWQqVG3hQONAH%2F0X%2Bv0Hy2ODvocokmpeMuKhu81mbjwUoBDYKQ%3D%3D"}]}
    vary: accept-encoding
    cf-cache-status: DYNAMIC
    Server-Timing: cfCacheStatus;desc="DYNAMIC"
    Server-Timing: cfEdge;dur=212,cfOrigin;dur=2
    CF-RAY: 9bc875df49f4678e-SIN
    alt-svc: h3=":443"; ma=86400
    
    Page title: Your NodeJS Droplet
    
    
    <!DOCTYPE html>
    <html>
    <head>
    <title>Your NodeJS Droplet</title>
    <style>
        body {
            width: 55em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
            background: #AAAAAA;
        }
        div {
          padding: 30px;
          background: #FFFFFF;
          margin: 30px;
          border-radius: 5px;
          border: 1px solid #888888;
        }
        code {
          font-size: 16px;
          background: #DDDDDD;
        }
    </style>
    </head>
    <body>
      <div>
        <h1>Sammy welcomes you to your Droplet!</h1>
        <img src="/assets/sammytheshark.gif" />
        <h2>Things to do with this script</h2>
        <p>This message is coming to you via a simple NodeJS application that's live on your Droplet! This droplet is all set up with NodeJS, PM2 for process management, and nginx.</p>
        <p>Run all pm2 commands using the nodejs user or a second instance of pm2 will start. The login and password are stored in the <code>NODE_USER*</code> values you see when you call  <code>cat /root/.digitalocean_passwords</code> while logged in over SSH.</p>
        <p>This app is running at port 3000, and is being served to you by nginx, which has mapped port 3000 to be served as the root URI over HTTP (port 80) -- a technique known as a "reverse proxy." We'll be teaching you how to use this technique right here on this page. If you want to kick the tires right now, try some of these things:</p>
        <ul>
          <li>SSH into your Droplet and modify this script at <code>/var/www/html/hello.js</code> and see the results live by calling <code>pm2 restart hello</code></li>
          <li>Run <code>pm2 list</code> to see code scheduled to start at boot time</li>
          <li>Run <code>pm2 delete hello</code> to stop running this script and <code>pm2 save</code> to stop it from running on Droplet boot</li>
        </ul>
        <h2>Get your code on here</h2>
        <ul>
          <li>SSH into your Droplet, and <code>git clone</code> your NodeJS code onto the droplet, anywhere you like</li>
          <ul>
            <li>Note: If you're not using a source control, you can <a href="https://www.digitalocean.com/docs/droplets/how-to/transfer-files/">directly upload the files to your droplet using SFTP</a>.
          </ul>
          <li><code>cd</code> into the directory where your NodeJS code lives, and install any dependencies. For example, if you have a <code>package.json</code> file, run <code>npm install</code>.
          <li>Launch your app by calling <code>pm2 start &lt;your-file&gt;</code>, then map the port your app runs on to an HTTP URL by running <code>nano /etc/nginx/sites-available/default</code> and adding another <code>location</code>. Use the existing entry for the port 3000 "hello" app as a basis.</li>
          <li>Call <code>sudo systemctl restart nginx</code> to enable your new nginx config.</li>
          <li>Call <code>pm2 save</code> to schedule your code to run at launch.</li>
          <li>Repeat these steps for any other NodeJS apps that need to run concurrently -- schedule them to run at boot time on whatever internal port you like using PM2, then map that port to an HTTP/HTTPS URL in the nginx config. Build out the URL directory structure you need by mapping applications to URL paths; that's the reverse proxy method in a nutshell!</code>
        </ul>
        <h2>Get production-ready</h2>
        <p>There's a lot you'll want to do to make sure you're production-ready.</p>
        <ul>
          <li><a href="https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04">Set up a non-root user for day-to-day use</a></li>
          <li>Review your firewall settings by calling <code>sudo ufw status</code>, and make any changes you need. By default, only SSH/SFTP (port 22), HTTP (port 80), and HTTPS (port 443) are open. You can also disable this firewall by calling <code>sudo ufw disable</code> and <a href="https://www.digitalocean.com/docs/networking/firewalls/">use a DigitalOcean cloud firewall</a> instead, if you like (they're free).</li>
          <li><a href="https://www.digitalocean.com/docs/networking/dns/quickstart/">Register a custom domain</a></li>
          <li>Have data needs? You can mount a
    Found 2026-01-12 by HttpPlugin
    Create report
  • Open service 104.21.2.212:8443 · capturinglife.org

    2026-01-12 00:15

    HTTP/1.1 522 <none>
    Date: Mon, 12 Jan 2026 00:15:57 GMT
    Content-Type: text/plain; charset=UTF-8
    Content-Length: 15
    Connection: close
    Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Expires: Thu, 01 Jan 1970 00:00:01 GMT
    Referrer-Policy: same-origin
    X-Frame-Options: SAMEORIGIN
    Server: cloudflare
    CF-RAY: 9bc875e47cd318dc-FRA
    alt-svc: h3=":8443"; ma=86400
    
    
    error code: 522
    Found 2026-01-12 by HttpPlugin
    Create report
  • Open service 2606:4700:3037::6815:2d4:80 · capturinglife.org

    2026-01-12 00:15

    HTTP/1.1 200 OK
    Date: Mon, 12 Jan 2026 00:15:36 GMT
    Content-Type: text/html
    Transfer-Encoding: chunked
    Connection: close
    Server: cloudflare
    Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
    Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=bijAPOHknWXe0JGJaiv9pW0dAmbKurMdI9CXAdNNXsQHyCmZdk9reayJh1TklW0%2FRu1BIjF5YdlpVXguQjuZDXLa2TlM%2BhrjwSODUozhHWoB97R8DYaTX1w6UyiQ"}]}
    vary: accept-encoding
    cf-cache-status: DYNAMIC
    Server-Timing: cfCacheStatus;desc="DYNAMIC"
    Server-Timing: cfEdge;dur=78,cfOrigin;dur=2
    CF-RAY: 9bc875de49833448-EWR
    alt-svc: h3=":443"; ma=86400
    
    Page title: Your NodeJS Droplet
    
    
    <!DOCTYPE html>
    <html>
    <head>
    <title>Your NodeJS Droplet</title>
    <style>
        body {
            width: 55em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
            background: #AAAAAA;
        }
        div {
          padding: 30px;
          background: #FFFFFF;
          margin: 30px;
          border-radius: 5px;
          border: 1px solid #888888;
        }
        code {
          font-size: 16px;
          background: #DDDDDD;
        }
    </style>
    </head>
    <body>
      <div>
        <h1>Sammy welcomes you to your Droplet!</h1>
        <img src="/assets/sammytheshark.gif" />
        <h2>Things to do with this script</h2>
        <p>This message is coming to you via a simple NodeJS application that's live on your Droplet! This droplet is all set up with NodeJS, PM2 for process management, and nginx.</p>
        <p>Run all pm2 commands using the nodejs user or a second instance of pm2 will start. The login and password are stored in the <code>NODE_USER*</code> values you see when you call  <code>cat /root/.digitalocean_passwords</code> while logged in over SSH.</p>
        <p>This app is running at port 3000, and is being served to you by nginx, which has mapped port 3000 to be served as the root URI over HTTP (port 80) -- a technique known as a "reverse proxy." We'll be teaching you how to use this technique right here on this page. If you want to kick the tires right now, try some of these things:</p>
        <ul>
          <li>SSH into your Droplet and modify this script at <code>/var/www/html/hello.js</code> and see the results live by calling <code>pm2 restart hello</code></li>
          <li>Run <code>pm2 list</code> to see code scheduled to start at boot time</li>
          <li>Run <code>pm2 delete hello</code> to stop running this script and <code>pm2 save</code> to stop it from running on Droplet boot</li>
        </ul>
        <h2>Get your code on here</h2>
        <ul>
          <li>SSH into your Droplet, and <code>git clone</code> your NodeJS code onto the droplet, anywhere you like</li>
          <ul>
            <li>Note: If you're not using a source control, you can <a href="https://www.digitalocean.com/docs/droplets/how-to/transfer-files/">directly upload the files to your droplet using SFTP</a>.
          </ul>
          <li><code>cd</code> into the directory where your NodeJS code lives, and install any dependencies. For example, if you have a <code>package.json</code> file, run <code>npm install</code>.
          <li>Launch your app by calling <code>pm2 start &lt;your-file&gt;</code>, then map the port your app runs on to an HTTP URL by running <code>nano /etc/nginx/sites-available/default</code> and adding another <code>location</code>. Use the existing entry for the port 3000 "hello" app as a basis.</li>
          <li>Call <code>sudo systemctl restart nginx</code> to enable your new nginx config.</li>
          <li>Call <code>pm2 save</code> to schedule your code to run at launch.</li>
          <li>Repeat these steps for any other NodeJS apps that need to run concurrently -- schedule them to run at boot time on whatever internal port you like using PM2, then map that port to an HTTP/HTTPS URL in the nginx config. Build out the URL directory structure you need by mapping applications to URL paths; that's the reverse proxy method in a nutshell!</code>
        </ul>
        <h2>Get production-ready</h2>
        <p>There's a lot you'll want to do to make sure you're production-ready.</p>
        <ul>
          <li><a href="https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04">Set up a non-root user for day-to-day use</a></li>
          <li>Review your firewall settings by calling <code>sudo ufw status</code>, and make any changes you need. By default, only SSH/SFTP (port 22), HTTP (port 80), and HTTPS (port 443) are open. You can also disable this firewall by calling <code>sudo ufw disable</code> and <a href="https://www.digitalocean.com/docs/networking/firewalls/">use a DigitalOcean cloud firewall</a> instead, if you like (they're free).</li>
          <li><a href="https://www.digitalocean.com/docs/networking/dns/quickstart/">Register a custom domain</a></li>
          <li>Have data needs? You can mount a
    Found 2026-01-12 by HttpPlugin
    Create report
capturinglife.org*.capturinglife.org
CN:
capturinglife.org
Key:
ECDSA-256
Issuer:
WE1
Not before:
2026-01-24 13:44
Not after:
2026-04-24 14:43
capturinglife.org*.capturinglife.org
CN:
capturinglife.org
Key:
ECDSA-256
Issuer:
WE1
Not before:
2025-11-26 11:04
Not after:
2026-02-24 12:02