Raspberry Pi 安裝 WordPress 教學

WordPress 是一套自由的網站系統,可以安裝在自己的伺服器,以下是我在 Raspberry Pi 上安裝 WordPress 的記錄。 請先安裝好 MariaDB / MySQL、PHP 7.3 以上、Caddy。 到官網複製壓縮檔連結(我偏好 tar.gz) cd Downloads wget https://wordpress.org/latest.tar.gz sudo tar -zxvf latest.tar.gz -C /var/www sudo chown -R www-data:www-data /var/www/wordpress 接著建立 MySQL 使用者: sudo mysql > create database wordpress; > create user 'wordpress'@'localhost' identified by 'password'; > grant all privileges on wordpress . * to 'wordpress'@'localhost'; > flush privileges; 接下來將域名綁定到 Web Server,這邊我們使用 Caddy yourhostname.com { root /var/www/wordpress gzip fastcgi / /var/run/php/php7....

May 17, 2020 · 1 分钟 · wancat

在 Raspberry Pi 安裝 Nextcloud

Nextcloud 是一套自由的雲端硬碟系統,可以讓你自己架設像 Google Drive、One Drive 一般的雲端硬碟,將資料掌握在自己手中,本篇紀錄如何在樹梅派安裝 Nextcloud。 安裝 到官方網站下載壓縮檔 sudo unzip -d /var/www nextcloud-18.0.0.zip sudo chown www-data:www-data /var/www/nextcloud PHP 安裝 PHP 依賴模組 sudo apt install php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip 參閱 官方文件 檢查依賴的 PHP 模組,或是擴充功能像是 smb、ldap 等等。 MySQL 建立 Nextcloud 的資料庫和使用者 $ sudo mysql > create database nextcloud; > create user 'nextcloud'@'localhost' identified by 'password'; > grant all privileges on nextcloud . * to 'nextcloud'@'localhost'; > flush privileges; Caddy 複製 Caddy 提供的 Nextcloud Caddyfile 到 /etc/caddy/Caddyfile,接著修改成你自己的域名、PHP 路徑。我的設定檔如下:...

February 11, 2020 · 3 分钟 · wancat

用 TOTP 擺脫簡訊驗證碼:安全好用的兩步驟驗證

兩步驟驗證 隨著數位身份在生活中的影響力愈來愈大,只靠著一組密碼來保護我們的帳戶已經不夠安全,而且記密碼實在是違反人腦天性的行為,因此大部分人總是使用重複的、好記的脆弱密碼。要解決這個問題,除了使用密碼管理工具來幫你記密碼,還可以透過設定兩步驟驗證(2FA:Two-Factor Authentication),大大提昇帳戶的安全性。 兩步驟驗證就是在密碼之外,多用一個資訊來驗證你是本人,主流的作法有像 Email、簡訊驗證信,但用過的人可能都會覺得登入時要開信箱收信很麻煩,信箱也會被這些信件給弄亂,更別提當人在國外時,簡訊收不到害你無法登入。 今天要介紹的 TOTP: Time-based One-Time Password algorithm,就是一種公開的標準,讓你透過手機上的 APP 產生一組 6 位數的一次性驗證碼進行登入,而且在沒有網路的情況下還能使用! TOTP 如何運作? TOTP 的概念,就是網站與你事先約定好一組金鑰,並以當下的時間作為參數,運算出一個雜湊值,並取最後 6 位數作為一次性密碼。 然而如果網站和使用者的時間不同的話,就無法計算出相同的結果,因此通常會以 30 秒作為一個單位,來避免使用者與網站的時間差。網站為了良好的使用者體驗,通常也會允許前一次的一次性密碼。 TOTP 的優點 TOTP 它是一個公開標準,你不需要依賴單一企業或組織,各種客戶端都能相容;它的安全性基於密碼學,而非第三方機構的信用;它是去中心化驗證,整個驗證流程只有要驗證身份的雙方而已。 Google 可以讀你的 Gmail,簡訊也可以被政府或通訊業者攔截,然而 TOTP 不需要依賴中介機構,甚至在離線的情況下也仍然可用。 同時對於服務提供者而言,TOTP 也很容易實做,不需要花錢去發簡訊或是寄 Email 被當成垃圾郵件,也不需要跟第三方機構申請,是個省錢又安全的好方法。 開始使用 TOTP 儘管目前懂得使用 TOTP 的使用者並不多,但其實已經有相當多網站支持以 TOTP 作為驗證方式,例如 Google、Facebook、Apple、Amazon、GitHub、PayPal 等,我管理伺服器需要用到的 CloudFlare、Linode、Porkbun 也都有設定 TOTP 來提高安全性。 開始使用的第一步是下載一個 TOTP 的應用程式,有非常多的選項,我自己使用的是 Authy,界面簡單易用,提供加密的雲端備份,此外還有 Google Authenticator、Microsoft Authenticator,自由軟體則有 Red Hat 開發的 FreeOTP,先前在密碼管理工具提到的 Bitwarden 的付費版也有提供 TOTP 的功能。 安裝好驗證器後,到你要登入的網站或 APP 的帳號設定中,啟動兩步驟驗證,在不同網站中,可能會以「驗證應用程式」、「谷歌驗證器」、「代碼產生器」等名稱出現,但背後都是 TOTP 這套標準,流程也很簡單,網站會將金鑰以 QR Code 的方式顯示,打開手機上的驗證器程式掃描就可以加入帳號,並輸入產生的一次性密碼供網站確認,就可以完成綁定。網站若是在手機上,則可以用「複製金鑰」的方式來手動輸入金鑰。...

February 7, 2020 · 1 分钟 · wancat

Caddy 安裝教學

Caddy 是一個由 Go 撰寫的 Web Server,其主要賣點是簡單的設定檔,適合在開發環境中快速架設,還有自動 HTTPS 的功能,相當方便。 我之前在 Linode 上就使用 Caddy,覺得體驗相當好,因此這次也選擇使用它。 安裝 到 Caddy 網站的下載頁面,複製 One-step installer script 就可以一鍵安裝。 curl https://getcaddy.com | bash -s personal 如果是要拿來當開發環境中的 Web Server,這樣就足夠了,但我要讓它在背景執行,因此還需要設定好它的 systemd。 Systemd 請參考官方的安裝教學,照著做就行了,比較容易踩雷的是取得憑證的部份,首先 Let’s Encrypt 會對你做 DNS challenge,所以如果是使用 CloudFlare 的,要把 Proxy 關掉(雲朵)。再來是寫設定檔,Caddy 的設定檔相當簡單,不過用 systemd 就是很難除錯(看 log 麻煩),所以建議先自己用 sudo caddy -conf /etc/caddy/Caddy 測試設定檔,等到沒問題再用 systemd 開。 設定檔範例 以下是我網站使用的設定檔 matomo.wancat.cc { root /var/www/matomo gzip fastcgi / /var/run/php/php7.3-fpm.sock php { index index.php } } lincalvino.me/narcissism { root /var/www/narcissism } lincalvino....

February 4, 2020 · 1 分钟 · wancat

CloudFlare 設定 DDNS 教學

最近剛入手一個 Raspberry Pi,用來作為一個省電的伺服器,本來困擾自己家裡的固定 IP 已經給了其他台伺服器,但找到方法用 CloudFlare 實現 DDNS。 CloudFlare DDNS CloudFlare 本身沒有官方的 DDNS 支援,但可以用 CloudFlare API 實做,我找了一個別人做好的 CloudFlare-ddns,折騰一會兒就設定好了。 首先安裝 cloudflare-ddns 和其依賴,然後以我要設定 pi.wancat.cc 為例,建立 site_pi.yaml 設定檔,填入以下內容: %YAML 1.2 # CloudFlare DDNS updater script config. --- # CloudFlare API key # You can find this under Account > My account after logging into CloudFlare. cf_key: 'your key' # Email address for your CloudFlare account. cf_email: 'your email' # Domain you're using CloudFlare to manage....

February 4, 2020 · 2 分钟 · wancat

Google Analytics 替代方案 Matomo 安裝教學

因為實在不想再讓 Google 拿到資料了,所以我到 No More Google 網站上找 Google Analytics 的替代方案,第一名就是 Matomo。 Matomo 是一個自架的流量分析程式,是自由軟體,也有提供付費的 Cloud hosting 服務。我在試用後覺得還不錯,就決定自行在 Raspberry Pi 上安裝。因為是自架的,所以資料都在自己手上,不會被 Google 拿去利用。 安裝方式參考官方文件。 環境需要 PHP、MySQL or MariaDB PHP 安裝: sudo apt-get install php7.0 php7.0-curl php7.0-gd php7.0-cli mysql-server php7.0-mysql php-xml php7.0-mbstring 資料庫我比較偏好社群維護的 MariaDB: sudo apt install mariadb-server sudo mysql_secure_installation 建議在執行 mysql_secure_installation 來強化安全性。 由於我使用 Caddy,所以 Caddyfile 中要加入以下程式: matomo.wancat.cc { root /var/www/matomo # 換成你的 matomo 位置 gzip fastcgi / /var/run/php/php7.3-fpm.sock php { index index.php } } 然後打開網頁,就可以看到安裝程式了。接著要幫 Matomo 設定好 SQL User 和 Database,...

February 4, 2020 · 1 分钟 · wancat

Hugo 安裝 LikeCoin 教學

取代 Hexo 我使用 Hexo 作為靜態網站生成器已經一年半,然而它有些我越來越難忍受的缺點,加上認識了由 Go 寫成的 Hugo,我在使用 Hugo 建立了幾個網站作為練習後,決定將自己的部落格改到 Hugo。 Hexo 仍然是一套很棒的工具,我主要是覺得它每次執行都要等大約十秒的時間,讓我很不耐煩;另外它的 server 功能有些缺陷,有時候改變內容會讓它變成 Untitled Post,不過我也沒有很認真的想要解決就是了。 Hugo 是 Go 寫的工具,所以是編譯好的,效能很高,server 功能也很棒,content 的管理更有彈性,整個網站也有更高的配置空間,但使用難度較高,每個 theme 的差異度很大,必須依據使用的 theme 去調整。 我覺得對新手來說 Hexo 是比較好的選擇,一開始就有預設 theme,整個架構也比較固定,內建的 deploy 指令能支援大部分平台,但如果想要有更高的自訂化,我覺得 Hugo 比較合適。 Theme 這次我選了 CleanWhite 這套主題,功能強大,設計的很好,非常感謝作者 Huabing Zhao。因為 Hexo 跟 Hugo 都是使用 Markdown 作為文章格式,連標頭格式都差不多,所以基本上是無痛轉移,只有圖片的部份需要重新插入,因為 Hexo 的「資產資料夾」是使用其特殊語法,所以轉移後需要自己手動改成標準的格式。 插入 LikeCoin Hugo 可以使用自訂 Layout 的方式,在不改變主題的情況下改變網站設計,我透過這個方式在每個文章下放了 LikeButton。 我們先 overwrite 文章的模板,將 theme 的 layouts 資料夾複製到專案目錄下。 cp -r theme/YOUR_THEME/layouts/ . Hugo 中的 Partial 功能,可以讓你建立小模板,嵌入在頁面中。參考文件。在 layouts 的 partials 資料夾建立 likecoin....

February 3, 2020 · 2 分钟 · wancat

ORM 入門:如何區分 ORM 中的關聯

最近初次接觸 ORM——Object-relational mapping——這個強大的工具,但是為其中的關聯而苦惱不已。在仔細研究後終於了解其差異,本篇文章透過一個圖書館專案的實例,使用 Golang + GORM 來實做,並輔以 SQL 做說明,讓已經學會 SQL 而想要了解 ORM 的人真的「懂」如何設計 Relation。 什麼時候會用到 Relation? ORM 中的 Relation 就是相當於 SQL 中的各種 Join,用來將不同表格中的資料串起。由於 ORM 是用物件,所以如果未來有關聯到其他表格的需求,必須在物件設計時就包含進來。 來定義需求吧!我們今天假設情境是要定義一個圖書館的資料庫,那我們會有編目資料 Book(書的資料)、館藏資料 Item(書的實體),作者資料 Author,出版社資料 Publisher。書名、ISBN 等等跟關聯沒有關係的就不放入。 我們先不要討論 gorm 要怎麼寫,先把要取得的資料擺出來。 type Book struct { Items []Item Authors []Author Publisher Publisher } type Item struct { Book Book } type Author struct { Works []Book } type Publisher struct { Publication []Book } 我們要讓所有的 structure 都能夠參考到依賴自己的對象:作者必須參考到作品集、出版社要能參考出版品、分類要能找出其中的所有書籍。 接下來我們一個一個釐清物件之間的關聯關係,來設計 ORM 吧!...

July 26, 2019 · 3 分钟 · wancat