Configuring a Production Server

Page last updated:

This topic describes how to configure a production server for your apps.

When you deploy an app, PWS determines the command used to start the app through the following process:

  1. If the developer uses the command cf push -c COMMAND, then PWS uses COMMAND to start the app.

  2. If the developer creates a file called a Procfile, PWS uses the Procfile to configure the command that launches the app. See the About Procfiles section below for more information.

  3. If the developer does not use cf push -c COMMAND and does not create a Procfile, then PWS does one of the following, depending on the buildpack:

    • Uses a default start command.
    • Fails to start the app and shows a warning that the app is missing a Procfile.

About Procfiles

One reason to use a Procfile is specify a start command for buildpacks where a default start command is not provided. Some buildpacks, such as Python, that work on a variety of frameworks, do not attempt to provide a default start command.

Another reason to use a Procfile is to configure a production server for web apps.

A Procfile enables you to declare required runtime processes, called process types, for your web app. Process managers in a server use the process types to run and manage the workload. In a Procfile, you declare one process type per line and use the following syntax:

PROCESS_TYPE: COMMAND
  • PROCESS_TYPE is web. A web process handles HTTP traffic.
  • COMMAND is the command line to launch the process.

For example, a Procfile with the following content starts the launch script created by the build process for a Java app:

web: build/install/MY-PROJECT-NAME/bin/MY-PROJECT-NAME

Specify a Web Server

Follow these steps to specify a web server using a Procfile. For more information about configuring a web server for Rails apps, see the Configure a Ruby Web Server section of this topic.

  1. Create a blank file with a command line for a web process type.

  2. Save it as a file named Procfile with no extension in the root directory of your app.

  3. Push your app.

Configure a Ruby Web Server

PWS uses the default standard Ruby web server library WEBrick for Ruby and Ruby on Rails apps. However, PWS can support a more robust production web server, such as Phusion Passenger, Puma, Thin, or Unicorn.

To instruct PWS to use a web server other than WEBrick, perform the following steps:

  1. Add the gem for the web server to your Gemfile.

  2. In the config directory of your app, create a new configuration file or modify an existing file. Refer to your web server documentation for how to configure this file. The following example uses the Puma web server:

    # config/puma.rb
    threads 8,32
    workers 3
    
    on_worker_boot do
      # things workers do
    end
    
  3. In the root directory of your app, create a Procfile and add a command line for a web process type that points to your web server.
    For information about configuring the specific command for a process type, see your web server documentation.

    The following example shows a command that starts a Puma web server and specifies the app runtime environment, TCP port, and paths to the server state information and configuration files:

    web: bundle exec puma -e $RAILS_ENV -p 1234 -S ~/puma -C config/puma.rb
    
Create a pull request or raise an issue on the source for this page in GitHub