Before getting this working, first ensure that your VPN client has a fixed VPN IP address. The OpenVPN Howto describes how to complete this. Ensure you pick an IP pair for the client/server from the table in that doc.
Now make sure that your Linode server can access your app on your client. I.e.
telnet <Fixed VPN IP of your client machine> 8089
To then connect the outside world, presuming your app is HTTP based, I would recommend a reverse proxy installed on the Linode machine.
Install a reverse proxy on the Linode server, which will stand between connections from the outside world, and then forward onto your application. There are many available such as Nginx, Apache, HAProxy, TinyProxy. If you have simple requirements, TinyProxy is probably a good place to start. Once installed, ensure the following lines are in the config:
ReversePath "/" "http://<fixed IP of your VPN client>:8089"
You will need to ensure that the firewall on your Linode server, accepts incoming connections from the outside world. To allow unrestricted access, using UFW:
sudo ufw allow 8089/tcp
Alternatively, if you only wish to allow specific clients to access your app:
sudo ufw delete allow 8089/tcp
and then for each client that should be able to access:
sudo ufw allow from <external client IP> to 8089/tcp
If you are also running a firewall on your VPN client machine, you will also need to ensure that there is a rule to allow the Linode server to connect to port 8089. You will need the VPN IP of your server. With fixed IP's, as per the Open VPN doc I referenced, you choose a pair of IP's for the VPN server and client to use:
sudo ufw allow from <Linode VPN Server IP> to 8089/tcp
You could also adjust the config so that your Linode server listens on an entirely different port (e.g. 80) by changing the 'Connect' parameter in the reverse proxy & updating the Linode server firewall rules to match, whilst your application remains on 8089.