You can check the online docs for the same.
As far as best practices is concerned, it depends on how much downtime is acceptable. In case 0% downtime is required, Golden gate is option but it comes with cost.
Make the clone of the existing db and then perform migratation tests on that clone db in test environment.
Below link might help you.Although it is for 11Gr2,12c non container Database is almost same as 11gr2
How much downtime can you afford ? One simple option is to create a new empty database on the new server, then perform an export on the old server and perform an import on the new server.
You could also do an an upgrade on the current server, then clone the database to the new server