virtualMachineedx

Create a custom Node.js application

Many users run a Bitnami stack as a development environment for their own projects (as opposed to running third-party applications). To create a custom Node.js application from scratch, follow the steps below. These steps assume that your application will live in the /home/bitnami/projects/sample/ directory:

Step 1: Build and test a Node.js application

  • First, create a new folder to store your Express projects, such as the /opt/bitnami/projects directory, and give write permissions for the current system user:

    $ mkdir /opt/bitnami/projects
    $ sudo chown $USER /opt/bitnami/projects
    
  • Then, to create a new Express application, initialize a new project as below:

    $ cd /opt/bitnami/projects
    $ express --view pug sample
    $ cd sample
    $ npm install
    
  • The Express application can be started by using this command, and it will run on port 3000:

    $ DEBUG=sample:* ./bin/www
    

To access the application, browse to http://SERVER-IP:3000/. To end the application, terminate the running Express process.

NOTE: Access to the server on port 3000 may be blocked for security reasons. In this case, you must first create an SSH tunnel between your local system and the server before you can access the application. Follow these instructions.

Enable MongoDB for your project

You can connect your application with MongoDB using MongooseJS, an object modelling driver for Node.js. It is already installed by default so you only have to add the following lines to your app.js file:

var Mongoose = require('mongoose');
var db = Mongoose.createConnection('mongodb://USERNAME:PASSWORD@localhost/DATABASE');

NOTE: USERNAME, PASSWORD and DATABASE are placeholders for the database username, password and the database name, respectively. Learn How to obtain the MongoDB database credentials and How to create a MongoDB database and user.

Add AngularJS to your project

You can add AngularJS to your application with Bower. Create a file named .bowerrc in your application folder with the following content:

{ "directory" : "public/javascripts/vendor" }

Then, run this command in the project directory:

$ bower install angular

Step 2: Daemonize your application with Forever to keep it running

The next step is to daemonize your application, so that it keeps running in the background.

This example shows how to use Forever, since it is bundled in the Bitnami installation. You can use other service managers such as PM2 or nodemon.

$ forever start /opt/bitnami/projects/sample/bin/www

Step 3: Serve your application through the Apache web server

You can serve your application through the Apache web server by enabling a virtual host that connects to your application. To do that, follow the steps below.

Enable predefined virtual hosts for an Express application

The Bitnami installation comes with predefined HTTP and HTTPS virtual hosts for connecting to a Node.js application running at port 3000. To enable them, follow the steps below:

  • Copy the files to remove the .disabled suffix:

    $ sudo cp /opt/bitnami/apache/conf/vhosts/sample-http-vhost.conf.disabled /opt/bitnami/apache/conf/vhosts/sample-http-vhost.conf
    $ sudo cp /opt/bitnami/apache/conf/vhosts/sample-https-vhost.conf.disabled /opt/bitnami/apache/conf/vhosts/sample-https-vhost.conf
    
  • Restart Apache for the changes to be taken into effect:

    $ sudo /opt/bitnami/ctlscript.sh restart apache
    

Create a custom virtual host

If the predefined virtual hosts are not available to you, or you prefer to apply a custom configuration, follow the steps below:

  • Create and edit the /opt/bitnami/apache/conf/vhosts/myapp-http-vhost.conf file and add the following lines:

    <VirtualHost _default_:80>
      ServerAlias *
      DocumentRoot "/opt/bitnami/projects/myapp/public"
      <Directory "/opt/bitnami/projects/myapp/public">
        Require all granted
      </Directory>
      ProxyPass / http://localhost:3000/
      ProxyPassReverse / http://localhost:3000/
    </VirtualHost>
    
  • Create and edit the /opt/bitnami/apache/conf/vhosts/myapp-https-vhost.conf file and add the following lines:

    <VirtualHost _default_:80>
      ServerAlias *
      SSLEngine on
      SSLCertificateFile "/opt/bitnami/apache/conf/bitnami/certs/server.crt"
      SSLCertificateKeyFile "/opt/bitnami/apache/conf/bitnami/certs/server.key"
      DocumentRoot "/opt/bitnami/projects/myapp"
      <Directory "/opt/bitnami/projects/myapp">
        Require all granted
      </Directory>
      ProxyPass / http://localhost:3000/
      ProxyPassReverse / http://localhost:3000/
    </VirtualHost>
    
  • Restart the Apache server:

    $ sudo /opt/bitnami/ctlscript.sh restart apache
    

Step 4: Create an HTTPS certificate for Apache

To learn how to create an HTTPS certificate for Apache, refer to the Auto-configure a Let’s Encrypt certificate section.

Last modification May 11, 2020