Grafinya
Оглавление
  1. Что понадобится
  2. Подключение по SSH
  3. Порты и файрвол
  4. Установка Docker
  5. Скачать панель
  6. Запуск
  7. Доступ: HTTP или HTTPS
  8. Первичная настройка
  9. Клиент и файл .conf
  10. Подключение на iPhone
  11. Обновление
  12. Резервная копия
  13. Удаление
  14. Частые проблемы
Гайд

Установка панели Grafinya

Пошагово: от пустого VPS до подключённого iPhone. Займёт 15–20 минут, из них ~5 — сборка образа.

Впишите IP своего сервера (и домен, если он есть) — команды ниже подставят их автоматически. Значения остаются только в вашем браузере.

1Что понадобится

  • VPS с публичным IPv4 у любого хостинга: Ubuntu 22.04 / 24.04 или Debian 12.
  • 1 ГБ RAM или больше, ~5 ГБ свободного места (образ собирается на сервере).
  • Доступ root или пользователь с sudo.
  • Открытые порты 51820/udp (VPN) и 51821/tcp (веб-панель).
  • Необязательно: домен, если нужен вход в панель по HTTPS (рекомендуется).
ПортНазначение
51820/udpVPN-туннель (ядро 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 -y

3Порты и файрвол

Порты нужно открыть в двух местах: в панели хостинга (группа безопасности / firewall облака, если она есть) и на самом сервере, если там включён ufw.

ufw
ufw allow OpenSSH
ufw allow 51820/udp
ufw allow 51821/tcp
ufw enable
ufw status
Не закройте себе SSH. Строка ufw allow OpenSSH должна идти до ufw enable. Если SSH у вас на нестандартном порту — откройте именно его.
Важно про Docker. Опубликованные Docker-порты обходят правила ufw. Поэтому, чтобы скрыть панель от интернета, мало закрыть 51821 в ufw — нужно привязать порт к 127.0.0.1 (см. шаг 7, вариант с HTTPS) или закрыть его в firewall хостинга.

4Установка Docker

Официальный скрипт ставит Docker Engine и плагин docker compose:

терминал
curl -fsSL https://get.docker.com | sh
проверка
docker --version
docker compose version

5Скачать панель с 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 grafinya
Маскировка трафика включена по умолчанию. Её параметры генерируются при первом запуске — ничего настраивать не нужно.

7Доступ к панели: HTTP для теста или HTTPS

Панель по умолчанию ждёт HTTPS: по голому http:// войти не получится (cookie сессии защищены). Выберите один из вариантов.

Вариант А — быстро, по HTTP (для теста)

Откройте docker-compose.yml (например, nano docker-compose.yml) и раскомментируйте блок environment, выставив INSECURE=true:

docker-compose.yml
services:
  grafinya:
    environment:
      - INSECURE=true
применить
docker compose up -d

Панель откроется по адресу http://IP_СЕРВЕРА:51821.

Только для проверки. По HTTP логин и пароль администратора идут открытым текстом. Для постоянной работы используйте домен и HTTPS.

Вариант Б — домен и HTTPS через Caddy (рекомендуется)

  1. У регистратора домена создайте A-запись panel.example.com → IP_СЕРВЕРА и дождитесь, пока она заработает.
  2. Откройте порты 80 и 443: ufw allow 80/tcp && ufw allow 443/tcp (и в firewall хостинга).
  3. Установите Caddy — он сам получит и будет продлевать бесплатный TLS-сертификат:
установка Caddy
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:

/etc/caddy/Caddyfile
panel.example.com {
    reverse_proxy 127.0.0.1:51821
}
применить
systemctl reload caddy

Чтобы панель была доступна только через HTTPS, привяжите порт 51821 к localhost в docker-compose.yml и перезапустите контейнер (INSECURE при этом оставьте false):

docker-compose.yml
    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Первичная настройка

При первом входе панель проведёт через мастер настройки:

  1. Добро пожаловать → «Продолжить».
  2. Администратор: имя пользователя и надёжный пароль — не короче 12 символов. Это вход в панель, сохраните его в менеджере паролей.
  3. Существующая настройка? — «Нет» (если это не перенос со старого сервера из резервной копии).
  4. Всё: публичный адрес сервера и VPN-порт 51820/udp панель подставит сама. Поменять их можно в «Админ-панели» («Конфигурация» и «Сетевой интерфейс»); порт должен совпадать с ports: в docker-compose.yml.

В «Админ-панели» можно включить 2FA, поменять параметры интерфейса и маскировки трафика.

Экран входа в панель Grafinya
Вход в панель — светлая тема «тетрадь в клетку».

9Создайте клиента и скачайте .conf

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

Как перенести файл на iPhone

  • AirDrop — с Mac прямо на iPhone, затем «Сохранить в Файлы».
  • «Файлы» / iCloud Drive — положите файл в iCloud Drive на компьютере, на iPhone он появится в приложении «Файлы».
  • Почта или мессенджер — отправьте файл себе и сохраните вложение в «Файлы».
  • Или откройте панель прямо в Safari на iPhone и скачайте файл — он окажется в «Файлы» → «Загрузки».
Файл .conf — это ключ. В нём приватный ключ клиента: не публикуйте его и не пересылайте в общие чаты. Один клиент — одно устройство.

10Подключение в приложении grafinya

  1. Откройте grafinya и нажмите «Выбрать файл».
  2. Выберите свой .conf в «Файлах».
  3. Включите тумблер. При первом подключении iOS попросит разрешить добавление VPN-конфигурации — нажмите «Разрешить».
  4. Рекомендуем включить 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 start
Архив содержит приватные ключи сервера и клиентов. Храните его так же бережно, как пароли.

13Удаление

Остановить и удалить контейнер, сохранив данные:

терминал
cd ~/grafinya-panel
docker compose down

Удалить полностью, вместе с базой, ключами и всеми клиентами (необратимо):

терминал
cd ~/grafinya-panel
docker compose down -v --rmi all
cd ~ && rm -rf ~/grafinya-panel

14Частые проблемы

Панель не открывается по 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 (без ключей и паролей).