Things related to input and graphics are done on the client. Most other things related to the actual logic of the game should be done on the server.
A bit of common sense goes a long way. For example, if you want to damage the player, you only want to do that on the server, since it is the server that keeps track of all the players and their state. If you want to place a block, you have to do it on the server, otherwise you end up with 'ghost-blocks' etc.
When you use runServer for the first time a text file called eula.txt should be generated, which you have to edit to set 'eula=true' and then run the server again. But using runServer is not guaranteed to catch all errors related to sides, since it will only crash if you are using a method on the physical server that only exists on the physical client (for instance rendering methods).
This page explains it in pretty good detail.