Hướng dẫn cài đặt Hedgedoc lên Ubuntu Server

Hướng dẫn cài đặt Hedgedoc lên Ubuntu Server

Giới thiệu

Hedgedoc là ứng dụng viết và chia sẻ Markdown. Với liên kết được chia sẻ, có thể cùng nhau sửa chữa.
Trước đây mình có giới thiệu Joplin, tuy nhiên ứng dụng này thì chủ yếu dùng cho mục đích cá nhân, tuy có thể chia sẻ nhưng người nhận chỉ có thể đọc được, không thể ghi lại. Tiền thân của Hedgedoccodimd.

Ưu điểm:

  • Chia sẻ.
  • Cùng sửa chữa tài liệu.
  • Mã nguồn mở.
  • Miễn phí, miễn phí và miễn phí.

Nhược điểm:

  • Không có ứng dụng cho điện thoại, máy tính. Chỉ có thể làm việc thông qua web.
    Với cá nhân mình thì vẫn sử dụng chính là Joplin, còn Hedgedoc để chia sẻ những notes mình muốn mọi người có thể cùng sửa.

Yêu cầu hệ thống

  • Ubuntu Server.
  • Nginx để làm Reverse Proxy.
  • NodeJS phiên bản 14.13.1 trở lên, tốt nhất là ở bản 16.
  • Tên miền với chứng chỉ SSL đã được lấy miễn phí từ Let's Encrypt.
  • Cơ sở dữ liệu, có thể dùng PostgreSQL, MySQL, MariaDB hoặc SQLite, ở đây mình dùng SQLite cho nhẹ.
sudo apt install sqlite3
  • Yarn
sudo npm install --global yarn
  • Để build được Hedgedoc thì cần hệ thống với ít nhất 2Gb RAM, tuy nhiên khi chạy chỉ tốn ~100Mb thôi.

Cài đặt

Tải về

Tải về phiên bản mới nhất ở đây, giải nén và di chuyển toàn bộ vào thư mục /opt/hedgedoc, truy cập vào thư mục opt/hedgedoc (Thời điểm mình cài phiên bản mới nhất là 1.9.7).

git clone -b 1.9.7 https://github.com/hedgedoc/hedgedoc.git
sudo mv hedgedoc /opt

Tiến hành cài đặt

sudo ./opt/hedgedoc/bin/setup

Thao tác này sẽ cài đặt các phụ thuộc và tạo các cấu hình ví dụ, chờ một chút để quá trình này thực hiện.
Cấu hình Hedgedoc, tạo file config.json

sudo nano /opt/hedgedoc/config.json

Và nhập vào nội dung như sau

{
  "production": {
    "domain": "hedgedoc.com",
    "loglevel": "info",
    "port": "3009",
    "protocolUseSSL": true,
    "useSSL": false,
    "sessionSecret": "ramdom-text-by-you",
    "allowAnonymous": true,
    "allowAnonymousEdits": false,
    "email": true,
	"allowEmailRegister": true,
    "allowGravatar": true,
    "defaultPermission": "private",
    "hsts": {
      "enable": true,
      "maxAgeSeconds": 31536000,
      "includeSubdomains": true,
      "preload": true
    },
    "cookiePolicy": "lax",
    "db": {
      "dialect": "sqlite",
      "storage": "./db.hedgedoc.sqlite"
    }
}

Trong thư mục opt/hedgedoc thì cũng có sẵn file config.json.example, bạn cũng có thể copy file đó và sửa theo nội dung như trên.

Tạo tài khoản

Tạo một tài khoản mới để sử dụng chạy Hedgedoc và cho tài khoản đó quyền truy cập thư mục /opt/hedgedoc.

sudo adduser hedgedoc
sudo usermod -aG sudo hedgedoc
sudo chown -R hedgedoc:hedgedoc /opt/hedgedoc
sudo chmod -R 775 /opt/hedgedoc

Đăng nhập vào tài khoản mới đó

su - <user>

Cài đặt Hedgedoc khởi động bằng systemd

Tạo file hedgedoc.service ở thư mục /etc/systemd/system/

/etc/systemd/system/hedgedoc.service

và nhập vào nội dung như sau

[Unit]
Description=hedgedoc
After=network.target

[Service]
Environment=NODE_ENV=production
Type=simple
ExecStart=node /opt/hedgedoc/app.js
User=hedgedoc
Group=hedgedoc
WorkingDirectory=/opt/hedgedoc
Restart=on-failure

[Install]
WantedBy=multi-user.target

Làm cho systemd nhận cấu hình mới, tải lại và khởi động Hedgedoc.

sudo systemctl daemon-reload
sudo systemctl enable --now hedgedoc.service
sudo systemctl start hedgedoc.service

Kiểm tra hoạt động chưa

systemctl status hedgedoc.service

Hiện ra như hình là được rồi đó, tốn khoảng 100Mb RAM nhé.

Cấu hình Nginx

Tạo file cấu hình Nginx

sudo nano /etc/nginx/sites-available/hedgedoc.com

Và nhập vào nội dung sau

map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
}
server {
        server_name hedgedoc.com;

        location / {
                proxy_pass http://127.0.0.1:3009;
                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;
        }

        location /socket.io/ {
                proxy_pass http://127.0.0.1:3009;
                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;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection $connection_upgrade;
        }

    listen [::]:443 ssl http2;
    listen 443 ssl http2;
    ssl_certificate /etc/letsencrypt/live/hedgedoc.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/hedgedoc.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

Ánh xạ, kiểm tra cấu hình không lỗi thì khởi động lại Nginx

sudo ln -s /etc/nginx/sites-available/hedgedoc.com /etc/nginx/sites-enabled/hedgedoc.com
sudo nginx -t
sudo systemctl restart nginx

Xong, giờ chúng ta truy cập vào Tên miền và tạo tài khoản để sử dụng.
Sau khi đăng ký tài khoản xong, nếu bạn không muốn bị đăng ký tự do, thì sửa file config.json, tìm dòng "allowEmailRegister": true thay true bằng false.

"allowEmailRegister": true,

và thay bằng

"allowEmailRegister": false,

Đây là ví dụ một Share note của mình. Chúc các bạn thành công.