Проводя длительное время вне дома хотелось бы некоторго комфорта, в данном случае генерация картинок при помощи Fooocus с любых устройств. Все таки удаленный доступ с небольшого ноута к большому компу дома, через Moonlight или AnyDesk не то, чего бы хотелось. Поэтому реализовал доступ к локально запущенному серверу Fooocus.

Про установку Fooocus сейчас писать не буду перейду к описанию получения данной плюшки.

Ключи запуска Fooocus

В виндовом варианте есть три файла для запуска программы run.bat run_anime.bat run_realistic.bat

Для достижения нужного результата создать копии этих батников с дополнительными ключами запуска. Для примера взять содержимое run_anime.bat скопировать в новый файл run_anime-online.bat и добавить нужные заклинания:

.\python_embeded\python.exe -s Fooocus\entry_with_update.py --preset anime --listen --theme=dark --share
pause
  • --preset - наборы предопределенных параметров, используемых для настройки Fooocus при его запуске.

    • default: конфигурация по умолчанию, используемая, если вы не указали предустановку при запуске.

    • anime: оптимизированная конфигурация для создания изображений аниме или манги с использованием модели animaPencilXL_v100.

    • realistic: конфигурация, выбранная для создания портретов и фотореалистичных изображений с использованием модели realityStockPhoto_v20, дополненной стилем пленочной фотографии LoRA SDXL.

    • sai: Базовая конфигурация, рекомендуемая Stability AI для использования базовой версии SDXL и ее Refiner.

    • lcm: оптимизированная конфигурация для сверхбыстрой генерации с использованием техники LCM и той же модели, что и параметры по умолчанию, JuggernautXL V8.

  • --listen - какие адреса слушать (аналогично настройке веб сервера). Без указания конкретных адресов будет слушать все, что аналогично записи 0.0.0.0

  • --port - какой порт слушать. По умолчанию 7865

  • --share - дает доступ к API, регистрирует конечную точку в .gradio.live т.е получаем сгенерированную ссылку и без всякого гемора получаем доступ к своему серверу. В терминале будут такие строки после запуска батника:

Running on local URL:  http://0.0.0.0:7865
Running on public URL: https://ab22ae794a7734893f.gradio.live
  • --theme=dark - указывает на использование темной темы, по умолчанию светлая

  • --always-high-vram - автор рекомендует для лучшей производительности, переносит нагрузку с ОЗУ на гораздо более быструю видеопамять (еще не пользовался)

Есть еще ключи запуска, но сейчас не об них речь.

Файл запуска Fooocus

Теперь отредактируем файл run_anime-online.bat под необходимые реалии, которые нужны на данный момент. Остальные файлы запуска с необходимыми пресетами создать по аналогии.

.\python_embeded\python.exe -s Fooocus\entry_with_update.py --preset anime --listen 192.168.30.63 --theme=dark
pause

Что изменилось: добавился конкретный адрес в локалке машины на которой запущен сервак. Удален ключ --share ибо не маленькие и все сделаем по взрослому причем несколько вариантов.

Первый вариант доступа к серверу Fooocus

Что нужно:

  • Открыть порт в фаерволе винды. По большому счету это телодвижение можно и не делать, винда сама спросит разрешение на открытия порта после запуска сервера Fooocus

Мой компьютер - Панель управления\Все элементы панели управления\Брандмауэр Защитника Windows - Дополнительные параметры - Правила для входящих подключений - Создать правило - Для порта -Далее - Ввести порт - 7865 - Далее - Разрешить подключение - Далее - Выбрать сети - Далее - Ввести название правила - Готово

  • Поднять ВПН сервер на маршрутизаторе (есть уже давно, ничего сложного, лень писать)

  • Создать на устройствах ВПН подключение к своей домашней сетки (то же есть, капец лень описывать что делать)

  • Запустить сервер Fooocus одним из батников

Как подключаться:

  • Активировать ВПН на устройстве с которого будем заходить

  • В браузере набрать локальный адрес машины на которой запущен Fooocus 192.168.30.63:7865

Второй вариант доступа к серверу Fooocus

Этот вариант упростит жизнь пользователя (т.е. меня). Ибо все будет по красоте 😀

Что нужно:

Открыть порт в фаерволе винды.

Мой компьютер - Панель управления\Все элементы панели управления\Брандмауэр Защитника Windows - Дополнительные параметры - Правила для входящих подключений - Создать правило - Для порта -Далее - Ввести порт - 7865 - Далее - Разрешить подключение - Далее - Выбрать сети - Далее - Ввести название правила - Готово

Создать у регистратора доменных имен еще один домен focus.wildserver.ru

Выбрать DNS - Выбрать домен wildserver.ru - Создать подзону focus - Сделать запись CNAME wildserver.ru - Сохранить

Создать сертификат безопасности в Let’s Encrypt для домена focus.wildserver.ru

Зайти по SSH на сервер

Пробный прогон, нажать 1

sudo certbot certonly --dry-run -d focus.wildserver.ru -d www.focus.wildserver.ru

Если все холофо то создать сертификат

sudo certbot certonly -d focus.wildserver.ru -d www.focus.wildserver.ru

Поднять прокси сервер

Который будет посредником между сервером Fooocus запущенном на винде и внешним миром.

sudo nano /etc/apache2/sites-available/focus.wildserver.ru.80-443.conf

Вставить конфиг:

<VirtualHost *:80>
ServerName focus.wildserver.ru
ServerAlias www.focus.wildserver.ru
Redirect permanent / https://focus.wildserver.ru
</VirtualHost>

<VirtualHost *:443>
    ServerName focus.wildserver.ru
    ServerAdmin admin@wildserver.ru
    ServerAlias www.focus.wildserver.ru
    CustomLog ${APACHE_LOG_DIR}/focus.wildserver.ru.access.log combined
    ErrorLog ${APACHE_LOG_DIR}/focus.wildserver.ru.error.log

SSLEngine On
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
ProxyVia full

Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/focus.wildserver.ru/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/focus.wildserver.ru/privkey.pem

<proxy *>
  Require all granted
</proxy>

    ProxyPass / http://192.168.30.63:7865/
    ProxyPassReverse / http://192.168.30.63:7865/

</VirtualHost>

Сохранить файл Ctrl+O Enter, закрыть Ctrl+X

Проверка синтаксиса Apache

sudo apachectl configtest

Активировать виртуальный хост

sudo a2ensite focus.wildserver.ru.80-443.conf

Перезапустить веб сервер

sudo systemctl restart apache2

Error Connection errored out.

Как подключаться:

В браузере набрать focus.wildserver.ru

Третий вариант доступа к серверу Fooocus

Кто не имеет возможности или не хочет разбираться с первыми двумя вариантами. Убрать из строки запуска Fooocus ключ --listen 192.168.30.63 и добавить ключ --share. Тогда доступ к серверу будет по сгенерированной ссылке вида https://ab22ae794a7734893f.gradio.live. Тут я не даю никаких гарантий конфиденциальности, что там будет с запросами и сгенерированными картинками, будут они еще где то храниться или нет.

Авторизация на сервере Fooocus

Чтобы обезопаситься, хоть немного от случайных прохожих целесообразно закрыть доступ логином и паролем.

Для этого в папке fooocus создать файл auth.json для примера там же лежит файл auth-example.json

[
    {
        "user": "Логин",
        "pass": "Бессмысленны-набор_символов"
    }
]

После этого при входе на сервер будет запрашиваться логин и пароль.