Polr 的安裝紀錄

在 goo.gl 被下架之後,就覺得沒有一個比較好用且保有隱私的短網址平台。
(例如想要刪除存在的短網址,往往都要寄信給平台或是付費會員之類的)

在以前看過朋友架過,覺得很酷,最近有空也決定弄一個給自己。

Polr

首先要非常感謝 Jease,重零開始自架Polr短網址 這篇文章的作者。

雖然官方有 document,但有中文的紀錄文還是更平易近人一點。
而且裡面也有提到一個神奇的 bug 解法,不然我自己也不知道要試到什麼時候。

環境

我自己因為架設 blog,所以 Server 本來就有裝 LAMP。
(LAMP = Linux + Apache + MySQL + PHP)

PHP >= 5.5.9,我的 PHP 的版本是 7.2,建議不要用 8.x 的。7.x 也都可以
MySQL 需 >= 5.5。

裝 PHP : sudo apt-get install php php-pdo php-mysql php-mbstring php-tokenizer php-json php-curl -y

裝 Composer : 網路上有很多種裝法,我是直接 apt install composer ...
有點懶人,不知道是不是不好的做法。

Apache2 安裝這邊就不解說了,網路上教學找一下,
附註 : /var/www/ 底下通常是你放你的網頁的地方。
例如 : /var/www/myblog/var/www/mypolr

安裝 polr

我自己是用 Ubuntu 系統,如果不是,建議參考官方 doc 更改過程中一些指令。
https://docs.polrproject.org/en/latest/user-guide/installation/

1
2
3
4
5
6
7
8
9
10
cd /var/www
sudo git clone https://github.com/cydrobolt/polr.git --depth=1

sudo chmod -R 755 polr

# run only if on Ubuntu-based systems
sudo chown -R www-data polr

cd polr
sudo composer install --no-dev -o

再來是一個很重要的,本程式會讀取一些環境變數,他是用 dotenv 的套件管理
所以必須存在 .env 這個檔案。可以用 ls -al 檢查。

1
2
3
4
# 複製範例
sudo cp .env.setup .env
# 給予權限,setup 時 PHP 才能幫你儲存那些設定。
sudo chown www-data .env

配置 mysql

1
sudo mysql -u root -p

如果你是第一次使用,它會讓你設定密碼;如果不是第一次,那就輸入你之前設定的。

進去 sql 後 ...

  • 切記 ! 把下面的 username 改成你想要的帳號名稱,password 改成密碼 !
    那些引號或@都留著,只要替換 username 和 password 成其他英文就好。
1
2
3
4
CREATE DATABASE polr;
GRANT ALL PRIVILEGES on polr.* to 'username'@'localhost' identified by 'password';
FLUSH PRIVILEGES;
exit

後續可能會用到的一些檢查操作 :

1
2
3
4
5
6
7
8
9
/* 看是否有創 user */
SELECT User,Host FROM mysql.user;
/* 看 myusername 這個帳號的權限 */
SHOW GRANTS FOR myusername;

/* 查看所有 DB */
SHOW DATABASES;
/* 查看所有在 db_name 的 table polr 一開始空的是正常*/
SHOW TABLES FROM db_name

配置 Apache 設定

  • 註記 : config 會放在 /etc/apache2/sites-enable/ 裡面。

可以先新增一個 config,我是叫做 polr.conf

1
sudo vim /etc/apache2/sites-enable/polr.conf

裡面的內容

  • ServerName 後面 myshort.com 請改成你想要的域名(Domain Name)
    • Domain 如果你沒有 ... 就 ... 就去申請一個 ... Domain 內也會有需要設置關於 Server IP 的
  • DocumentRoot "/var/www/polr/public" 請改成你實際放置的位置。
    • Polr 的網頁是在 /polr/public,所以假設我 clone 時是這樣放
      /var/www/polr/,DocumentRoot 就是 /var/www/polr/public
    • Directory 後面那串同理。
  • VirtualHost *:80 部分,你同樣可以新增一個是 VirtualHost *:443
    • 這是給 SSL (https) 用的。切記訪問規則也要一起抄進去。
1
2
3
4
5
6
7
8
9
10
11
12
13
<VirtualHost *:80>
ServerName myshort.com
DocumentRoot "/var/www/polr/public"
<Directory "/var/www/polr/public">
Require all granted
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

做完之後

1
sudo systemctl restart apache2

配置 SSL

這邊我不多提,我自己是用 Certbot 來申請,有舊的 SSL,想更新成新的

sudo certbot certonly --cert-name myweb.com --webroot --webroot-path /var/www/ -d myweb.com -d my-shorturl.com

不一定要跟我一樣,這邊只是給予參考。
設置好後記得也要

1
sudo systemctl restart apache2

後續 setup 和 debug

其實後面的設定很簡單,只要訪問 setup 頁面就好。
例如你的短網址網域是 myshort.com,那就訪問 myshort.com/setup

但 --- 總是連 setup 頁面都跑不出來。

我當初遇到的問題 :

  1. SSL 相關設定沒弄好

忘記重啟 Orz

1
sudo systemctl restart apache2
  1. 沒有 cp .env 檔案。

這個是我在看 /var/log/apache2/error.log 看到的。
他說我沒有 .env 檔案所以 php 就無法跑成功。

注意,並不是所有跟 apache 有關的都會被寫到 log
是因為在 VirtualHost: 80 那邊有寫說 ErrorLog ${APACHE_LOG_DIR}/error.log
他才有寫入。

如果你在 VirtualHost: 443 沒寫,80 有寫,你訪問 https 就看不到相關 log。
(我當初的確也犯了這個錯。
我去看 /var/log/apache2/access.log 總找不到跟我短網址網域有關的訪問記錄。)

  1. 沒有把 for port 443 的相關規則複製好複製滿 (Allow from all 等等)

當初 443 port 是我自己打的,所以沒複製到權限之類的問題
導致明明可以 access,但是卻是 web not found (404 error)

後來看了看 conf 才想到 443 忘記開權限了。

  1. 成功進去 setup,也填寫完成,最後卻顯示不明錯誤。

這邊引述 jeasee 的解說 :

在最後面的其他設定這邊有一個坑,當你第一次設定的時候,如果選了關閉註冊,這時候系統就會莫名其妙地產生錯誤,所以在這邊需要先把他設定成有條件式的開放註冊。這可以在後面去修改設定檔把它關閉。

當失敗時,可以去 polr 資料夾底下,那邊有一個.env,文檔中找到APP_DEBUG=false把false改成true然後就可以看到錯誤訊息,當知道錯誤後,從文檔中找到POLR_SETUP_RAN=true後,把true改成false就可以重新設定頁面。

關於如果跑了不明錯誤,也可以直接去把 .env 刪了,重新 cp .env.setup .env
這樣重新 access /setup 就會再跑一次流程 (網頁端可以直接上一頁,理論上填的東西都還在)

而前面提到的申請帳號的權限問題,在這邊也可以直接修改,找到POLR_ALLOW_ACCT_CREATION=1後把1改成0即可完成

我遇到的問題差不多就上面那樣,雖然只有 4 點但是其實搞很久 ...

一些使用上的特性

創建 short url 時,建議都用客製化的方式來創建
(點擊 Link Options)

否則他的 public 規律會是 ... example.com/1example.com/2 ...
這種超無腦的短網址。

換成 secret,也只是變成 example.com/1/wejgooi 這種奇怪的短網址。

理論上可以自己改寫 php 來免除這奇怪的邏輯,
但客製化超潮的阿,以及能客製化短網址後輟這不就是我們想要的嗎 ?
理論上我都會用這個來創建,所以就先不對此 project 加油添醋囉。

另外,這個 url text-input 還有一個缺點 : 就是一定要手打 http://
它的原理是 html 的部分 <input type="url" >
然後透過 bootstrap 去檢查 url 是否符合格式 ( bootstrap 後面好像是用 JQuery 去檢查 ? )

有興趣的可以自己再透過其他方式去檢查。
我嘗試新增 validator 但是貌似有其他更複雜的先後引入問題,暫不處理。

總結

感謝 jeasee 的文章 重零開始自架polr短網址
感謝開發作者 cydrobolt cydrobolt/polr

這個真的是個有趣、介面好看的短網址自架工具。
(不過想要真的短起來的話,還是要特別註冊一個短一點的 domain 會更好 QQ)

End
-----------------------------------

2021.02.05