Joplin là một ứng dụng ghi chú mã nguồn mở được đánh giá cao, đặc biệt bởi những người dùng quan tâm đến quyền riêng tư và hiệu suất công việc. Ứng dụng này cung cấp khả năng đồng bộ ghi chú dễ dàng giữa các thiết bị, nhưng để kiểm soát hoàn toàn dữ liệu của mình và đảm bảo an toàn tuyệt đối, bạn có thể tự thiết lập một Joplin Server riêng. Việc tự host Joplin Server trên Raspberry Pi không chỉ giúp bạn bảo mật thông tin cá nhân mà còn cho phép tùy chỉnh theo nhu cầu riêng, tiết kiệm chi phí và khai thác tối đa sức mạnh của thiết bị nhúng.
Bài viết này sẽ hướng dẫn bạn từng bước cách thiết lập Joplin Server trên Raspberry Pi, từ chuẩn bị môi trường máy chủ đến cấu hình chi tiết, giúp bạn xây dựng một hệ thống ghi chú cá nhân mạnh mẽ và bảo mật.
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à hoạt động. Trong hướng dẫn này, chúng ta sẽ thực hiện trên Raspberry Pi 5 chạy Raspberry Pi OS (64-bit).
Cập nhật hệ thống Raspberry Pi
Đầu tiên, bạn cần đảm bảo hệ điều hành và các gói ứng dụng trên Raspberry Pi được cập nhật lên phiên bản mới nhất.
-
Mở một phiên làm việc Terminal trên Raspberry Pi của bạn.
-
Cập nhật cơ sở dữ liệu của trình quản lý gói
apt
để đảm bảo nó nắm giữ các thông tin gói mới nhất:sudo apt update
Cửa sổ Terminal hiển thị kết quả lệnh sudo apt update trên Raspberry Pi
-
Tiếp theo, nâng cấp bất kỳ gói nào chưa được cập nhật:
sudo apt upgrade -y
Kết quả thực thi lệnh sudo apt upgrade để cập nhật các gói hệ thống Raspberry Pi
Cài đặt và cấu hình Docker
Nếu chưa có, bạn cần cài đặt và cấu hình Docker. Docker là một nền tảng quan trọng cho phép bạn chạy các ứng dụng và máy chủ trong các môi trường container độc lập, giúp tránh xung đột phần mềm và quản lý tài nguyên hiệu quả hơ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
-
Đảm bảo Docker đã được cài đặt thành công bằng cách chạy lệnh này, nó sẽ tải 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 và sau đó thoát.
Màn hình Terminal hiển thị thông báo "Hello from Docker!" sau khi chạy container thử nghiệm
-
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 mỗi lệnh Docker:sudo usermod -aG docker $USER
-
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
Để dễ dàng hơn trong việc tạo và quản lý nhiều container Docker cùng lúc, chúng ta sẽ cài đặt docker-compose
.
-
Trước 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
-
Bây giờ bạn có thể cài đặt
docker-compose
bằng lệnh này:sudo pip3 install docker-compose
-
Nếu bạn gặp lỗi “environment is externally managed”, hãy thực hiện lệnh này thay thế:
sudo apt install docker-compose-plugin
Bước 2: Cài đặt máy chủ web Nginx và chứng chỉ SSL
Sau khi Docker đã sẵn sàng, chúng ta cần thiết lập một máy chủ web và chứng chỉ SSL để bảo mật Joplin Server. Điều này là cần thiết để đảm bảo kết nối giữa các thiết bị và máy chủ của bạn được mã hóa.
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 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 Dynamic DNS rất khác nhau giữa các bộ định tuyến. Tuy nhiên, nếu không có, bạn chỉ có thể đồng bộ hóa ghi chú khi ở cùng mạng với Joplin Server.
Cài đặt Nginx
Nginx là một máy chủ web hiệu suất cao mà chúng ta sẽ sử dụng để làm proxy cho Joplin Server.
-
Cài đặt máy chủ web Nginx:
sudo apt install -y nginx
Tạo chứng chỉ CA và chứng chỉ SSL tự ký
Để thiết lập SSL, bạn cần tạo khóa riêng (private key) cho cơ quan cấp chứng chỉ (CA) của mình. Đây là một chứng chỉ tự ký (self-signed certificate) sẽ được sử dụng để mã hóa kết nối.
-
Tạo khóa riêng cho CA của bạn. Khi được yêu cầu 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. Chỉ cần sử dụng lệnh này và làm theo hướng dẫn:
sudo openssl genrsa -aes256 -out /etc/ssl/private/local_ca.key 4096
-
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ó thời hạn 5 năm (1826 ngày) với lệnh sau. Khi được yêu cầu 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êm thông tin, nhưng bạn có thể bỏ qua bất kỳ trường nào bằng cách nhấn dấu chấm (.).
Tạo chứng chỉ SSL cho Nginx
Sau khi tạo CA và chứng chỉ tự ký, Nginx sẽ cần chứng chỉ riêng cho máy chủ web.
-
Trước 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ác 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 các giá trị cho
DNS.1
vàIP.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
Kiểm tra nội dung tệp nginx.ext để cấu hình chứng chỉ SSL cho Nginx
-
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 sắp sẵn sàng cài đặt Joplin Server. Tuy nhiên, trước đó, 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
để 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; 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 tệp /etc/nginx/sites-enabled/joplin
-
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
Bước 3: Thiết lập 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 hầu hết công việc này cho chúng ta, theo các “công thức” trong kho lưu trữ Docker.
Tạo file docker-compose.yml
Để bắt đầu, bạn cần tạo một tệp docker-compose.yml
mới.
-
Trong Terminal, thực hiện 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
.
Lưu ý quan trọng: Bạn cần thay thế[Enter postgres password here]
,[Enter postgres username here]
,[Enter postgres db name here]
, và[raspberry hostname here]
bằng các giá trị thực tế của bạn. Đảm bảo mật khẩu và tên người dùng đủ mạnh.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] - POSTGRES_USER=[Enter postgres username here] - POSTGRES_DB=[Enter postgres db name here] app: environment: - APP_BASE_URL=https://[raspberry hostname here]/joplin - 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
Triển khai Joplin Server
-
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 hình ảnh Docker cần thiết, cũng như khởi chạy Joplin Server:
docker compose up -d
Kiểm tra và cấu hình ban đầu
-
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ủ 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.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 Joplin Server trên trình duyệt web sau khi cài đặt thành công
Bước 4: Kết nối thiết bị với Joplin Server
Sau khi cấu hình máy chủ hoàn tất, bạn có thể bắt đầu đồng bộ hóa ứng dụng Joplin với máy chủ tự host trên các thiết bị của mình. Bạn có thể cần nhập chứng chỉ bảo mật 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
sang các thiết bị đó. Sau đó, trong cài đặt đồng bộ hóa của ứng dụng Joplin trên thiết bị, chọn “Joplin Server” làm phương thức đồng bộ và nhập URL của server cùng thông tin đăng nhập của bạn.
Kết luận
Việc tự host Joplin Server trên Raspberry Pi là một quá trình khá dài và đòi hỏi sự tỉ mỉ, nhưng nếu bạn làm theo các hướng dẫn một cách chính xác, bạn sẽ có một hệ thống ghi chú cá nhân hoàn chỉnh, an toàn và hoàn toàn nằm trong tầm kiểm soát của bạn. Giải pháp này không chỉ mang lại sự yên tâm về quyền riêng tư dữ liệu mà còn cho phép bạn tùy chỉnh trải nghiệm ghi chú của mình một cách sâu sắc hơn.
Bước tiếp theo của bạn có thể là làm cho Joplin Server của mình có thể truy cập 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 Dynamic DNS để “phơi bày” Joplin Server của Raspberry Pi ra thế giới bên ngoài. Tuy nhiên, hãy đảm bảo rằng bạn đã bảo mật hoàn toàn Raspberry Pi của mình trước khi thực hiện điều này. Khám phá thêm các hướng dẫn tự host ứng dụng khác trên congnghetonghop.com để tối ưu hóa không gian làm việc số của bạn.