FiveM сервер git: что коммитить, .gitignore и git pull развёртывания
Поместите ваш FiveM сервер под git безопасным путём: что коммитить, .gitignore для кеша и txData, держите ключи вне с secrets.cfg, приватные repos и git pull развёртывания.
Сервер который живёт только на одном диске не имеет истории: плохое редактирование в пятницу ночью не может быть отменено, и движение машин означает копирование папок вручную. Помещение это под git исправляет оба. Это руководство показывает что коммитить, .gitignore чтобы использовать, как держать секреты вне, и как развертывать с git pull.
Что входит в репозиторий
Коммитьте вещи которые вы пишите или конфигурируете:
- Ваши ресурсы (папка
resources/, включая конфиг и SQL файлы). - A
server.cfgбез секретов. - Маленькие файлы помощников, такие как README с порядком запуска.
Не коммитьте сгенерированные или приватные файлы:
cache/, которые FiveM пересоздаёт. Смотрите очистить кеш FiveM.- Папка данных txAdmin (
txData), с её настройками, админ аккаунтами и логами. - Секреты: ключ лицензии, пароль базы данных и API ключи.
- Логи, crash дампы и
node_modules.
Начальный .gitignore
В корне репозитория (папка данных сервера которая содержит resources/ и server.cfg):
cache/
txData/
*.log
*.dmp
node_modules/
secrets.cfg
.envЕсли вы версионируете целую папку txAdmin с намерением, удалите txData/ из списка, но держите её приватной и вне любого разделённого репозитория. Большие бинарные активы (потоковые машины, MLOs) делают репозиторий большим; рассмотрите должны ли они быть в git вообще, или держаны в отдельном хранилище.
Держите ключи вне server.cfg
Это часть которая идёт неправильно чаще всего. Эти строки это секреты:
sv_licenseKey cfxk_xxxxxxxxxxxx
set mysql_connection_string "mysql://user:password@localhost/fivem"
set steam_webApiKey "xxxxxxxx"
rcon_password "xxxxxxxx"Переместите их в отдельный файл, secrets.cfg, который находится в .gitignore:
# secrets.cfg (never committed)
sv_licenseKey cfxk_xxxxxxxxxxxx
set mysql_connection_string "mysql://user:password@localhost/fivem"
set steam_webApiKey "xxxxxxxx"И загрузьте его в вершину коммитёного server.cfg:
exec secrets.cfg
endpoint_add_tcp "0.0.0.0:30120"
endpoint_add_udp "0.0.0.0:30120"
sv_hostname "My Server"
ensure oxmysql
ensure ox_libКоммитьте secrets.cfg.example с пустыми значениями так что следующий человек знает что заполнить. Смотрите server.cfg объяснено для самих настроек.
Внимание: если ключ был когда-либо коммичен, удаление это в позднейшем коммите недостаточно. Это всё ещё в истории. Генерируйте новый ключ или пароль и обращайтесь со старым как с утечкой.
Создайте репозиторий
cd /path/to/server-data
git init
git add .
git statusЧитайте список git status перед тем как вы коммитите и проверьте что ничто из "не коммитить" список поэтапное. Затем:
git commit -m "Initial server"
git branch -M main
git remote add origin [email protected]:youruser/your-server.git
git push -u origin mainИспользуйте приватный репозиторий. Платные ресурсы лицензированы вам, и помещение их в публичный репозиторий это перераспределение, даже если код зашифрован. Смотрите escrow отсутствие entitlement для того как зашифрованные активы привязаны к вашему аккаунту.
Развёртывание с git pull
На машине которая запускает сервер, клонируйте один раз и пулл потом:
git clone [email protected]:youruser/your-server.git server-data
cd server-data
# create secrets.cfg on this machine (not from git)Чтобы обновить после пуша из вашего разработка ПК:
cd server-data
git pullЗатем перезагрузьте что изменилось. Для одного ресурса, из консоли сервера:
refresh
restart my_resourceЕсли server.cfg или порядок запуска изменился, расписание полной перезагрузки (смотрите расписание перезагрузки). Не git pull в середине пиковых часов без плана, так как много ресурсов перезапускаются одновременно могут выстрелить сервер.
Для аутентификации на приватном репозитории, используйте SSH развёртывание ключ с доступом чтения только, или токен личного доступа. Никогда не вводите ваш собственный пароль в скрипты.
Простая привычка ветви
Держите main как что живо. Сделайте изменения на ветви, тест на локальном или промежуточном сервере, затем слияние:
git checkout -b new-police-job
# edit, test
git commit -am "Add police job"
git checkout main
git merge new-police-job
git pushКогда что-то ломается после пуша, git log показывает что изменилось и git revert <commit> отменяет это без потери истории. Git не это резервная копия базы данных, хотя: держите реальные резервные копии также, как в резервное копирование вашего FiveM сервера.
Контрольный список
| Симптом | Решение |
|---|---|
| Ключ лицензии в репозитории | Переместите в secrets.cfg, игнорируйте это, и ротируйте ключ |
cache/ или txData коммичены |
Добавьте в .gitignore, затем git rm -r --cached cache txData |
| Сервер запускается без ключа после клонирования | Создайте secrets.cfg на сервере; он не в git |
Новый ресурс не найден после git pull |
Запустите refresh, затем ensure или restart его |
| Репозиторий очень большой | Держите большие потоковые активы вне git или в их собственном хранилище |
| Нужно отменить изменение | git revert <commit> и пулл на сервере |
Короткие ответы
Должен ли я поместить весь FiveM сервер в git?
Коммитьте ваши ресурсы и чистый server.cfg. Оставьте вне cache/, txAdmin папку txData, логи и что-либо секретное. Точка это репозиторий которые вы можете клонировать на свежую машину и запустить.
Как я держу мой ключ лицензии вне git?
Переместите sv_licenseKey, строки базы данных и API ключи в secrets.cfg который находится в .gitignore, и загрузьте его из server.cfg с exec secrets.cfg.
Безопасно ли использовать публичный репозиторий?
Не для живого сервера. Даже без секретов, репозиторий держит платные скрипты которые вы не разрешены перераспределять. Используйте приватный репозиторий.
Скрипты без этой проблемы
Shop CreatorМагазин меньше чем за минуту — владельцы, сотрудники, сейфы и ограбления в комплекте.Смотреть скрипт →
Item Creator V2Создавайте используемые предметы с анимациями, пропами, эффектами и не только — без кода.Смотреть скрипт →
Quest CreatorВизуальный редактор квестов и диалогов с NPC — узел за узлом прямо в игре.Смотреть скрипт →