Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[筆記]部署 AWS EC2 虛擬主機 + Ubuntu LAMP 環境 + phpmyadmin #30

Closed
enter3017sky opened this issue Dec 17, 2018 · 1 comment
Closed

Comments

@enter3017sky
Copy link
Owner

enter3017sky commented Dec 17, 2018

部署 AWS EC2 虛擬主機 + Ubuntu LAMP 環境 + phpmyadmin

主要參考這兩個同學的筆記
一小時完成 VPS (Virtual Private Server) 部署
部署 AWS EC2 遠端主機 + Ubuntu LAMP 環境 + phpmyadmin

AWS EC2 跟 ubuntu 環境都建立好了之後。

在 CLI 登入雲端虛擬主機

  • 在 AWS EC2 的 Instance 的畫面,如圖所示上面的 Connect,可以直接複製指令。
    • ssh -i ~/.ssh/awsKey.pem ubuntu@ec2-xx-xxx-xxx-xx.ap-northeast-1.compute.amazonaws.com
  • 也可以自己打簡短的 IP
    • ssh -i ~/.ssh/awsKey.pem ubuntu@IP(public)

image

  • 允許使用 PHP Short tag,輸入 sudo vim /etc/php/7.2/apache2/php.ini
    • 如果用vim,按/輸入關鍵字,按n查找下一個,`找到 short_open_tag = 改成 ON
  • 離開 vim 編輯器(權限問題無法編輯文件):輸入 q! 指令強制離開

在 CLI 操作 MySQL

  • 登入資料庫 mysql -u root -p

    • 顯示 MySQL 伺服器中資料庫資訊:mysqlshow -h localhost -u root -p
    • 顯示每個資料表中的資料的行數: mysqlshow -h localhost -u root -p --count
  • 如果已經用 sudo -isudo -u登入 root的話,不需要指定使用者,直接mysql -p

    • 顯示 MySQL 伺服器中資料庫資訊:mysqlshow -p
    • 顯示每個資料表中的資料的行數: mysqlshow -p --count
  • 說明

    • -h: 指定資料庫伺服器的主機名稱或 IP
    • -u: 連接資料庫伺服器的使用者名稱
    • -p: 連接資料庫伺服器的使用者密碼

在 MySQL 的 CLI 上使用

  1. 建立資料庫:CREATE DATABASE your_database;
  2. 選擇資料庫:USE your_database
  3. 就可以操作 CRUD 相關指令
  • show databases;
  • show status;
  • 離開: exitquit
  • 注意結尾分號

用 FileZilla 連接 EC2

  1. 打開 FileZilla 的"編輯" -> "設置" 對話框,在左邊的“選擇頁面” 選擇“SFTP”, 右邊點擊“添加密鑰文件...” 按鈕,導入Amazon給的密鑰文件。
  2. 打開“文件”-> “站點管理器” , 點擊左邊的“新站點”按鈕, 在右邊“常規”標籤中填入主機信息(即AWS Console中 的 Public DNS)
  • "協議"中選"SFTP - SSH FileTransfer Protocol" ,
  • “登錄類型” 選“交互式”
  • “用戶” 中輸入用戶名(注意不能用默認的匿名用戶)
  1. 點“連接”。完成。

參考資料:用 FileZilla 連接 EC2

AWS EC2 設置固定IP地址

  • 進入EC2控制面板,進入左側下方的“Elastic IPs”,
  • 點擊“Allocate New Address”申請一個固定的IP地址。
  • 選中IP地址,點擊“Associate Address”,然後選擇要使用的EC2主機即可。
  • 注意:不要申請IP後閒置(不綁定到雲主機),可能被收取額外費用。

參考資料:
(AWS EC2) Service for EC2 指定固定IP及釋放IP
Amazon EC2防止被扣费的方法

使用 SSH 設定檔簡化指令與連線網址:

指令列都要打長長的一串,ip 還可能忘記,所以想到用別名的方式去改善

  1. 首先,在 ~/.ssh 下新增 config 檔案
  • 在 CLI 輸入 vim ~/.ssh/config
    • info: ~/ : 用戶根目錄。ex./Users/enter3017sky
  1. 設定 ssh config
    image

  2. 開始使用 alias 連線

參考資料:

ssh_config(5):OpenSSH SSH客戶端配置文件 - Linux手冊頁
增進 SSH 使用效率 - ssh_config
Using an SSH Config File - Media Temple
使用 SSH config 文件


故障排除

Ubuntu 下 phpMyAdmin 的 404 Not Found 頁面

  1. 方法1:(我用這個解決的)
  1. 方法2:
# link configure file to apache
$ sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf.d/phpmyadmin.conf
# restart apache
$ sudo /etc/init.d/apache2 restart
  1. 方法3: 關於phpmyadmin的問題
  • 重新設定你的「phpmyadmin」: sudo dpkg-reconfigure phpmyadmin

參考資料:
解決 Ubuntu 下 phpMyAdmin 的 404 Not Found 頁面 - kuoe0's dots
鏈結檔案 ln 指令


phpmyadmin 一直出現錯誤訊息

參考資料:

大家來學VIM(一個歷久彌新的編輯器)[六]
阿旺的 Linux 開竅手冊
Linux常用指令整理

設定留言參考資料:
How To Install Linux, Apache, MySQL, PHP (LAMP) stack on Ubuntu 18.04
45 How To Install and Secure phpMyAdmin on Ubuntu 18.04
How to Install a LAMP Stack on Ubuntu 18.04
How to setup Linux, Apache, MySQL, PHP (LAMP) Stack on Ubuntu 16.04
ubuntu 默認防火牆安裝、啟用、查看狀態ufw

@enter3017sky
Copy link
Owner Author

錯誤訊息:ERROR 1364 (HY000): Field 'xxx' doesn't have a default value

  1. 初次排除:雲端虛擬主機部署完成之後,首先當然是放些東西確認看看。後來發現留言板編輯、刪除、更新都正常。但是新增留言就是 sql fail,最後在 add_comments.php 裡面用 var_dump($variable)印出有嫌疑的變數,發現 if($stmt->execute()) 的結果是 false,然後最後 $conn->error 印出 General error: 1364 Field 'user_ID' doesn't have a default value,發現 user_id 沒有用到,phpmyadmin 裡面與沒有設定預設值,但這個也蠻奇怪的,在自己的伺服器跟mentor 的伺服器都沒遇到,或許有設定配置的問題。最後在 phpmyadmin 直接設定預測值為 null,就正常運作了。

  2. 第二次解決:後來在 CLI 練習指令的時候,又發現了這個問題 insert into時,如果某個值沒放輸入又沒預設值,就會跳 ERROR。然後找到了,原來 sql_mode 是嚴格模式的關係。

取消mysql5.7的 strict mode 模式:

  1. SSH 連線到伺服器的 root,首先要新增並建立一個 disable_strict_mode.cnf 檔案,輸入sudo vim /etc/mysql/conf.d/disable_strict_mode.cnf

2.輸入

[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

3、輸入指令重新啟用 mysql :sudo service mysql restart

為了確認strict mode模式是不是已經被關閉了,可以在 phpMyAdmin 的 sql 中輸入 SELECT @@GLOBAL.sql_mode 進行測試
如果顯示 IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FO 則表示 strict mode 模式已經被關閉。

參考資料:關閉Ubuntu預設mysql5.7版的strict mode設定方法(嚴格模式)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant