在 A2hosting 用 AppImage deploy Rust rocket 這個 framework 的 app
Rust 的 Rocket 是一個後端框架 (framework)。除了有靜態型別語言的好處(比如減少runtime error)外,還有一個binary檔包全部,免除裝其他太多 library 或是框架 library 的問題。
因為自己的是網路租用的A2 site hosting 空間(Linux),想說為了物盡其用,所以想要把產生的 web app binary 放在上面執行,但想當然爾,還是缺相依性(空間提供的函式庫版本太舊)。後來想,既然 AppImage 可以包一個執行檔的諸多相依軟體或是函式庫,為何不用之包呢?
以下以放在 /path/to/exampleapp
這個 app 為例,講述我 deploy 的方法。
製作原始二進位檔 (binary file)
進入 /path/to/exampleapp
,輸入下列 Linux 指令,編譯可執行檔:
1 | cargo +nightly build --release # 假設app需要 nightly 的 rust 版本 |
最後應該會在/path/to/exampleapp/target/release
找到taikoothong
。
複製到 AppDir
創立新的/path/to/AppDir
,然後把exampleapp
複製到這裡:
1 | mkdir /path/to/AppDir |
安裝appimage
1 | wget -O appimage-builder-x86_64.AppImage https://github.com/AppImageCrafters/appimage-builder/releases/download/v1.1.0/appimage-builder-1.1.0-x86_64.AppImage |
打包appimage
進去/path/to/
,產生appimage 的打包設定檔,依指示設定:
1 | cd /path/to |
最後生成 /path/to/AppImageBuilder.yml
,檢視裡面的設定有沒有問題,刪除不必要的sourceline
內項目,增加必要的include
內 ubuntu 套件等等。
最後輸入指令打包
1 | appimage-builder --recipe AppImageBuilder.yml |
然後把 examplearchive.tar
上傳到site-hosting
解壓縮然後執行
因為我的 site-hosting 空間不支援 Linux 的 FUSE,所以在遠端的 site-hosting 空間需要解壓縮AppImage裡面的檔案,然後執行裡面的可執行檔:
1 | cd /path/to/archive #進去 examplearchive.tar 所在的目錄 |
修改 .htaccess
因為a2hosting使用 .htaccess 轉網頁地址假設我們要把 我的網址/example
和其下的網頁,轉址到 app 的 http://127.0.0.1:8000/
處理,參考 a2hosting 建議的方式設置如下:
1 | <IfModule mod_rewrite.c> |
這樣打我的網址/example
就能進入自己的app了。