Image default
Máy Tính

Tự Host Joplin Server Trên Raspberry Pi: Hướng Dẫn Chi Tiết A-Z Để Kiểm Soát Dữ Liệu Ghi Chú Cá Nhân

Joplin từ lâu đã trở thành ứng dụng ghi chú mã nguồn mở được cộng đồng yêu thích, đặc biệt là những người đề cao quyền riêng tư và hiệu suất công việc. Khả năng đồng bộ ghi chú linh hoạt trên nhiều thiết bị là một điểm mạnh, nhưng nếu bạn muốn giữ dữ liệu hoàn toàn an toàn và nằm trong tầm kiểm soát của mình, việc thiết lập một máy chủ Joplin cá nhân (self-hosted) là giải pháp tối ưu.

Bài viết này của dancongnghe.net sẽ hướng dẫn bạn từng bước cách tự xây dựng máy chủ Joplin trên Raspberry Pi, từ việc chuẩn bị hạ tầng server đến cấu hình chi tiết để phù hợp với nhu cầu riêng. Cho dù mục tiêu của bạn là tăng cường bảo mật, tiết kiệm chi phí cho các dịch vụ đám mây, hay chỉ đơn giản là tạo ra một môi trường ghi chú độc đáo của riêng mình, tự host Joplin chính là con đường bạn nên đi.

Giao diện ứng dụng ghi chú Joplin trên laptop đang chạy GIMP, minh họa phần mềm mã nguồn mởGiao diện ứng dụng ghi chú Joplin trên laptop đang chạy GIMP, minh họa phần mềm mã nguồn mở

Chuẩn bị ban đầu: Cài đặt Docker trên Raspberry Pi

Để bắt đầu, chúng ta sẽ giả định rằng bạn đã có một chiếc Raspberry Pi được cài đặt và đang chạy hệ điều hành. Trong hướng dẫn này, chúng tôi sử dụng Raspberry Pi 5 chạy Raspberry Pi OS (64-bit, phát hành ngày 22 tháng 10 năm 2024). Bước đầu tiên là cập nhật và nâng cấp hệ thống của bạn để đảm bảo các gói phần mềm luôn ở phiên bản mới nhất.

Cập nhật hệ thống và gói phần mềm

  1. Mở một phiên Terminal trên Raspberry Pi của bạn.

  2. Cập nhật trình quản lý gói apt để đảm bảo cơ sở dữ liệu của nó là mới nhất:

    sudo apt update

    Màn hình Terminal Raspberry Pi hiển thị kết quả lệnh sudo apt update để cập nhật gói phần mềmMàn hình Terminal Raspberry Pi hiển thị kết quả lệnh sudo apt update để cập nhật gói phần mềm

  3. Tiếp theo, nâng cấp bất kỳ gói nào chưa được nâng cấp:

    sudo apt upgrade -y

    Kết quả lệnh sudo apt upgrade -y trên Terminal của Raspberry Pi, hoàn tất quá trình nâng cấp hệ thốngKết quả lệnh sudo apt upgrade -y trên Terminal của Raspberry Pi, hoàn tất quá trình nâng cấp hệ thống

Cài đặt Docker Engine

Sau khi cập nhật hệ thống, bạn cần cài đặt và cấu hình Docker nếu chưa có. Docker cho phép bạn chạy các ứng dụng và máy chủ trong các container biệt lập, giúp tránh xung đột giữa các phần mềm khác nhau và đơn giản hóa việc triển khai.

  1. Đầu tiên, tải xuống và cài đặt các gói Docker mới nhất:

    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  2. Đảm bảo Docker đã được cài đặt thành công bằng cách chạy lệnh này. Lệnh này sẽ tải xuống một ảnh thử nghiệm và chạy nó trong một container:

    sudo docker run hello-world

    Khi container chạy, nó sẽ hiển thị thông báo xác nhận và sau đó thoát.

    Xác nhận cài đặt Docker thành công trên Raspberry Pi với kết quả chạy lệnh hello-world trên TerminalXác nhận cài đặt Docker thành công trên Raspberry Pi với kết quả chạy lệnh hello-world trên Terminal

Cấu hình quyền người dùng Docker

Để tránh phải sử dụng quyền root cho mỗi lệnh Docker, bạn nên thêm người dùng hiện tại của mình vào nhóm docker:

  1. Thêm người dùng hiện tại vào nhóm docker:
    sudo usermod -aG docker $USER
  2. Cuối cùng, thoát phiên Terminal hiện tại và mở một phiên mới để làm mới quyền người dùng của bạn.

Cài đặt Docker Compose

Để hoàn tất, chúng ta sẽ cài đặt docker-compose, một công cụ giúp định nghĩa và chạy các ứng dụng Docker multi-container dễ dàng hơn.

  1. Đầu tiên, cài đặt các điều kiện tiên quyết cần thiết cho docker-compose:
    sudo apt install -y libffi-dev libssl-dev python3-dev python3-pip
  2. Bây giờ bạn có thể cài đặt docker-compose bằng lệnh này:
    sudo pip3 install docker-compose
  3. Nếu bạn nhận được lỗi “environment is externally managed”, hãy chạy lệnh thay thế này:
    sudo apt install docker-compose-plugin

Thiết lập máy chủ web Nginx và chứng chỉ SSL

Khi Docker đã được cài đặt, bạn gần như đã sẵn sàng để cài đặt máy chủ Joplin của mình. Trước tiên, chúng ta phải đảm bảo nó có một máy chủ web và một chứng chỉ SSL để duy trì tính bảo mật.

Lưu ý rằng bạn có thể muốn thiết lập tên miền riêng và Dynamic DNS để cho phép truy cập từ xa vào máy chủ Joplin. Các bước này nằm ngoài phạm vi của bài viết này vì việc thiết lập Dynamic DNS thay đổi rất nhiều giữa các bộ định tuyến. Tuy nhiên, nếu không có điều này, bạn chỉ có thể đồng bộ ghi chú khi bạn đang ở cùng mạng với máy chủ Joplin.

Bây giờ, hãy chuyển sang thiết lập máy chủ web mà bạn sẽ sử dụng cho máy chủ Joplin của mình.

Cài đặt Nginx Web Server

  1. Đầu tiên, cài đặt máy chủ web Nginx:
    sudo apt install -y nginx

Tạo chứng chỉ SSL tự ký cho Joplin

Để thiết lập SSL, bạn cần tạo khóa riêng của Cơ quan cấp chứng chỉ (CA). Khi được hỏi về mật khẩu (passphrase), tốt nhất là nên sử dụng một mật khẩu để ngăn chặn các vi phạm bảo mật có thể xảy ra. Chỉ cần sử dụng lệnh này và làm theo hướng dẫn khi chúng xuất hiện:

  1. Tạo khóa riêng CA:
    sudo openssl genrsa -aes256 -out /etc/ssl/private/local_ca.key 4096
  2. Tiếp theo, bạn cần tạo một chứng chỉ. Chúng ta sẽ tạo một chứng chỉ CA có giá trị trong năm năm (1826 ngày) với lệnh sau. Khi được hỏi về mật khẩu, hãy sử dụng mật khẩu bạn đã tạo ở bước 2:
    sudo openssl req -x509 -new -nodes -key /etc/ssl/private/local_ca.key -sha256 -days 1826 -out /etc/ssl/certs/local_ca.crt

    Bạn sẽ được yêu cầu cung cấp thông tin bổ sung, nhưng bạn có thể bỏ qua bất kỳ trường nào bằng cách sử dụng dấu chấm (.).

Sau khi tạo CA và các chứng chỉ tự ký, Nginx sẽ cần chứng chỉ riêng cho máy chủ web.

Đầu tiên, tạo một chứng chỉ tự ký cho dịch vụ Nginx:

sudo openssl req -new -nodes -out /etc/ssl/certs/nginx.csr -newkey rsa:4096 -keyout /etc/ssl/private/nginx.key -subj '/CN=Nginx Service'

Máy chủ web cần một tệp mở rộng để cấu hình cài đặt chứng chỉ, chẳng hạn như tên máy chủ (hostname) và địa chỉ IP. Sao chép văn bản sau vào Terminal, thay đổi các giá trị cho DNS.1IP.1 thành tên máy chủ và địa chỉ IP của Raspberry Pi của bạn:

cat <<EOF > nginx.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = [Type Raspberry's hostname here]
IP.1 = [Type Raspberry's IP address here]
EOF

Xác minh nội dung chính xác bằng cách sử dụng:

cat nginx.ext

Kiểm tra nội dung tệp cấu hình chứng chỉ nginx.ext bằng lệnh cat trong TerminalKiểm tra nội dung tệp cấu hình chứng chỉ nginx.ext bằng lệnh cat trong Terminal

Cuối cùng, ký chứng chỉ cho Nginx bằng lệnh này:

sudo openssl x509 -req -in /etc/ssl/certs/nginx.csr -CA /etc/ssl/certs/local_ca.crt -CAkey /etc/ssl/private/local_ca.key -CAcreateserial -out /etc/ssl/certs/nginx.crt -days 3650 -sha256 -extfile nginx.ext

Cấu hình Nginx cho Joplin Server

Chúng ta gần như đã sẵn sàng để cài đặt máy chủ Joplin. Trước khi làm điều đó, chúng ta cần tạo một cấu hình Nginx mới cho máy chủ Joplin. Tạo một tệp cấu hình mới bằng nano trong phiên Terminal của bạn:

sudo nano /etc/nginx/sites-enabled/joplin

Sao chép và dán thông tin sau vào tệp, đảm bảo chỉnh sửa server_name để khớp với cấu hình của bạn (ví dụ: raspberrypi.local hoặc tên máy chủ của bạn):

server {
    listen 443 ssl http2;
    server_name raspberrypi.local; # Thay đổi hostname của Raspberry Pi của bạn
    ssl_certificate /etc/ssl/certs/nginx.crt;
    ssl_certificate_key /etc/ssl/private/nginx.key;

    location /joplin/ {
        proxy_redirect off;
        proxy_pass http://127.0.0.1:22300;
        rewrite ^/joplin/(.*)$ /$1 break;
        proxy_set_header X-Forwarded-Host $host;
        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 $scheme;
    }
}

Lưu và thoát bằng cách nhấn Ctrl+X, sau đó [Y], và Enter/Return.

Cấu hình Nginx cho Joplin server trong trình soạn thảo Nano trên Raspberry PiCấu hình Nginx cho Joplin server trong trình soạn thảo Nano trên Raspberry Pi

Cuối cùng, khởi động lại Nginx để áp dụng cấu hình máy chủ mới:

sudo systemctl restart nginx.service

Triển khai và cấu hình Joplin Server tự host

Với các bước chuẩn bị đã hoàn tất, đã đến lúc cài đặt và cấu hình máy chủ Joplin. Docker sẽ thực hiện hầu hết công việc cho chúng ta, dựa trên các tập lệnh trong kho lưu trữ Docker. Để bắt đầu, bạn cần tạo một tệp docker-compose.yml mới. Trong Terminal, chạy lệnh này:

nano docker-compose.yml

Tạo file docker-compose.yml

Tiếp theo, sao chép và dán văn bản dưới đây vào tệp, sau đó lưu tệp và thoát nano.

LƯU Ý QUAN TRỌNG: Bạn cần thay thế các giá trị trong dấu ngoặc vuông [ ] bằng thông tin của riêng bạn (mật khẩu PostgreSQL, tên người dùng, tên cơ sở dữ liệu, và hostname của Raspberry Pi).

version: '3'

services:
  db:
    restart: unless-stopped
    image: postgres:13.1
    ports:
      - "5432:5432"
    volumes:
      - /data/joplin-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=[Enter postgres password here] # Thay bằng mật khẩu PostgreSQL của bạn
      - POSTGRES_USER=[Enter postgres username here]     # Thay bằng tên người dùng PostgreSQL của bạn
      - POSTGRES_DB=[Enter postgres db name here]       # Thay bằng tên cơ sở dữ liệu PostgreSQL của bạn

  app:
    environment:
      - APP_BASE_URL=https://[raspberry hostname here]/joplin # Thay bằng hostname của Raspberry Pi của bạn
      - APP_PORT=22300
      - POSTGRES_PASSWORD=[Enter postgres password here] # Phải khớp với mật khẩu DB ở trên
      - POSTGRES_DATABASE=[Enter postgres db name here]  # Phải khớp với tên DB ở trên
      - POSTGRES_USER=[Enter postgres username here]     # Phải khớp với tên người dùng DB ở trên
      - POSTGRES_PORT=5432
      - POSTGRES_HOST=db
      - DB_CLIENT=pg
    restart: unless-stopped
    image: etechonomy/joplin-server:latest
    ports:
      - "127.0.0.1:22300:22300"
    depends_on:
      - db

Khởi chạy Joplin Server với Docker Compose

Tiếp theo, bạn sẽ sử dụng tệp cấu hình này để tải xuống và cài đặt các ảnh Docker cần thiết:

docker compose up -d

Kiểm tra và đăng nhập máy chủ Joplin

Cuối cùng, kiểm tra xem máy chủ có đang chạy hay không bằng cách mở một cửa sổ trình duyệt web mới và điều hướng đến:

https://[hostname].local/joplin

Thay thế hostname bằng tên máy chủ mà bạn đã cấu hình cho Raspberry Pi. Bạn có thể sẽ nhận được cảnh báo về chứng chỉ, nhưng bạn có thể chấp nhận chúng bằng cách nhấp vào Advanced -> Accept the Risk and Continue (hoặc tương tự tùy trình duyệt).

Bạn sẽ thấy trang đăng nhập của Joplin Server. Tên người dùng mặc định là admin@localhost, và mật khẩu mặc định là admin. Hãy đảm bảo thay đổi những thông tin này ngay lập tức để duy trì bảo mật cho máy chủ ghi chú cá nhân của bạn.

Trang đăng nhập Joplin Server qua giao diện web, xác nhận cài đặt thành côngTrang đăng nhập Joplin Server qua giao diện web, xác nhận cài đặt thành công

Kết nối thiết bị của bạn với Joplin Server tự host

Khi cấu hình máy chủ hoàn tất, bạn có thể bắt đầu đồng bộ ứng dụng Joplin với máy chủ tự host của mình trên các thiết bị. Bạn có thể cần nhập chứng chỉ bảo mật mà bạn đã tạo vào các thiết bị mà bạn muốn kết nối. Sử dụng email, SCP, hoặc bất kỳ phương pháp nào khác, chuyển một bản sao của chứng chỉ CA được tìm thấy trên Raspberry Pi của bạn tại /etc/ssl/certs/local_ca.crt đến các thiết bị đó.

Với các bước trên, máy chủ Joplin của bạn đã sẵn sàng hoạt động. Quá trình này có thể hơi dài và đòi hỏi sự tỉ mỉ, nhưng nếu bạn làm theo hướng dẫn một cách chính xác, bạn sẽ có một hệ thống ghi chú an toàn và hoàn toàn nằm dưới sự kiểm soát của mình. Bước tiếp theo của bạn có thể là làm cho máy chủ Joplin của bạn có thể truy cập trực tuyến. Như đã đề cập, điều này sẽ yêu cầu đăng ký tên miền riêng và sử dụng Dynamic DNS để công khai máy chủ Joplin Raspberry Pi của bạn ra thế giới bên ngoài. Hãy đảm bảo bạn đã bảo mật hoàn toàn chiếc Pi của mình trước khi thực hiện điều này.

Related posts

Mặt Tối Của VPN Miễn Phí: Big Mama VPN Biến Bạn Thành “Vũ Khí” Tấn Công Mạng?

Administrator

Tái Sinh Đồ Hỏng Với In 3D: 5 Cách Tiết Kiệm Tiền Và Bảo Vệ Môi Trường

Administrator

Vì sao Apple bỏ qua nhiều số phiên bản để ra mắt thẳng iOS 26?

Administrator