企業出海降本:如何將應用從 AWS EC2 快速無縫遷移至DigitalOcean Droplet

企業出海已經成為目前最熱門的趨勢。然而不論你是做跨境電商,還是短劇出海,或處于最熱門的AI 賽道,你都需要使用海外的云主機或GPU云服務。海外一線的云服務平臺盡管覆蓋區域廣泛,但是往往費用成本較高。所以降本始終是企業出海關注的重點。

DigitalOcean作為海外上市云服務平臺,已服務60萬企業用戶。DigitalOcean以簡單易用、價格實惠、性能穩定,以及一鍵部署與配置、托管數據庫和內置監控等強大功能而受到青睞。這些特點使其成為初創公司、獨立開發者和希望將更多精力放在構建而非管理基礎設施的成長型團隊的理想選擇。

所以有許多用戶都從一線云服務平臺遷移至DigitalOcean,或將DigitalOcean作為多云部署的一部分。甚至有的客戶從AWS 遷移至DigitalOcean之后,成功節省了60%的成本。

那么在 AWS EC2 上運行項目如何遷移到 DigitalOcean?

無論你是想降低基礎設施成本、簡化服務器管理,還是獲得對環境的更多控制,本教程都會一步步教會你把一個正在運行中的應用,從 EC2 遷移到 DigitalOcean Droplet 。

本教程確保你能夠復刻環境、以安全方式移動文件和數據,并在最小化停機時間的情況下完成遷移。

本教程特別適用于希望優化云基礎設施的開發者、創業者和企業。通過從 AWS EC2 遷移到 DigitalOcean Droplet(DigitalOcean的云主機產品),用戶可以獲得這些好處:

  • 高性價比:與 AWS 相比,DigitalOcean 提供可預測且更低的定價,可顯著降低基礎設施成本。
  • 簡潔易用:DigitalOcean 的用戶友好的 UI 和簡明的設置流程,讓開發者無需具備豐富的云知識即可管理環境。
  • 對開發者友好的功能:一鍵部署與配置、托管數據庫和內置監控等功能,簡化了開發和部署流程。
  • 可擴展性:DigitalOcean 的基礎設施可隨需求擴展,讓你能在應用流量激增時輕松調整資源。
  • 社區和支持:龐大的開發者社區和完善的文檔,可以幫助你排查問題并優化設置。
  • 專注開發:減少基礎設施管理的復雜性,讓你有更多時間專注于構建和改進應用。

前期準備

在開始之前,請確保你具備以下條件:

  • 可訪問你的 AWS EC2 實例(SSH 密鑰或憑證)
  • 一個已完成注冊的 DigitalOcean 賬戶(綁定信用卡或支付寶均可)
  • 了解基本的 Linux 服務器管理知識(命令行、SSH 等)
  • 熟悉你的應用技術棧(如 LAMP、Node.js、Docker)
  • 域名管理門戶登錄信息(如果需要更新 DNS 記錄)

可選但推薦具備以下條件:

  • 用于測試遷移的預發布環境
  • 兩臺服務器上都已安裝 rsync(大多數系統已預裝)

另外,如果你需要了解自己的產品應該使用什么配置的DigitalOcean Droplet,可以閱讀 DigitalOcean 中國區獨家戰略合作伙伴卓普云AI Droplet的官方博客《如何選擇適合自己的 DigitalOcean Droplet 云服務器配置》。

如何從 AWS EC2 遷移到 Droplet

我們會將遷移過程分為10步,為你提供清晰、可重復的流程,將正在運行中的應用從 AWS 搬到 DigitalOcean。

在此之前,開發者和企業通常使用自定義腳本、供應商特定工具或手動備份來管理遷移,每種方式在復雜度、停機時間和風險上各有利弊。本方法聚焦簡潔和可靠,使用 SSH、rsync 和 mysqldump 等廣泛支持的工具來優化流程。

由于遷移目標是 DigitalOcean,你將受益于干凈、現代的基礎設施體驗,讓你更快、更少阻礙地從部署到擴展。

步驟 1:評估你的 AWS EC2 環境

在進行其他操作之前,先確認你的運行情況:

  • 檢查已安裝操作系統:通過 SSH 連接 EC2 實例,運行

cat /etc/os-release

  • 以顯示操作系統詳情。
  • 驗證活動服務:運行

systemctl list-units --type=service --state=running

  • 列出所有活動服務,查找 Apache、MySQL 或 Node.js 等服務。
  • 定位應用文件和配置:檢查常見目錄(如 /var/www/html)來確定應用文件存放位置,或使用

find / -name 'your-app-name'

  • 定位特定文件或目錄;在 /etc 或應用目錄中檢查配置文件。
  • 檢查防火墻和安全組設置:在 AWS 管理控制臺的 EC2 儀表板中,選中你的實例,在“安全”選項卡下查看關聯的安全組,檢查入站和出站規則;在實例內運行

sudo iptables -L

  • 查看本地防火墻規則。

此步驟有助于在 DigitalOcean 上準確復刻環境。

步驟 2:創建你的 DigitalOcean Droplet

在 DigitalOcean 控制面板中:

  1. 點擊 Create > Droplets
  2. 選擇所需的操作系統鏡像。
  3. 選擇與你的 EC2 實例規模相匹配的方案。
  4. 選擇靠近用戶的機房區域。
  5. 添加登錄方式 —— 推薦使用 SSH 密鑰,也可設置強密碼。
  6. 設置 Droplet 主機名,添加標簽(如需),并選擇監控或卷等可選功能,然后創建 Droplet。

創建完成后,從控制面板記錄你的 Droplet IP 地址。

步驟 3:配置 Droplet

通過以下任一方式訪問新 Droplet:

  • 使用 SSH 密鑰(推薦)

ssh root@your_droplet_ip

  • 如果密鑰不在默認位置,指定路徑:

ssh -i /path/to/private-key root@your_droplet_ip

  • 使用 root 密碼:如果之前設置了密碼認證,運行:

ssh root@your_droplet_ip

登錄后,安裝所需軟件包,例如:

sudo apt update && sudo apt install nginx mysql-server php -y

(或根據你的棧安裝 Node.js、Docker 等)

請確保復刻 EC2 上的所有系統配置。

步驟 4:傳輸應用文件

使用 rsync 從 EC2 拷貝文件到 Droplet:

rsync -avz -e "ssh -i /path/to/aws-key.pem" ubuntu@your_ec2_ip:/var/www/html/ root@your_droplet_ip:/var/www/html/

rsync 優勢:速度快、安全,并保持文件權限。

步驟 5:導出并導入數據庫(如適用)

如果應用使用數據庫,需要將其從 EC2 實例遷移到 Droplet,以確保應用在新環境中正常運行。

選項 1:在 Droplet 上運行數據庫

1、導出數據庫

  • MySQL/MariaDB:使用 mysqldump
  • PostgreSQL:使用 pg_dump
  • MongoDB:使用 mongodump
  • Redis:使用 redis-cli 生成快照

2、傳輸導出文件

rsync -avz -e "ssh -i /path/to/aws-key.pem" ubuntu@your_ec2_ip:/path/to/backup.sql root@your_droplet_ip:/root/

3、在 Droplet 上導入:參照 DigitalOcean 上對應數據庫的恢復教程。

選項2:使用DigitalOcean托管數據庫(生產環境推薦)

作為替代方案,您無需在Droplet上自行托管數據庫,而是可以通過DigitalOcean的托管數據庫服務將這一責任移交給平臺。這些數據庫集群專為生產環境設計,完全托管且提供以下功能:

  • 免費每日備份與特定時間點恢復
  • 自動故障轉移的高可用性
  • 端到端安全防護
  • 零停機時間擴展
  • 性能監控與指標分析

遷移至托管數據庫的步驟:

  • 創建托管數據庫:在DigitalOcean控制面板中,啟動一個新的托管數據庫實例。
  • 導出并導入數據:使用與上述相同的備份流程導出數據,然后通過提供的憑據將數據導入新的托管數據庫。
  • 更新應用配置:將應用程序的數據庫連接字符串更改為托管數據庫集群提供的連接詳情。

選擇適合您的方案:

若您僅進行測試或運行小型項目,在Droplet上托管數據庫可能已足夠。但對于任何生產環境,托管數據庫能帶來長期且顯著的優勢。

專業建議:

托管數據庫尤其適合以下場景:計劃未來擴展規模、需要更高服務可用性保障,或希望省去備份、補丁更新及性能調優等運維工作。

步驟6 :更新配置文件

現在您的應用和數據庫已托管在DigitalOcean上,需要更新配置文件以適配新環境。

1. Web服務器配置

如果您使用Nginx、Apache或其他Web服務器,請確保服務器塊(server block)或虛擬主機配置文件已正確設置。您需要更新路徑、服務器名稱,以及可能的SSL證書。例如,對于Nginx,可通過以下命令編輯配置文件:

sudo nano /etc/nginx/sites-available/default

進行必要的修改(如更新文檔根目錄或服務器名稱)。修改完成后,務必重新加載或重啟Nginx以應用更改:

sudo systemctl restart nginx

2. 數據庫連接字符串

更新應用的數據庫連接字符串,使其指向DigitalOcean Droplet或托管數據庫中的正確主機地址和憑據。這可能需要修改存儲數據庫連接信息的環境變量或配置文件。

例如,如果之前連接字符串指向EC2實例,現在需將其更改為Droplet的本地地址(localhost)或托管數據庫的IP地址。

3. 環境變量

如果您的應用依賴環境變量(如API密鑰、數據庫憑據或其他配置設置),請確保在DigitalOcean Droplet中已正確設置。您可以通過以下方式配置環境變量:

  • 直接在Shell配置文件中設置(如 ~/.bashrc~/.bash_profile/etc/environment
  • 或在應用使用的 .env 文件中設置

示例:設置MySQL根密碼的環境變量

export MYSQL_ROOT_PASSWORD='your_password'

然后加載變量:

source ~/.bashrc

步驟7 :在Droplet上測試應用

在將Droplet正式上線前,務必徹底測試應用,確保其在新環境中正常運行。以下是測試步驟:

1、檢查文件完整性

確認所有應用文件已成功傳輸到Droplet,并確保文件權限正確且傳輸過程中未損壞。

2、測試數據庫連接

驗證應用能否連接到新數據庫。若使用Web框架,可通過檢查應用日志或直接在命令行執行數據庫查詢來排查連接錯誤。

3、執行功能測試

測試應用的各個方面(前端、后端、API等)。您可以手動測試,或使用自動化測試工具(如 Selenium、Postman 或 cURL)驗證功能是否正常。

4、查看日志

檢查系統和應用日志以發現潛在錯誤:

sudo journalctl -xe

檢查對應日志文件(如 Nginx 錯誤日志 /var/log/nginx/error.log、MySQL 日志 /var/log/mysql/error.log)或應用自定義的日志路徑。

步驟 8:更新 DNS 設置

  1. 登錄域名管理控制面板。
  2. 將 A 記錄指向你的 Droplet IP,例如:

@    A    your_droplet_ip

  1. 將 TTL 設置為較低值(如 300 秒),以加快生效。
  2. 等待 DNS 傳播,通常幾分鐘至 24 小時,大多數情況下一小時內即可看到流量切換。

步驟 9:切換生產流量

DNS 完全指向 Droplet 后,即可將生產流量切換到 DigitalOcean,期間密切監控:

  • 流量監控:尤其在變更后頭幾小時。
  • 性能檢查:確認在實際負載下表現正常。
  • 性能優化:根據需要調整 Droplet 配置,添加備份等。

步驟 10:最終清理

  1. 終止 EC2 實例:若不再使用,關閉或刪除以避免額外費用。
  2. 復核安全設置:確保只開放必要端口(如 22、80、443)。
  3. 備份數據:設置自動備份或手動快照,可使用 SnapShooter 等服務。
  4. 規劃擴展:根據應用增長,考慮垂直或水平擴展,如調整 Droplet 大小或添加負載均衡器。

常見問題

  1. 為什么要從 AWS EC2 遷移到 DigitalOcean Droplet? DigitalOcean 以高性價比而受到眾多創業公司歡迎,其透明且可預測的定價可顯著降低云服務成本;其簡潔的界面和開發者友好的工具可優化部署流程,讓你專注開發而非管理基礎設施或花費大量時間學習云平臺的使用。
  2. 更新 DNS 后,DNS 傳播需要多長時間? 傳播時間通常為幾分鐘至 24 小時,取決于 DNS 記錄的 TTL 設置和各 ISP 的緩存策略。大多數情況下,一小時內即可開始看到流量切換。
  3. 遷移過程中遇到問題該怎么辦? 首先檢查系統和應用日志以定位錯誤;若自行無法解決,可聯系 DigitalOcean 支持或使用其免費遷移服務以確保平滑過渡。
  4. 如何確保應用在 DigitalOcean 上表現良好? 使用 DigitalOcean 內置監控工具跟蹤資源使用情況,識別瓶頸;根據需求調整 Droplet 大小、添加備份或負載均衡器,以保持高性能。
  5. 在 DigitalOcean 上如何備份數據? 可設置自動每周或每日備份,也可手動快照 Droplet。對于更全面的解決方案,可使用 SnapShooter 等第三方服務。

寫在最后

在本教程中,我們已經帶著你一步步將運行中的應用從 AWS EC2 遷移到 DigitalOcean Droplet —— 從評估現有環境、創建和配置 Droplet,到傳輸文件和數據庫、測試和更新 DNS,實現最小化停機時間的平滑切換。

此過程能幫助你降低云成本、簡化基礎設施管理,并獲得更靈活的部署環境。無論是獨立項目還是生產級應用,遷移到 DigitalOcean 都能讓你享受面向開發者的簡潔定價和現代化體驗。

每個應用棧各有差異,可能需要根據具體情況添加額外步驟。如需幫助,DigitalOcean 為符合條件的項目提供免費遷移服務,幫助你更快、更自信地完成過渡,? 具體詳情可直接咨詢 DigitalOcean中國區獨家戰略合作伙伴卓普云AI Droplet。 ?

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

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

相關文章

解決Spring Boot多模塊自動配置失效問題

前言 在Spring Boot多模塊項目中,模塊間配置不生效是一個復雜但可解決的問題,尤其涉及自動配置類、依賴沖突、條件注解以及IDE配置。 一、問題背景與場景 1.1 場景描述 假設存在兩個模塊: 模塊A:提供通用配置(如跨…

WEBSTORM前端 —— 第2章:CSS —— 第4節:盒子模型

目錄 1.畫盒子 2.Pxcook軟件 3.盒子模型——組成 4.盒子模型 ——邊框線 5.盒子模型——內外邊距 6.盒子模型——尺寸計算 7.清除默認樣式 8.盒子模型——元素溢出 9.外邊距問題 ①合并現象 ②塌陷問題 10.行內元素——內外邊距問題 11.盒子模型——圓角 12.盒子…

Kafka和flume整合

需求1:利用flume監控某目錄中新生成的文件,將監控到的變更數據發送給kafka,kafka將收到的數據打印到控制臺: 在flume/conf下添加.conf文件, vi flume-kafka.conf # 定義 Agent 組件 a1.sourcesr1 a1.sinksk1 a1.c…

Idea 如何配合 grep console過濾并分析文件

這里寫自定義目錄標題 [grep console插件]()右擊打開文件目錄,選擇 tail in console 同時可以添加自己的快捷鍵。 ![新的改變](https://i-blog.csdnimg.cn/direct/03423e27cf6c40c5abd2d53982547b61.png) 隨后會在idea的菜單欄中出現tail菜單。這里,接下…

怎樣學習Electron

學習 Electron 是一個很好的選擇,特別是如果你想構建跨平臺的桌面應用程序,并且已經有前端開發經驗。以下是一個循序漸進的學習指南,幫助你從零開始掌握 Electron。 1. 基礎知識 HTML/CSS/JavaScript 確保你對這些基礎技術有扎實的理解&am…

MySQL 大數據量分頁查詢優化指南

問題分析 當對包含50萬條記錄的edu_test表進行分頁查詢時,發現隨著分頁越深入,查詢時間越長: limit 0,10:0.05秒limit 200000,10:0.14秒limit 499000,10:0.21秒 通過EXPLAIN分析發現,limit o…

【仿真】Ubuntu 22.04 安裝MuJoCo 3.3.2

官方GIthub下載: https://github.com/google-deepmind/mujoco/releases 官網:MuJoCo — Advanced Physics Simulation 文檔:Overview - MuJoCo Documentation 主要參考:Ubuntu 22.04 安裝Mujoco 3.22 - RobotStudent的文章 - 知乎 簡…

最新字節跳動運維云原生面經分享

繼續分享最新的go面經。 今天分享的是組織內部的朋友在字節的go運維工程師崗位的云原生方向的面經,涉及Prometheus、Kubernetes、CI/CD、網絡代理、MySQL主從、Redis哨兵、系統調優及基礎命令行工具等知識點,問題我都整理在下面了 面經詳解 Prometheus …

PyQt6實例_pyqtgraph散點圖顯示工具_代碼分享

目錄 描述: 效果: 代碼: 返回結果對象 字符型橫坐標 通用散點圖工具 工具主界面 使用舉例 描述: 1 本例結合實際應用場景描述散點圖的使用。在財報分析中,需要將數值放在同行業中進行比較,從而判…

純C協程框架NtyCo

原文是由寫的,寫的真的很好,原文鏈接:純c協程框架NtyCo實現與原理-CSDN博客 1.為什么會有協程,協程解決了什么問題? 網絡IO優化 在CS,BS的開發模式下,服務器的吞吐量是一個受關注的參數&#x…

信息系統項目管理師——第10章 項目進度管理 筆記

10項目進度管理 1.規劃進度管理:項目章程、項目管理計劃(開發方法、范圍管理計劃)、事業環境因素、組織過程資產——專家判斷、數據分析(備選方案分析)、會議——進度管理計劃 2.定義活動:WBS進一步分解&am…

通過門店銷售明細表用SQL得到每月每個門店的銷冠和按月的同比環比數據

假設我在Snowflake里有銷售表,包含ID主鍵、門店ID、日期、銷售員姓名和銷售額,需要統計出每個月所有門店和各門店銷售額最高的人,不一定是一個人,以及他所在的門店ID和月總銷售額。 統計每個月份下,各門店內銷售額最高…

移遠通信LG69T賦能零跑B10:高精度定位護航,共赴汽車智聯未來

當前,汽車行業正以前所未有的速度邁向智能化時代,組合輔助駕駛技術已然成為車廠突出重圍的關鍵所在。高精度定位技術作為實現車輛精準感知與高效協同的基石,其重要性日益凸顯。 作為全球領先的物聯網及車聯網整體解決方案供應商,移…

jmeter-Beashell獲取http請求體json

在JMeter中,使用BeanShell處理器或BeanShell Sampler來獲取HTTP請求體中的JSON數據是很常見的需求。這通常用于在測試計劃中處理和修改請求體,或者在響應后進行驗證。以下是一些步驟和示例代碼,幫助你使用BeanShell來獲取HTTP請求體中的JSON數…

若干查找算法

一、順序查找 1.原理 2.代碼 #if 0 const int FindBySeq(const vector<int>& ListSeq, const int KeyData) {int retrIdx -1;int size ListSeq.size();for(int i 0; i < size; i) {if (ListSeq.at(i) KeyData){retrIdx i;break;}}return retrIdx; } #else c…

Uniapp(vue):生命周期

目錄 一、Vue生命周期二、Uniapp中頁面的生命周期三、執行順序比較一、Vue生命周期 setup():是在beforeCreate和created之前運行的,所以可以用setup代替這兩個鉤子函數。onBeforeMount():已經完成了模板的編譯,但是組件還未掛載到DOM上的函數。onMounted():組件掛載到DOM完…

Prometheus監控

1、docker - prometheusgrafana監控與集成到spring boot 服務_grafana spring boot-CSDN博客 2、【IT運維】普羅米修斯基本介紹及監控平臺部署&#xff08;PrometheusGrafana&#xff09;-CSDN博客 3、Prometheus監控SpringBoot-CSDN博客 4、springboot集成普羅米修斯-CSDN博客…

C#進階學習(十四)反射的概念以及關鍵類Type

目錄 本文末尾有相關類中的總結&#xff0c;如有需要直接跳到最后即可 前置知識&#xff1a; 1、程序集&#xff08;Assembly&#xff09; 2、元數據&#xff08;Metadata&#xff09; 3、中間語言&#xff08;IL, Intermediate Language&#xff09; 中間語言&#xff08;…

Kotlin中的also、apply、invoke用法詳解

以下是 Kotlin 中作用域函數(let、run、with、also、apply)和 invoke 操作符的完整總結,結合代碼示例和對比說明,幫助您理解它們的用法和區別。 一、作用域函數:簡化對象操作 作用域函數用于在對象的上下文中執行代碼塊,并根據函數的不同返回對象本身或 lambda 的結果。…

Ubuntu實現遠程文件傳輸

目錄 安裝 FileZillaUbuntu 配套設置實現文件傳輸 在Ubuntu系統中&#xff0c;實現遠程文件傳輸的方法有多種&#xff0c;常見的包括使用SSH&#xff08;Secure Shell&#xff09;的SCP&#xff08;Secure Copy Protocol&#xff09;命令、SFTP&#xff08;SSH File Transfer P…