WordPress 搬家

忙了一個下午,終於把Wordpress從原本的RespberryPi上搬到目前的Ubuntu開發主機上! 而會花那麼多時間,主要是因為在開發機上,我想要用docker-compose的方式去佈署這個Wordpress,而不是直接安裝Wordpress於主機上。

這邊簡單列一下整個流程與相關的細節

佈署Wrodpress docker-compose

主要可以參考wrodpress 官方提供的docker-compose,就可以在有docker環境下的機器順利執行整套wordpress。

以下是我更改後的wordpress docker-compose.yaml

version: "3.3"
 services:
   db:
     image: mariadb:10.5
     ports:
       - "3306:3306"
     volumes:
       - "./my-docker-volumes/db:/var/lib/mysql"
     environment:
       MYSQL_ROOT_PASSWORD: mariadb-root-password
       MYSQL_DATABASE: wordpress-user
       MYSQL_USER: wordpress-user
       MYSQL_PASSWORD: wordpress-password
     restart: always
  wordpress:
     depends_on:
       - db
     image: wordpress:5.6
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress-user
       WORDPRESS_DB_PASSWORD: wordpress-password
     volumes:
       - "./my-docker-volumes/wordpress:/var/www/html"

這邊所使用的MariaDB與Wordpress版本都是以當初在RespberryPi上的版本為主,主要是希望從RespberryPi回復資料時,不會造成一些資料上的問題。

設定本機的Nginx

這邊一開始設定時,也遇到了些css上的問題,後來參考了這連結以後也順利的解決了!
(原本以為是wp-config.php內部有檔參數要改,所以也花了不少時間在這上面)

設定完成的nginx 設定檔如下:

server {
     listen 80;
     server_name blog.gechen.xyz;
     rewrite ^(.*) https://$host$1 permanent;
 }
 server {
    listen 443 ssl;
    server_name blog.gechen.xyz;
    index index.php;
    ssl_certificate /cert_path/fullchain.pem;
    ssl_certificate_key /cert_path/privkey.pem;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1.1 TLSv1.2;
    client_max_body_size 100M;
    location / {
        include snippets/wp-reverse-proxy.conf;
        proxy_pass http://localhost:8000/;
    }
    location /login {
        try_files $uri $uri/ /wp-login.php; 
    }
 }

wp-reverse-proxy.conf的設定檔如下:

add_header X-Frame-Options SAMEORIGIN;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_hide_header X-Frame-Options;

設定Let’s encrypt certificate

之前的certbot也是放在RespberryPi上,所以也趁這個機會搬到目前的開發主機上,所以直接參考了之前的設定方式,在目前的主機上完成了wildcard certificate的申請。

備份與還原Wordpress database

這個部分,我是直接透過mysqpdump的方式,直接把先前整個wordpress db用下面的指令dump:

mysqldump -u wordpress-user -p --all-databases > backup.sql;

再直接還原到新的wordpress db 上:

mysql -h new-wordpress-ip-address -u wordpress-user -p wordpress-db < backup.sql

備份與還原Wordpress files

這部分目前還是有些問題,我主要是參考這篇文章提到的備份整個wordpress files,但在把備份資料夾從Respberry Pi 搬到開發主機並直接用docker-compose mount到內部資料夾後,佈景主題與外掛都有出了點問題!

看來這部分還需要花點時間了解,要如何完整的備份一個Wordpress 網站 !!!

References

開發用電腦(X300 + 4650G)

這次在雙12時在原價屋下手了一台Asrock x300 + R4650G的主機,最近終於收到了。

Hardware Bug

趁這兩天假日開始安裝Ubuntu 20.04 Desktop,但沒想到開始遇到了些奇怪的現象;像是主機在安裝OS的過程中會自動重開機,或是在Ubuntu運作過程中,遇到了好幾次系統直接卡死(當機)…

這樣來回測了好幾次,一開始還以為買到了機王0rz

還好,在偶然間看到了mobile01上也有其它人也是遇到了類似的問題相關的討論在Reddit上也剛好有看到。

大概結論是,在x300 + AMD 4650G上只有保證可以運行Windows 10,Asrock 團隊應該沒有測試過x300 + 4650G的組合。

Solution

初步的解決方式為:

(1) Bios 設定記憶體用3000Mhz + Ubuntu 20.04 or Ubuntu 20.10

(2) Bios 設定記憶體用3200Mhz + Ubuntu 20.10 (還是遇到了死機)

接下來再來跑個幾天來看看,系統穩定性如何!?

—————————————————–

目前看起來是記憶體設定在 3000Mhz是最穩定的

在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";