動手學 VPS 架站:使用 CentOS 7 + Nginx + PHP-FPM + MariaDB (2) - Linux 入門

LNMP

使用 Vagrant 來建立練習環境,並且瞭解 Linux 的目錄系統。

2.1 使用 Vagrant + VirtualBox 建立練習環境

要你找一台電腦來安裝 Linux 作業系統,不僅不方便而且頗耗時間。VirtualBox 可以讓你透過下載的 CentOS 安裝映像檔 (ISO) 來安裝,不過這樣太沒效率,除非你還沒安裝過作業系統,可以練習看看如何安裝。

當你利用 VirtualBox 將一個作業系統安裝完成後,可以對它拍一個快照,這樣當有需要時,就可以使用快照快速還原。Vagrant 是一個管理工具,可以讓你使用別人製作的快照,快速建立一個可以運行的伺服器。

使用 Vagrant + VirtualBox 來建立練習環境的好處是,系統建立快速,玩壞了直接砍掉重建即可,不必擔心弄壞系統後又要經歷漫常的重建過程,可以完全專注在系統操作上。在 Vagrant 官網,已經有許多人提供 Box (即快照檔) 供你下載,接下來我們將使用官方提供的 CentOS 7 來建立系統。

首先,下載 VagrantVirtualBox 並安裝。在使用 Vagrant 提供的指令時,你不必開啟 VirtualBox,但是你要瞭解它實際上是去幫你做設定並啟動虛擬機器。

你可以在 Vagrant Boxes 尋找你要的 Box,然後使用 Vagrant 指令將其下載到你的電腦上,之後你就可以透過這個 Box 來建立虛擬機器,你要建立幾個虛擬機器都可以,你也可以把虛擬機器砍掉再重建,你可以把這些由 Box 建立出來的虛擬機器看成是它的分身,只要本尊還在,就可以不斷建立分身。

在 Vagrant Boxes 上尋找 Box 時,記得 Provider 要選擇 virtualbox 的。由於任何人都可以發佈 Box,所以記得在下載前要看一下圖示及說明,確認是你想要下載的版本。我們將使用 centos/7 這個 Box,它是官方提供的 Centos 7 作業系統。

確定你已經安裝了 Vagrant。開啟終端機 (Windows: 命令提示字元,以下操作以 Mac 為主,Windows 使用者請自行調整):

Shell# 查看版本並確認 Vagrant 可以使用
vagrant -v

# 建立一個目錄準備放設定檔,然後切換到該目錄
mkdir centos7
cd centos7

# 初始化設定檔
vagrant init centos/7
# 執行後會產生一個 Vagrantfile 檔
# 這裡面會有許多說明文字,如果你被它嚇到了,可以看看乾淨的版本
# 實際上它只要 3 行即可執行

# 讓我們刪除 Vagrantfile 並重新初始化一個無說明版本
rm Vagrantfile
vagrant init -m centos/7
# 再打開 Vagrantfile 來看看,裡面只剩 3 行

  1 Vagrant.configure("2") do |config|
  2   config.vm.box = "centos/7"
  3 end

# 括號裡的 "2" 表示使用 1.1+ 到 2.0.x 版本的 Vagrant
# 第二行指定要使用的 box 的名稱

# 好了,說了這麼多,我們來啟動它吧
vagrant up
# 這個指令會做幾件事情:建立、啟動
# 首先,它會確認本機上是否已經有 centos/7 這個 box
# 如果有就直接使用它來建立虛擬機器;如果沒有,就先下載 box 到本機再建立
# 建立好虛擬機器後就啟動它

# 這個指令是你每次要啟動虛擬機器時必用的指令
# 搭配它的指令是關機指令
vagrant halt

如果你順利啟動了一個虛擬機器,可以開啟 VirtualBox,你會看到有一個虛擬機器正在執行中。

Vagrant 提供的指令很多,這裡我只介紹練習時需要用到的指令,其他的指令可以到官網中查詢。

首先,要瞭解 Box 和虛擬機器是不同的東西,一個 Box 可以用來建立許多個虛擬機器;Box 歸 Vagrant 管,下載的 Box 放在 ~/.vagrant.d/boxes 目錄中,當你建立虛擬機器時,這個 VM 檔會放在 VirtualBox 的 VirtualBox VMs 目錄下,這中間的控制檔案則是由你建立的 Vagrantfile 來配置,這個檔案可以由你自行決定位置,在該檔案的同一目錄中會有另一個隱藏目錄 .vagrant 用來記錄執行時需要的資料。

記得當你要執行 vagrant 指令時,必須切換到你要控制的 Vagrantfile 檔的目錄,因為指令必須讀取當下目錄的 Vagrantfile 配置檔。

以下是目前需要知道的指令:

Shell##### Box 管理 #####
# 列出已下載的 Box
vagrant box list

# 下載指定名稱的 Box
vagrant box add [box的名稱] # 例如 centos/7

# 移除指定名稱的 Box
vagrant box remove [box的名稱] # 例如 centos/7
# 如果同一個 Box 有多個版本
vagrant box remove [box的名稱] --box-version [版本號]
# 範例
vagrant box remove centos/7 --box-version 1708.01

# 更新全部的 Box
vagrant box update
# 只更新指定名稱的 Box
vagrant box update --box [box的名稱]


##### 刪除虛擬機器 #####
vagrant destroy [name|id] 
# 記得要切換到你想刪除的虛擬機器的 Vagrantfile 所在目錄
# 如果沒有指定 vm 名稱的話,預設名稱是 default
# 執行成功的話,VirtualBox 就會看不到該 VM,連同實體檔案也刪除
# 刪除虛擬機器不會動到 Box

##### 每次必用指令 #####
# 先切換到 Vagrantfile 所在目錄
# 啟動虛擬機器
vagrant up

# 關機
vagrant halt

# 登入虛擬機器
vagrant ssh
# 使用者帳號名稱為 vagrant,密碼為 vagrant

# 登出虛擬機器
# 快速鍵 Ctrl + D

在後面 Nginx 的章節我們會架設網頁伺服器,因此需要一個固定 ip 來使用,這裡預先修改 Vagrantfile 來指定一個固定 ip,同時指定一個本機目錄和虛擬機器中的目錄連結:

RubyVagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
  config.vm.network "private_network", ip: "192.168.8.8"
  config.vm.synced_folder "/Users/tony/vagrant/centos7/share", "/home/vagrant/share"
end

指定的 ip 為 192.168.8.8 ,可以自行修改,但不要和已使用的 ip 衝突。

我的 Vagrantfile 檔在 /Users/tony/vagrant/centos7 目錄,我在之下建立一個 share 目錄 (mkdir share),它連結到虛擬機器的 /home/vagrant/share 目錄,意思是我在本機上放檔案到這個目錄中,虛擬機器中就能看到該檔案。

接下來你可以先啟動虛擬機器並登入,後面有需要執行指令的部份就能邊看邊操作。

2.2 Linux 目錄系統

和 Windows 以磁區建構系統的方式不同,Linux 是以目錄建構系統。整個 Linux 系統就是一個樹狀目錄,根目錄是唯一的、最上層的目錄,其下會有各個分類的子目錄,然後其下再有其他子子目錄等等。Linux 將所有的東西都當成一個目錄,所以假設你要使用光碟機,你就必須將它掛載到某一個目錄 (/mnt) 底下,接著你就可以把這台光碟機當成這個目錄中的一個子目錄來使用。

Linux 的目錄路徑是以斜線 / 來表示,和 Windows 的倒斜線 \ 不同。Linux 的根目錄即為 /,其下會有一個 /home 稱為家目錄,所有使用者都會有一個自己的家目錄,以其使用者名稱命名,例如 tony 使用者的家目錄即為 /home/tony;家目錄可以使用 ~ 符號來代替。

Linux 有幾個固定的子目錄,它們有不同的用途,但是我並不打算全部介紹,你只要瞭解目前需要知道的即可,其他的可以日後再自行研究。

你可以在終端機執行指令,看看根目錄及家目錄底下有哪些子目錄:

Shellls /
ls /home
ls ~

在 Linux 中,哪些檔案要放在哪個目錄都有一定的規範,瞭解這些目錄是必要的,但是這也是初學者最後放棄使用 Linux 的原因,其實大部分的目錄在大多數情況下是不會去使用到的,為了不搞亂你的大腦,在這裡我只介紹在這份文件中需要知道的目錄,當你日後需要知道其他目錄的用途時自然就會去查找資料了。

/sbin, /bin, /usr/local/bin

三個目錄都是放指令程式的地方,/sbin 是放系統管理員才能使用的系統指令程式,一般不會去動到;/bin 是放一般使用者可以使用的系統指令程式;/usr/local/bin 是放使用者安裝的指令程式,為了不和原本系統提供的指令混在一起,通常會將自己安裝的指令程式放在這裡。

為什麼系統會知道要去這些地方找指令呢?你可以在終端機執行

Shellecho $PATH

$PATH 是一個系統變數,儲存指令所在的目錄,每個目錄以冒號分隔,它會依序尋找指定目錄中的指令,找到第一個符合的指令來執行。echo 指令就是印出這個變數的內容。

/etc

是放置設定檔的目錄,例如 Nginx 安裝後它的目錄就會在 /etc/nginx。另外,一些重要的系統設定檔也都會放在這裡。

/usr/share

可供分享的目錄。要提到這個目錄是因為 Nginx 的網頁文件目錄預設放在 /usr/share/nginx 目錄之下,而 Apache 的放在 /var/www/html

/var

資料會變動的目錄,例如 log 檔就會放在這目錄之下。/var/log 這個目錄要記住,之後有需要查看 log 時就可以來這裡找,例如 Nginx 的 log 目錄 /var/log/nginx。Apache 的預設文件目錄在 /var/www/html

/opt

第三方的軟體可以安裝在這個目錄。


繼續閱讀:動手學 VPS 架站:使用 CentOS 7 + Nginx + PHP-FPM + MariaDB (3) - Shell 指令

本文網址:http://blog.tonycube.com/2018/07/vps-centos-7-nginx-php-fpm-mariadb-2.html
Tony Blog 撰寫,請勿全文複製,轉載時請註明出處及連結,謝謝 😀

我要留言

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。