User:Sn1per/Play on Tool Labs
Appearance
Congratulations, you want to learn Scala/Java. Here's how to set up a Play framework project on Tool Labs. I'm using IntelliJ IDEA.
- Open up IntelliJ IDEA (or whatever IDE you use) and make a new project. In IntelliJ (not sure about other IDEs) you can specify you want a Play project, and the IDE will generate a basic project.
- Build and run it to make sure it works.
- Change the Play configuration to fit Tool Labs.
# Secret key # ~~~~~ # The secret key is used to secure cryptographics functions. # If you deploy your application to several instances be sure to use the same key! # On Tool Labs, we will make a startup script that specifies play.crypto.secret # using a command line option reading from a private file. play.crypto.secret="changeme" # Port # ~~~~~ # On WMF Tool Labs, the port used by kubernetes webservice is 8000/TCP http.port=8000 # Disable PID file # ~~~~ # On Tool Labs, you do not need a PID file, since only one instance of the server runs in a container. # A PID file prevents the instance from restarting properly if Play crashes for whatever reason (which it seems to do after extended periods of time). pidfile.path = "/dev/null" # HTTP context # ~~~~~ # Your tool will be available at https://tools.wmflabs.org/$TOOLNAME/. # Play usually expects to be operating at the root of a domain, so this setting is # required for routes to work properly. play.http.context="/$TOOLNAME/"
- Create a Tool Labs project. If you haven't set up your Tool Labs logins and what not, see here.
- Become your project, put this project on Github, and then clone it onto Tool Labs (or get it onto your Tool Labs project somehow). Remember that Tool Labs projects should be open source.
- If you're using Scala, download the latest version of
sbt
because the version on Tool Labs is too old. I know that at least 0.3.11 will work with Play 2.5.4 as of July 2016.You now have a good version of$ cd ~ $ wget https://dl.bintray.com/sbt/native-packages/sbt/0.13.11/sbt-0.13.11.zip $ unzip sbt-0.13.11.zip $ rm sbt-0.13.11.zip
sbt
in~/sbt/bin/sbt
. - To build your project (at the moment, JDK 8 is only available within a Kubernetes pod), use
webservice --backend kubernetes jdk8 shell
to get a shell that has JDK 8.Your Play project should be built inside$ cd $PROJECT # go into your Play project directory $ ~/sbt/bin/sbt clean stage # or the Play activator, but you'll need to download Play similar to sbt
$PROJECT/target/universal/stage/
. - Decide on an application secret. Don't share it. Make a file at
~/app_secret
and make that string the only contents of that file. - Make the file secret:
chmod 440 ~/app_secret
- Now we can set up the webservice, using
webservice --backend=kubernetes jdk8 start '/data/project/$TOOLNAME/$PROJECT/target/universal/stage/bin/$PROJECT -Dplay.crypto.secret="$(cat /data/project/$TOOLNAME/app_secret)"'
. You can put this command in a shell script for convenience. - After rebuilding your application with
webservice shell
, you can then restart it by issuingwebservice restart
.