Polr 的安裝紀錄
在 goo.gl 被下架之後,就覺得沒有一個比較好用且保有隱私的短網址平台。
(例如想要刪除存在的短網址,往往都要寄信給平台或是付費會員之類的)
在以前看過朋友架過,覺得很酷,最近有空也決定弄一個給自己。
首先要非常感謝 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 | cd /var/www |
再來是一個很重要的,本程式會讀取一些環境變數,他是用 dotenv 的套件管理
所以必須存在 .env
這個檔案。可以用 ls -al
檢查。
1 | # 複製範例 |
配置 mysql
1 | sudo mysql -u root -p |
如果你是第一次使用,它會讓你設定密碼;如果不是第一次,那就輸入你之前設定的。
進去 sql 後 ...
- 切記 ! 把下面的
username
改成你想要的帳號名稱,password
改成密碼 !
那些引號或@都留著,只要替換 username 和 password 成其他英文就好。
1 | CREATE DATABASE polr; |
後續可能會用到的一些檢查操作 :
1 | /* 看是否有創 user */ |
配置 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 後面那串同理。
- Polr 的網頁是在
VirtualHost *:80
部分,你同樣可以新增一個是VirtualHost *:443
的- 這是給 SSL (https) 用的。切記訪問規則也要一起抄進去。
1 | <VirtualHost *:80> |
做完之後
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 頁面都跑不出來。
我當初遇到的問題 :
- SSL 相關設定沒弄好
忘記重啟 Orz
1 | sudo systemctl restart apache2 |
- 沒有 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
總找不到跟我短網址網域有關的訪問記錄。)
- 沒有把 for port 443 的相關規則複製好複製滿 (Allow from all 等等)
當初 443 port 是我自己打的,所以沒複製到權限之類的問題
導致明明可以 access,但是卻是 web not found (404 error)
後來看了看 conf 才想到 443 忘記開權限了。
- 成功進去 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/1
、example.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)