You are browsing a read-only backup copy of Wikitech. The primary site can be found at wikitech.wikimedia.org

Help:Toolforge/Web/Node.js

From Wikitech-static
< Help:Toolforge‎ | Web
Revision as of 23:29, 9 August 2020 by imported>Oliver Graves
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Overview

Node.js can run fairly well on Toolforge including with websocket support by running the following steps.

Create a node.js web server

  1. Create a node.js web server. For example:
    var http = require('http');
    var port = parseInt(process.env.PORT, 10) ; // IMPORTANT!! You HAVE to use this environment variable as port!
    
    http.createServer(function (req, res) {
    	res.writeHead(200, {'Content-Type': 'text/plain'});
    	res.end('Hello World\n');
    }).listen(port);
    
  2. Save the web server as $HOME/www/js/server.js.
  3. Make sure your node.js web server starts up properly when npm start is executed. The default way to do this is to name your main script server.js.
  4. Your server should bind to a port that is passed in as an environment variable (PORT). You can access this via process.env.PORT. Without this, your tool will not be found by the Nginx proxy.

The toolforge-node-app-base template repository is available on github which has the above-mentioned setups already done and some further boilerplate code, which can be used to get started quickly.

Kubernetes Configuration

The webservice command accepts the following parameters:

webservice --backend=kubernetes node10 start|stop|restart|shell

Using --backend=kubernetes node10 is recommended so your code is executed with an up-to-date version of node (v10.15.2 as of November 2019).

  1. Put your node application in $HOME/www/js in your tool's home directory. It is a dictionary path hardcoded.[1]
  2. Start the web service with the following webservice --backend=kubernetes node10 start.
    • If the start fails you may need to create $HOME/www/js/package.json containing the text:
    {
        "scripts": {
            "start": "node server.js"
        }
    }
    
    • To restart after a code change, run webservice --backend=kubernetes node10 restart.
  3. Find your container's name by running kubectl get pods.
  4. Use the container name to check your container's logs kubectl logs -f $MY_CONTAINER_NAME.
  5. PROFIT! :)

Running npm with webservice shell

To use an up-to-date version of node, e.g. for installing dependencies, run:

  1. webservice --backend=kubernetes node10 shell
  2. cd $HOME/www/js
  3. npm install

Grid Engine Configuration

This is a legacy configuration and currently unsupported for new Tools accounts.

The webservice command accepts the following parameters:

webservice --backend=gridengine nodejs start|stop|restart

The Grid Engine backend provides node version v8.11.1 (as of November 2019).

  1. Put your node application in $HOME/www/js in your tool's home directory. It is a dictionary path hardcoded.[2]

Troubleshooting

  • If you run into errors doing npm install, try LINK=g++ npm install
  • If you can't access the kubectl executable, could it be that you started a webservice shell and didn't exit it?

Communication and support

Support and administration of the WMCS resources is provided by the Wikimedia Foundation Cloud Services team and Wikimedia movement volunteers. Please reach out with questions and join the conversation:

Discuss and receive general support
Receive mail announcements about critical changes
Subscribe to the cloud-announce@ mailing list (all messages are also mirrored to the cloud@ list)
Track work tasks and report bugs
Use the Phabricator workboard #Cloud-Services for bug reports and feature requests about the Cloud VPS infrastructure itself
Learn about major near-term plans
Read the News wiki page
Read news and stories about Wikimedia Cloud Services
Read the Cloud Services Blog (for the broader Wikimedia movement, see the Wikimedia Technical Blog)

See also