LNMP
(1) 先安裝好 Ubuntu,同時將 Virtual Box 的網卡設定成橋接介面卡
cd /etc/netplan/ sudo nano /etc/netplan/00-installer-config |
network: bonds: bond0: interfaces: [] parameters: mode: balance-rr ethernets: enp0s3: dhcp4: no addresses: [192.168.1.244/24] routes: - to: 0.0.0.0/0 via: 192.168.1.254 nameservers: addresses: [8.8.8.8] |
sudo apt update && sudo apt install nginx |
(3) 查看和設定防火牆相關設定
sudo ufw app list sudo ufw allow OpenSSH sudo ufw allow 'Nginx HTTP' sudo ufw allow 3306 sudo ufw enable |
出現訊息請按”Y”
(4) 啟動 Nginx
(5) 安裝 MySql
sudo apt update && sudo apt install mysql-server |
可檢查是否安裝成功
sudo ss -tlnp | grep mysqld |
我們可以進行 Mysql 安全性腳本,可參照[連結],基本上yes到就底就好了
sudo mysql_secure_installation |
查看版本
sudo mysqladmin -p -u root version |
可以測試看看能不能登入 MySql
(6) 讓 MySql 也可以讓外部連線
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf |
檢查設定檔是否沒有錯誤
(7) MySql 上建立一名使用者為 willywen,同時給予 root 的權限
sudo mysql CREATE USER 'willywen'@'%' IDENTIFIED BY "Kyy_y(YL901OzLBh"; GRANT ALL PRIVILEGES ON *.* TO 'willywen'@'%' WITH GRANT OPTION; ALTER USER 'willywen'@'%' IDENTIFIED BY 'Kyy_y(YL901OzLBh'; FLUSH PRIVILEGES; |
重新啟動 MySql
sudo systemctl restart mysql |
(8) 安裝 php和 fpm相關套件
sudo apt install php8.1-fpm php-mysql |
(9) 建立一個測試網頁
sudo mkdir -p /var/www/test.local/ |
設定目錄的所有權
sudo chown -R $USER:$USER /var/www/test.local/ sudo chmod -R 755 /var/www/test.local |
來設定一個簡單的網頁
sudo nano /var/www/test.local/index.html |
<html> <head> <title>Welcome to test3.ui-code.com</title> </head> <body> <h1>Welcome to test3.ui-code.com</h2> </body> </html> |
(10) 我們試著在 Nginx 預設目錄下建立一個伺服器區塊檔,並且內容給予
sudo nano /etc/nginx/sites-available/test.local |
server { listen 80; server_name test3.ui-code.com www.test3.ui-code.com; root /var/www/test3.ui-code.com/html;
index index.html index.htm index.php;
location / { try_files $uri $uri/ =404; }
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; }
location ~ /\.ht { deny all; }
} |
(11) 要在 sites-available 底下連結過去給 sites-enabled,同時取消預設的
sudo ln -s /etc/nginx/sites-available/test.local /etc/nginx/sites-enabled/ sudo unlink /etc/nginx/sites-enabled/default |
(12) 避免 hash bucket
sudo nano /etc/nginx/nginx.conf |
找到該行 server_names_hash_bucket_size,取消#
(13) 檢查 Nginx 語法是否有問題,並且重新啟動
sudo nginx -t sudo systemctl restart nginx |
(14) 測試在 Nginx 中使用 php
sudo nano /var/www/test.local/html/info.php |
接著我們編輯
// in info.php <?php phpinfo(); |
可透過 http://test3.ui-code.com/info.php 訪問試試看有沒有回傳伺服器資訊
(15) 創建一名使用者,同時給予權限
sudo mysql CREATE DATABASE example_database; CREATE USER 'jimmyyang'@'%' IDENTIFIED WITH mysql_native_password BY '!ExTest123'; GRANT ALL ON example_database.* TO 'jimmyyang'@'%'; |
(16) 來測試該使用者是否可以登入該資料庫,並且查詢
mysql -u jimmyyang -p SHOW DATABASES; |
(17) 創建一個名為 todo_list 的測試資料
CREATE TABLE example_database.example_data ( item_id INT AUTO_INCREMENT, content VARCHAR(255), PRIMARY KEY(item_id) ); |
並且加入值
INSERT INTO example_database.example_data (content) VALUES ("第一筆測試資料"); INSERT INTO example_database.example_data (content) VALUES ("第二筆測試資料"); INSERT INTO example_database.example_data (content) VALUES ("第三筆測試資料"); |
接著查詢看看是否有內容
SELECT * FROM example_database.example_data; |
(18) 建立一個 php 檔,內容如下
sudo nano /var/www/test3.ui-code.com/html/example_data.php |
<?php $user = "jimmyyang"; $password = "!ExTest123"; $database = "example_database"; $table = "example_data";
try { $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password); echo "<h2>TODO</h2><ol>"; foreach($db->query("SELECT content FROM $table") as $row) { echo "<li>" . $row['content'] . "</li>"; } echo "</ol>"; } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); } |
(19) 安裝 phpmyadmin [連結] (有引發密碼過不去的事件,這裡請參照文章指引) sudo apt update && sudo apt install phpmyadmin |
(20) Nginx 網頁伺服器要正確找到並提供 phpMyAdmin 檔案,從安裝檔案到 Nginx 的文件根目錄之間創建一個符號連結
sudo ln -s /usr/share/phpmyadmin /var/www/test.local/phpmyadmin |
如果要解除的話,指令如下
sudo unlink /var/www/test3.ui-code.com/html/phpmyadmin |
(21) 在主機上增加使用者,同時給予 sudo 權限
adduser poloyeh usermod -aG sudo poloyeh uPFwDxYf |
留言