How does a miner collects the fees? The way I understand it,  at the very top of the block the miner adds a transaction to collect the 25 bitcoins it would earn if it solves the block.

Obviously that transaction is included in the hash/nonce when the block is solved.

But what about the fees? the only way I see it done is for the miner to also create transactions for each of the fees it finds in the block.

All these "fragments" have to be traced to some source/input address.

Q: How can the miner sign a fee transaction for itself if the miner's address is not the input of the transaction?
In the same special "generation transaction" that collects the 25 newly minted bitcoins, the miner also collects the total of all the transaction fees in the block, and together can send them to an address(es) of his choosing.

No signature is required; it's a hardcoded perk to whoever manages to find a block.