Все файлы игровых серверов должны быть развернуты в Unix-системах, потому что Steam и Garry’s Mod очень капризничают при контакте с файловой системой Windows, даже если она монтируется внутрь Linux. Также для простоты развертывания сервисов нужен Docker
Этот шаг нужен для того, чтобы установить виртуальный Linux, максимально совместимый с Windows. Без этого сервер Garry’s Mod может вести себя иначе у разработчика на ПК и на развернутом боевом сервере (на самом деле Docker должен решать эту проблему, но эта игра сопротивляется). Если для работы уже используется Linux или MacOS, можно пропустить шаг
На самых новых версиях Windows почти все уже настроено автоматически, надо только включить виртуализацию в BIOS (если она еще не включена) запустить установку в CMD или PowerShell от администратора и следовать инструкциям: wsl --install -d ubuntu. На всякий случай вот полная инструкция
# 1. Включить WSL через CMD или PS от администратора:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# 2. Включить виртуализацию через CMD или PS от администратора:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
# 3. Перезагрузить ПК
# 4. Установить Linux Kernel:
# https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
# 5. Поставить WSL 2 как стандартную версию WSL, без администратора:
wsl --set-default-version 2
# 6. Установить редистрибутив, рекомендуется стандартный ubuntu, без администратора:
wsl --install -d ubuntu
# 7. На всякий случай можно выключить Hyper-V, потому что он иногда вызывает проблемы с открытием портов, с администратором:
dism.exe /online /disable-feature /featurename:Microsoft-Hyper-V
Полная инструкция: Manual installation steps for older versions of WSL
При первом запуске система попросит создать стандартного пользователя, надо указать имя и пароль (его лучше поставить приличным, так как WSL имеет почти полный доступ к Windows, вводить его надо только при выполнении команд суперпользователя, то есть sudo). После этого выполнится вход в систему и Linux готов к работе.

sudo apt update
sudo apt upgrade -y
sudo apt autoremove -y
# 1. Найти имя установленного дистрибутива:
wsl --list
# 2. Экспортировать его в файл:
wsl --export [название] [путь к файлу]
# например: wsl --export Ubuntu D:/ubuntu/exported.dump
# 3. Удалить старый дистрибутив:
wsl --unregister [название]
# например: wsl --unregister Ubuntu
# 4. Импортировать новый дистрибутив из файла:
wsl --import [новое название] [путь к новой установке] [путь к файлу]
# например: wsl --import ubuntu D:/ubuntu D:/ubuntu/exported.dump
# 5. Можно удалить экспортированный файл (*D:/ubuntu/exported.dump*)
# 6. Исправить стандартного пользователя в системе через саму wsl от имени root:
echo '[user]
default=chelog' > /etc/wsl.conf
# вместо chelog надо поставить того пользователя, который был создан при первом запуске
# 7. Перезагрузить wsl:
wsl --shutdown
sudo apt update
sudo apt install -y git zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# когда спросит, надо ли поставить по умолчанию, соглашаемся, вводя свой пароль
./wsl2host.exe remove
./wsl2host.exe install
После этого можно использовать [имя дистрибутива].wsl в качестве адреса, всегда указывающего к WSL. Например, можно будет подключаться в Garry’s Mod командой connect ubuntu.wsl:27015 или открывать веб-приложения по адресу http://ubuntu.wsl:8080
# имя пользователя из Windows, название папки в C:/Users
cp -r /mnt/c/Users/[имя пользователя]/.ssh ~
# исправим разрешения, чтобы система не ругалась
chmod 700 ~/.ssh
chmod 644 ~/.ssh/id_rsa.pub
chmod 600 ~/.ssh/id_rsa
# свежий скрипт установки надо посмотреть в репозитории: https://github.com/nvm-sh/nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
# надо перезагрузить терминал, чтобы изменения применились
# nvm позволяет легко устанавливать разные версии node.js
nvm install latest # установить последнюю версию
nvm install 16 # установить v16 LTS
nvm use 18 # использовать установленную v18 LTS (latest на момент написания)
nvm use 16 # использовать установленную v16 LTS
# проверим, что все установлено
node -v
npm -v
Docker нужен, чтобы можно было быстро развертывать сервера и приложения, не устанавливая их на свой компьютер. Таким образом парой команд мы можем на время поставить себе любые веб-сервера, базы данных, компиляторы в так называемых “контейнерах”, а также быстро запустить их в связке друг с другом
Надо просто скачать и установить версию под свою операционную систему.
На Windows в качестве бэкенда надо выбрать WSL2 вместо Hyper-V для максимальной совместимости и производительности. Если места на диске С:/ становится мало, можно перенести WSL-дистрибутивы от docker на другой диск как в первом пункте этого гайда, главное сохранить такое же имя, чтобы докер не создал новых. Стандартного пользователя при этом менять не нужно
Проверить корректность установки можно простой командой в консоли: docker -v
В качестве системы контроля версий у нас используется git. С помощью WSL можно очень просто его поставить:
# выполняется внутри WSL
sudo apt update
sudo apt install git
После этого надо настроить конфиг и сгенерировать SSH-ключ для аутентификации в нашем хостинге репозиториев:
# запускается внутри WSL
# установим свое имя и почту для git, почта должна быть от аккаунта на gitlab.octo.gg
git config --global user.name "chelog"
git config --global user.email "chelog@octothorp.team"
# сгенерируем SSH-ключ, утилита будет запрашивать разные параметры,
# ставим все по умолчанию, просто оставляем пустые строки, нажимая Enter
ssh-keygen
# после всего этого выведем в консоль содержание нового публичного ключа
cat ~/.ssh/id_rsa.pub
# получится что-то вроде этого (это не команда):
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDS9rGwStoYQQ5H2L6BXPVIM0F9z7mvQY55SfkmkQ+dR+8zEsAtmu
M9kOGWLH5XaLBPALZJCPTu/7MHVVgiXGhNl7bsxdRTiFQon/bNZBsTb3BafD0mMIwg1cJP2RDmGuDfe6DlFMQvvMh9
4HAqLqVQQcAq6WpscHTwFVni/rdZfUEkly7xkQNZENXOxnu/I/5FBq+beV9affz9wvY3EHSK75N08tn331k/AynxV+
8qqW2t6MLHXuceWb5Xk2wdm1kRNSLdpOC+ihx27ldOM6fC3/GkcoHuSaJHQd6o2gtl0nB9SqEL9v2ussV9kwGXn3LQ
WsqbGomTk1Eisr4o47UZ chelog@chelog-win
Выведенный ключ надо скопировать и добавить в свой аккаунт на нашем хостинге репозиториев. После этого все действия в git будут происходить от лица аккаунта, владеющего данным ключом. Никогда и не при каких обстоятельствах никому не отсылай и не показывай содержание файла ~/.ssh/id_rsa, это равноценно раскрытию пароля. А вот ~/.ssh/id_rsa.pub уже можно, он используется сайтами для подтверждения доступа к аккаунту, так что можно без проблем использовать, скажем, на GitHub