Cách cài đặt Standard Notes Server trên Ubuntu 22.04

theanh

Administrator
Nhân viên
Standard Notes là một ứng dụng ghi chú mã nguồn mở và được mã hóa hoàn toàn. Ứng dụng này cung cấp cả gói miễn phí và trả phí, cũng như dịch vụ lưu trữ đám mây và tùy chọn lưu trữ trên máy chủ của bạn. Bạn có thể sử dụng máy chủ của mình để đồng bộ hóa các ghi chú được lưu trữ giữa các thiết bị khác nhau. Standard Notes cung cấp ứng dụng cho tất cả các hệ điều hành máy tính để bàn và nền tảng di động.

Trong hướng dẫn này, bạn sẽ học cách tự lưu trữ máy chủ ghi chú tiêu chuẩn của mình trên máy Ubuntu 22.04. Bạn cũng sẽ học cách kích hoạt các tính năng gói trả phí và tải tệp lên phiên bản tự lưu trữ của mình.

Điều kiện tiên quyết​


  • Một máy chủ chạy Ubuntu 22.04 với tối thiểu 2 GB RAM.

  • Một người dùng không phải root có quyền sudo.

  • Tường lửa đơn giản (UFW) được bật và đang chạy.

  • Một tên miền đủ điều kiện trỏ đến máy chủ. Đối với hướng dẫn của chúng tôi, chúng tôi sẽ sử dụng tên miền standardnotes.example.com. Bạn sẽ cần một tên miền khác cho máy chủ tệp của mình. Chúng tôi sẽ sử dụng tên miền snotes-files.example.com.

  • Mọi thứ đều được cập nhật.
Mã:
$ sudo apt update && sudo apt upgrade

Bước 1 - Cấu hình Tường lửa​

Bước đầu tiên trước khi cài đặt bất kỳ gói nào là cấu hình tường lửa để cho phép kết nối HTTP và HTTPS.

Kiểm tra trạng thái của tường lửa.
Mã:
$ sudo ufw status
Bạn sẽ thấy nội dung tương tự như sau.
Mã:
Trạng thái: activeĐến Hành động Từ-- ------ ----OpenSSH CHO PHÉP Mọi nơiOpenSSH (v6) CHO PHÉP Mọi nơi (v6)
Cho phép HTTP và HTTPs ports.
Mã:
$ sudo ufw allow http$ sudo ufw allow https
Kiểm tra lại trạng thái để xác nhận.
Mã:
$ sudo ufw statusTrạng thái: activeĐến Hành động Từ-- ------ ----OpenSSH ALLOW Anywhere80/tcp ALLOW Anywhere443/tcp ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)80/tcp (v6) ALLOW Anywhere (v6)443/tcp (v6) ALLOW Anywhere (v6)

Bước 2 - Cài đặt Docker và Docker Compose​

Thêm khóa GPG chính thức của Docker.
Mã:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
Chạy lệnh sau để thêm kho lưu trữ Docker.
Mã:
$ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Cập nhật hệ thống để bao gồm kho lưu trữ của Docker.
Mã:
$ sudo apt update
Cài đặt Docker.
Mã:
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Hướng dẫn này sẽ sử dụng plugin Docker Compose v2 thay vì tệp nhị phân cũ hơn. Do đó, lệnh chạy nó đã thay đổi từ docker-compose thành docker compose và điều này được phản ánh ở đây.

Docker chạy với các đặc quyền nâng cao nên bạn sẽ cần sử dụng sudo thường xuyên để chạy lệnh. Tùy chọn tốt hơn là thêm tài khoản người dùng Linux của bạn vào nhóm người dùng docker.
Mã:
$ sudo usermod -aG docker ${USER}
Biến ${USER} sẽ chọn tài khoản hệ thống hiện đang đăng nhập. Nếu bạn không đăng nhập bằng người dùng mà bạn muốn cấp đặc quyền, hãy thay thế ${USER} bằng tên người dùng.

Để đăng ký tư cách thành viên nhóm mới, hãy đăng xuất khỏi máy chủ và đăng nhập lại hoặc sử dụng lệnh sau. Bạn sẽ được nhắc nhập mật khẩu của người dùng.
Mã:
$ su - $(USER)

Bước 3 - Cài đặt Nginx​

Ubuntu 22.04 đi kèm với phiên bản Nginx cũ hơn. Để cài đặt phiên bản mới nhất, bạn cần tải xuống kho lưu trữ Nginx chính thức.

Nhập khóa ký của Nginx.
Mã:
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Thêm kho lưu trữ cho phiên bản ổn định của Nginx.
Mã:
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \| sudo tee /etc/apt/sources.list.d/nginx.list
Cập nhật kho lưu trữ hệ thống.
Mã:
$ sudo apt update
Cài đặt Nginx.
Mã:
$ sudo apt install nginx
Xác minh cài đặt.
Mã:
$ nginx -vphiên bản nginx: nginx/1.22.0

Bước 4 - Cài đặt SSL​

Chúng ta cần cài đặt Certbot để tạo chứng chỉ SSL. Bạn có thể cài đặt Certbot bằng kho lưu trữ của Ubuntu hoặc tải phiên bản mới nhất bằng công cụ Snapd. Chúng ta sẽ sử dụng phiên bản Snapd.

Ubuntu 22.04 đi kèm với Snapd được cài đặt theo mặc định. Chạy các lệnh sau để đảm bảo rằng phiên bản Snapd của bạn được cập nhật.
Mã:
$ sudo snap install core
Cài đặt Certbot.
Mã:
$ sudo snap install --classic certbot
Sử dụng lệnh sau để đảm bảo rằng lệnh Certbot có thể chạy được bằng cách tạo liên kết tượng trưng đến thư mục /usr/bin.
Mã:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Chạy lệnh sau để tạo Chứng chỉ SSL.
Mã:
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d standardnotes.example.com
Lệnh trên sẽ tải xuống chứng chỉ vào /etc/letsencrypt/live/standardnotes.example.com thư mục trên máy chủ của bạn.

Chúng ta cần làm tương tự cho miền phụ Files.
Mã:
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d snotes-files.example.com
Tạo chứng chỉ nhóm Diffie-Hellman.
Mã:
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Mở tệp /etc/letsencrypt/renewal/standardnotes.example.com.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/letsencrypt/renewal/standardnotes.example.com.conf
Dán mã sau vào cuối.
Mã:
pre_hook = systemctl stop nginxpost_hook = systemctl start nginx
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Lặp lại bước tương tự cho tên miền phụ của tệp bằng cách chỉnh sửa tệp /etc/letsencrypt/renewal/snotes-files.example.com.conf.

Chúng tôi đã tạo chứng chỉ SSL bằng tùy chọn độc lập của Certbot. Nó chạy máy chủ web của mình để tạo chứng chỉ, nghĩa là Nginx phải bị tắt trong quá trình gia hạn. Các lệnh pre_hookpost_hook chạy trước và sau khi gia hạn để tự động đóng và khởi động lại máy chủ Nginx, do đó không cần can thiệp thủ công.

Để kiểm tra xem quá trình gia hạn SSL có hoạt động tốt không, hãy chạy thử quy trình.
Mã:
$ sudo certbot renew --dry-run
Nếu không thấy lỗi, bạn đã hoàn tất. Chứng chỉ của bạn sẽ tự động gia hạn.

Bước 5 - Tải xuống và cấu hình Standard Notes​

Đảm bảo bạn đang ở trong thư mục gốc của hệ thống.
Mã:
$ cd ~
Sao chép kho lưu trữ Standard Notes Standalone.
Mã:
$ git clone --single-branch --branch main https://github.com/standardnotes/standalone.git
Chuyển sang thư mục đã tải xuống.
Mã:
$ cd standalone
Tạo các tệp cấu hình mặc định cho máy chủ.
Mã:
$ ./server.sh setup
Điều này sẽ tạo các tệp môi trường mặc định mà chúng ta cần cấu hình. Bạn cần tạo sáu khóa bí mật khác nhau. Sử dụng các lệnh sau để tạo chúng.
Mã:
$ openssl rand -hex 32
Đầu tiên, chúng ta phải chỉnh sửa tệp .env trong thư mục chính. Mở tệp để chỉnh sửa.
Mã:
$ nano .env
Thay đổi giá trị của các biến sau.
Mã:
NODE_ENV=production..AUTH_JWT_SECRET=c0f5bcf6f0f0dcca5b9078c3095e4255a055dfd6376b376733af0e50483cc629..DB_USERNAME=std_notes_userDB_PASSWORD=changeme123..VALET_TOKEN_SECRET=977c978ca1d5ea22fe2fda65058905b191f724e33db6e47d0a41e034a082cb3b..FILES_SERVER_URL=https://snotes-files.example.com
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Tiếp theo, mở tệp docker/auth.env.
Mã:
$ nano docker/auth.env
Thay đổi giá trị của các biến sau.
Mã:
JWT_SECRET=54deb1b0b2499e8d875b0d5266dabef9003e13c1787a959a94e339363c10e56eLEGACY_JWT_SECRET=c36aae01803a616213f22422b6d3f998a2beb2cb53af8b95bf578a8a3d046cec..PSEUD O_KEY_PARAMS_KEY=ea09d3f9122b49c653524cd2285a45fee88beb94f9b76d4d25420b521b080fcd..ENCRYPTION_SERVER_KEY=04decf379fbe3bb48cf95dbb5997031418b308e724a25d88cb0b2ed6da725efe
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Bước 6 - Khởi động Standard Notes Server​

Chạy lệnh sau để khởi động máy chủ.
Mã:
$ ./server.sh start
Lệnh này sẽ mất vài phút để hoàn tất. Trong thời gian này, quy trình sẽ kéo tất cả các hình ảnh Docker có liên quan và tạo các vùng chứa cho tất cả các dịch vụ. Nó cũng sẽ điền vào cơ sở dữ liệu và thực hiện các lần di chuyển phù hợp.

Bạn có thể kiểm tra nhật ký cho quy trình bằng lệnh sau.
Mã:
$ ./server.sh logs
Nhấn Ctrl + C để thoát khỏi nhật ký. Bạn có thể kiểm tra trạng thái của các container đang chạy bằng lệnh sau.
Mã:
$ ./server.sh status
Bạn sẽ nhận được kết quả tương tự.
Mã:
Services State:NAME COMMAND SERVICE STATUS PORTSapi-gateway-standalone "./wait-for.sh auth …” api-gateway running 0.0.0.0:3000->3000/tcp, :::3000->3000/tcpauth-standalone "./wait-for.sh db 33…" auth runningauth-worker-standalone "./wait-for.sh db 33…" auth-worker runningcache-standalone "docker-entrypoint.s…" cache running 6379/tcpdb-standalone "docker-entrypoint.s…" db running 3306/tcpfiles-standalone "./wait-for.sh db 33…" các tệp đang chạy 0.0.0.0:3125->3000/tcp, :::3125->3000/tcpsyncing-server-js-standalone "./wait-for.sh db 33…" syncing-server-js đang chạysyncing-server-js-worker-standalone "./wait-for.sh db 33…" syncing-server-js-worker đang chạy
Bạn có thể kiểm tra tình trạng hoạt động của máy chủ bằng lệnh sau.
Mã:
$ curl http://localhost:3000/healthcheckOK
Standard Notes sử dụng cổng 3000 theo mặc định. Nếu bạn đã cấu hình một cổng khác trong tệp .env, bạn nên cập nhật cổng đó trong lệnh ở trên.

Bước 7 - Cấu hình Nginx​

Mở tệp /etc/nginx/nginx.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
Thêm dòng sau trước dòng include /etc/nginx/conf.d/*.conf;.
Mã:
server_names_hash_bucket_size 64;
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Tạo và mở tệp /etc/nginx/conf.d/standardnotes.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/conf.d/standardnotes.conf
Dán mã sau vào đó. Thay thế standardnotes.example.com bằng tên miền của bạn. Chúng tôi đã đặt giá trị của client_max_body_size thành 50MB. Bạn có thể thay đổi tùy theo yêu cầu của mình.
Mã:
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name standardnotes.example.com; client_max_body_size 50M; access_log /var/log/nginx/standardnotes.access.log; error_log /var/log/nginx/standardnotes.error.log; ssl_certificate /etc/letsencrypt/live/standardnotes.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/standardnotes.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/standardnotes.example.com/chain.pem; ssl_session_timeout 5 phút; ssl_session_cache shared:MozSSL:10 phút; ssl_session_tickets tắt; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers bật; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_stapling bật; ssl_stapling_verify bật; ssl_dhparam /etc/ssl/certs/dhparam.pem; location / { proxy_pass http://127.0.0.1:3000; proxy_cache off; }}# enforce HTTPSserver { listen 80; listen [::]:80; server_name standardnotes.example.com; return 301 https://$host$request_uri;}
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Tệp trên dành cho ứng dụng Standard Notes chính. Tiếp theo, chúng ta cần cấu hình một tệp khác cho miền phụ Files.
Mã:
$ sudo nano /etc/nginx/conf.d/files-standardnotes.conf
Dán mã sau vào đó. Thay thế snotes-files.example.com bằng tên miền của bạn. Chúng tôi đã đặt giá trị của biến client_max_body_size thành 50MB. Bạn có thể thay đổi tùy theo yêu cầu của mình.
Mã:
máy chủ { lắng nghe 443 ssl http2; lắng nghe [::]:443 ssl http2; tên máy chủ snotes-files.example.com; kích thước thân máy tối đa của máy khách 50M; nhật ký truy cập /var/log/nginx/files-standardnotes.access.log; nhật ký lỗi /var/log/nginx/files-standardnotes.error.log; chứng chỉ ssl /etc/letsencrypt/live/snotes-files.example.com/fullchain.pem; khóa chứng chỉ ssl /etc/letsencrypt/live/snotes-files.example.com/privkey.pem; chứng chỉ ssl đáng tin cậy /etc/letsencrypt/live/snotes-files.example.com/chain.pem; thời gian chờ ssl 5 phút; ssl_session_cache được chia sẻ: MozSSL: 10m; ssl_session_tickets tắt; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers bật; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_stapling bật; ssl_stapling_verify bật; ssl_dhparam /etc/ssl/certs/dhparam.pem; vị trí / { proxy_pass http://127.0.0.1:3125; proxy_cache tắt; }}# thực thi HTTPSmáy chủ { lắng nghe 80; lắng nghe [::]:80; tên máy chủ snotes-files.example.com; trả về 301 https://$host$request_uri;}
Xác minh cấu hình Nginx của bạn.
Mã:
$ sudo nginx -t
Khởi động lại máy chủ Nginx để kích hoạt các tệp cấu hình.
Mã:
$ sudo systemctl restart nginx

Bước 8 - Sử dụng Standard Notes​

Nếu bạn mở URL https://standardnotes.example.com trong trình duyệt của mình, bạn sẽ thấy đầu ra sau.



Điều này có nghĩa là máy chủ của bạn đang hoạt động. Để sử dụng Standard Notes, bạn sẽ cần sử dụng các ứng dụng chính thức. Đối với hướng dẫn của chúng tôi, chúng tôi sẽ sử dụng ứng dụng web của họ nhưng phương pháp sẽ giữ nguyên đối với ứng dụng dành cho máy tính để bàn và thiết bị di động.

Mở URL https://app.standardnotes.com để truy cập ứng dụng web. Nhấp vào liên kết Tạo tài khoản miễn phí ở góc dưới bên trái của trang và điền địa chỉ email và mật khẩu của bạn. Nhấp vào nút Tính năng nâng cao và bỏ chọn tùy chọn Máy chủ đồng bộ tùy chỉnh và điền URL https://standardnotes.example.com vào hộp.



Sau khi đăng nhập, bạn có thể bắt đầu tạo ghi chú và sử dụng ứng dụng.

Bước 9 - Bật tính năng trả phí​

Cho đến nay, chúng tôi đã bật chức năng cơ bản cho ứng dụng Standard Notes. Ứng dụng cung cấp một số tính năng nâng cao như nhiều định dạng ghi chú, lưu trữ đám mây được mã hóa, lịch sử sửa đổi dài hơn, v.v.

Đối với ứng dụng lưu trữ trên đám mây, bạn có thể thanh toán trực tiếp để bật các tính năng nâng cao. Nhưng đối với ứng dụng tự lưu trữ, bạn không thể trả tiền cho các tính năng nâng cao vì ứng dụng thanh toán không hoạt động. Tuy nhiên, bạn có thể quyên góp chúng. Nhưng để bật các tính năng trả phí trong ứng dụng tự lưu trữ, bạn cần chạy lệnh sau từ thư mục Standard Notes.
Mã:
$ cd ~/standardnotes$ bash ./server.sh create-subscription [emailprotected]
Tải lại ứng dụng web và các tính năng trả phí sẽ được kích hoạt cho tài khoản của bạn.

Bước 10 - Cấu hình Máy chủ để tải tệp lên​

Tải tệp lên là tính năng trả phí của Standard Notes. Chúng tôi đã bật URL API tùy chỉnh để tải tệp lên. Nhưng chúng vẫn không hoạt động. Để chúng hoạt động, chúng tôi cần cấp quyền thích hợp cho thư mục uploads. Các tệp tải lên được lưu trữ trong thư mục ~/standardnotes/data/uploads. Chạy các lệnh sau để thay đổi quyền.
Mã:
$ chmod -R 775 data$ mkdir -p data/uploads$ sudo chmod -R 755 data/uploads$ sudo chown -R 1001.1001 data/uploads
Bây giờ, Standard Notes đặt số không làm giới hạn tải lên cho mọi người dùng. Điều đó có nghĩa là không người dùng nào có thể tải lên tệp trừ khi được cấp hạn ngạch theo cách thủ công. Do đó, bước cuối cùng để tải tệp lên hoạt động là bật hạn ngạch tệp cho tài khoản người dùng trả phí. Chúng ta có thể thực hiện điều đó bằng cách thực hiện truy vấn SQL bên trong vùng chứa cơ sở dữ liệu.

Đăng nhập vào shell MySQL bên trong vùng chứa Cơ sở dữ liệu.
Mã:
$ docker exec -it db-standalone mysql -u std_notes_user -pNhập mật khẩu:
Khi đã vào bên trong shell MySQL, hãy kiểm tra danh sách cơ sở dữ liệu.
Mã:
mysql > show databases;+--------------------+| Cơ sở dữ liệu |+------------------+| information_schema || standard_notes_db |+------------------+2 hàng trong tập hợp (0,00 giây)
Chuyển sang cơ sở dữ liệu Standard Notes.
Mã:
mysql > use standard_notes_db;
Chạy lệnh SQL sau để thêm hạn ngạch tệp 10 GB vào người dùng trả phí đã kích hoạt ở trên.
Mã:
mysql> INSERT INTO subscription_settings(uuid, name, value, created_at, updated_at, user_subscription_uuid) VALUES (UUID(), "FILE_UPLOAD_BYTES_LIMIT", 10737418240, FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), (SELECT us.uuid FROM user_subscriptions us INNER JOIN users u ON us.user_uuid=u.uuid WHERE u.email="[emailprotected]"));
Ở đây 10737418240 đề cập đến tổng số byte tương đương với 10GB. Bạn có thể sửa đổi số này thành bất kỳ số nào bạn cần.

Thoát khỏi shell MySQL và vùng chứa cơ sở dữ liệu.
Mã:
mysql > exit

Bước 11 - Kiểm tra Tải tệp lên​

Đăng nhập vào ứng dụng web Standard Notes và nhấp vào biểu tượng tệp đính kèm ở hàng trên cùng.



Nhấp vào nút Tải tệp lên và chọn tệp bạn muốn tải lên. Tệp sẽ tải lên thành công và bạn có thể thấy tệp được liệt kê bằng cách nhấp lại vào biểu tượng.



Nhấp vào ba dấu chấm trên tên tệp để hiển thị các tùy chọn bổ sung liên quan đến tệp.



Nhấp vào liên kết Đính kèm vào Ghi chú để thêm hình ảnh vào ghi chú. Các tùy chọn còn lại đều tự giải thích.

Kết luận​

Bài hướng dẫn về cài đặt và cấu hình máy chủ Standard Notes trên máy Ubuntu 22.04 của chúng tôi đã kết thúc. Nếu bạn có bất kỳ câu hỏi nào, hãy đăng chúng trong phần bình luận bên dưới.
 
Back
Bên trên