# 用筆電在本地起 Ubuntu Server 並部署 .NET Core 程式(1) - 安裝 Ubuntu Server 與處理網路連線 寫在之前: 開發 .NET Core 程式也已經有一段時間了,寫寫小程式但都沒有真正的部署過。 也因此上網研究一些方案,目前主流大多都是付錢給雲端伺服器直接上雲,像是 `AWS` 、 `Azure` 、 `Google Cloud` ~~(御三家)~~,又或者找免費部署工具,例如: `Render` 、 `Railway` 、 `Fly.io` 等等 (`Heroku` R.I.P.)。 `AWS` 、 `Azure` 、 `Google Cloud` 都是大廠,提供的服務也都很穩定,但每個月費用都不便宜,一個小小的 dotnet 程式每月收費就要 10 美金起跳,這對於一個小白來說,實在是有點貴。 `Render` 、 `Railway` 、 `Fly.io` 等等這些免費的部署工具,雖然免費,但也有一些限制,例如: - 免費的方案通常會有流量、CPU 限制,超過就要付費。 - 要綁定信用卡,免費的方案也不例外。 - 有些免費的方案會在一段時間不使用後,會自動關閉服務,等到下次使用時又要重新啟動,這樣就會造成服務中斷。 這讓我回頭仔細思考自己的需求: 1. 這是我自己的小程式,如果今天停電、筆電壞掉,並不會造成太大的影響。 2. 我只是想要玩玩我自己的小程式,架個小網站或小機器人,未來慢慢加入新功能。 3. 我手邊就有現成的筆電,為什麼不直接用它來架設伺服器呢? ## 準備一台 Ubuntu Server 有話說「心動不如馬上行動」,於是就朝著之前沒在使用的筆電下手了。 ### 把 Windows 筆電改成 Ubuntu Server 1. 準備 8GB 隨身碟 (建議使用 USB 3.0 的隨身碟,速度會快很多) 2. 下載 [Rufus](https://rufus.ie/) 3. 下載 [Ubuntu Server](https://ubuntu.com/download/server) 的 ISO 檔案 (建議使用 LTS 版本) - 記得不是下載 Desktop 版本,而是 Server 版本 4. 使用 Rufus 將 ISO 檔案燒錄到 USB 隨身碟上 5. 將 USB 隨身碟插入筆電,開機時進入 BIOS 設定,將 USB 隨身碟設為第一個開機選項 - 每個人的筆電進入 BIOS 的方式都不一樣,記得去查筆電的說明,或直接打到客服詢問 6. 開機後會進入 Ubuntu Server 的安裝畫面,選擇「Install Ubuntu Server」  7. 跟著流程一路設定,最後選 minimal install,需要的套件等之後再安裝。 8. 請記得自己的使用者名稱和密碼,這是登入 Ubuntu Server 的帳號密碼,如果忘記了就只能重新安裝了。 9. 安裝完成後重新啟動筆電,拔掉 USB 隨身碟,進入 Ubuntu Server 的登入畫面。 ## 安裝需要的套件 詳細參考 [Boyan 大大的文章](https://hackmd.io/@Boyan/HJoEw5Msh),我沒有安裝 Samba,因為我不需要在 Ubuntu Server 上存取檔案。 根據文章步驟走,我沒有用到 Windows 的芳鄰網路,因此不安裝 Samba。 我所使用的指令依序如下: ```bash sudo apt-get update #更新 Ubuntu Server 的套件清單 sudo apt-get upgrade #更新 Ubuntu Server 的套件 sudo apt-get clean #清除 Ubuntu Server 的快取檔案 sudo apt-get install net-tools #安裝網路工具 sudo apt-get install ssh #安裝 SSH 連線工具 ``` ## 用區域網路 SSH 連線到 Ubuntu Server 以下會介紹如何從 Windows 使用 PowerShell 連線到 Ubuntu Server。 ### 如何查詢區域網路 IP 位址? 1. 在 Ubuntu Server 上輸入以下指令: ```bash ifconfig ``` 2. 如果沒有安裝 `ifconfig`,代表你沒有去看上面的內容,記得去安裝`net-tools`,可以使用以下指令安裝: ```bash sudo apt install net-tools ``` 3. 再輸入 `ifconfig`,就可以看到區域網路 IP 位址了。 顯示的範例如下: ```text en0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.XXX.XXX netmask 0xffffff00 broadcast 192.168.XXX.255 ether xx:xx:xx:xx:xx:xx ......(省略) ``` 4. 這裡的 `inet` 就是你的區域網路 IP 位址,記得把它記下來,有時畫面找不到`en0`,這是因為你使用的網卡不是內建的網卡,可能是 USB 網卡或其他網卡,這時要自己找到那張網卡的名稱,然後在 `ifconfig` 中找到對應的 `inet` 位址。 5. 回到自己的 Windows,在 PowerShell 中輸入 `ssh <username>@<ip address>`,就可以連線到 Ubuntu Server 了。 ### SSH 連線到 Ubuntu Server 因為還未設定成能從外網連線,記得要連上 Ubuntu Server 的電腦必須是在同一個區域網路內,即接在同一台路由器底下,否則無法連線到 Ubuntu Server。 在 Windows 上使用 PowerShell 連線到 Ubuntu Server 的指令如下: 1. PowerShell 連線到 Ubuntu Server ```powershell ssh <username>@<ip address> ``` 例如: ```powershell ssh myUser@192.168.XXX.XXX ``` username 是你在安裝 Ubuntu Server 時設定的使用者名稱,ip address 是你這台機器的區域網路 IP 位址,即上面查詢到的 `inet` 位址。 1. 如果你是第一次連線到這台機器,會出現以下畫面: ```text The authenticity of host '192.168.XXX.XXX' can't be established. ED25519 key fingerprint is SHA256:(省略). This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? ``` 這裡的 `192.168.XXX.XXX` 就是你查詢到的區域網路 IP 位址,這個畫面是 SSH 連線到 Ubuntu Server 時會出現的畫面,這是因為 SSH 連線到 Ubuntu Server 時,會先確認這台機器的身份,如果你是第一次連線到這台機器,就會出現這個畫面,請輸入 `yes` 確認連線。 1. 輸入完密碼後,會出現以下畫面: ```text Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.XXX.XXX' (ED25519) to the list of known hosts. ``` 1. 接下來會要求你輸入密碼,請輸入你在安裝 Ubuntu Server 時設定的使用者名稱和密碼: ```text myUser@1192.168.XXX.XXX's password: ``` 1. 輸入完密碼後,會出現以下畫面: ```text Welcome to Ubuntu 24.04.2 LTS (GNU/Linux 6.8.0-58-generic x86_64) ``` 如果你看到以上畫面,恭喜你,這代表你已經成功連線到 Ubuntu Server 了! ## 外網連線到 Ubuntu Server 目前的操作都是在區域網路內,這邊會介紹如何從外網連線到 Ubuntu Server。 ### 前置作業:查詢自家的 IP 是浮動 IP 還是固定 IP ### 何謂浮動 IP? 浮動 IP 是指 IP 位址會隨著時間而改變,這是因為 ISP(網際網路服務提供商)會定期更換 IP 位址。這種情況下,IP 位址可能會在幾天或幾週內改變,因此無法依賴它來連線到自己家裡的伺服器。 一般台灣的電信公司預設都是浮動 IP,這是因為浮動 IP 可以節省 IP 位址的使用,並且可以更好地管理網路流量,但這對於需要穩定連線的伺服器來說,可能會造成一些困擾,等一下會說明如何解決。 ### 前置作業:確認網路環境 1. 確認自家的網路環境,一般情況家裡一定有一台申請的電信配發的數據機,否則家裡根本不能使用有線網路。 2. 以中華電信為例,這台數據機可能兼備路由器的功能,如果沒有,要跟電信公司確認家裡網路的連線機制。 3. 這台路由器會有一個 WAN IP 位址,這是從外網連線到家裡的 IP 位址。 4. 這台路由器會有一個 LAN IP 位址,這是在家裡的區域網路 IP 位址,通常是 `192.168.1.1`或 `192.168.0.1`,詳細看說明書。 ### 路由器直連到 Ubuntu Server 電腦 因以下討論的主要是路由功能,就不用數據機兼路由器來說明,我們先著重在這台數據機上的路由功能。 #### 固定 IP 的情況 如果家裡的這台路由器出來的網路線直連自己的 Ubuntu Server,則可以直接使用這台路由器的 WAN IP 位址來連線到 Ubuntu Server,但須設定路由器的 Port Forwarding,這樣才能從外網連線到 Ubuntu Server,每台路由器的設定方式都不一樣,請自己去查詢路由器的說明書,在 Port Forwarding 的設定中,將 WAN IP 位址的 Port 轉發到 Ubuntu Server 的 IP 位址上。 想要使用 SSH 連線到 Ubuntu Server,則需要在路由器的 Port Forwarding 中設定 SSH 的 Port,預設是 22,這樣就可以從外網連線到 Ubuntu Server。 #### 浮動 IP 的情況 浮動 IP 則需要使用 DDNS (Dynamic Domain Name System),這是一種動態域名系統,可以將家裡的 WAN IP 位址綁定到一個域名上,這樣就可以使用這個域名來連線到家裡的 Ubuntu Server,而不需要記住 WAN IP 位址。 這樣就算 WAN IP 位址改變了,只要 DDNS 的域名還在,就可以從外網連線到 Ubuntu Server。 常見可以去使用的 DDNS 有: - [No-IP](https://www.noip.com/) - [DynDNS](https://dyn.com/dns/) 通常這會需要在家裡的電腦安裝一個 DDNS 的客戶端,這樣才能自動更新自家 WAN IP 位址到 DDNS 的域名上,這樣就可以從外網連線到 Ubuntu Server。 你可以在這些網站上註冊一個免費的 DDNS 帳號,然後將這個 DDNS 的 IP 位址綁定到家裡的 WAN IP 位址上,之後用輸入`ssh <username>@<Domain>`來連線到 Ubuntu Server。 風險: - IP 或 DDNS 域名請勿隨意的在網路上公開,有一些人可能會試圖連線到你的伺服器 - 不論是用DDNS或者固定 IP,比起浮動 IP 都相對容易被人追蹤 如果要避免IP被追蹤的問題,可以研究一下反向代理,但本篇暫不討論此方法。 ### 路由器後有路由器的情況 (Double NAT) #### 固定 IP 的情況 (Double NAT) 你必須在兩台路由器上都設定 Port Forwarding,這樣才能從外網連線到 Ubuntu Server。 - 第一台路由器的 Port Forwarding 設定:將 WAN IP 位址的 Port 轉發到第二台路由器的 LAN IP 位址上。 - 第二台路由器的 Port Forwarding 設定:將 WAN IP 位址的 Port 轉發到 Ubuntu Server 的 IP 位址上。 這樣就可以從外網連線到 Ubuntu Server。 #### 浮動 IP 的情況 (Double NAT) - 我有電腦能連接到第一台路由器,並且可以 24 小時不關機: - 將電腦直接接在第一台路由器上,可以在那台路由器上設定 DDNS,安裝供應商提供的軟體來自動更新 IP 對應網域,再接著設定第一台路由器與第二台路由器的 Port Forwarding,這樣就可以從外網連線到 Ubuntu Server。 - 我沒有電腦連接到第一台路由器: - 這時不能在第二台路由器上設定 DDNS,在這情況, DDNS 在電腦上更新的 IP 是第一台路由器配給的浮動內網 IP,不論怎麼變動,只要第一台路由器是浮動 IP,那便無法有效綁定到DDNS提供的網域上。 可能解法有三種: 1. 轉使用固定 IP: - 回到上述[固定 IP 的情況 (Double NAT)](#固定-IP-的情況-Double-NAT)。 2. 把目前使用的第二台路由器改為 Switch Mode (路由器如果有支援): - 這樣就可以直接使用第一台路由器的 WAN IP 位址來連線到 Ubuntu Server,相當於只有一台路由器的處理方式。[浮動 IP 的情況](#浮動-IP-的情況) 3. 在第二台路由器上設定為固定 IP (推薦),用 PPPoE 連線的方式,輸入帳號密碼,以使用固定 IP (以中華電信為例): - 台灣電信公司配給的 IP 通常為八組浮動 IP,以中華電信為例,一天可以申請更改 1 次,將八組浮動 IP 改為 七組浮動 IP + 一組固定 IP。 - 這樣就可以在第二台路由器上設定 固定 IP,並用 Port Forwarding 轉發到 Ubuntu Server 上,相當於[直接設定固定 IP 的情況](#固定-IP-的情況)。 - 這個情況既可以保留原本家裡其他 IP 皆為浮動 IP (中華電信的數據機兼具路由器功能) - 但同時設定第二台路由器使其變為第一台路由器,而中華電信的第一台路由器兼數據機則僅擔當數據機的腳色。此時接在後面的路由器則變成數據機出來後的第一台路由器,利用 Port Forwarding 就可以從外網連線到 Ubuntu Server。 如果方法3看得有點繞,那來簡化一下: - 這等於是在設定固定IP的時候,那台中華電信的數據機就不再兼任路由器,而是單純的數據機,固定IP則綁在目前要用的路由器上
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up