Category Archives: Linux

My Play Framework logrotate configuration

Here is another script I need to keep handy for the future. My logrotate script for Play Framework applications. The important thing here is the parameter “copytruncate”. I tried many times without it and the result was always the same: after the logrotate was done no more logging was made by the application. “copytruncate” solved this

/opt/myapp/logs/*.log {
  missingok
  notifempty
  size 50M
  copytruncate
  create 0644 root root
  rotate 9999
}

How to run logrotate manually:

logrotate --force /etc/logrotate.d/myapp

Tested on Ubuntu 14.04 and Play Framework 2.3

My Play Framework Upstart script

Recently I had to create a upstart script for a Play application and this was the result of that. I put it here so I don’t have to start from scratch next time 🙂

########################################################################################################
#
#                                       Upstart Script
#
# Upstart script for a play application. Put this into a file like /etc/init/tankmin.conf
#
# This could be the foundation for pushing play apps to the server using something like git-deploy
# By calling service play stop in the restart command and play-start in the restart command.
#
# Usage:
#   sudo start myapp
#   sudo stop myapp
#   sudo restart myapp
#   sudo status myapp
#
#########################################################################################################

description "Upstart script for MyApp"
author "Niklas Ottosson"
version "1.0"

# Set environment variables
env HOME=/my/app/dir/
env LANG=en_US.UTF-8

# Start and stop runlevels
start on runlevel [2345]
stop on runlevel [06]

# Respawn parameters with limit: dies 3 times within 60 seconds
respawn
respawn limit 3 60

# Change directory to current version of Tankmin
chdir /my/app/dir/

# Delete any stray PIDs
pre-start script
  rm -f ${HOME}/RUNNING_PID
end script

# Upstart logging (/var/log/upstart/myapp.log)
console none

# TEST ENVIRONMENT (arguments here are what I'm using for this particular app - you should use what works best for your app)
exec bin/myapp -J-Xms256M -J-Xmx768m -J-server -Dhttp.port=80 -Dconfig.file=conf/application.conf -Dlogger.file=conf/application-logger_PROD.xml

Tested in a production environment on Ubuntu 14.04 and Play Framework 2.3

Add SSL certificate to a JKS storage

I have started doing this quite a lot these days so I’d better put a post up here to get rid of all the Google searching 🙂 It’s not that complicated but I know I will forget if I don’t do it for a while.

Lets start with the .p12 file. This is the file that we are going to put into the jks container. For this we have a .crt and .key file from our CA.

First we need to remove any password from the key file

openssl rsa -in server.key -out server.key_nopasswd

You will be prompted for the password of your .key file

Once the key file is without a password we can create the .p12 file

openssl pkcs12 -export -name somename -in server.crt -inkey server.key_nopasswd -out keystore.p12

Now we have the .p12 file. Time to put it into the jks container

keytool -importkeystore -destkeystore mykeystore.jks -srckeystore keystore.p12 -srcstoretype pkcs12 -alias somealias

Lastly we need the CA certificate

keytool -import -keystore mykeystore.jks -file someca.crt -alias someotheralias

That is pretty much it!