Обычная инсталляция OpenClaw на VPS подразумевает доступ к панели управления ботом и чату по SSH, а основное общение с ботом происходит через мессенджеры. Однако часто бывает нужно дать доступ доверенному кругу лиц для управления ботом или использования встроенного чата.
В этой подробной инструкции мы детально описали процесс предоставления публичного защищенного доступа к OpenClaw через Google OAuth и Caddy по доверенному списку почтовых адресов.
Помимо уже установленного и предварительно настроенного OpenClaw на VPS понадобится:
- Домен с A-записью на сервер, например openclaw.example.com
- Аккаунт Google Cloud (для OAuth-клиента)
- Caddy с модулем caddy-security
Начнем со сборки Caddy с модулем caddy-security через xcaddy.
Установка Caddy с модулем caddy-security (через xcaddy)
1. Установим нужные зависимости для сборки Caddy.
sudo apt update
sudo apt install -y debian-keyring debian-archive-keyring
apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' |
sudo gpg -- dearmor -o
/usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf
'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo
tee /etc/apt/sources.list.d/caddy-stable.list >/dev/null
sudo apt update
sudo apt install -y caddy golang-go
2. Установим xcaddy.
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
echo 'export PATH="$PATH:$HOME/go/bin"' >> ~/.bashrc
source ~/.bashrc
3. Соберем Caddy с модулем caddy-security.
xcaddy build \
--with github.com/greenpau/caddy-security
4. Заменим системный бинарник, если до этого был установлен чистый Caddy.
sudo systemctl stop caddy
sudo install -m 755 ./caddy /usr/bin/caddy
sudo setcap cap_net_bind_service=+ep /usr/bin/caddy
sudo systemctl start caddy
5. Проверим, что модули подключены.
caddy list-modules | grep -E 'security|authn|authz|oauth'
Настройка Google OAuth в Google Cloud
1. Откройте Google Cloud Console.
2. Перейдите в раздел APIs & Services.
3. Далее перейдите во вкладку OAuth Overview:.
4. Перейдите во вкладку Clients и кликните по кнопке + Create client.
5. Заполните следующие поля создания OAuth-клиента Google:
- Application type — выберите из списка Web application;
- Name — укажите имя клиента, например, OpenClawOAuth;
- Authorized JavaScript origins — укажите: https://openclaw.example.com
- Authorized redirect URIs — укажите: https://openclaw.example.com/auth/oauth2/google
6. Нажмите кнопку Create.
После сохранения клиента появится модальное окно OAuth client created. Его можно закрыть. В разделе Clients появится новая запись, которая будет содержать Client ID и Client secret, нужные для Caddy:
Добавление переменных окружения Caddy с секретами Google OAuth
1. Создайте файл /etc/default/caddy.
sudo tee /etc/default/caddy >/dev/null <<'EOF'
OIDC_CLIENT_ID="ваш-client-id.apps.googleusercontent.com"
OIDC_CLIENT_SECRET="ваш-client-secret"
OIDC_METADATA_URL="https://accounts.google.com/.well-known/openid-configuration"
OIDC_BASE_AUTH_URL="https://openclaw.example.com"
EOF
2. Добавьте systemd drop-in, чтобы сервис читал этот файл.
sudo mkdir -p /etc/systemd/system/caddy.service.d
sudo tee /etc/systemd/system/caddy.service.d/openclaw-oauth.conf >/dev/null <<'EOF'
[Service]
EnvironmentFile=-/etc/default/caddy
EOF
sudo systemctl daemon-reload
Конфигурация Caddy
1. Создайте файл /etc/caddy/Caddyfile со следующим содержимым.
{
order authenticate before respond
order authorize before basicauth
}
(openclaw_security) {
security {
oauth identity provider google {
realm google
driver oidc
client_id {$OIDC_CLIENT_ID}
client_secret {$OIDC_CLIENT_SECRET}
scopes openid email profile
metadata_url {$OIDC_METADATA_URL}
}
authentication portal openclaw_portal {
crypto default token lifetime 3600
cookie domain openclaw.example.com
enable identity provider google
transform user {
match realm google
action add role authp/user
}
ui {
links {
"OpenClaw" /portal
}
}
}
authorization policy openclaw_policy {
set auth url /auth
allow roles authp/user
crypto key verify "insecure-please-change"
}
}
}
openclaw.example.com { # Замените на свой домен
import openclaw_security
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
}
route /auth* {
authenticate with openclaw_portal }
route /* {
authorize with openclaw_policy
reverse_proxy 127.0.0.1:18789 { # Замените на свой URL
header_up X-Forwarded-User {http.auth.user.email}
header_up X-Forwarded-Proto {scheme}
header_up X-Forwarded-Host {host}
header_up X-Forwarded-For {remote_host}
}
}
}
2. Сохраните файл и выполните следующую последовательность команд.
sudo caddy fmt --overwrite /etc/caddy/Caddyfile
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl restart caddy
sudo systemctl status caddy --no-pager
Конфигурация OpenClaw в режиме trusted-proxy
1. Откройте ~/.openclaw/openclaw.json и настройте gateway.
{
"gateway": {
"bind": "127.0.0.1",
"port": 18789,
"trustedProxies": [
"127.0.0.1",
"::1"
],
auth": {
"mode": "trusted-proxy",
"trustedProxy": {
"userHeader": "x-forwarded-user",
"requiredHeaders": [
"x-forwarded-proto",
"x-forwarded-host"
],
"allowUsers": [
"you@gmail.com",
"teammate@gmail.com"
]
}
},
"controlUi": {
"allowedOrigins": [
"https://openclaw.example.com"
]
}
}
}
После изменения перезапустите OpenClaw (команда зависит от вашего способа запуска).
Проверка после настройки
1. Откройте https://openclaw.example.com — появится приветственная страница модуля Caddy caddy-security.
2. Кликните по полю OIDC — откроется стандартная форма входа через Google. Доступ к OpenClaw будет только у пользователей, чьи почтовые адреса перечислены в списке gateway.auth.trustedProxy.allowUsers конфигурации ~/.openclaw/openclaw.json.
3. После успешного входа произойдет редирект в раздел сессий OpenClaw:
Выход из аккаунта — logout
Для выхода из аккаунта используйте endpoint: https://openclaw.example.com/auth/logout. Если браузер сразу выполняет повторный вход, выйдите также из Google-аккаунта или откройте приватное окно.
Частые проблемы и решения
- invalid_client
- Неправильный OIDC_CLIENT_ID или OIDC_CLIENT_SECRET
- Проверьте /etc/default/caddy и перезапустите Caddy
- redirect_uri_mismatch
- URI в Google Cloud не совпадает с реальным callback от Caddy
- Должно быть ровно https://openclaw.example.com/auth/oauth2/google
- Не выдан сертификат Let’s Encrypt
- Проверьте DNS A-запись и открытые порты 80/443
- Проверьте, что домен указывает на ваш сервер
- OpenClaw недоступен после логина
- Убедитесь, что OpenClaw реально слушает 127.0.0.1:18789
- Проверьте, что Caddy проксирует на правильный адрес
- Проверьте allowUsers в OpenClaw