利用DigitalOcean架設WordPress個人網站(Ubuntu 18.04)

利用DigitalOcean架設WordPress個人網站(Ubuntu 18.04)

這邊就省略了DigitalOcean的帳號註冊步驟了

Create a new droplet

等資料庫備份好後再來開一個新的Droplet

我選的環境設定為Ubuntu18.04.3(LTS) x64, Standard Plan, $5/month(1GB ram/1 CPU, 25GB SSD disk, 1000GB transfer)

Btw, 如果你要架設新的網站,不需要還原資料,可以直接選Marketplace裡面的Wordpress on 18.04,這樣架完網址打開,wordpress就已經裝好了,不過這次保險起見,我就先沒有試這個選項來搬資料,也順便溫習一下架站過程。

新的droplet建好後,用網頁上的Access console進入,如果你先前是選One-time password,記得去信箱收密碼,大概在你創建droplet後五分鐘後會寄到你的信箱。用root登入後,他會馬上要求你重設新的root密碼。進去後記得先跑更新:

sudo apt update && sudo apt upgrade

創一個平常用的帳號賦予sudo權限,之後沒必要就不要用root登入了,但root密碼還是記好唷!

sudo adduser username
sudo usermod -aG sudo username

Installing Nginx, MySQL, PHP (LEMP) on Ubuntu 18.04

sudo apt update && sudo apt install nginx

確認Nginx Service有在執行

sudo service nginx status

順利的話應該要看到active (running),之後按q離開

Configure Firewall

設定防火牆可以ssh遠端

sudo ufw allow OpenSSH

防火牆Nginx設定

sudo ufw allow 'Nginx HTTP'

開啟防火牆

sudo enable ufw

確認防火牆狀態

sudo ufw status

應該會看到:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx HTTP                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Test Nginx

打開瀏覽器上前往你的IP,應該能看到:

Install MySQL

sudo apt update && sudo apt install mysql-server

同樣確認mysql是否正常運作

sudo service mysql status

正常會出現active (runnung)

Configure MySQL Security

sudo mysql_secure_installation

依序為(n,y,y,y,y):

  1. Set up the validate password plugin? n
  2. Please set the password for root here? 設定root密碼
  3. Remove anonymous users? y
  4. Disallow root login remotely? y
  5. Remove the test database? y
  6. Reload privilege tables? y

確認mysql版本

sudo mysqladmin -p -u root version
mysqladmin  Ver 8.42 Distrib 5.7.29, for Linux on x86_64
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Server version          5.7.29-0ubuntu18.04.1
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/run/mysqld/mysqld.sock

Install PHP

sudo apt update && sudo apt install php-fpm php-mysql

確認PHP版本

php --version
PHP 7.2.24-0ubuntu0.18.04.4 (cli) (built: Apr  8 2020 15:45:57) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.24-0ubuntu0.18.04.4, Copyright (c) 1999-2018, by Zend Technologies

Configure Nginx for PHP

sudo vim /etc/nginx/sites-available/default

加入index.php

index index.php index.html index.htm index.nginx-debian.html;

加入你的domain name

server_name YOUR_DOMAIN_OR_IP_HERE;

把php7.0-fpm.sock改成你目前的版本,版本可以來這確認:

$ ls /var/run/php/
php7.2-fpm.pid php7.2-fpm.sock
location ~ \.php$ {
                include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }

改完檔案後記得檢查語法正不正確

sudo nginx -t

正確後重跑設定

sudo service nginx reload

Test PHP

sudo vim /var/www/html/info.php

填上內容:

<?php
phpinfo();

到http://your_ip/info.php看看

如果有正確顯示info.php就沒問題,但看完記得把info.php刪掉。

Installing phpMyAdmin

sudo apt update && sudo apt install phpmyadmin

因為我們使用的是Nginx可以直接按tab到ok後Enter繼續

選Yes預設設定就好

這邊可以留空,讓他自己自動產生phpmyadmin和mysql之間用的密碼

請替你的phpmyadmin資料夾想一個名稱

不然每個人都可能知道你的進入點是http://ip_or_your_domain/phpmyadmin

這邊會建一個symbolic link,而不是真的把phpmyadmin放到你的網站root路徑

sudo ln -s /usr/share/phpmyadmin /var/www/html/name_your_phpmyadmin

現在可以嘗試用瀏覽器到http://ip_or_your_domain/name_your_phpmyadmin

順利的話會看到:

但如果你用遠端機器,現在應該是無法用root進入的

所以我們要創一個使用者帳好給phpmyadmin用

進入mysql(注意如果你之前有設定mysql的root帳號不能用遠端登入,那這邊就不能用ssh等方式登mysql,一定要用digitalocean的console才行)

sudo mysql -p -u root

帳號: phpmyadminuser 密碼: password

CREATE USER 'phpmyadminuser'@'%' IDENTIFIED BY 'password';

並給他所有資料庫的操作權限

GRANT ALL PRIVILEGES ON *.* TO 'phpmyadminuser'@'%' WITH GRANT OPTION;

這時候再回http://ip_or_your_domain/name_your_phpmyadmin試試新的帳號密碼是否能順利登入就ok了

最後面會再替phpmyadmin加一層密碼保護,就算別人真的找到你的phpmyadmin進入點,也能多一層保護,不過需要在我們設好SSL憑證後,不然chrome會擋(或是現在要先跳到後面設好SSL再裝phpmyadmin security再裝wordpress也行)

Install WordPress

進入mysql

sudo mysql -p -u root

替wordpress建一個database(資料庫名稱:wordpress)

CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

創一個使用者帳號專門給網站操作這個資料庫用(username: wordpressuser)

GRANT ALL ON wordpress.* TO 'wordpressuser'@'localhost' IDENTIFIED BY 'password';

立即更新設定在mysql生效

FLUSH PRIVILEGES;
EXIT;

Installing Additional PHP Extensions for WordPress

sudo apt update && sudo apt install php-curl php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip

重啟php7.x-fp(確認版本: ls )

ls /var/run/php/    #確認php fpm版本
sudo systemctl restart php7.x-fpm

Configuring Nginx

sudo vim /etc/nginx/sites-available/default

在server {}中加入:

server {
    . . .

    location = /favicon.ico { log_not_found off; access_log off; }
    location = /robots.txt { log_not_found off; access_log off; allow all; }
    location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
        expires max;
        log_not_found off;
    }
    . . .
}

改掉回傳404的結果,而是將參數傳到index.php

server {
    . . .
    location / {
        #try_files $uri $uri/ =404;
        try_files $uri $uri/ /index.php$is_args$args;
    }
    . . .
}

更改好檔案後,儲存離開

檢查語法後重load nginx

sudo nginx -t
sudo systemctl reload nginx

Downloading WordPress

cd /tmp
curl -LO https://wordpress.org/latest.tar.gz

解壓縮

tar xzvf latest.tar.gz

直接使用預設設定

cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php

再將整個/tmp/wordpress複製到網站的根目錄/var/www

sudo cp -a /tmp/wordpress/. /var/www/html/wordpress

www-data是Nginx在跑檔案時使用的user跟group名稱,所以我們要把nginx可以讀寫這個資料夾

sudo chown -R www-data:www-data /var/www/html/wordpress

獲得Wordpress secret key從Wordpress secure key generator

curl -s https://api.wordpress.org/secret-key/1.1/salt/

你會獲得類似訊息,但別複製這裡的key,用上個指令產生的

define('AUTH_KEY', 'C15Ib=&lt;=!+8@Dc9-oR+raH+8}%4CpY+~tS91<code>yy$r[Qc[(Xh3ybhJu;5$|{Ekq~M'); define('SECURE_AUTH_KEY', 'VVVI/eW0Yq|s4WL?}-qS?O_FhO4Ae2.&amp;H6y#@5|&gt;8ic~P~^D450NN$A$XGHpmUA,'); define('LOGGED_IN_KEY', 'E6qoP^|?F&amp;43tOq4vm_|DmP#p?U-lq6|M=j85^;0dPd!Z)A-Y^vi</code>&gt;z7Sx_l06&amp;i');<br>define('NONCE_KEY', ']%kY}794tqrlM[E{..u(7OU9B+C}yX{Ts~T]<em>7VaWa</em><code>Tc+?oLvV#gV/8V*1)zzL'); define('AUTH_SALT', '4</code>fp:~2:ccSQEI#9Y?lm[#m5a !@Mp`!&amp;n4hM2zdFLtcc)1.jQG-?$7|BFOfVNs?');<br>define('SECURE_AUTH_SALT', '18?@4@n~CXY4UX<em>4s/cp7z_|pYxO-y4[+.0HJ%VtE&amp;}fc-#ikH6lmAuL_/ P+KG_'); define('LOGGED_IN_SALT', 'fazZCroyc|@HOE3b$K2-+b^FBtq7Owha$GWqnWbk %E-r8ahX8U,H/gle');

接著編輯你的wordpress設定檔

sudo vim /var/www/wordpress/wp-config.php

可以把這幾行刪掉,直接貼上剛剛產生的新key

. . .

define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');
define('NONCE_KEY',        'put your unique phrase here');
define('AUTH_SALT',        'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT',   'put your unique phrase here');
define('NONCE_SALT',       'put your unique phrase here');

. . .

然後將剛剛為wordpress設好的資料庫帳號密碼填入

. . .

define('DB_NAME', 'wordpress');

/** MySQL database username */
define('DB_USER', 'wordpressuser');

/** MySQL database password */
define('DB_PASSWORD', 'password');

. . .

define('FS_METHOD', 'direct');

更改好後,儲存離開

這時你直接打開http://ip_or_your_domain/wordpress

應該就能開始設定你的wordpress

WordPress language selection

但我自己會去把網站root改到wordpress

sudo vim /etc/nginx/sites-available/default
#root /var/www/html;
root /var/www/html/wordpress;

這時候直接到http://ip_or_your_domain就能直接看到wordpress了

PS 記得你的phpmyadmin可能也要移動到root

還沒域名的可以參考這篇HOW TO REGISTER A NEW DOMAIN

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *