My Blog

How to use nginx on Travis (or other) CI system


Travis Ci is one of the most essential tools for my projects, since it takes a burden of maintaining Jenkins away of me. I try to use Travis automation for every boring activity, and having it run after each source code change to do some basic tests saves me a lot of time.

Making things work in Travis is typically straightforward, but there are cases where a special configuration needs to be applied, since the new Travis is based on the container-based architecture. This poses some requirements: no root access and no sudo functionality for your setup scripts. Some software doesn’t like that.

My website’s repo is an example where I needed to use nginx for some local testing. For some reason nginx, instead of just using /var/tmp, tries to create its temporary files in /var/run directory, and we don’t have the permission to this directory in a container. So I changed these paths to use /tmp together with access_log and error_log paths; website content lives in /tmp/www.

Even with these changes, I haven’t managed to achieve warning-free start. As non-zero UID, it seems like nginx never cleanly starts:

nginx: [alert] could not open error log file: open() “/var/log/nginx/error.log” failed (13: Permission denied)

(Its -p flag to change a prefix sounded promising, but it seemed to have no effect on any of the paths which caused me problems)

nginx installation

On the old Travis infrastructure one could use apt-get run as a part of script: directive, but the container-based Travis requires following lines in .travis.yml to install nginx package:

addons: apt: packages: - nginx

nginx config

worker_processes 10;
pid /tmp/;

error_log /tmp/error.log;

events {
 worker_connections 768;

http {
 client_body_temp_path /tmp/nginx_client_body;
 fastcgi_temp_path     /tmp/nginx_fastcgi_temp;
 proxy_temp_path       /tmp/nginx_proxy_temp;
 scgi_temp_path        /tmp/nginx_scgi_temp;
 uwsgi_temp_path       /tmp/nginx_uwsgi_temp;

 server {
  listen 8888 default_server;

  root /tmp/www;
  index index.html index.htm;

  server_name localhost;
  location / {
   try_files $uri $uri/ =404;
   autoindex on;
  error_log /tmp/error.log;
  access_log /tmp/access.log;

Click to download via GitHub Gist

Starting/stopping nginx

To start:

nginx -c pwd/etc/nginx.conf

To stop:

nginx -c pwd/etc/nginx.conf -s stop


I use a block of _temp_path directives from this very useful repository: