There are a few options when running a personal, private, or even world-wide pool.
Unomp
Nomp only
P2Pool
Mpos + python stratum
Mpos + Nomp
Each have there own pluses and minuses, and really it depends on what your looking for in a pool.
I believe Nomp supports more algo's out-of-the-box then mpos, however Mpos has a nice login system and user tracking setup.
This is where the Nomp+Mpos comes in. A Nomp backend allowing more algo's, but using an Mpos frontend for the login and user tracking. (and a bit easier to setup, due to the fact you would need a seperate python stratum instance for each coin for straight Mpos)
Unomp supports a few more features such as multipool and merged mining, but again no user login, you simply use your wallet address as a username.
I personally have no experience building a p2pool setup so cant help there.
In the end your best bet is to take a look at a few pools (check the very bottom "powered by" message for pool type) and see what you like and dislike, and choose a structure based on that. My recommendation though, nomp+mpos.
https://github.com/zone117x/node-open-mining-portal/wiki/Setting-up-NOMP-for-MPOS-usage