Laptop hiển thị ứng dụng ghi chú Joplin trên giao diện máy tính.
Máy Tính

Hướng dẫn cài đặt Joplin Server trên Raspberry Pi: Tự host ghi chú riêng tư

Joplin là một ứng dụng ghi chú mã nguồn mở phổ biến, được yêu thích bởi những người coi trọng quyền riêng tư và các chuyên gia năng suất. Mặc dù việc đồng bộ ghi chú trên nhiều thiết bị với Joplin vốn đã dễ dàng, nhưng nếu bạn muốn giữ dữ liệu của mình hoàn toàn an toàn và nằm trong tầm kiểm soát, việc thiết lập một Joplin Server riêng là lựa chọn lý tưởng.

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

Laptop hiển thị ứng dụng ghi chú Joplin trên giao diện máy tính.Laptop hiển thị ứng dụng ghi chú Joplin trên giao diện máy tính.

Bước 1: Chuẩn bị Raspberry Pi và cài đặt Docker

Để bắt đầu, chúng ta giả định rằng Raspberry Pi của bạn đã được cài đặt và đang hoạt động. Ví dụ trong bài viết này được thực hiện trên Raspberry Pi 5 chạy Raspberry Pi OS (64-bit, phát hành ngày 22 tháng 10 năm 2024).

Cập nhật hệ thống Raspberry Pi OS

Điều đầu tiên bạn cần làm là cập nhật và nâng cấp hệ thống để đảm bảo tất cả các gói phần mềm đều là phiên bản mới nhất.

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

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

    sudo apt update
  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

Cài đặt và cấu hình Docker

Nếu bạn chưa cài đặt Docker, bạn cần thực hiện bước này. Docker cho phép bạn chạy các ứng dụng và server trong các container được “sandbox”, giúp bạn không phải lo lắng về việc các phần mềm khác nhau xung đột với nhau.

  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 hình ảnh kiểm tra và chạy nó trong một container:
    sudo docker run hello-world

    Khi container chạy, nó sẽ hiển thị một thông báo xác nhận rồi thoát.
    Kết quả chạy lệnh "sudo docker run hello-world" để kiểm tra cài đặt Docker thành công.Kết quả chạy lệnh "sudo docker run hello-world" để kiểm tra cài đặt Docker thành công.

  3. Tiếp theo, thêm người dùng hiện tại của bạn vào nhóm docker để tránh phải sử dụng quyền root cho các lệnh Docker:
    sudo usermod -aG docker $USER
  4. Cuối cùng, thoát khỏi 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

Chúng ta sẽ cài đặt docker-compose để hoàn thành việc chuẩn bị và giúp việc tạo các container Docker mới trở nên 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 gặp lỗi “the environment is externally managed” (môi trường được quản lý bên ngoài), hãy sử dụng lệnh này thay thế:
    sudo apt install docker-compose-plugin

Bước 2: Thiết lập Web Server Nginx và chứng chỉ SSL tự ký

Sau khi Docker được cài đặt, bạn đã gần sẵn sàng để cài đặt Joplin Server. Trước tiên, chúng ta phải đảm bảo nó có một web server và một chứng chỉ SSL để giữ an toàn.

Bạn cũng có thể muốn thiết lập tên miền và DNS động (Dynamic DNS) để cho phép truy cập từ xa vào Joplin Server. 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 DNS động thay đổi rộng rãi tùy thuộc vào bộ định tuyến của bạ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 ở cùng mạng với Joplin Server.

Hãy chuyển sang thiết lập web server mà bạn sẽ sử dụng cho Joplin Server của mình.

Cài đặt Nginx

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

Tạo chứng chỉ SSL tự ký (Self-signed SSL Certificate)

Để 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) và các chứng chỉ liên quan.

  1. Tạo khóa riêng CA (CA private key). Khi được hỏi về mật khẩu (passphrase), bạn nên sử dụng một mật khẩu mạnh để ngăn chặn các vi phạm bảo mật tiềm ẩn. Hãy sử dụng lệnh này và làm theo hướng dẫn xuất hiện:
    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à chứng chỉ tự ký của bạn, Nginx sẽ cần chứng chỉ riêng cho web server.

Đầ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'

Web server 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ủ và địa chỉ IP. Sao chép văn bản sau vào Terminal, thay đổi 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 > 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

Hiển thị nội dung file cấu hình Nginx extension (nginx.ext) trên Terminal.Hiển thị nội dung file cấu hình Nginx extension (nginx.ext) trên Terminal.

Cuối cùng, ký chứng chỉ cho Nginx với 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 Joplin Server. Trước khi làm điều đó, chúng ta cần tạo một cấu hình Nginx mới cho Joplin Server. 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, đảm bảo chỉnh sửa server_name để phù hợp với cấu hình của bạn:

server {
    listen 443 ssl http2;
    server_name raspberrypi.local; # Thay thế bằng 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 Ctrl+X, sau đó [Y], và Enter/Return.

File cấu hình Nginx (joplin) được mở trong trình soạn thảo Nano, điều chỉnh server_name.File cấu hình Nginx (joplin) được mở trong trình soạn thảo Nano, điều chỉnh server_name.

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

sudo systemctl restart nginx.service

Bước 3: Cài đặt 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 Joplin Server. Docker sẽ thực hiện phần lớn công việc cho chúng ta, theo các “công thức” 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, hãy nhập lệnh này:

nano 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.

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] # Đặt mật khẩu PostgreSQL của bạn
      - POSTGRES_USER=[Enter postgres username here]     # Đặt tên người dùng PostgreSQL của bạn
      - POSTGRES_DB=[Enter postgres db name here]       # Đặt tên cơ sở dữ liệu PostgreSQL của bạn
  app:
    environment:
      - APP_BASE_URL=https://[raspberry hostname here]/joplin # Thay thế bằng hostname của Raspberry Pi
      - APP_PORT=22300
      - POSTGRES_PASSWORD=[Enter postgres password here]
      - POSTGRES_DATABASE=[Enter postgres db name here]
      - POSTGRES_USER=[Enter postgres username here]
      - 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

Lưu ý quan trọng: Hãy đảm bảo bạn thay thế các giá trị trong dấu ngoặc vuông [ ] bằng thông tin đăng nhập PostgreSQL và hostname Raspberry Pi của riêng bạn.

Chạy Joplin Server bằng Docker Compose

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

docker compose up -d

Kiểm tra và truy cập Joplin Server

Cuối cùng, hãy kiểm tra server đang chạy 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 của mình. 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 (Nâng cao -> Chấp nhận rủi ro và Tiếp tục).

Bạn sẽ thấy trang đăng nhập 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 server của bạn.

Giao diện đăng nhập của Joplin Server trên trình duyệt web, sẵn sàng cho người dùng.Giao diện đăng nhập của Joplin Server trên trình duyệt web, sẵn sàng cho người dùng.

Kết nối thiết bị với Joplin Server đã tự host

Sau khi cấu hình server hoàn tất, bạn có thể bắt đầu đồng bộ ứng dụng Joplin với server 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ị 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 sang các thiết bị đó.

Joplin Server của bạn đã sẵn sàng hoạt động!

Vậy là xong. Đây là một quá trình khá dài, 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 Joplin Server tự host hoạt động ổn định. Đương nhiên, bước tiếp theo của bạn có thể là đưa Joplin Server của bạn trực tuyến. Như đã đề cập trước đó, điều này sẽ yêu cầu đăng ký tên miền riêng và sử dụng DNS động để đưa Joplin Server trên Raspberry Pi của bạn ra thế giới bên ngoài, vì vậy hãy đảm bảo bảo mật Raspberry Pi của bạn hoàn toàn trước khi thực hiện.

Hãy trải nghiệm việc quản lý ghi chú an toàn và riêng tư tuyệt đối với Joplin Server tự host của bạn. Đừng ngần ngại để lại bình luận nếu bạn có bất kỳ câu hỏi nào hoặc muốn chia sẻ kinh nghiệm của mình!

Related posts

Mozilla Gia Hạn Hỗ Trợ Firefox Cho Windows 7 và 8.1 Đến Tháng 9/2025

Administrator

Tại Sao Bạn Nên Cân Nhắc Thay Thế Microsoft Teams?

Administrator

Tự Động Hóa Raspberry Pi: Cách Lên Lịch Tác Vụ Hiệu Quả Nhất

Administrator

4 Nhược Điểm Lớn Của Màn Hình OLED: Kinh Nghiệm Thực Tế Sau Gần 3 Năm Sử Dụng

Administrator

5 Đồ Chơi Bay Ấn Tượng Bạn Có Thể Tự In 3D Ngay Tại Nhà

Administrator

Đánh Giá Perplexity Comet: Trình Duyệt AI Có Phải Là Tương Lai Hay Chỉ Là Một Thử Nghiệm Gây Tranh Cãi?

Administrator