на счет тестового сервера, мы делаем так, клонируем проект на новый сервер и в системе контроля версий создаем отдельную ветку для него (dev). Все доработки делаем в ветках которые ответвляются от production ветки и сливаются в dev ветку. При одобрении ветвление сливается обратно в production ветку
на локалке enviroment "local" на dev сервере "development", на продакшне "production" (учитывать env в коде при разработке) . Если база данных большая, то можно с локалки подключаться к БД на dev, но это не приветствуется, если разработчиков больше чем 1, лучше для своей локалки создать какой-нибудь свой бесплатный storage в 1TB типа
https://stackstorage.com или что-то подобное
по крону делаются снимки с БД на всех environments каждый день ночью, в файловой системе хранятся только последние 5 дампов. Для дампов отдельный Storage, для картинок отдельный Storage, короче все Storage созданы по смыслу хранимых данных
PS: я думаю нет общего шаблона на все случаи жизни, но есть good practice