Contract Factory with Beacon Proxy produces `caller is not the owner`

Hi all,
I'm trying to create a factory to create ERC-721 collections and I wish the implementation to be upgradable and gas effective.

To my understanding I have to use beacon proxies, with the beacon pointing to the ERC-721 implementation and the proxies pointing to the beacon.

I have set up a project using hardhat on a GitHub repo but, for some reason, I'm unable to have the factory deploy a new instance of the proxy: each time I try I get a reverted with reason string 'Ownable: caller is not the owner'.

Apart from this, can I use deterministic clones to obtain the new proxy and will that save gas?

On top of that, should I also use a separate ProxyAdmin contract (set up as owner of the beacon) to have Defender protecting my upgrades?

Thanks to anyone willing to lend me a hand on this...

Scrap the first part of the question: the issue regarding the 'Ownable: caller is not the owner' had little to do with Beacon or Proxy: I was calling an internal function which was ownerOnly from the initializer, but since the initializer is called by the factory then the calling address was definitely not the owner.

The second and third part of the question still open for advice though.