I want to create a website where users can pay with Bitcoin. However I want to create my own payment gateway because I do not want to rely on services like BitPay. I want a unique BTC address for every user where the users can send money to this wallet and then spend the coins on the site. I heard that it is possible with bitcoin-cli/bitcoind. I also have high skills in PHP and Linux so this isn’t a problem.
There are several solutions out there and currently the most hyped one is probably BTC-Pay. It also supports lightning, so you should be pretty future-ready.
If you're new to Bitcoin, I would advise you to play around btc wallet on testnet you could check mycelium for instance and get some btc via faucet. You need to understand that you don't need any third party for interacting with bitcoins, you just require a wallet. A wallet is a program that handle UTXOs, craft transactions and broadcast them to bitcoind nodes (or other compliant full node implementation), waiting for them to be mine. As you're developper, I highly recommend you to buy Mastering Bitcoin from Andreas M. Antonopoulos.
After than, you will simply design you're backend so that you can accept bitcoin payment, there is many open source project for your needs as btcpayserver or bitcore. I would suggest btcpayserver on your case, but both are "basically" bitcoind wrapper on steroids tailored for enabling applications on top of Bitcoin.