I cannot find more information on how to run the script before every deployment.
If you want to run a script on a server, you would usually use a CI/CD tool to run the command that kicks off the tests (just like you would do locally). CI/CD is essentially "run this command based on this trigger" (deployment, schedule, etc.). You also use Windows Task Scheduler for learning how to run stuff overnight (schedule based).
I want to implement multiple browser testing and handle photo upload
There are many ways of running your tests on different browsers. You'll need the different WebDrivers and a way to swap between them (setting the DesiredCapabilities). Your first test step would be opening the browser passed in by your @DataSource. There is a screenshot command in Selenium but if you are running on a server, you'll need to make sure that they are stored somewhere you can view them.
should I use RemoteWebdriver or I can run my script on a server only with Webdriver?
RemoteWebDriver is the standalone-server.jar and that lets you register WebDrivers (browsers) with the Hub. This allows you to run tests on Edge or Safari from a (including but not limited to) linux host. That's basically how 3rd party services like SauceLabs and BroswerStack run.