前言#
為了滿足我早年學計算機的願望之一 —— 聊天室,特地再來進行一次對 Fiora 的構建,特別是我曾經構建 Fiora 過多次,只有一次成功,是因為使用了 docker 進行安裝,使用的是鏡像文件,所以不能算真正意義上的構建成功,這次要寫的構建指南是指的基於源代碼進行構建。
Fiora#
一個由 碎碎醬 開發的聊天室系統,由於種種原因,Fiora 已經不再更新,且很少有維護,所以在如今的 2023 年想要再次跑起來 Fiora,是一個非常難的問題,並且 Fiora docs 敘述得並不夠詳細,對新人構建來說十分容易踩坑。拋開很少維護和難以構建來說,其實 Fiora 本身是一個十分出色的聊天室系統。
避坑指南#
如果你已經大致掌握了 Fiora 的構建機制,但是有一些問題無法克服的話,在這裡為你指點一下。
-
- Node.js 版本問題,請使用 v14 LTS 版本
如果你在yarn build:web
時,也就是構建客戶端時遇到了類似於圖片上的問題
- Node.js 版本問題,請使用 v14 LTS 版本
這大概是由於你的 Node.js 版本過高導致的,畢竟這是一個始於 2015 年的項目,在如今使用高版本的 Node.js 是不禮貌的。在圖中的倒數第 6 行命令可以看到 列出了現在你所使用的 Node.js 版本,如果你實在沒找到可以執行命令
# 查詢 Node.js 版本
node -v
# 或者
node --version
來查詢使用的 Node.js 的版本
通常都是最新版本,而應該使用 Node.js v14 版本。切換完成後再運行上述命令來檢查是否生效,如果沒有生效,可以嘗試重啟伺服器,並且在完成切換後,需要重新安裝 yarn、安裝依賴、構建客戶端
-
- 構建客戶端時間過長,請升級伺服器,推薦 2 核心 2G RAM
-
- 獲取 UserID,使用 Fiora 內置命令是無法獲取到 UserID 的,請檢查控制台
-
- 構建 Fiora 配套 App 問題,需要使用新的構建方式,而不是使用 Fiora docs 內所寫的方式。但還請注意,由於 Fiora 在一段時間前對代碼進行了重構,或許 App 將無法再與服務端通訊
開始構建#
伺服器配置指南#
雖然 Fiora 對配置的要求不高,但它並不是沒有門檻,因為牽扯到對源代碼進行構建,所以需要一定的配置。
- 配置要求:1 核心 2GB 或更高(推薦 2 核心 2GB)
- 網絡要求:可以對外聯網
- 硬盤大小:2G 以上
- 環境要求:Node.js (版本 v14)、MongoDB、Redis
- 伺服器系統:Ubuntu22(採用該系統進行講述構建指南)
關於 Node.js、MongoDB、Redis 就不敘述如何安裝了,如果需要省事,可以安裝我們的老朋友 BT.CN,並且選擇安裝 PM2 管理器,這樣的話就不需要額外再安裝 pm2、npm 了。
構建指南#
Web 端構建#
首先我們需要克隆項目至本地,在這之前請確保你的伺服器具有 git 功能,一般情況下都是有的,輸入以下命令
# 克隆項目至本地
git clone https://github.com/yinxin630/fiora.git -b master
值得注意的是,如果你的伺服器地處國內,可能會克隆失敗,你可以選擇去 GitHub 裡下載下來,再上傳至伺服器。在克隆完成後,需要進入 Fiora 目錄
cd /fiora
執行該段代碼的時候注意,務必加上你現在所在的目錄,假設我克隆 Fiora 的目錄是 /www/project
,那麼我需要輸入的指令就應該是
cd /www/project/fiora
接下來,我們務必確認使用的 Node.js 版本是否是 v14,請輸入以下命令進行檢查。
# 查詢 Node.js 版本
node -v
# 或
node --version
因為這關乎到你所安裝的 yarn 以及後續的構建的成功與否,如果不是 v14,請務必切換為 v14
在這之後,我們需要確認是否有 yarn, 通常是沒有的,如果你認為你已經安裝了可以輸入以下命令進行確認。
yarn -v
如果你確定你沒有 yarn, 則需要輸入以下命令進行安裝。
npm install -g yarn
稍等一段時間後,yarn 就會完成安裝,對於 yarn 一般是沒有什麼要求的,如果你確定有問題,可以嘗試切換到 1.22.19
版本,這個版本經過測試是可以正常構建的。
23/12/23 補充 解決了一系列的問題,支持了 fiora 內置的命令行工具
安裝項目所需依賴
yarn install
然後將 Fiora 項目鏈接起來
yarn link "fiora"
然後就是正式構建 Fiora 了,正式構建 Fiora 其實很簡單,只需要把上面工作完成,就可以輸入命令
yarn build:web
對 Fiora 進行構建了,在等待一段時間後,我們就完成了構建。
接下來,進行配置 JwtSecret,這個步驟雖然不知道為什麼需要,但沒有的話,是無法運行的,向命令行中輸入以下命令
echo "JwtSecret=<string>" > .env2
要將 <string>
替換為一個秘密文本
最後,就可以啟動 Fiora 了
yarn start
在完成啟動以後,使用瀏覽器打開 http://[ip地址]:[端口]
(比如 http://127.0.0.1:9200
),就可以訪問網站了,默認的端口是 9200.
添加管理員#
此章節使用了 Fiora 內置的腳本,如果無法執行,請檢查是否將 Fiora 項目鏈接起來。
yarn link "fiora"
通常來講,如果使用上述的構建步驟,不需要檢查,即可添加管理員。
更多 Fiora 內置腳本參見→腳本 | Fiora Docs
在成功啟動 Fiora 後,會進入 Fiora 的運行日誌。讓我們進入成功啟動的地址,註冊一個用戶,並且記住用戶名。我們鍵盤同時按 CTRL 鍵和 C 鍵,退出運行日誌。
fiora getUserId [username]
[username]
部分就是所註冊的用戶的用戶名,通過此方法獲得用戶的 UserID
658637b993f5dbef4c3e1f0a
就是我們所需的 UserID,我們要將這段 ID 添加到 /packages/config/server.ts
的 第34行
中
administrator: env.Administrator ? env.Administrator.split(',') : ["658637b993f5dbef4c3e1f0a"],
配置完成後,重新啟動 Fiora 即可。
無法解決的問題#
App 構建#
在查閱大量資料,發現 Fiora App | fiora docs 所提供的構建方式完全不可能在 2023 年的今天成功構建,絕對會大量報錯!而且在我成功構建完成 App 後發現,由於一段時間前 Fiora 的代碼進行了重構,導致 App 在 2023 年的今天,已經無法再和自己的服務端通訊了!!!!!!!!!即使是碎碎醬自己的 App 也不行了,我在這裡寫 App 的構建的原因是,如果有熱心的大神看到,可以幫忙解決一下這個問題!!
在完成 Web 構建時,會在 /fiora/packages
目錄裡有一個 app 目錄,進入裡面,這是我們構建 App 所圍繞的目錄
cd /fiora/packages/app
在命令行中輸入以下命令以安裝最新的 EAS CLI
npm install -g eas-cli
然後去 Expo 註冊一個賬號,並記住賬號密碼,因為我們對 App 的構建是雲構建,而不是本地構建。接下來登錄賬號
eas login
輸入剛剛註冊的賬號和密碼,即可完成驗證。然後在命令行中輸入以下命令,選擇你要打包的類型,使用↑、↓、ENTER(回車鍵)進行選擇,我這裡只選擇 Android。
eas build:configure
接下來輸入以下命令,進行第一次構建
eas build --platform android
在等待 10 分鐘左右以後,會在登錄後的 Expo 的首頁看到以下內容
點進去就可以下載到你的 .aab 格式的安裝包了,沒錯是 .aab 而不是 .apk,所以我們需要第二次構建,在第二次構建前,我們需要去到 /fiora/packages/app
目錄內,編輯一個 eas.json
的文件,將它的內容替換為
{
"build": {
"preview": {
"android": {
"buildType": "apk"
}
},
"preview2": {
"android": {
"gradleCommand": ":app:assembleRelease"
}
},
"preview3": {
"developmentClient": true
},
"production": {}
}
}
然後我們再進行打包構建,但是這次我們使用的命令是以下內容,與上面所寫的有所不同。
eas build -p android --profile preview
再經過 10 分鐘的等待,就完成了對 App 的構建,並且可以下載 .apk 格式的安裝包了,它甚至幫你自動簽了名。
但就如我說的,這個 App 無法與服務端通訊,需要大神的協助!!
端口問題#
部分服務商有比較嚴格的防火牆策略,所以必須開放我們所需的端口,Fiora 所需的端口包括但不限於
- 19002 構建 App 需要
- 6379 構建 App 需要
- 9200 Fiora Web 端口,可自定義
- 27017 資料庫端口
其它問題#
- 配置文件:配置 | Fiora Docs
- 自定義域名:反向代理 | Fiora Docs
修改內容#
假設你想對你的 Fiora 進行一定的修改,那麼你務必查看這部分的內容。還是老話,由於一段時間前 Fiora 的代碼進行了重構,導致 Fiora | Docs 在 2023 年的今天,已經不再那麼適用了,它所給的目錄結構也不再具有價值。所以如果你想修改 Fiora 的源代碼,就務必查看我所寫的部分目錄構成。
# Fiora 部分目錄構成
|-- [.githubb] // github actions
|-- [.vscode] // vscode 工作區配置
|-- [packages] // 所有源代碼的存儲目錄
|------ [app] // App 源代碼
|---------- [src] // App 源代碼
|-------------- [pages] // App 前端UI
|---------- [app.json] // 打包 App 基本信息
|---------- [src] // App 源代碼
|------ [assets] // 靜態資源
|------ [config] // Fiora 配置文件夾
|---------- [client.ts] // 客戶端配置
|---------- [server.ts] // 服務端配置
|------ [database] // 資料庫方法,一般情況勿動
|------ [server] // 構建完成後存放的Web
|------ [utils] // utils
|------ [web] // Web 源代碼
|---------- [src] // Web 源代碼
|-------------- [modules] // Web 前端UI
|-- .eslintignore // eslint 忽略
|-- .eslintrc // eslint 配置
|-- .gitignore // git 忽略
|-- Dockerfile // docker 文件
|-- LICENSE // fiora 許可
|-- docker-compose.yaml // docker compose 配置
|-- package.json // npm
|-- tsconfig.json // typescript 配置
|-- yarn.lock // yarn
...
結束#
這些是我這次搭構建 Fiora 所經歷的一切,希望可以為後來人構建 Fiora 避開一些坑,或者教新手如何 構建 Fiora 聊天室,本文或許還有部分不詳盡的地方,希望可以多多擔待,有問題麻煩指出來,我會進行改進,並且如果有大神有辦法解決 App 無法與服務端通訊的問題,請發送至我的郵箱 [email protected] 感激不盡!
參考#
Fiora Docs:https://yinxin630.github.io/fiora/zh-Hans/
Create your first build:https://docs.expo.dev/build/setup/
Expo CLI:https://docs.expo.dev/more/expo-cli/#installation
Build APKs for Android Emulators and devices:https://docs.expo.dev/build-reference/apk/
此文由 Mix Space 同步更新至 xLog 原始鏈接為 https://fmcf.cc/posts/technology/Fiora-Setup-Guide