YOURLS 縮址服務 - Debian
BUBU 使用 BookStack 服務在 po 連接文章給社群朋友們有點過長,想說使用短址服務來給社群朋友們使用,目前有比較常使用到 ptt 縮址服務產出來的連接使用,但是這樣子比較不太方便,想要了解目前給的連接服務被點來看機率有多高,在尋找的時候剛好有一個套件 YOURLS 服務有開源功能還滿其全的可以剛好又可以自行架設,記錄一下如何安裝及基本使用
2024.06.03 系統修改為 Debian 系統,PHP 版本會改用 8.3 版
運行環境
環境都是在 「Proxmox VE 」 虛擬系統上架設,都是以 「 LXC 」模式為主,除非有特殊狀況會告知使用 「 VM 」 模式
- 系統環境: Debian 12
- Web 服務: Nginx 1.26
- PHP 服務: PHP 8.3
- 資料庫服務: MariaDB 10.11
安裝過程
WEB 服務安裝
請直接參考本站另一篇獨立安裝 Nginx 服務 Nginx 模組擴充 - Debian \ Ubuntu
資料庫服務
請直接參考本站另一篇獨立安裝 MariaDB 服務 在 Debian 系統上安裝 MariaDB
- 建立 Yourls 的資料表庫
# 登入資料庫裡設定資表及權限
mariadb -u root -p
# 在資料庫裡新增yourls表單
CREATE DATABASE IF NOT EXISTS yourls DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON yourls.* TO 'yourls_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION; #密碼請自己輸入好記錄的密碼
FLUSH PRIVILEGES;
quit;
PHP 服務設定
- 下載 GPG 密鑰
sudo apt update
sudo apt install -y lsb-release ca-certificates apt-transport-https software-properties-common
- 新增 PHP 來源庫
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list
- 導入金鑰
wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -
- PHP 套件安裝
apt install gcc curl php8.3 php8.3-{common,mysqlnd,pdo,xml,mbstring,fpm,mysql,gd,cli,opcache,curl,ldap,odbc,xmlrpc,soap,intl,zip,bcmath} -y
- 安裝好 PHP 修改
php.ini
設定檔
# 設定時區
sed -i "s|^;date.timezone =.*$|date.timezone = Asia/Taipei|" /etc/php/8.3/fpm/php.ini
sed -i "s|^;date.timezone =.*$|date.timezone = Asia/Taipei|" /etc/php/8.3/cli/php.ini
# 設定安全性
sed -i "s|^;cgi.fix_pathinfo=1.*$|cgi.fix_pathinfo=0|" /etc/php/8.3/fpm/php.ini
sed -i "s|^;cgi.fix_pathinfo=1.*$|cgi.fix_pathinfo=0|" /etc/php/8.3/cli/php.ini
- 重啟及開機自動啟動 php-fpm 服務
systemctl start php8.3-fpm && systemctl enable php8.3-fpm
or
systemctl enable --now php8.3-fpm
YOURLS 服務
- 建立目錄
mkdir -p /var/www/html
- 到 web 服務目錄下將 YOURLS 檔案下載
cd /var/www/html/
# 用 git 方式下載
git clone https://github.com/YOURLS/YOURLS
# 修改名稱
mv YOURLS/ yourls/
- yourls 設定檔
cd /var/www/html/yourls/user/
# 修改設定檔
cp config-sample.php config.php
vim config.php
- 修改內容如下
# 資料庫連接
/** MySQL database username */
define( 'YOURLS_DB_USER', 'your db user name' );
/** MySQL database password */
define( 'YOURLS_DB_PASS', 'your db password' );
/** The name of the database for YOURLS */
define( 'YOURLS_DB_NAME', 'yourls' );
/** MySQL hostname.
** If using a non standard port, specify it like 'hostname:port', eg. 'localhost:9999' or '127.0.0.1:666' */
define( 'YOURLS_DB_HOST', 'localhost' );
# 修改成該站台的連線網域
/** YOURLS installation URL -- all lowercase, no trailing slash at the end.
** If you define it to "http://sho.rt", don't use "http://www.sho.rt" in your browser (and vice-versa) */
define( 'YOURLS_SITE', 'http://your-own-domain-here.com' );
# 管理者或其他使用者的帳號及密碼
/** Username(s) and password(s) allowed to access the site. Passwords either in plain text or as encrypted hashes
** YOURLS will auto encrypt plain text passwords in this file
** Read http://yourls.org/userpassword for more information */
$yourls_user_passwords = array(
'username' => 'password', // username 修改成管理者帳號、password 修改成管理者密碼
// 'username2' => 'password2',
// You can have one or more 'login'=>'password' lines
);
- 權限設定
chown -R www-data:www-data /var/www/html/yourls/
Nginx 設定檔
- 服務設定檔
vim /etc/nginx/conf.d/xxx.conf
server {
# 這個主機的 Port
listen 80;
# 這個主機的名稱
server_name 網域網名;
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
#
server {
# 使用 https 和 http/2 協定
listen 443 ssl;
http2 on;
# 上述的 IPv6 方式
listen [::]:443 ssl;
server_name 網域網名;
root /var/www/html/yourls;
#
# certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
#
# SSL 憑證證書路徑
ssl_certificate /etc/nginx/ssl/fullchain.pem;
# 私鑰路徑
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
# 緩存有效期
ssl_session_timeout 1d;
# 緩存憑證類型和大小
ssl_session_cache shared:SSL:50m;
#
# intermediate configuration. tweak to your needs.
#
# 使用的加密協定
ssl_protocols TLSv1.3 TLSv1.2;
# 加密演算法,越前面的優先級越高
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
# 交握過程使用 Server 的首選加演算法,這裡使用 Client 為首選
ssl_prefer_server_ciphers on;
#
# HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
#
# 增加 http header
add_header Strict-Transport-Security max-age=63072000;
#
access_log /var/log/nginx/ys_access.log;
error_log /var/log/nginx/ys_error.log;
#
client_max_body_size 1G;
fastcgi_buffers 64 4K;
#
# html 檔
location / {
# 使用「瀏覽器」瀏覽根目錄時,未指定檔名時預設使用的檔案
index index.php index.html index.htm;
autoindex off;
try_files $uri $uri/ /yourls-loader.php;
}
location = /50x.html {
root /usr/share/nginx/html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
# php 檔
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
try_files $uri =404;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}
#
location ~* \.(?:ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
expires 30d;
log_not_found off;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
# 發生 404 指定導向哪個網頁
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
# location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
#
}
- 反代理設定檔
server {
listen 80;
server_name 網域名稱;
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
#
server {
# 使用 https 和 http/2 協定
listen 443 ssl http2;
# 上述的 IPv6 方式
listen [::]:443 ssl http2;
server_name 網域名稱;
#
# certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
#
# SSL 憑證證書路徑
ssl_certificate /etc/nginx/ssl/fullchain.pem;
# 私鑰路徑
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
# 緩存有效期
ssl_session_timeout 1d;
# 緩存憑證類型和大小
ssl_session_cache shared:SSL:50m;
#
# intermediate configuration. tweak to your needs.
#
# 使用的加密協定
ssl_protocols TLSv1.3 TLSv1.2;
# 加密演算法,越前面的優先級越高
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
# 交握過程使用 Server 的首選加演算法,這裡使用 Client 為首選
ssl_prefer_server_ciphers on;
#
access_log /var/log/nginx/ys_access.log;
error_log /var/log/nginx/ys_error.log;
#
location / {
proxy_pass https://服務主機;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
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 https;
proxy_redirect off;
proxy_pass_header Authorization;
}
#
location ~* \.(?:ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
proxy_pass https://服務主機;
}
#
location /nginx-status {
stub_status on;
access_log off;
# 允許看到的 IP
allow 127.0.0.1;
deny all;
}
}
YOURLS 登入方式
- 開啟瀏灠器
http://主機名稱/admin
,按下安裝 YOURLS
- 這是服務安裝完成並且已建立好資料庫的資訊,按下 YOURLS 管理頁面
- 登入成功的畫面
- 由於 YOURLS 沒有 index.php 檔,需要手動增加,不然會出現404錯誤
<php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://yourdomain.com/admin");
>
- 或者在 Nginx 設定檔上直接指向到 admin 目錄下
YOURLS 中文化
- 因預設是中文,BUBU 我有 GOOGLE 一下有到有好心人放在 GitHub 上翻成繁體中文,登出再登入就中文化了,下載方式如下
cd ~
# 下載中文檔
wget https://github.com/alexclassroom/YOURLS-zh_TW/archive/refs/tags/v1.9.2.tar.gz
# 解壓縮
tar -zxvf v1.9.2.tar.gz
# 語系檔移動到 YOURLS 語系目錄下
cd YOURLS-zh_TW-1.9.2/
mv zh_TW.mo /var/www/html/yourls/user/languages
mv zh_TW.po /var/www/html/yourls/user/languages
- 修改 yourls 設定檔
vim /var/www/html/yourls/user/config.php
# 修改前
/** YOURLS language
** Change this setting to use a translation file for your language, instead of the default English.
** That translation file (a .mo file) must be installed in the user/language directory.
** See http://yourls.org/translations for more information */
define( 'YOURLS_LANG', ' ' );
# 修改後
/** YOURLS language
** Change this setting to use a translation file for your language, instead of the default English.
** That translation file (a .mo file) must be installed in the user/language directory.
** See http://yourls.org/translations for more information */
define( 'YOURLS_LANG', 'zh_TW' );
YOURLS 外掛使用
Random ShortURLs
- 在管理外掛裡面已有
Random ShortURLs
隨機產生short URL link
直接啟用該外掛
YOURLS-U-SRV
- 在安裝 QR-Code 之前要先安裝 usrv 服務 官方 Github
wget https://github.com/joshp23/YOURLS-U-SRV/archive/refs/tags/2.3.4.tar.gz
- 解壓剛剛下載好檔案
tar -zxvf 2.3.4.tar.gz
- 將解壓出來的 usrv 目錄移到 Yourls 目錄下
cd YOURLS-U-SRV-2.3.4
mv usrv /var/www/html/yourls/user/plugins/
- 移動過去後到後台的管理外掛去啟動該服務
- 設定
usrv
服務
- 選擇 config
- 設定快取存放地方,這個可以自動指定位置
- 設定權限
chown -R www-data:www-data /var/www/html/yourls/
YOURLS-IQRCodes
- 安裝 'IQRCodes' 服務 官方GitHub
wget https://github.com/joshp23/YOURLS-IQRCodes/archive/refs/tags/2.3.1.tar.gz
- 解壓該套件
tar -zxvf 2.3.1.tar.gz
- 解壓後套件移動到 Yourls 目錄下
cd YOURLS-IQRCodes-2.3.1
mv iqrcodes /var/www/html/yourls/user/plugins/
- 用超連結或複製檔案
qrchk.php
服務放到pages
目錄下
Symlink:
ln -s user/plugins/iqrcodes/assets/qrchk.php user/pages/qrchk.php
Copy:
cp user/plugins/iqrcodes/assets/qrchk.php user/pages/qrchk.php
- 因我是用
nginx
web 服務運行,所以還要修改一段指令,不然產生出來會無法正常顯示圖片
# 修改前
try_files $uri $uri/ /yourls-loader.php;
#修改後
if (!-e $request_filename){ rewrite ^(.+)$ /yourls-loader.php?q=$1 last; }
- 移動完之後到管理後台啟動該服
- 產生舊的連結 QR-Code 出來,在 Run 要打勾
- 顯示結果如下
- 設定權限
chown -R www-data:www-data /var/www/html/yourls/
參考相關網頁
- 建立自己的短網址服務 - 使用 YOURLS - 在 CentOS 環境
- YOURLS 你也可以提供短網址服務,自架短網址轉址伺服器 && 安裝 Random Keywords 隨機 short URL
- Centos+Nginx+HTTPS安装 YOURLS v 1.7.2 个人汉化版
- How to Install YOURLS on CentOS 7
- 使用 yourls 专属自己的短域名服务
- 官方 WiKi
- 官方 github
- 官方網站
- 『教程』YOURLS – 免费开源的短链接程序/中文界面/支持插件/API
- YOURLS Ver.1.7+ 繁體中文語言包
- YOURLS 縮址服務台灣中文語言套件