Public | Automated Build

Last pushed: 3 months ago
Short Description
Yeast is a dedicated reverse proxy built on top of Nginx
Full Description


Yeast is a dedicated reverse proxy powered by Nginx with simple management UI.

When developping complicated web application/service, you may have a bunch of microservices running in docker containers in your PC. You might need to maintain a list of hostname/ip list or create a reverse proxy on hand for those containers to work. You may also need to create several copies of a microservice for testing purpose, and switch between them. You will find the switch process, normally modifying /etc/hosts or nginx settings, is painful. Things will be even worst when a new version released: You have to recreate containers to apply new microservice images, which means --link will be invalid, and ip of container might change.

A better way is using docker network: create a custom network, create and attach microservice containers to the network with --net, and place a reverse proxy before your microservices. But switch between different versions of a microservice is still painful: You have to modify settings of the reverse proxy and reload it.

Yeast provides simple web ui helping you do the switch job. It dynamically generates nginx setting file, and sends reload signal to nginx reverse proxy.

Getting start

You have to create a custom docker network, and connect all microservice containers with it.

Here use mysql, phpmyadmin and wordpress to simulate three microservices, so you can just copy-and-paste to your terminal/browser to try yeast.

# create custom network
docker network create mynet

# create and start your microservices, but unlike in production environment, don't expose 80 port
docker run -d --net mynet --name mysql -e MYSQL_ROOT_PASSWORD=my-secret mysql
docker run -d --net mynet --name pma -e PMA_HOST=mysql phpmyadmin/phpmyadmin
docker run -d --net mynet --name wp -e WORDPRESS_DB_HOST=mysql -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=my-secret wordpress

Then create yeast container in the network, so it can connect to your microservices with container name (mysql/pma/wp above).

# don't forget to expose 80 and 8080 port!
docker run -d --net mynet --name yeast -p 80:80 -p ronmi/yeast # expose 8080 only to localhost

Browse to and add two mapping entries: (don't forget to add an entry for in /etc/hosts)

  • Map to phpmyadmin
    • Server name: leave empty
    • Path: /pma/ (note about the slashes, it is nginx syntax)
    • Upstream: http://pma/ (again, this is nginx syntax, read nginx documentation for detail)
    • Custom tags: leave empty
  • Map to wordpress, and increase max request body size so yout can use upload function of wordpress.
    • Server name:
    • Path: /
    • Upstream: http://wp
    • Custom tags: client_max_body_size 250m;

Now you can try and in your browser.


Yeast is built on top of nginx in Debian stretch, and Debian provides three variants of nginx, each have different prebuilt modules

  • light: minimal set of features and modules
  • full: the complete set of standard modules
  • extras: standard modules, plus extra features and modules such as the Perl module

Default tag (latest) is pointed to light.


Yeast UI serves at separated port (default 8080) without any protection. You should make sure the port is not accessible through untrusted network. You can use firewall to ensure that. Binding it to localhost might be the most simple solution, since Yeast is mainly designed for test purpose.

docker run -d --name yeast -p 80:80 -p ronmi/yeast

After yeast 0.2.4, password authentication is supported, set a password via -e YEAST_PASSWORD=mypass and see what happends.


Copyright (C) 2016 Ronmi Ren

WTFPL, see LICENSE.txt for detail.

Docker Pull Command
Source Repository