Установка панели Grafinya
Пошагово: от пустого VPS до подключённого iPhone. Займёт 15–20 минут, из них ~5 — сборка образа.
1Что понадобится
- VPS с публичным IPv4 у любого хостинга: Ubuntu 22.04 / 24.04 или Debian 12.
- 1 ГБ RAM или больше, ~5 ГБ свободного места (образ собирается на сервере).
- Доступ root или пользователь с
sudo. - Открытые порты 51820/udp (VPN) и 51821/tcp (веб-панель).
- Необязательно: домен, если нужен вход в панель по HTTPS (рекомендуется).
| Порт | Назначение |
|---|---|
51820/udp | VPN-туннель (ядро Grafinya) |
51821/tcp | веб-панель |
80, 443/tcp | только если ставите HTTPS через Caddy |
2Подключение по SSH
На macOS и Linux откройте «Терминал», на Windows — PowerShell или Windows Terminal. IP и пароль root хостинг присылает после создания сервера.
ssh root@IP_СЕРВЕРАПри первом подключении ответьте yes на вопрос об отпечатке ключа. Если вы вошли не под root, добавляйте sudo перед командами ниже или выполните sudo -i.
apt update && apt upgrade -y3Порты и файрвол
Порты нужно открыть в двух местах: в панели хостинга (группа безопасности / firewall облака, если она есть) и на самом сервере, если там включён ufw.
ufw allow OpenSSH
ufw allow 51820/udp
ufw allow 51821/tcp
ufw enable
ufw statusufw allow OpenSSH должна идти до ufw enable. Если SSH у вас на нестандартном порту — откройте именно его.ufw. Поэтому, чтобы скрыть панель от интернета, мало закрыть 51821 в ufw — нужно привязать порт к 127.0.0.1 (см. шаг 7, вариант с HTTPS) или закрыть его в firewall хостинга.4Установка Docker
Официальный скрипт ставит Docker Engine и плагин docker compose:
curl -fsSL https://get.docker.com | shdocker --version
docker compose version5Скачать панель с GitHub
Вариант А — git (удобно обновлять)
apt install -y git
git clone https://github.com/grapelloid/grafinya-panel.git && cd grafinya-panelВариант Б — ZIP-архив
Без git: скачайте архив ветки с GitHub и распакуйте его на сервере.
apt install -y curl unzip
curl -L -o grafinya-panel.zip https://github.com/grapelloid/grafinya-panel/archive/refs/heads/main.zip
unzip grafinya-panel.zip && cd grafinya-panel-mainВ варианте Б обновлять панель придётся так же — скачивая новый архив. Данные при этом не теряются: они в Docker-томе, а не в папке.
6Запуск
Готового образа в реестре нет — он собирается из исходников прямо на сервере. Первая сборка занимает 3–10 минут: компилируется ядро Grafinya.
docker compose up -d --buildПроверьте, что контейнер grafinya запущен (статус Up, через минуту — healthy):
docker psЛоги в реальном времени (выход — Ctrl+C, контейнер продолжит работать):
docker logs -f grafinya7Доступ к панели: HTTP для теста или HTTPS
Панель по умолчанию ждёт HTTPS: по голому http:// войти не получится (cookie сессии защищены). Выберите один из вариантов.
Вариант А — быстро, по HTTP (для теста)
Откройте docker-compose.yml (например, nano docker-compose.yml) и раскомментируйте блок environment, выставив INSECURE=true:
services:
grafinya:
environment:
- INSECURE=truedocker compose up -dПанель откроется по адресу http://IP_СЕРВЕРА:51821.
Вариант Б — домен и HTTPS через Caddy (рекомендуется)
- У регистратора домена создайте A-запись panel.example.com → IP_СЕРВЕРА и дождитесь, пока она заработает.
- Откройте порты 80 и 443:
ufw allow 80/tcp && ufw allow 443/tcp(и в firewall хостинга). - Установите Caddy — он сам получит и будет продлевать бесплатный TLS-сертификат:
apt install -y debian-keyring debian-archive-keyring apt-transport-https curl gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list
apt update && apt install -y caddyЗамените содержимое /etc/caddy/Caddyfile:
panel.example.com {
reverse_proxy 127.0.0.1:51821
}systemctl reload caddyЧтобы панель была доступна только через HTTPS, привяжите порт 51821 к localhost в docker-compose.yml и перезапустите контейнер (INSECURE при этом оставьте false):
ports:
- "51820:51820/udp"
- "127.0.0.1:51821:51821/tcp"docker compose up -d
ufw delete allow 51821/tcpТеперь панель открывается по https://panel.example.com.
8Первичная настройка
При первом входе панель проведёт через мастер настройки:
- Добро пожаловать → «Продолжить».
- Администратор: имя пользователя и надёжный пароль — не короче 12 символов. Это вход в панель, сохраните его в менеджере паролей.
- Существующая настройка? — «Нет» (если это не перенос со старого сервера из резервной копии).
- Всё: публичный адрес сервера и VPN-порт
51820/udpпанель подставит сама. Поменять их можно в «Админ-панели» («Конфигурация» и «Сетевой интерфейс»); порт должен совпадать сports:вdocker-compose.yml.
В «Админ-панели» можно включить 2FA, поменять параметры интерфейса и маскировки трафика.

9Создайте клиента и скачайте .conf
- На странице «Клиенты» нажмите «Новый клиент».
- Введите имя (например, «Мой iPhone»). Дату отключения можно оставить пустой — тогда доступ бессрочный; «продлить» — просто сменить дату.
- Нажмите «Создать клиента».
- В карточке клиента нажмите кнопку со стрелкой вниз — «Скачать конфигурацию». Скачается файл
.conf.

Как перенести файл на iPhone
- AirDrop — с Mac прямо на iPhone, затем «Сохранить в Файлы».
- «Файлы» / iCloud Drive — положите файл в iCloud Drive на компьютере, на iPhone он появится в приложении «Файлы».
- Почта или мессенджер — отправьте файл себе и сохраните вложение в «Файлы».
- Или откройте панель прямо в Safari на iPhone и скачайте файл — он окажется в «Файлы» → «Загрузки».
10Подключение в приложении grafinya
- Откройте grafinya и нажмите «Выбрать файл».
- Выберите свой
.confв «Файлах». - Включите тумблер. При первом подключении iOS попросит разрешить добавление VPN-конфигурации — нажмите «Разрешить».
- Рекомендуем включить Kill Switch: «Настройки» → «Безопасность». Если туннель отключится, интернет блокируется, и реальный IP не утечёт.
Проверка: откройте в Safari любой сервис «мой IP» — должен отображаться IP вашего сервера. В панели у клиента появится статус «в сети» и счётчики трафика.
11Обновление
cd ~/grafinya-panel
git pull
docker compose up -d --buildБаза, ключи и настройки лежат в Docker-томе панели и переживают пересборку. Старые образы можно почистить: docker image prune -f.
12Резервная копия
Все данные панели — в Docker-томе grafinya-panel_grafinya_data (имя фиксировано и не зависит от папки, куда склонирован репозиторий). Сохраните его в архив:
cd ~/grafinya-panel
docker compose stop
docker run --rm -v grafinya-panel_grafinya_data:/data -v "$PWD":/backup alpine \
tar czf /backup/grafinya-backup-$(date +%F).tar.gz -C /data .
docker compose startСкачайте архив к себе (команда выполняется на вашем компьютере, не на сервере):
scp root@IP_СЕРВЕРА:~/grafinya-panel/grafinya-backup-*.tar.gz .Восстановление на новом сервере: установите панель по шагам 4–6, затем:
docker compose stop
docker run --rm -v grafinya-panel_grafinya_data:/data -v "$PWD":/backup alpine \
sh -c "rm -rf /data/* && tar xzf /backup/grafinya-backup-ДАТА.tar.gz -C /data"
docker compose start13Удаление
Остановить и удалить контейнер, сохранив данные:
cd ~/grafinya-panel
docker compose downУдалить полностью, вместе с базой, ключами и всеми клиентами (необратимо):
cd ~/grafinya-panel
docker compose down -v --rmi all
cd ~ && rm -rf ~/grafinya-panel14Частые проблемы
Панель не открывается по http://IP:51821
- Проверьте, что контейнер запущен:
docker ps, и посмотритеdocker logs grafinya. - Порт
51821/tcpзакрыт в группе безопасности / firewall хостинга — это самая частая причина. Откройте его в панели провайдера. - Проверьте локально на сервере:
curl -I http://127.0.0.1:51821. Если ответ есть, а снаружи нет — дело в файрволе.
Страница открывается, но войти не получается
Вы заходите по HTTP без INSECURE=true. Включите его (шаг 7, вариант А) или настройте HTTPS (вариант Б).
Тумблер включается, но интернета нет
- Закрыт
51820/udp— в ufw или в firewall хостинга. Это UDP, не TCP. - В мастере настройки указан не тот хост: в конфиге должен быть публичный IP/домен сервера. Исправьте его в «Админ-панели» и скачайте
.confзаново. - В панели клиент отключён или истёк срок действия — включите его или смените дату.
- Провайдер VPS блокирует нестандартный UDP — попробуйте другой порт (поменяйте его и в панели, и в
portsвdocker-compose.yml).
Приложение пишет «Файл не подошёл»
Нужен файл с расширением .conf с секциями [Interface] и [Peer]. Скачайте его кнопкой «Скачать конфигурацию» в панели, а не копированием текста.
Забыл пароль администратора
Сбросьте его из консоли сервера (пароль не короче 12 символов; 2FA тоже сбрасывается):
docker exec -it grafinya cli db:admin:resetСборка образа падает или сервер зависает
Скорее всего, не хватает памяти при компиляции. Добавьте swap на 1–2 ГБ и повторите docker compose up -d --build:
fallocate -l 2G /swapfile && chmod 600 /swapfile
mkswap /swapfile && swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstabНе нашли ответ? Создайте issue на GitHub — приложите вывод docker logs grafinya (без ключей и паролей).