前言
以前,我很常使用 Pastebin 這個網站,我可以很簡單的在上面保存程式碼,並分享給其他人看。隨著需求提升,有人向我提出了某個請求,讓我添加在專案裡面,我就把想法動到 Pastebin 上。但是我使用的需求量可能會很大,因此正在尋找一個可以自架類似平台的專案。
在一次巧合之下,我在 Github 上偶然看到了 PrivateBin 這個專案,他是使用 PHP 撰寫的,可以自己架設,具有一定的加密及其他功能。這篇文章就是記錄下他的安裝方式。
安裝方式
這次我會使用 Debian 12 的環境進行安裝,我們必須要先安裝相關的依賴套件。
sudo apt-get install -y nginx nginx-extras php-fpm php-curl php-mysql php-gd
我的習慣會將網頁目錄安裝在 /var/www
底下,我們前往目錄並下載 PrivateBin 的 Source Code。
cd /var/www && wget https://github.com/PrivateBin/PrivateBin/archive/refs/tags/1.7.4.tar.gz
解壓縮並重新命名他。
tar zxvf 1.7.4.tar.gz && mv PrivateBin-1.7.4 privatebin
資料庫設定
若要使用 PrivateBin,我們也會需要一個資料庫,你可以參考 這篇文章 安裝一個 MySQL,並設定新增一個資料庫及使用者,這在該篇文章都有提到。
而這邊,我建立了資料庫名為 privatebin
,並有一個帳號 pbin
擁有這個資料庫的權限。接下來我們必須要對這個資料庫建立一些資料表如下(內容可能隨著版本更新有變化,應可以到 這裡 檢查最新版):
CREATE TABLE privatebin_paste (
dataid CHAR(16) NOT NULL,
data MEDIUMBLOB,
expiredate INT,
opendiscussion INT,
burnafterreading INT,
meta TEXT,
attachment MEDIUMBLOB,
attachmentname BLOB,
PRIMARY KEY (dataid)
);
CREATE TABLE privatebin_comment (
dataid CHAR(16),
pasteid CHAR(16),
parentid CHAR(16),
data BLOB,
nickname BLOB,
vizhash BLOB,
postdate INT,
PRIMARY KEY (dataid)
);
CREATE INDEX parent ON privatebin_comment(pasteid);
CREATE TABLE privatebin_config (
id CHAR(16) NOT NULL, value TEXT, PRIMARY KEY (id)
);
INSERT INTO privatebin_config VALUES('VERSION', '1.7.4');
完成後,保存退出就行囉。
設定網頁伺服器
這裡,我們使用 Nginx 來設定這個網站,前往 /etc/nginx/sites-enabled
並新增一個檔案 privatebin
。
cd /etc/nginx/sites-enabled && vim privatebin
貼上以下內容並做適當剛改。
server {
listen 80;
listen [::]:80;
root /var/www/privatebin;
index index.php;
server_name your.domain.com;
server_tokens off;
location / {
try_files $uri $uri/ =404;
}
location ~ \.js$ {
add_header Cache-Control "no-store";
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
}
}
完成後,使用 nginx -t
驗證 config 有沒有錯誤,接著使用 systemctl restart nginx
重啟就好囉。
設定 php.ini
由於這個專案會使用到 PDO,所以我們必須要啟用 php-fpm
的功能。
前往 /etc/php/8.2/fpm
編輯 php.ini
檔案。
cd /etc/php/8.2/fpm && vim php.ini
找到 extension 的部分,把以下元件取消註解掉。
extension=gd
extension=mysqli
extension=pdo_mysql
保存後,使用 systemctl restart php8.2-fpm
重啟他。
設定 PrivateBin 參數
在這個專案之中,我們必須給他一些設定檔。在 /var/www/privatebin/cfg
底下,你應該會看到一個檔案叫做 conf.sample.php
,我們複製一份,並將他改名叫 conf.php
。
sudo cp conf.sample.php conf.php
接著編輯 conf.php
檔案。
sudo vim conf.php
你可以更改所有參數成你的喜好,但我只要提資料庫設定的部分。在下面有一個 Database 的部分,你必須把他更新成你的資料庫設定,像是以下這樣。
[model]
; example of DB configuration for MySQL
class = Database
[model_options]
dsn = "mysql:host=localhost;dbname=privatebin;charset=UTF8"
tbl = "privatebin_" ; table prefix
usr = "pbin"
pwd = "123456"
opt[12] = true ; PDO::ATTR_PERSISTENT
檢視成果
現在前往你的網站,你應該可以看到他正在運作囉!