It takes at least 2 entities to get a func_train in working order. The actual func_train and more then 1 path_corner. The path_corners specify the actual path that the func_train will follow. We will get to that in a little later though.
First thing you need to do is to build the actual object that will be the func_train. This can be one single brush or multiple brushes, it all depends on what you want the train to be. After you have build the object then you will need to turn the object into a func_train entity. It does not matter where you place the func_train because it will automatically spawn at the first path_corner.
The second thing that you need to do is to make all your path_corners. These will be the actual path that the func_train will follow as mentioned above. Each path_corner will link to the next. So if I made a lift that would travel around the corners of a square room then I would have 4 path_corners. The first one would have a targetname p1, and a target p2. The second one would have a targetname p2 and a target p3. Third one would have a targetname p3 and a target p4. The fourth one would have a targetname p4 and if you wanted the lift to continuously travel around the room then you would give it a target p1, which is the targetname of the first path_corner. Now I am going to go into more detail on all the different key value pairs and spawnflags.