打造自己的 Pastebin 吧 - PrivateBin

前言

以前,我很常使用 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

檢視成果

現在前往你的網站,你應該可以看到他正在運作囉!

001.jpg