larnmvp – 讓你輕鬆建立快速的主機 | WordPress

larnmvp - 讓你輕鬆建立快速的主機 | WordPress

這個專案已經發佈在 Github 上面,可以免費的去使用它,也歡迎懂 bash 程式碼和 linux 指令的人們一起去編輯他。而為了也可以讓外國人看得懂我在做什麼,所以我在 Github 上面的說明手冊是用我破破的英文寫成的,敬請見諒。

「larnmvp」其實是由 Liunx, Aapche, Redis, Nginx, Mariadb, Varnish 和 Php 縮寫而成的東西。

之前我曾經寫過一系列的文章,叫做「WordPress 架站系列」,是一個完整且詳細使用 Apache 2.4, Nginx 1.14.1, Varnish 6, Redis 5, PHP 7.2 等東西完整在 Ubuntu 18.04.1 LTS 系統上建構出一個可以快速運行的伺服器。這當中我主要使用的概念是「proxy server」(代理伺服器)。

不過我知道要看完我的文章一步一步走的話也是很花時間的,雖然我已經花了很多心血把我所有蒐集到的資料用比較直白的方式表達出來,但為了大家的方便,我就乾脆寫了這個 bash shell script,希望可以讓大家也可以輕輕鬆鬆,快速部署一個高效能的伺服器。

至於 Ubuntu 18.10 的話,其實我在測試期間有發現一些問題,暫時應該是無法使用在 Ubuntu 18.10 上面,主要的問題點事發生在 Varnish 套件包的問題。

讓我們開始吧

這其實只是我一個小小的專題而已,之前一直常常在 VPS 上面做測試,不過老實講要我一行一行把指令打到終端機,真的是很累人的事情。「重複的事情就交給機器人做吧」這是我接觸電腦以來一直秉持的想法,因此,我把我過去幾個月研究的東西,直接用腳本的方式做出來。這個腳本可以讓你自動化安裝出一個代理伺服器,是使用「Apache 2.4、Nginx 1.14.1、Varnish 6、Redis 5 以及 PHP 7.2 建構出來的。

不過請注意,我只有在 Google Computer Engine 以及 Azure 的 Ubuntu 18.04.1 LTS 上面做過測試,按照常理來講,Linode 的 VPS 和 Digital Ocean 也是可以正常運行,不過如果你是使用 Amazon Ec2 ,那首先要先解決一個唯一的問題,是新增來源到「sources.lists」檔案當中,因為安裝套件會以至個檔案為主,去下載套件,而作法我在「這一篇文章」當中有詳細說到如何操作。

而如果你想更清楚知道我在這個腳本裡面到底做了哪些事情,或是關於「代理伺服器和 Nginx、Apache、Varnish」之間的關係,請參考我這一篇文章。


請參考:
1.  Varnish Nginx  Apache 製作 HTTP2 反向代理伺服器 | WordPress- ヤンヤン的研究之路

安裝需求和安裝過程

我們要裝的東西其實有點多,所以可能會花上一點時間去完成,因此我會建議搭配使用「screen」這個套件。這個套件的主要作用是在於即使你和伺服器中斷連線,還是有辦法用 screen 回到原本的安裝畫面。

sudo apt-get install screen wget python3 -y

第二步驟是想事先告訴你,如果你想用這個腳本,建議還是使用有 1 GB 大小記憶體的 VPS,不然真的會跑的有點久(雖然得網站之前就是用 600MB 大小的記憶體,真的花了很多時間在安裝… )

第三個,請記得這個要用在全新的系統裡面安裝喔,如果事先已經有安裝過和 larnmvp 會安裝到的東西,八成會失敗拉…。

按照指示安裝

接著,最好是使用 root 權限去跑這個腳本會比較好。

sudo su

接著請輸入 git 的指令下載這個專案到你的電腦或 VPS 上面。(當然請記得先安裝 git)

//if you does not install git before.
sudo apt-get install git -y
//clone!
sudo git clone https://github.com/a2d8a4v/larnmvp.git

目前我設計成可以讓你先進行設定在進行自動化安裝(無人手職安裝),接著讓我們開始進行安裝吧!

sudo screen -S larnmvp

「Screen」程式將會清除你的終端機畫面。接著就正式開始安裝了!

cd larnmvp
sudo chmod a+x larnmvp.sh
sudo ./larnmvp.sh

接著你應該會看到這個畫面。

### Initializing...
### If you don't press 'C' in 20s, the script will continue with its default settings.
Please press "c" or "C" in 20 seconds, or it will install with its default settings.

接著就開始進行你的設定吧!以下是範例。

### Initializing...
### If you don't press 'C' in 20s, the script will continue with its default settings.c
### Please type information which need for installing.
@@ Enter your new config file name: test
--The name of new config file is test.conf
@@ Enter your domain: www.yannyann.com
--Your domain is www.yannyann.com
@@ Enter Apache2 using port you want: 8090
--Your input for port of Apache2 is 8090
@@ port of Varnish can only be as 80.
@@ port of Nignx can only be as 443 for SSL connect.
@@ Enter port for SFTP which you like: 678
--Your input for port of SFTP is 678.
@@ Enter password of root account in MariaDB: asdfghjkl
--Your password of root account in MariaDB is asdfghjkl
@@ Enter password of Redis: qwertyuiop
--Your password of Redis is qwertyuiop
### Start running the script with default settings.

You have those settings --------------------------------------------------------

Install Website : www.yannyann.com
Your Domain name : yannyann.com
Your website root diterory : /var/www/yannyann_site
Your Apache2 using port : 8090
Your Apache2 default file name : /etc/apache2/sites-available/yannyann_site.conf
Your Varnish using port : 80
Your Varnish default file name : /etc/varnish/yannyann_site.vcl
Your Nginx using port : 443
Your Nginx default file name : /etc/nginx/sites-available/yannyann_site
@@ All of your settings will be saved at : /home/ubuntu/.larnmvp_logs

---------------------------------------------------------------------------------

### Waiting for 5s and then start to install

接著就會自動進行安裝,而「@@ All of your settings will be saved at : /home/ubuntu/.larnmvp_logs」表示你這些所有的設定都會存在這個檔案裡面,會在所有安裝完成之後儲存,所以不必擔心你忘記你輸入的密碼是多少。

當然這個檔案請自行保管,請勿任意外留給其他人以防資安上的問題。

自己手動修改設定檔案讓其完全自動化安裝

一樣,接著,最好是使用 root 權限去跑這個腳本會比較好。

sudo su

接著請輸入 git 的指令下載這個專案到你的電腦或 VPS 上面。(當然請記得先安裝 git)

//if you does not install git before.
sudo apt-get install git -y
//clone!
sudo git clone https://github.com/a2d8a4v/larnmvp.git

在執行腳本之前,請先到「./larnmvp/ini」找到「install.php」進行設定。

cd larnmvp/ini
sudo nano install.php

打開之後,應該會看到這些東西。像是「port of SFTP」, 「port of Apache2」、「port of Nginx」、「port of Varnish」、「Your website URL」、「root’s password of mariadb」以及「pasword of redis」。

website="www.yannyann.com"
apaport="8000"
varnport="80"
webrdic="html"
mariadbpasswd="passwd12345678"
redispasswd="passwd12345678"
sftpport="22"

如果你不太懂這些設定的話,只要改變「website」、「mariadbpasswd」、「redispasswd」和「sftpport」這幾個欄位即可。首先「sftpport」這個欄位改變的話,需要到管理 port 防火牆的地方進行設定;而「apaport」不可以改成 443,這個是專門給 Nginx 用的,已經寫死在設定檔案了,否則會造成安裝失敗。「varnport」預設是「80」,一但修改的話一樣需要到管理 port 防火牆的地方進行設定。

最後我們終於完成我們的設定,記得回到我們的根目錄,然後再進行我們的安裝步驟吧!

cd ..
sudo screen -S larnmvp

「Screen」程式將會清除你的終端機畫面。接著就正式開始安裝了!

sudo chmod a+x larnmvp.sh
sudo ./larnmvp.sh

接著請勿輸入「c」,只要放著讓他等 20 秒之後,就會一次跑完所有的安裝過程。

### Initializing...
### If you don't press 'C' in 20s, the script will continue with its default settings.c
Then it will start and end automatically by itself.

### Waiting for 5s and then start to install
### Upgrading Your Repositories...
### Setup Your Timezone...
### Installing UFW and Fail2ban...
### Installing Apache2.4...
### Installing Mariadb 10.3...
### Installing PHP 7.2 for Apache2.4, Nginx 1.14 and for Compiling...
--This progess will take some time to finish.
### Installing Nginx 1.14...
--This progess will take 1 hour to finish because of creating DHPARAMS
4096 key to protect webserver connecting to users from attack.
### Installing Varnish 6...
### Installing Redis 5...
### Done!
What Happenin when running the script
Those results were taken on Google Compute Engine 10 GB HDD, 600MB RAM, Ubuntu 18.04.1 LTS. Before know what happend in your virtual machine, first you should understand what did I do in my larnmvp program.

我自己跑測試的結果

所有測試皆在全新建立的 VPS 上面運行。

測試列表

Test 1 : Originality: 9.52G, 11.7% used (no Swap space) -> 55.4% (3GB Swap space)

Test 2 : Originality: 15G, 7.4% used (no Swap space) -> 35.2% (3GB Swap space)
Test 3 : Originality: 30G, 3.7% used (no Swap space) -> 17.6% (3GB Swap space)


要花多少時間每個階段的安裝上呢?

注意,這些時間忽略了設定的時間,因為這些時間總共不超過 5 秒。

目前的問題

臭蟲一(已經修復)

感謝 @wartw98 協助我修正這個問題。原本正常來講,安裝過程應該要完全自動化的完成,不過卻遇到「openssh-server」因為也需要更新,會跳出視窗在詢問是否更新。

┌────────────────────────────────┤ Configuring openssh-server ├────────────────────────────────┐
│ sshd_config: A new version (/tmp/fileYrXkIn) of configuration file /etc/ssh/sshd_config is │
│ available, but the version installed currently has been locally modified. │
│ │
│ What do you want to do about modified configuration file sshd_config? │
│ │
│ install the package maintainer's version │
│ keep the local version currently installed │
│ show the differences between the versions │
│ show a side-by-side difference between the versions │
│ start a new shell to examine the situation │
│ │
│ │
│ <Ok> │
└──────────────────────────────────────────────────────────────────────────────────────────────┘

臭蟲二(已經修復)

感謝 @baiyuanlab 讓我發覺這個問題!因為我們安裝 ufw 的時候會設置禁止我們沒有設置的 port 和外面進行連接,但因為我忘記修改一個小地方,會造成安裝完之後卻無法再次登入自己的 VPS 當中。

版本

0.0.1 – 新專案開始

(0.0.2) – 目前想要增加 WordPress 的自動化安裝。

作者

李俊廷(LEE JIUN TING) – 原始作者 – a2d8a4v

如果你對我的專案有興趣,請自由地修改程式碼沒有關係!

版權資訊

此專案是以「MIT License」做為授權,請參考「LICENSE.md」以了解更多版權細節。

未來研究方向

以下四個東西是我想要研究參考的對象。


1. lnmp - licess | Github
2. lnmp - lj2007331 | Github
3. ezhttp - centos-bz | Github
4. EasyEngine | Github

接著想要研究如何自動化安裝 WordPress 的部分,這部分會包含 MariaDB 的部分以及考慮是否要自動產生亂碼的密碼。
另外再安裝過程中有非常多需要下載檔案的過程,雖然這些來源都是官方的伺服器,但是有可能會有掛掉的時候,會另外思考要怎麼處理這個問題。
最近在玩 easyengine,有看到除了建立一個 WordPress 網站之外,其實也可以建議一個純 html、或是 php、mysql 互相搭配的網站,方便其他人進行專案測試。這部分的技術會使用到 docker container 的關係,暫時我還不會那麼快增加這個功能。
另外是多網站的功能,可能有人想要在一個 VPS 裡面放入多個網站,俗稱 multisite,這個涉及 nginx 和 varnish 的設定檔案的改寫,需要花一點時間研究整個流程要怎麼做會比較好。
最後,如果這個專案可以發展下去,當然會另外增加一個網站專門是在做 larnmvp 的。