# Шифрование скриптов

В этой главе вы узнаете, как шифровать разработанные вами модули или скрипты FIRERPA. Речь пойдет не о шифровании скриптов на стороне ПК, а о скриптах или модулях, работающих во встроенной среде Python FIRERPA. Например, модули в `/data/usr/module/task`, `/data/usr/module/extension` или скрипты, выполняемые с помощью встроенной команды Python. Мы предоставляем соответствующие инструменты, которые помогут вам быстро выполнить эту задачу. В этой главе вы узнаете, как защитить разработанные вами скрипты.

Шифрование скриптов осуществляется путем преобразования кода с помощью Cython в C и последующей компиляции в файл `.so`. Этот метод не оказывает значительного влияния на производительность, однако мы рекомендуем шифровать только ключевую логику, а не все файлы скриптов. Также не следует шифровать файлы сторонних библиотек, так как это бесполезно. Всегда придерживайтесь принципа: "шифровать только собственную логику".

## Сборка образа с инструментами

Наш инструментарий в значительной степени зависит от Docker, поэтому перед началом работы убедитесь, что он у вас установлен. Теперь клонируйте репозиторий `https://github.com/firerpa/compiler` и соберите образ, следуя документации или приведенной ниже команде.

```bash
docker build -t compiler .
```

## Шифрование кода скрипта

Используйте следующую команду, чтобы подключить исходный код в образ и скомпилировать его. Поддерживаемые архитектуры включают `arm`, `arm64`, `x86`, `x86_64`, что соответствует различным архитектурам сервера FIRERPA. Разные архитектуры несовместимы друг с другом.

```bash
docker run -it --rm -v /source/dir:/data compiler:latest compile.sh --arch arm64 /data/my_important_script.py
```

При успешном выполнении команды в том же каталоге, где находится ваш скрипт, будет создан файл `my_important_script.cpython-39.so`. Не переименовывайте этот файл. Если вам нужно другое имя, следует изменить имя исходного скрипта. Теперь при развертывании скрипта вы можете удалить соответствующий исходный файл `.py` и заменить его файлом `.so`.

```{attention}
Если ваш код не является модулем FIRERPA (extension, task) и состоит из одного файла, Python не сможет напрямую запустить файл `.so`. Вам потребуется создать входной `.py`-скрипт, который будет импортировать и запускать зашифрованный файл `.so`. Если же это модуль, достаточно поместить его в соответствующий каталог и перезапустить службу.
```