---
tags: Linux2020 高效能網頁伺服器
tiles: 高效能網頁伺服器 - 事前準備
---
# 高效能網頁伺服器
contributed by < `YLowy` >
# 事前準備
## 1. 下載映像檔
使用 [Ubuntu 20.10 (Groovy Gorilla)](http://cdimage.ubuntu.com/ubuntu/releases/20.10/release/)
![](https://i.imgur.com/6eBqWxG.png)
這邊我下載的是
`Raspberry Pi Generic (64-bit ARM) preinstalled server image
For modern Raspberry Pi boards (Pi 2, Pi 3 and Pi 4)`.
## 2. 將映像檔載入 Micro SD Card
下載燒錄軟體[balenaEtcher](https://www.balena.io/etcher/)
![](https://i.imgur.com/xgWoq9q.png)
![](https://i.imgur.com/hPSKQjK.png)
![](https://i.imgur.com/9Pbv5lW.png)
![](https://i.imgur.com/ufuOntZ.png)
## 3. 以映像檔開機樹梅派
設定新密碼
原始預設密碼 :
login as: ubuntu
password: ubuntu
## 4. 遠端連線到此電腦
用 putty 連進此樹梅派
### 修改成為固定 IP 以方便連線
先在此電腦下載 net-tools 以方便先觀察目前 IP
由於目前與實驗室申請 固定 IP,故先對此進行修改,之後可以透過 putty 對此進行 SSH 操作
先以 `ifconfig` 確認是否有取得 DHCP 給定 IP
生成設定 config 檔案 50-cloud-init.yaml
`sudo netplan generate`
對於 50-cloud-init.yaml 寫入 IP 設定
```
ubuntu@ubuntu:~$ cd /etc/netplan/
ubuntu@ubuntu:/etc/netplan$ ls
50-cloud-init.yaml
ubuntu@ubuntu:/etc/netplan$ cat 50-cloud-init.yaml
# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
eth0:
addresses: [192.168.79.95/24]
gateway4: 192.168.79.253
nameservers:
addresses: [8.8.8.8,8.8.4.4]
dhcp4: no
version: 2
```
### 安裝 OpenSSH Server
更新 apt-get
`sudo apt-get upgrade`
`sudo apt-get update`
下載 openSSH 套件
`sudo apt-get install -y openssh-server`
以確認 SSH 是已經開啟狀態
`sudo service ssh status`
```
ubuntu@ubuntu:/etc/netplan$ sudo service ssh status
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-11-25 09:05:09 UTC; 2h 4min ago
Docs: man:sshd(8)
man:sshd_config(5)
Process: 1799 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
Main PID: 1811 (sshd)
Tasks: 1 (limit: 4434)
CGroup: /system.slice/ssh.service
└─1811 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
Nov 25 09:05:09 ubuntu systemd[1]: Starting OpenBSD Secure Shell server...
Nov 25 09:05:09 ubuntu sshd[1811]: Server listening on 0.0.0.0 port 22.
Nov 25 09:05:09 ubuntu sshd[1811]: Server listening on :: port 22.
Nov 25 09:05:09 ubuntu systemd[1]: Started OpenBSD Secure Shell server.
Nov 25 09:08:20 ubuntu sshd[1883]: Accepted password for ubuntu from 192.168.79.85 port 7044 ssh2
Nov 25 09:08:20 ubuntu sshd[1883]: pam_unix(sshd:session): session opened for user ubuntu by (uid=0)
Nov 25 11:03:33 ubuntu sshd[2097]: Accepted password for ubuntu from 192.168.79.85 port 8264 ssh2
Nov 25 11:03:33 ubuntu sshd[2097]: pam_unix(sshd:session): session opened for user ubuntu by (uid=0)
```
透過 PuTTY 嘗試連線
```
login as: ubuntu
ubuntu@192.168.79.95's password:
Welcome to Ubuntu 20.10 (GNU/Linux 5.8.0-1006-raspi aarch64)
```
以上可以成功連線至遠端 Raspberry Pi
## Raspberry Pi 架設 Webserver
本篇以 clock 進行操作
Clone the repository
```shell
$ git clone git://github.com/lpereira/lwan
$ cd lwan
```
Create the build directory
```shell
$ mkdir build
$ cd build
```
Build Lwan
```shell
$ make
```
接下對於進行測試 `src/samples/clock/clock`
進入所建立的 clock 檔案目錄下,按照文件所述建立 `clock.conf` 及 `wwwroot` 資料夾
### clock.conf
`clock.conf` 內容使用 `lwan.conf` 預設內容
```shell
# Timeout in seconds to keep a connection alive.
keep_alive_timeout = 15
# Set to true to not print any debugging messages. (Only effective in
# release builds.)
quiet = false
# Set SO_REUSEPORT=1 in the master socket.
reuse_port = false
# Value of "Expires" header. Default is 1 month and 1 week.
expires = 1M 1w
# Number of I/O threads. Default (0) is number of online CPUs.
threads = 0
# Disable HAProxy's PROXY protocol by default. Only enable if needed.
proxy_protocol = false
# Enable straitjacket by default. The `drop_capabilities` option is `true`
# by default. Other options may require more privileges.
straitjacket
listener *:8080 {
serve_files / {
path = ./wwwroot
# When requesting for file.ext, look for a smaller/newer file.ext.gz,
# and serve that instead if `Accept-Encoding: gzip` is in the
# request headers.
serve precompressed files = true
}
}
```
### wwwroot 目錄
雖然這邊沒用到,但是套用在原先 `lwan.conf` 檔案所需求的目錄
```
mkdir wwwroot
```
### run clock
執行在 sample 中的 clock 執行檔 ,使其可以不斷接受服務
```
ubuntu@ubuntu:~/lwan/lwan/build/src/samples/clock$ ./clock
Loading configuration file: clock.conf
Using 4 threads, maximum 262144 sockets per thread
Listening on http://0.0.0.0:8080
Ready to serve
```
### 對於所架設 IP 之掃描
可以觀察對於一開始遠端 SSH (22) port 以及後來 https (8080) port 的開啟
```
ylowy@YYCs-MacBook-Air ~ % nmap 192.168.79.95
Starting Nmap 7.91 ( https://nmap.org ) at 2020-11-26 16:41 CST
Nmap scan report for 192.168.79.95
Host is up (0.0028s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
22/tcp open ssh
8080/tcp open http-proxy
Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds
```
### 對於該 server 進行連線
在網頁瀏覽器中輸入 `192.168.79.95:8080`
![](https://i.imgur.com/dcehnJh.png)
下一篇 [lwan 的 Hello World 簡介](https://hackmd.io/@YLowy/rJBWnxejD)