nishith
nishith

Reputation: 1283

Add Java in Python Flask Cloud Foundry

I need to run java command from python flask application which is deployed using cf. How can we make java runtime available to this python flask app.

I tried using multi-buildpack, but java_buildpack expects some jar or war to be executed while deploying the application.

Any approach that would make java available to python flask app?

Upvotes: 2

Views: 1370

Answers (2)

Daniel Mikusa
Daniel Mikusa

Reputation: 15051

The last buildpack in the buildpack chain is responsible for determining a command to start your application which is why the Java buildpack expects a JAR/WAR to execute.

The Java buildpack, as of writing this, does not ship a supply script so it can only be run as the last buildpack when using multi buildpack support. It looks like that at some point in the future the Java buildpack will provide a supply script, but this is still being worked out here.


For now, what you can do is use the apt-buildpack and install a JRE/JDK that way.

To do this, add a file called apt.yml to the root of your project folder. In that file, put the following:

---
packages:
- openjdk-8-jre
repos:
- deb http://ppa.launchpad.net/openjdk-r/ppa/ubuntu trusty main
keys:
- https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xEB9B1D8886F44E2A

This will tell the apt buildpack to add a PPA for Ubuntu Trusty where we can get the latest openjdk8. This gets installed under /home/vcap/deps/0, which puts the java executable at /home/vcap/deps/0/lib/jvm/java-8-openjdk-amd64/bin/java.

Note: The java binary is unfortunately not on the path because of the way Ubuntu uses update-alternatives and we can't use that tool to put it on the path in the CF app container because we don't have root access.

After setting that up, you'd follow the normal instructions for using multiple buildpacks.

$ cf push YOUR-APP --no-start -b binary_buildpack
$ cf v3-push YOUR-APP -b https://github.com/cloudfoundry/apt-buildpack#v0.1.1 -b python_buildpack

Note: The process to push using multiple buildpacks will likely change in the future and v3-push, which is currently experimental, will go away.

Note: The example above hard codes version v0.1.1 of the apt buildpack. You should use the latest stable release, which you can find here. Using the master branch is not recommended.

Upvotes: 3

data_henrik
data_henrik

Reputation: 17176

One way to achieve your goal to combine Java and Python would be with context-based routing. I have an example to combines Python and Node.js, but the approach is the same.

Basically, you have a second app serving one or more paths of a domain / URI.

Upvotes: 0

Related Questions