為WordPress 升級 https

申請Letsencrypt 憑證

由於這邊是使用ubuntu 20.04,所以會直接使用下面的指令來安裝certbot

sudo apt install certbot python3-certbot-nginx

接下來,再使用certbot來申請由Letsencrypt發放的憑證。

下面的指令,我們透過certbot 申請了一組wildcard certificate,其中為了證明這個網域是我們所有的,我們必須完成一組ACME挑戰!

sudo certbot certonly --preferred-challenges dns --manual  -d '*.gechen.xyz' --server https://acme-v02.api.letsencrypt.org/directory

在完執行完上述的指令以後,terminal上應該會出現一串字串,而且我們要做就是將那字串新增至DNS TXT Record,並在設定TXT Record設定完成以後,繼續certbot的申請流程。

一切順利的話,certbot 會將申請到的憑證安裝至指定的路徑下,並且有三個月的效期,三個月後我們還得再重新申請效期的延長

/etc/letsencrypt/live/gechen.xyz/

升級Wordpress以使用https

接下來要做的更改Nginx的設定檔以使用我們新申請的憑證

server {
     listen 80;
     listen [::]:80;
     server_name blog.gechen.xyz;
     rewrite ^(.*) https://$host$1 permanent;
 }

 server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name blog.gechen.xyz;
    index  index.php; 
    root /var/www/html/wordpress; 
    ssl_certificate /etc/letsencrypt/live/gechen.xyz/fullchain.pem;  
    ssl_certificate_key /etc/letsencrypt/live/gechen.xyz/privkey.pem; 
    ssl_session_timeout 5m; 
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
    # ssl_trusted_certificate /etc/letsencrypt/live/gechen.xyz/fullchain.pem;
   client_max_body_size 100M; 
    error_log /var/log/nginx/secure_ssl_error.log; 
    access_log /var/log/nginx/secure_ssl_access.log; 
    location / {
      try_files $uri $uri/ /index.php?$args; 
    } 
    location ~ \.php$ {     
        include snippets/fastcgi-php.conf;     
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;     
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;     
        include fastcgi_params;
  }
 }

更新Wordpress的網址

這邊可以直接參考之前設定Wordpress的相關步驟來設定新的https的網址

到這邊我們就升級完成了

在Respberry Pi Ubuntu上安裝wordpress

記錄一下整個安裝的過程

安裝php與相關的套件

sudo add-apt-repository ppa:deadsnakes/ppa 
sudo apt-get update
sudo apt -y install php7.4 php7.4-fpm php-mysql

安裝 Nginx

sudo apt-get install nginx

安裝 MariaDB與設定 MariaDB

sudo apt-get install mariadb-server
sudo mysql_secure_installation

mysql -u root -h localhost -p

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MY_NEW_PASSWORD');


CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'newpassword';

CREATE DATABASE wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'localhost'
FLUSH PRIVILEGES;

安裝wordpress

wget -c http://wordpress.org/latest.tar.gz
tar -xzvf latest.tar.gz
sudo cp -R wordpress/ /var/www/html/wordpress
sudo chmod -R 775 /var/www/html/wordpress
sudo mv wp-config-sample.php wp-config.php

設定Wordpress要連接的資料庫

編輯wp-config.php 檔案以後再更新下面的資訊

// ** MySQL settings - You can get this info from your web host ** //
 /** The name of the database for WordPress */
 define( 'DB_NAME', 'the_db_name' );
 /** MySQL database username */
 define( 'DB_USER', 'the_db_user' );
 /** MySQL database password */
 define( 'DB_PASSWORD', 'db_password );
 /** MySQL hostname */
 define( 'DB_HOST', 'localhost' );

設定Nginx

在安裝好nginx以後,可以先到/etc/nginx/sites-enabled/中將預設所有目前服務的http 網站移除,然後將wordpress的設定檔 wordpress.conf 加入到/etc/nginx/conf.d/ 這個資料夾下

server {
    listen 80;
    server_name blog.gechen.xyz; 
    index  index.php; 
    root /var/www/html/wordpress; 
    client_max_body_size 100M; 
    error_log /var/log/nginx/wordpress_error.log; 
    access_log /var/log/nginx/wordpress_access.log; 
    location / {     
        try_files $uri $uri/ /index.php?$args; 
    } 
    location ~ \.php$ {     
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;     
        fastcgi_param   
        SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
 }

關閉Apache

/etc/init.d/apache2 stop

WordPress 網址

最後在設定中,還需要設定目前網站的位扯;而這個部分可以從wordpress 的管理界面中設定,或者是透過直接設定對應的DB 資料。

如果是透過DB 設定的話,則可以透過以下的SQL 來更新:

update wp_options set option_value = "http://blog.gechen.xyz" where option_name = "home" OR option_name = "siteurl";