【Ragflow】30.離線環境遷移方案

前言

之前的 Ragflow-Plus 在服務器上穩定運行一段時間后,接到任務,要把服務遷移到一臺古老的,離線windows臺式機上。

起初認為,下載離線安裝包,加載離線鏡像,遷移下數據就可以了。

結果坑多得意想不到,折騰了一晚上才搞定。

本文就來分享一下解決方式,Ragflow-Plus 用的是和 Ragflow 相同數據存儲方式,用 Ragflow 部署的系統可相同適用。

數據遷移準備

1. 數據導出

在做系統遷移前,需要先導出原有系統上的數據。

Docker 采用 Docker Volume 進行數據持久化和容器數據共享,在容器刪除后,數據不會丟失。

因此,不需要做容器導出,只需要導出數據和鏡像就可以了。

導出數據有兩種主要方式,一種是復制文件原始路徑,需要對路徑有充分了解,容錯率低;

另一種是通過一個臨時創建的最小容器掛載volume,對數據進行打包,容錯率高。

因此,采用后者的方式,具體命令如下:

docker run --rm -v docker_esdata01:/data -v $(pwd):/backup alpine tar czf /backup/docker_esdata01.tar.gz -C /data .
docker run --rm -v docker_minio_data:/data -v $(pwd):/backup alpine tar czf /backup/docker_minio_data.tar.gz -C /data .
docker run --rm -v docker_mysql_data:/data -v $(pwd):/backup alpine tar czf /backup/docker_mysql_data.tar.gz -C /data .
docker run --rm -v docker_redis_data:/data -v $(pwd):/backup alpine tar czf /backup/docker_redis_data.tar.gz -C /data .

上面的命令是用alpine這個鏡像創建容器,首次運行會自動拉取該鏡像。

如果遷移的服務器是離線環境,可通過在線環境預先下載該鏡像,打包導出。

docker pull alpine
docker save alpine -o alpine.tar

再傳到離線服務器上,進行加載

docker load -i alpine.tar

打包完上面的es、minio、mysql、redis數據后,將其合并為一個大的壓縮包,方便拷貝傳輸。

tar czf all_volumes_backup.tar.gz *.tar.gz

2. 鏡像導出

和上面alpine離線導出的方式類似,可用下面的命令將ragflowplus所有的相關鏡像一并導出為ragflowplus-images.tar

docker save -o ragflowplus-images.tar zstar1003/ragflowplus-management-web:v0.4.3 zstar1003/ragflowplus-management-server:v0.4.3 zstar1003/ragflowplus:v0.4.3 valkey/valkey:8 quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z mysql:8.0.39 elasticsearch:8.11.3

遷移踩坑記錄

準備好鏡像和容器之后,再下載一些必要的安裝包,就可以開始遷移了。

這一節將記錄在 win10-1909 操作系統上失敗的遷移方案,該系統是18年的系統版本,導致很多軟件都無法兼容。

1. 奇怪的ollama

單機版本,用 ollama 部署模型非常方便,因此下載了 ollama 的最新版本。

此外要把模型遷移進去,在 ollama 中,模型的默認存儲地址在C:\Users\%Username%\.ollama,遷移到 windows,只需將里面的models文件夾復制進去即可。

然而,運行 ollama 時,發現獨顯沒有利用,模型只加載到CPU中,配置完相關環境變量,問題依舊。

解決方式是將ollama版本回退到更早期的版本,重新安裝,方才正常。

2. 異常的docker

下載了最新版本的 Docker Desktop,安裝就報錯,彈窗提示系統版本過老,無法安裝。

于是下載歷史版本的 Docker Desktop ,能夠安裝,但無法啟動 Docker engine。

主要原因是 Docker Desktop 默認使用 Hyper-V 虛擬化技術創建一個輕量級 Linux 虛擬機(VM),并在其中運行 Docker 守護進程和容器。

然而,該虛擬機沒有正常安裝上。

在一臺正常 windows 系統中,運行wsl --list,可以看到 docker 安裝的 Linux 子系統:

適用于 Linux 的 Windows 子系統分發:
docker-desktop (默認)

然而,在這臺異常電腦上,輸出為空。

3. 失敗的Hyper-V

通過直接安裝 Docker 行不通之后,另外一個思路就是直接利用 Hyper-V 安裝一套 Linux 虛擬機系統。

在windows中,需要在設置中勾選啟動 Hyper-V、適合于Linux的Windows子系統、虛擬機平臺。

然后下載了unbuntu 20.04系統的iso,用Hyper-V進行創建,然而遇到報錯:虛擬機監控程序未運行

查詢相關資料,需要在 bios 中,開啟虛擬化,將Advanced > CPU Configuration > Intel Virtualization Technology選項設置為Enabled

重啟后,該報錯消失,但遇到新的報錯,和系統版本相關,基本宣告此方案不可行。

最終采用的方案

1. 方案分析

既然用系統自帶的Hyper-V行不通,那就采用 VMware 虛擬機的方案。

然而,直接在 VMware 中運行 ubuntu 環境,再進行依賴安裝非常繁瑣。因為用于安裝的.deb包為節省空間,通常是不完整的,比如,安裝docker的deb包,安裝時它除了安裝本體外,還需要聯網去下載其它依賴,以及依賴的依賴。

因此,更加簡單的方式就是在一臺聯網的設備中,先用 vmware 創建虛擬機,在里面直接聯網進行環境安裝和數據導入,做完之后,將整個系統文件進行復制遷移。

2. 虛擬系統準備

下面用 VMware 16,進行具體操作。

1.首先在VMware中新建虛擬機,裝好系統。

2.配置ssh

為了方便和宿主機進行文件傳輸,先配置好ssh。

sudo apt update
sudo apt install openssh-server

防火墻開放ssh端口

sudo ufw allow ssh

配置完后,就可以通過ip進行ssh連接。

3.安裝docker

設置 Docker 的 apt 存儲庫:

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc# Add the repository to Apt sources:
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

安裝 Docker 包:

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

驗證 Docker 安裝:

docker --version

4.加載鏡像和數據

上傳之前準備的數據文件all_volumes_backup.tar.gz和鏡像文件ragflowplus-images.tar

這里的鏡像文件也可以直接去網上pull,但考慮速度原因,直接載入更快。

加載鏡像

docker load -i ragflowplus-images.tar

解壓數據

tar -xzvf all_volumes_backup.tar.gz

創建數據卷

docker volume create docker_esdata01
docker volume create docker_minio_data
docker volume create docker_mysql_data
docker volume create docker_redis_data

導入數據

docker run --rm -v docker_esdata01:/data -v C:\Users\yourname\Desktop\docker_backup:/backup alpine sh -c "cd /data && tar xzf /backup/docker_esdata01.tar.gz"
docker run --rm -v docker_minio_data:/data -v C:\Users\yourname\Desktop\docker_backup:/backup alpine sh -c "cd /data && tar xzf /backup/docker_minio_data.tar.gz"
docker run --rm -v docker_mysql_data:/data -v C:\Users\yourname\Desktop\docker_backup:/backup alpine sh -c "cd /data && tar xzf /backup/docker_mysql_data.tar.gz"
docker run --rm -v docker_redis_data:/data -v C:\Users\yourname\Desktop\docker_backup:/backup alpine sh -c "cd /data && tar xzf /backup/docker_redis_data.tar.gz"

克隆項目代碼

git clone https://github.com/zstar1003/ragflow-plus.git

啟動系統

docker compose -f docker/docker-compose.yml up -d

這里需要注意,必須先導入完數據,再啟動系統,否則會造成數據不一致沖突,造成容器狀態異常。

如果正常啟動,直接用 ubuntu 內置的瀏覽器,訪問localhost就能看到界面。

如果要在外部宿主機訪問,需要先查看虛擬機ip:

瀏覽器輸入該ip就能訪問,進去可以看到,數據已正常遷移成功。

5.復制系統文件

配置完后,右鍵->打開虛擬機目錄,找到虛擬機所在目錄,將整個虛擬機文件夾拷貝下來。

3. 離線環境遷移

有了環境之后,在離線系統中,安裝好VMware,就可以直接打開虛擬機,選擇上一步的系統文件。

進入之后,啟動環境方式和上面相同。

由于外部訪問需要訪問虛擬機ip,比較麻煩,因此,可以直接配置一個端口轉發,將本機localhost端口轉發到虛擬機的相應端口上。

選擇編輯->虛擬網絡編輯器,配置需要管理員權限,點擊下面的更改設置

再次進入后,選擇 VMnet8 的 NAT 設置

在這里添加端口轉發規則,以80端口為例,8888和9000端口同理。

配置完后,就可以直接在外部瀏覽器訪問localhost進入前臺首頁。

由于 ollama 是在外部進行部署的,因此,在虛擬機中進行模型配置時,需要通過外部的ip訪問到 ollama 的服務。

首先配置環境變量OLLAMA_HOST,設定值為0.0.0.0:11434,這將使ollama監聽所有的地址。

配置完后,重啟ollama,然后在網頁中就可以配置ollama的url為外部 VMnet8 的ip + 11434端口,就可以連通了。

至此,系統遷移部署完成。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/87203.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/87203.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/87203.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

nrf52840藍牙學習(定時器的應用)

和其他 MCU 處理器一樣,在 nrf52840 中定時器的功能是十分強大的。其內部包含了 5 個定時 器 TIMER 模塊 :TIMER0 、 TIMER1 、 TIMER2 、 TIMER3 、 TIMER4 ,如下表 10.1 所示。 1. 時鐘源 首先定時器 TIMER 工作在高頻時鐘源&#xff08…

【Bluedroid】藍牙啟動之BTM_reset_complete源碼解析

當藍牙控制器完成硬件重置后,協議棧需通過一系列初始化操作恢復各模塊狀態。本文深入分析BTM_reset_complete核心函數及其調用鏈,詳解 L2CAP 連接清理、安全模塊重置、掃描參數恢復、BLE 隱私功能初始化等關鍵流程,揭示藍牙設備在重置后如何通過標準化狀態恢復確保互操作性、…

containerd 項目主要目錄簡要說明

containerd 項目結構清晰,核心代碼分布在若干主目錄下。以下是 client、cmd、core、internal、pkg、plugins 這六個主要包/目錄的簡要作用說明: 1. client 作用:封裝與 containerd 守護進程通信的 Go 客戶端 API,主要基于 gRPC。…

有線轉無線工具,輕松創建WiFi熱點

軟件介紹 今天為大家推薦一款實用的無線網絡共享工具——MyPublicWiFi。這款軟件能夠將電腦的有線網絡轉換為無線WiFi,方便其他設備連接使用。 安裝與設置 該軟件為安裝版程序,安裝完成后會自動識別當前電腦的IP地址。用戶可在軟件界面中自定義設…

Linux下,通過標準I2C驅動讀取Sensor ID

sensor型號&#xff1a;OS04L10&#xff0c;sensor引腳以及時鐘要先配置好&#xff0c;源碼如下&#xff1a; #include <fcntl.h> #include <linux/i2c-dev.h> #include <linux/i2c.h> #include <stdint.h> #include <stdio.h> #include <sy…

人工智能基石:SVM支持向量機全解析(附Python實戰)

大家好&#xff01;今天我們來深入探討支持向量機&#xff08;Support Vector Machine, SVM&#xff09;——這個在??圖像識別、文本分類??等領域廣泛應用的強大算法。既能處理分類問題&#xff0c;又能解決回歸任務&#xff0c;甚至在非線性數據面前也能游刃有余。本文將帶…

mysql查看數據庫

在 MySQL 中查看當前數據庫的創建語句&#xff0c;使用 SHOW CREATE DATABASE 命令&#xff0c;以下是詳細操作指南&#xff1a; 1. 查看當前數據庫的創建語句 SHOW CREATE DATABASE database_name; 替換 database_name 為你的數據庫名使用反引號 包裹特殊名稱或保留字 2.…

ArrayList剖析

大家天天在用List&#xff0c;ArrayList一般來講應該是程序員用的最多的集合類了。 我們今天研究一下ArrayList。 總體來講&#xff0c;從底層數據結構或者源碼的角度看&#xff0c;List比Map或者Set要簡單。 底層數據結構 ArryList其實就是可變長數組。 初始化的時候&…

回顧JAVA中的鎖機制

Java中的鎖機制 在Java中&#xff0c;鎖機制是多線程編程里保障數據一致性與線程安全的關鍵技術。 1. 內置鎖&#xff1a;synchronized關鍵字 synchronized是Java的內置鎖機制&#xff0c;能夠保證在同一時刻&#xff0c;只有一個線程可以執行被其修飾的代碼塊或方法。 用法…

YOLOv11: AN OVERVIEW OF THE KEY ARCHITECTURAL ENHANCEMENTS目標檢測論文精讀(逐段解析)

YOLOv11: AN OVERVIEW OF THE KEY ARCHITECTURAL ENHANCEMENTS目標檢測論文精讀&#xff08;逐段解析&#xff09; 論文地址&#xff1a;https://www.arxiv.org/abs/2410.17725 Rahima Khanam and Muhammad Hussain Ultralytics公司發布 CVPR 2024 論文寫的比較簡單&#xff…

【Erdas實驗教程】025:遙感圖像輻射增強(霧霾去除)

文章目錄 一、霧霾去除原理二、霧霾去除案例一、霧霾去除原理 遙感影像霧霾去除的核心原理是消除大氣散射對電磁波的干擾,恢復地物真實反射信息。Haze Reduction 工具的原理: 該工具基于暗目標法(Dark Object Subtraction, DOS),適用于去除因大氣散射(霧霾本質是大氣顆…

Language Models are Unsupervised Multitask Learners :語言模型是無監督的多任務學習者

摘要 自然語言處理任務&#xff0c;如問答、機器翻譯、閱讀理解和摘要&#xff0c;通常通過在特定任務的數據集上進行監督學習來解決。我們展示了語言模型在訓練于一個包含數百萬網頁的新數據集——WebText——時&#xff0c;可以無需任何顯式監督就開始學習這些任務。當模型以…

SQL語句全攻略:從基礎到進階的編程之旅

目錄 一、引言二、SQL 基礎語法2.1 SQL 語句寫法順序2.2 關聯查詢2.3 數據處理常用函數和運算符 三、數據庫和表的基本操作3.1 創建數據庫3.2 使用數據庫3.3 創建表 四、基礎增刪改查操作4.1 插入數據&#xff08;增&#xff09;4.2 查詢數據&#xff08;查&#xff09;4.3 更新…

Kafka的下載安裝

目錄 一、前期準備 1、查看網卡&#xff1a; 2、配置靜態IP 3、設置主機名 4、配置IP與主機名映射 5、關閉防火墻 6、配置免密登錄 二、JDK的安裝 三、Zookeeper的安裝 四、Kafka的安裝 1、Kafka的下載安裝 2、修改配置文件 4、分發文件 5、修改其他節點broker.i…

opencv入門(6) TrackBar調整圖片和鍵盤響應

文章目錄 1 創建trackbar2 使用userdata傳入函數3 鍵盤響應 1 創建trackbar 1.trackbar名稱 2.創建在哪個窗口上 3.拖動trackbar改變的值 4.trackBar的最大值 5.trackbar改變時的回調函數 6. 帶入回調函數的數據&#xff0c;可以不用帶,是一個void指針 createTrackbar(“Value …

QT<33> 修改窗口標題欄背景顏色

前言&#xff1a; 在做項目或者開發QT軟件時&#xff0c;如果想要修改窗口標題欄背景顏色&#xff0c;發現沒有代碼可以直接設置&#xff0c;目前有兩種方法可以設置。 第一種&#xff0c;自定義一個界面類&#xff0c;用QLabelQWidget實現&#xff0c;QLabel當作標題欄。 第…

JavaEE-博客系統項目

項目介紹 準備工作 創建數據表 創建項目 添加依賴 創建對應目錄 除了基本的數據層mapper&#xff0c;業務層service&#xff0c;交互層controller&#xff0c;還創建了公共類的層common&#xff0c;枚舉類層enums&#xff0c;異常類層&#xff0c;和實體類層pojo。 配置項目配…

Java項目:基于SSM框架實現的軟件工程項目管理系統【ssm+B/S架構+源碼+數據庫+畢業論文+開題報告】

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術&#xff0c;讓傳統數據信息的管理升級為軟件存儲&#xff0c;歸納&#xff0c;集中處理數據信息的管理方式。本項目管理系統就是在這樣的大環境下誕生&#xff0c;其可以幫助管理者在短時間內處理完畢龐大的數據信息&am…

[按鍵手機安卓/IOS腳本插件開發] 按鍵插件調試與判斷循環結構輔助工具

實現按鍵插件的核心原理 通過一個table類型的QMPlugin變量實現按鍵精靈調用Lua函數&#xff0c;例如 -- Lua代碼 -- 實現兩數相加求和 function QMPlugin.Add(a, b) return a b end 將以上代碼保存成.lua文件&#xff0c;例如test.lua后&#xff0c;放入按鍵精靈手機助手的p…

提示詞框架(9)--CARE

提示詞框架不止是AI的框架&#xff0c;也可以是我們的思考框架&#xff0c;拆解問題的方法&#xff01;&#xff01;&#xff01; CARE框架是一種用于優化提示詞設計的方法&#xff0c;它幫助用戶更有效地與AI進行交互&#xff0c;特別是在需要獲取特定信息或實現某些任務時。…