linux服務器安裝nodeJS步驟及踩坑記錄(解決node -v報錯cannot execute binary file: Exec format error的問題 - 在Linux中安裝適用於arm64位的nodejs)以及node環境項目部署


  默認已使用終端連接上服務器,進入root文件夾

一、上傳node文件到服務器

  兩種方式可以下載:

1、官網下載:nodeJS官網:http://nodejs.cn/download/

  根據服務器選擇對應的文件下載。

  需要注意的是這里會有坑:上面 Linux 二進制文件有 2 種,你要先看好自己 linux 服務器環境,再選擇哪一種。否則有坑,后面介紹。

  如果需要下之前的版本,可以繼續看下面,選擇

  點擊進入就會看到之前的各個版本,我本地 node 版本是 10.15.0,所以我也選擇 10.15.0

  點進去可以選擇這個版本。

2、在終端輸入  ——  wget 命令安裝

wget https://nodejs.org/download/release/v10.15.0/node-v10.15.0-linux-arm64.tar.xz // 將上面圖中的連接拼接即可知道下載鏈接

二、配置nodejs環境

1、解壓

  我將文件下載在我的 /usr/local/src 目錄,首先解壓

// 將 tar.xz 壓縮文件轉成 node-v10.15.0-linux-arm64.tar
xz -d node-v10.15.0-linux-arm64.tar.xz // 再用 tar xvf node-v10.15.0-linux-arm64.tar 解壓縮文件
tar -xvf node-v10.15.0-linux-arm64.tar

// 可修改名字(也可以不改名字的)
mv node-v10.15.0-linux-arm64 nodejs

  可以進入到 nodejs 文件 bin 目錄下,執行 ./node -v 可查看版本

  可以查看的到node版本,但是呢,這樣不方便,我們想要的是全局都能用,而不是只能在某個目錄下使用。我們現在就做下配置

2、配置軟連接

  返回根目錄,對node和npm設置軟連接

ln -s /usr/local/src/nodejs/bin/node /usr/local/bin/node ln -s /usr/local/src/nodejs/bin/npm /usr/local/bin/npm

  還可以加上 npx 的軟連接

ln -s /usr/local/src/nodejs/bin/npx /usr/local/bin/npx

  然后我們可以查看下/usr/local/bin/目錄下是否有了node和npm了

  有了!我們在試下 node -v 是否可以查看得到版本號,如果可以,那么就證明node環境就差不多啦。

  node自帶了npm,我們可以順便都查下node和npm的版本,如果可以查到,則證明你的node和npm基本可以用啦

  進入node命令行,輸入 node,執行 1+1 = 2,按兩次 ctrl + c 退出命令行。

三、解決node -v報錯cannot execute binary file: Exec format error的問題

  這里說一個問題,就是報錯提示:

/usr/local/bin/node: cannot execute binary file

  字面意思是:不能執行二進制文件。

1、問題原因

  查閱文檔發現問題所在:

  在執行任何的程序之前,必須確保程序和系統的版本位數是一致的,如果一種是x64,一種是32位的,就會出現上述的問題。

  linux系統下遇到cannot execute binary file的問題,一般由以下情況造成:

  1. 非root用戶或者無執行權限
  2. 編譯環境不同(程序由其他操作環境復制過來)

  對於第一種情況,采用增加執行權限即可chmod +x program

  對於第二種情況,建議將該程序二進制包拷貝過來,重新編譯程序。因為我在實際操作過程中發現我將美國的VPS的整個操作系統環境打包后下載到本地服務器上解壓后運行其中的程序會有如題所示問題出現,百思不得其解,系統都為centos5.2,最終發現是兩者編譯環境不同所致:

  • 美國VPS是AMD64位處理器
  • 本地服務器是INTEL32位處理器

  這兩者的硬件編譯環境有所差別,導致了這個問題。當然,下載的某些程序非二進制包,可以直接執行的,但卻出現該問題,也是因為內核匹配不了CPU,intel是x86的,amd是amd64或是32位版本,對應清楚下載。

2、問題起因

  由於我最初在看別人博客裝的,里面的安裝文件是 x64 的,而我的服務器是 arm 的,應該選 arm 的安裝包

3、解決方案

  查看操作系統信息

  aarch64的,那與arm有什么關系?

(1)了解arm64與aarch64的關系

  為了搞清這兩者的關系,我去翻閱了armv8的manual。

ARMv8-A is the latest generation of the ARM architecture that is targeted at the Applications Profile. In this book, the name ARMv8 is used to describe the overall architecture, which now includes both 32-bit execution and 64-bit execution states. ARMv8 introduces the ability to perform execution with 64-bit wide registers, but provides mechanisms for backwards compatibility to enable existing ARMv7 software to be executed.

 AArch64 is the name used to describe the 64-bit execution state of the ARMv8 architecture. AArch32 describes the 32-bit execution state of the ARMv8 architecture, which is almost identical to ARMv7. GNU and Linux documentation (except for Redhat and Fedora distributions) sometimes refers to AArch64 as ARM64.

  簡單地說,aarch64是armv8-A架構的一種運行時狀態。arm64是aarch64在gnu/linux文檔中的一種別稱,兩者幾乎是混用的。

(2)如何解決?

  解決方案就是第一步就介紹的,選擇對應的 ARM 安裝包進行安裝即可。

四、linux服務器安裝node環境及項目部署

  后面有涉及需要:

1、/etc/profile 文件配置

2、node項目部署

2、pm2或forever安裝部署

  可到這篇文章《linux服務器安裝node環境及項目部署》查看,寫的不錯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM