Ubuntu18 – 安裝 PHP7.3 + Apache + Mysql/MariaDB + phpMyadmin

  • 2019/07/09 更新

切換到 root

第一次需要設定 root 密碼,接著進入 root

sudo passwd root 
su root 登入 root

另外,若在桌面的話要使用 root 登入可以這麼做

gedit /usr/share/lightdm/lightdm.conf.d/50-unity-greeter.conf

在檔案中加入下面這行

greeter-show-manual-login=true

存檔後重新開機,就可以選擇 Login 了。

建議替換倉儲

參考 比較能找到 php 相關較新的版本。

$ sudo apt-get install python-software-properties
$ sudo add-apt-repository ppa:ondrej/php
$ sudo apt-get update

 

建議安裝 aptitude

可以使用

apt-get install aptitude -y

取得較 apt-get 方便的 aptitude,我主要用來查詢 php7 是否存在

aptitude search php7.3

因為要查詢套件,無法使用 apt-get 所以要借用 aptitude。如果遇到被鎖定問題,重新新開機 ubuntu 就可以了。或是

sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock*

 

安裝 vim

apt-get install vim -y

 

更改主機時間

查詢時間

date

使用 ntpdate 修改為台灣時間,

apt-get install -y ntpdate ntp
ntpdate time.stdtime.gov.tw

若出現 the NTP socket is in use, exiting,代表不是系統時間校正的問題,所以設定時區為台北。

dpkg-reconfigure tzdata

選擇 Asia – Taipei。

MySQL 8 安裝

參考

wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.12-1_all.deb
sudo apt update
sudo apt-get install mysql-server -y

接著需要輸入 root 密碼,並詢問下面這兩個選項

Use Strong Password Encryption (RECOMMENDED) 
Use Legacy Authentication Method (Retain MySQL 5.x Compatibility)

第一個選項會使用 caching_sha2_password,第二個會使用 mysql_native_password。但因為怕 phpMyAdmin 登入無法支援,所以我會改成第二個。之後若要修改可到 /etc/mysql/mysql.conf.d/default-auth-override.cnf。

查看安裝的版本是否正確並嘗試登入

mysql -V
mysql -u root -p
mysql> select NOW();
mysql> exit

接著安全設定

sudo mysql_secure_installation

輸入剛剛設定給 root 的密碼即可操作。

MaraiDB 安裝 (我推薦用 MySQL 8)

apt-get -y install mariadb-server mariadb-client
mysql_secure_installation
mysql -u root -p <-測試是否可登入

DB 登入後修改時區為台北(+8:00)

查看時間與時區

select now();
show variables like "%time_zone%";

修改時區

set global time_zone = '+8:00';
set time_zone = '+8:00';
flush privileges;

參考

Apache 安裝

apt-get -y install apache2

到瀏覽器打上 http://localhost 就可以看到 Apache 預設首頁代表安裝成功。接著啟用 mod_reswite 功能,讓伺服器可以讀取 .htaccess 。參考

a2enmod rewrite
systemctl restart apache2

這時在 phpinfo() 中可以看到 Configuration > apache2handler 的 Loaded Modules 有 mod_rewrite 就代表啟用成功。

vim /etc/apache2/sites-available/000-default.conf

找到 DocumentRoot “/var/www/html” 後,修改如

<VirtualHost *:80>
	DocumentRoot /var/www/html/

	<Directory "/var/www/html/">
		AllowOverride All
	</Directory>
</VirtualHost>
service apache2 restart

我喜歡將 <VirtualHost> 包圍 <Directory>,讓每個網站都成為獨立的設定。

DNS 記得設定

不同的主機設定的 DNS 方式都不一樣。需要請洽服務商。如果是 Amazon 主機 (AWS),那麼就要前往 Route 53 設定 A Type

 

若想:網域指定某個路徑

原本網站:http://xxx.com 對應 /var/www/html
希望改成:http://xxx.com 對應 /var/www/html/project 

<VirtualHost *:80>
	DocumentRoot /var/www/html/project

	<Directory "/var/www/html/project">
		AllowOverride All
	</Directory>
</VirtualHost>

若想:設定別名 (Alias)

希望網址 http://xxx.com/abc 連到  /var/www/html/cdefg,那就添加

Alias /abc /var/www/html/cdefg

我喜歡將它添加在某個網域底下,也就是 <VirtualHost> 底下,例如

<VirtualHost *:80>
    ......
    Alias /abc /var/www/html/cdefg <-- 這裡
    <Directory "......">
        AllowOverride All
    </Directory>
</VirtualHost>

參考

若想:多網域指向同一台主機

  • A.com 指向路徑 /var/www/html/A
  • B.com 指向路徑 /var/www/html/B
<VirtualHost *:80>
    DocumentRoot /var/www/html/A
    ServerName A.com
    <Directory "/var/www/html/A">
        AllowOverride All
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot /var/www/html/B
    ServerName B.com
    <Directory "/var/www/html/B">
        AllowOverride All
    </Directory>
</VirtualHost>

以上修改完記得重新啟動 Apache,讓 DNS 生效。

Windows 修改 Hosts 檢查未生效的 DNS

DNS 生效通常需要一段時間,這期間要知道有沒有修改成功,可以先修改自己電腦的 Hosts :C:\WINDOWS\system32\drivers\etc\hosts 底部添加規則:

左至右依序是:IP 網域 #加上註解

xxx.xxx.xxx.xxx domain.com #我的網站

存檔後,瀏覽剛新增好的網域,如果 DNS 確實與 <VirtualHost> 設定無誤,就能暫時看到網站了。

修改權限

如果使用非 root 無法上傳的話,可修改 /var/www/html 權限為非 root 的 使用者,如 ubuntu。這樣可以當使用帳號 ubuntu 透過 SFTP/FTP 連接的時候進行編輯。若有開設新網域、子網域,也一定要重新指定路徑權限喔。

chown -R ubuntu:ubuntu /var/www/html

若要透過 FTP 上傳,需要注意權限路徑的問題

chmod 777 /var/www/html -R

PHP 安裝

apt-get -y install php7.3 libapache2-mod-php7.3
service apache2 restart

建立第一份 php 測試查看 phpinfo()

cd /var/www/html
vim info.php
<?php 
echo phpinfo();

網址打 http://localhost/info.php 就可以順利看到 PHP 相關設定資訊。接著安裝相關套件

apt-get install -y php7.3-mysql php7.3-curl php7.3-gd php7.3-intl php-imagick php7.3-imap php7.3-mbstring php7.3-gettext php7.3-zip php7.3-pdo php7.3-dom php7.3-xml php7.3-bcmath
service apache2 restart

如果要查詢更多,可以透過 aptitude 查詢可安裝的名稱。若安裝不同的版本號,只需要修改如 php7.x 即可。但確實的名稱建議還是用 search 查詢一下。

aptitude search php7.3

接著修改 php.ini

vim /etc/php/7.3/apache2/php.ini

參考這篇修改php.ini

啟動SSL支援

a2enmod ssl
service apache2 restart
a2ensite default-ssl
service apache2 reload
service apache2 restart (應該可以不用...)

安裝 Git

apt install git -y

安裝 Composer

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
mv composer.phar /usr/local/bin/composer

透過 Composer 安裝 phpMyAdmin

cd /var/www/html
composer create-project phpmyadmin/phpmyadmin

複製預設的範例來製作設定檔

cd phpmyadmin
cp -i /var/www/html/phpmyadmin/config.sample.inc.php /var/www/html/phpmyadmin/config.inc.php
vim /var/www/html/phpmyadmin/config.inc.php
1. 若要由 Web 登入

指定 blowfish_secret 密碼要 32 個字。auth_type 使用 cookie。

$cfg['blowfish_secret'] = '1{dd0`<Q),5XP_:R9UK%%8\"EEcyH#{o'; 
$cfg['Servers'][$i]['auth_type'] = 'cookie';
 
$cfg['TempDir'] = '/tmp'; <-- 自行添加可解決錯誤
2. 若要自動登入

不安全但很方便,建議僅在開發時使用,若為 cookie 則務必要指定 user、password。網址進入 phpmyadmin 就不需要輸入帳號密碼,當然也無法登出。

/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '1234';

接著匯入 phpmyadmin 的設定資料庫,這樣我們在修改 phpmyadmin 的時候才能儲存設定

mysql -u root -p < /var/www/html/phpmyadmin/sql/create_tables.sql
ifconfig (可查看 ip)

從網址連進 http://xxx.xxx.xxx.xxx/phpmyadmin/ 以後,應該就會看到資料庫多出 phpmyadmin 。這可以解決「尚未設定 phpMyAdmin 設定儲存空間,部份延伸功能將無法使用。」的問題。

Port 設定

如果希望用 http://localhost:9000 訪問你的專案,可以這麼設定

vim /etc/apache2/ports.conf

添加如

Listen 9000

接著添加想要對應的路徑

vim /etc/apache2/sites-available/000-default.conf
<VirtualHost *:9000>
    DocumentRoot /var/www/html/website2.com
    <Directory "/var/www/html/website2.com">
        AllowOverride All
    </Directory>
</VirtualHost>
service apache2 restart

SSH 安裝

aptitude install ssh -y
vim /etc/ssh/sshd_config
Port 22
PasswordAuthentication yes
PermitRootLogin yes -> 是否開放 root 登入
/etc/init.d/ssh restart

介面改為漢語(臺灣)

預設沒有,要下指令

sudo vim /etc/locale.gen
zh_TW.UTF8  <--- 把註解拿掉

再運行

sudo locale-gen

接著用放大鏡搜尋 Language Support > Install/Remove Languages > Chinese (traditional) > Apply,安裝好後會再列表看到漢語(台灣),切換到頁籤 Regional Formats,選擇漢語台灣 > Apply System-Wideot > 重新啟動電腦

登入後進入 Language Support 並調整 Language 為臺灣。再進入 Settings > Region & Language > Language anguage 選擇漢語(臺灣) > 重新啟動 > 顯示中文了!

 

安裝注音

進入像是市集的 Ubuntu 軟體 > 搜尋 gcin > 安裝 。

完成後 > 設定 > 地區案語言 > 管理安裝的語言 > 鍵盤輸入法系統 > gcin > 重新啟動就可使用了

 

Comments

  1. Feeey个人博客
    2017-02-28 - 02:02

    博主最近没怎么更新啊,我来转转。

  2. “MaraiDB 預設不讓 root 登入 phpmyadmin,加入這行可解除”.感謝,解決了困擾好久的難題

發表迴響