# Construct VM as XAMPP Server on NAS (QNAP)
<!-- 標籤 -->
###### tags: `主機維護`
<!-- 內文編輯更新資訊,若有更動此份文件內容,請務必更新此項資訊 -->
> [name=Chia-Hung Huang, 黃嘉宏]
> [time=Sat, Apr 9, 2022 9:45 AM]
<!-- 筆記正文開始 -->
## Build a New VM
1. Get the `.iso` file, and put it into `Public/OS/`.
- Windows server 2016
- Linux (Ubuntu): https://ubuntu.com/download/desktop
2. Go to `Visualization Station 3` on NAS and create a new VM. Select the `.iso` file you just put into `Public/OS/` and set the Storage to `Public/VM/` . For other setting details, please refer to the settings of the other VMs already on NAS.
## Network Settings on NAS
1. Go to `Network & Virtual Switch` on NAS.
2. Select an idle Physical Adapter (or create a new one).
- In the `IPv4` tab, select `Use static IP address` and do the following settings:
- `Fixed IP address`: Set to be one of the available IP address. For IP address list, please refer to: https://docs.google.com/spreadsheets/d/1vJ2QMsyDoNt_3NYPdfaaj2HSeqewk9nBcHeyNNdoq14/edit#gid=1138232818
- `Subnet Mask`: `255.255.255.0`
- `Gateway`: `140.112.30.254`
- In the `DNS` tab, select `Use the following DNS server address` and do the following settings:
- `Primary DNS server`: `140.112.2.2`
- `Secondary DNS server`: `140.112.4.254`
3. Add a virtual switch, choose `Advanced Mode`, and connect the physical adapter to the VM you just created. **Please note that you should NEVER touch the System Default Gateway**, or the whole NAS service may crush.
- Select `Stacic IP`, `Use the same settings as the selected adapter`
- Select `IPv6 Auto-Configuration (Stateless)`
- For DNS Settings, manually assign `Primary DNS server` to `140.112.2.2` and `Secondary DNS server` to `140.112.4.254`
4. In the `Overview` tab, make sure there is a blue earth icon, which means "Internet connected", on the Physical Adapter and Vitrual Switch you just created. You can refer to the following image for example.

5. In the `ControlPanel` of the NAS service, go to `Network & File` > `Network Access` > `Service Binding`, and enable `Web server` and `SQL server` of the newly-added physical adapter.

## Network Settings on VM
- 前往`設定 > 網路和網際網路 > 乙太網路 > 內容 > IP 設定`,手動指派 IP:
- IPv4 位址:Physical Adapter 的 IP
- 子網路首碼長度:`24`
- 閘道:`140.112.30.254`
- DNS 伺服器:`140.112.2.2`、`140.112.4.254`
- 確認 VM 可以連上網路
## XAMPP Server
1. Install XAMPP and install : https://www.apachefriends.org/de/download.html
2. To avoid the UAC interference, please install XAMPP in a folder with the name `xampp` directly under `C:/` (i.e. `C:/xampp`, NOT `C:/program Files/xampp`)
3. Create a new web root directory `C:/WebRoot`
4. Go to the XAMPP Control Panel. Click `Config` (as shown in the image) and modify the following files:

- `Apache(httpd.conf)`:
```conf
# Original
Listen 80
# Add IP port
Listen 80
# Original
DocumentRoot "C:/xampp/htdocs"
<Directory "C:/xampp/htdocs">
# Change to
DocumentRoot "C:/WebRoot"
<Directory "C:/WebRoot">
```
- `Apache(httpd-ssl.conf)`
```conf
# Original
DocumentRoot "C:/xampp/htdocs"
# Change to
DocumentRoot "C:/WebRoot"
```
- `PHP(php.ini)`
```conf
# Original
include_path=C:\xampp\php\PEAR
#Change to
include_path=".;C:\xampp\php;C:\xampp\php\pear;C:\WebRoot;"
```
5. Forbid apache server to show the directory indexes.
* `httpd.conf`
```conf
# Original
Options Indexes FollowSymLinks Includes ExecCGI
# Change to
Options FollowSymLinks Includes ExecCGI
```
7. Restart the Apache server. The `WebRoot` directory is now accessible from outside network with its IP.
8. Since the VM is built on the NAS, so it cannot be reached through NAS VPN.
## Follow-up
For further works, please refer to [DocuSky 架設程序 (移機)](https://hackmd.io/@6vl-R1QtRl-LuttqpoUdVA/r1jf8p86w)