# 腳本加密

透過本章節，您可以瞭解如何加密您開發的 FIRERPA 模組或腳本。本章節並非介紹您在 PC 端的腳本加密，而是在 FIRERPA 內建 Python 環境中執行的腳本或模組。例如 /data/usr/module/task、/data/usr/module/extension 中的模組，或是使用內建 Python 命令執行的腳本。我們提供了相關工具來幫助您快速進行，透過本章節您可以瞭解如何保護您開發的腳本。

腳本加密採用 Cython 轉 C 並編譯為 so 的方法進行，不會對您的效能產生太大影響，但是我們只建議您加密核心的邏輯，而不是加密所有腳本檔案。同時請勿用來加密第三方函式庫的檔案，因為這是徒勞的，應始終遵循「只加密自己的邏輯」。

## 建構工具映像檔

我們高度依賴 Docker，所以在開始前請先準備好 Docker。現在請克隆 `https://github.com/firerpa/compiler`，並依照文件或以下命令建構映像檔。

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

## 加密腳本程式碼

使用以下命令將原始碼對應到映像檔內並進行編譯，支援的 arch 包括 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 檔案。如果是模組，則直接放入相關目錄並重新啟動即可。
```