Xây dựng ứng dụng highlight code giống Pastebin với LenPaste
Giới thiệu
LenPaste là một giải pháp thay thế Pastebin với tính năng highligh code và các ghi chú cho phép tự lưu trữ trên server của riêng bạn! Ưu điểm:
- Self Hosted - tự lưu trữ.
- Miễn phí, mã nguồn mở.
- Có API riêng.
Yêu cầu hệ thống
- Ubuntu Server.
- Nginx để làm Reverse Proxy.
- Tên miền với chứng chỉ SSL đã được lấy miễn phí từ Let's Encrypt.
Tiến hành cài đặt
Cài đặt các gói cần thiết
sudo apt update
sudo apt -y install git make gcc golang
Tải về và tiến hành build
git clone https://git.lcomrade.su/root/lenpaste.git
cd ./lenpaste/
git checkout vX.X
make
Trong đó vX.X là phiên bản của LenPaste, phiên bản v1.3 là phiên bản ở thời điểm mình cài.
Sau khi hoàn thành, file lenpaste được build ra sẽ ở thư mục /disk/bin. Kiểm tra thử xem chạy được chưa:
./lenpaste
Nếu hiện ra kết quả flag is not set: -db-source tức là đã build được rồi đó. Tiếp theo, chúng ta sẽ cho LenPaste chạy cùng hệ thống thông qua systemd và truy cập qua Tên miền.
Tạo thư mục /opt/lenspate để lưu ứng dụng, tránh để ở thư mục home/user
sudo mkdir /opt/lenspate
Copy file lenpaste đã build được về thư mục đó
sudo cp /dist/bin/lenpaste /opt/lenpaste
Tạo file cấu hình cho systemd
sudo nano /etc/systemd/system/lenpaste.service
và nhập vào nội dung sau
[Unit]
Description=LenPaste
[Service]
Type=simple
WorkingDirectory=/opt/lenpaste
ExecStart=/opt/lenpaste/lenpaste -address :8181 -db-driver sqlite3 -db-source sqlite
[Install]
WantedBy=multi-user.target
Trong đó phần :8181 là chỉ thị cổng để chạy ứng dụng, thay đổi tùy ý bạn.
Lưu file lại, bật và khởi động dịch vụ lenpaste.service lên
sudo systemctl enable --now lenpaste.service
sudo systemctl start lenpaste.service
Kiểm tra xem chạy chuẩn chưa.
systemctl status lenpaste
Nếu thế này là được rồi đó
Tiếp theo, tạo file cấu hình cho Nginx để truy cập thông qua Tên miền
sudo nano /etc/nginx/sites-available/domain.com
và nhập vào nội dung sau
server {
listen 80;
server_name domain.com;
return 301 https://$server_name$request_uri;
}
server {
server_name domain.com;
listen 443 ssl http2;
access_log /var/log/nginx/domain.com.access.log;
error_log /var/log/nginx/domain.com.error.log;
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
client_max_body_size 20M;
location ~* \.(?:ico|css|js|gif|jpe?g|png|ttf|woff|)$ {
access_log off;
expires 30d;
add_header Pragma public;
add_header Cache-Control "public, mustrevalidate, proxy-revalidate";
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_next_upstream error timeout invalid_header http_500 ht>
proxy_pass http://localhost:8181;
proxy_redirect off;
proxy_buffering off;
}
location / {
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_next_upstream error timeout invalid_header http_500 ht>
proxy_pass http://localhost:8181;
proxy_redirect off;
proxy_buffering off;
}
}
Ánh xạ, kiểm tra cấu hình có lỗi không, không lỗi khởi động lại Nginx
sudo ln -s /etc/nginx/sites-available/domain.com /etc/nginx/sites-enabled/domain.com
sudo nginx -t
sudo systemctl restart nginx
Truy cập thông qua Tên miền
Vào phần Settings, điền một số thông tin như Tên, Email hay URL ...phần này là tùy chọn.
Vậy là mình đã xây dựng được server LenPaste của riêng mình rồi đó. Chúc các bạn thành công.
Mở rộng
Trong trường hợp chỉ muốn mình bạn có thể truy cập vào và tạo highligh code, đồng thời, khi chia sẻ thì người khác có thể đọc. Bạn có thể làm như sau.
Tạo file mật khẩu, ví dụ là pass.conf đặt ở cùng thư mục với lenpaste (ở đây là /opt/lenspate).
sudo nano pass.conf
và nhập vào nội dung có dạng sau
user:password
trong đó user là tên đăng nhập, password là mật khẩu do bạn chọn.
Trong file lenpaste.service, thay phần
ExecStart=/opt/lenpaste/lenpaste -address :8181 -db-driver sqlite3 -db-source sqlite
bằng phần này
ExecStart=/opt/lenpaste/dist/bin/lenpaste -address :8181 -db-driver sqlite3 -db-source sqlite -lenpasswd-file pass.conf
Từ giờ, khi truy cập vào domain.com, các bạn sẽ cần điền tài khoản và mật khẩu.
Còn việc chia sẻ thì vẫn hiển thị bình thường cho người khác đọc.
Ví dụ đây là code mình chèn thử.