Cách cài đặt Outline Knowledgebase Wiki trên Ubuntu bằng Docker

theanh

Administrator
Nhân viên
Outline là phần mềm cơ sở tri thức mã nguồn mở, cộng tác. Bạn có thể sử dụng nó để lưu trữ tài liệu và trang người hâm mộ hoặc thậm chí sử dụng nó để chia sẻ ghi chú. Nó bao gồm trình chỉnh sửa markdown và tích hợp với nhiều dịch vụ như Slack, Figma, Airtable, Google Docs, Trello, Zapier, Codepen, Spotify, Youtube, v.v. Nó có các tính năng bảo mật như nhóm người dùng có quyền đọc và ghi riêng biệt, cho phép chia sẻ công khai và có hỗ trợ RTL với bản dịch bằng 13 ngôn ngữ. Nó được xây dựng bằng React và Node.js. Có hai cách để sử dụng Outline. Một là phiên bản lưu trữ trên đám mây hoặc bạn có thể lưu trữ trên máy chủ của mình.

Hướng dẫn này sẽ hướng dẫn bạn cách cài đặt Outline Wiki trên máy chủ chạy Ubuntu bằng Docker.

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


  • Máy chủ chạy Ubuntu 20.04 với RAM tối thiểu 1GB.

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

  • Tên miền trỏ đến máy chủ. Chúng tôi sẽ sử dụng https://outline.example.com cho hướng dẫn của mình.

  • Một số ứng dụng cần thiết để bắt đầu.
Mã:
$ sudo apt install nano curl wget unzip gnupg

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

Bước đầu tiên là cấu hình tường lửa. Ubuntu đi kèm với ufw (Uncomplicated Firewall) theo mặc định.

Kiểm tra xem tường lửa có đang chạy không.
Mã:
$ sudo ufw status
Bạn sẽ nhận được kết quả sau.
Mã:
Status: inactive
Cho phép cổng SSH để tường lửa không làm gián đoạn kết nối hiện tại khi bật nó.
Mã:
$ sudo ufw allow OpenSSH
Cũng cho phép các cổng HTTP và HTTPS.
Mã:
$ sudo ufw allow 80$ sudo ufw allow 443
Bật Tường lửa.
Mã:
$ sudo ufw enableLệnh có thể làm gián đoạn các kết nối ssh hiện có. Tiến hành thao tác (y|n)? yTường lửa đang hoạt động và được bật khi khởi động hệ thống
Kiểm tra lại trạng thái của tường lửa.
Mã:
$ sudo ufw status
Bạn sẽ thấy đầu ra tương tự.
Mã:
Trạng thái: hoạt độngĐến Hành động Từ-- ------ ----OpenSSH ALLOW Anywhere80 ALLOW Anywhere443 ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)80 (v6) ALLOW Anywhere (v6)443 (v6) ALLOW Anywhere (v6)

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

Chúng ta sẽ cần cài đặt Docker bằng kho lưu trữ chính thức của nó. 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-archive-keyring.gpg
Thêm kho lưu trữ Docker vào hệ thống.
Mã:
$ echo \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.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 danh sách kho lưu trữ APT và cài đặt Docker.
Mã:
$ sudo apt update$ sudo apt install docker-ce
Kiểm tra xem Docker engine đã được cài đặt đúng chưa.
Mã:
$ docker --versionDocker phiên bản 20.10.14, bản dựng a224086
Thực hiện các lệnh sau để bạn không cần sử dụng sudo để chạy các lệnh Docker.
Mã:
$ sudo usermod -aG docker ${USER}$ su - ${USER}

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

Chạy lệnh sau để cài đặt Docker compose. Docker Compose đã được cập nhật lên v2.0 gần đây, trong đó có nhiều thay đổi đột phá. Chúng tôi sẽ sử dụng phiên bản 1.x mới nhất có sẵn từ trang phát hành Github.
Mã:
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Áp dụng quyền thực thi cho tệp nhị phân Docker compose.
Mã:
$ sudo chmod +x /usr/local/bin/docker-compose
Xác minh xem Docker Compose đã được cài đặt đúng chưa.
Mã:
$ docker-compose --versiondocker-compose phiên bản 1.29.2, bản dựng 5becea4c
Cài đặt hoàn tất lệnh cho Docker compose.
Mã:
$ sudo curl \ -L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose \ -o /etc/bash_completion.d/docker-compose$ source ~/.bashrc
Phần hướng dẫn cài đặt Docker và Docker compose hoàn tất.

Bước 4 - Tạo tệp môi trường cho Docker​

Cấu hình xác thực Slack​

Outline yêu cầu bạn cấu hình nhà cung cấp xác thực. Đối với hướng dẫn của chúng tôi, chúng tôi sẽ cấu hình đăng nhập dựa trên Slack.

Đăng nhập bằng tài khoản Slack của bạn và truy cập trang Ứng dụng API của Slack.



Nhấp vào nút Tạo ứng dụng để tiếp tục. Nhấp vào liên kết Từ đầu để tạo ứng dụng.



Chọn tên cho ứng dụng của bạn và chọn không gian làm việc nơi bạn muốn Ứng dụng của mình xuất hiện. Nếu bạn không muốn liên kết ứng dụng của mình với không gian làm việc hiện có, bạn có thể tạo một không gian làm việc khác và quay lại bước này.



Nhấp vào nút Tạo ứng dụng sau khi hoàn tất. Tiếp theo, cuộn xuống cuối trang và cung cấp cho ứng dụng của bạn mô tả, biểu tượng và màu nền.



Nhấp vào nút Lưu thay đổi sau khi hoàn tất. Chọn tùy chọn OAuth và Quyền từ thanh bên trái.



Thêm URL chuyển hướng https://outline.example.com/auth/slack.callback vào hộp được cung cấp và nhấp vào nút Thêm.



Nhấp vào nút Lưu URL để tiếp tục. Cuộn xuống phần Phạm vi mã thông báo người dùng của trang và chọn các phạm vi sau từ menu thả xuống.
  • identity.avatar
  • identity.basic
  • identity.email
  • identity.team


Quay lại trang Thông tin cơ bản từ thanh bên trái. Sao chép các giá trị Client IDClient Secret từ các hộp của chúng bên dưới App Credentials.


Cấu hình tích hợp Slack​

Truy cập tùy chọn Slash Commands từ thanh bên trái.



Nhấp vào nút New Command trên trang kết quả. Nhập /outline làm lệnh. Nhập https://outline.example.com/api/hooks.slack làm Request URL. Nhập mô tả cho lệnh của bạn và một từ làm gợi ý. Nhấp vào nút Save ở cuối khi hoàn tất.



Mở menu Features >> Interactivity and Shortcuts từ thanh bên trái. Bật Tương tác bằng cách chuyển nút chuyển đổi và dán https://outline.example.com/api/hooks.interactive làm URL Yêu cầu. Nhấp vào nút Lưu Thay đổi để hoàn tất.



Mở trang Cài đặt >> Cài đặt Ứng dụng từ thanh bên trái và nhấp vào nút Cài đặt vào Không gian làm việc để cài đặt Ứng dụng cho không gian làm việc Slack của bạn.



Truy cập trang Thông tin cơ bản từ thanh bên trái và sao chép các giá trị ID ứng dụngMã thông báo xác minh để tích hợp ứng dụng Slack.

Tạo Thông tin xác thực S3​

Tạo thùng S3 cho cài đặt Outline của bạn trên AWS hoặc bất kỳ dịch vụ tương thích với S3 nào. Sau khi tạo thùng, hãy thêm JSON chính sách sau để định cấu hình Chia sẻ tài nguyên gốc chéo (CORS). Thay thế giá trị của AllowedOrigins bằng URL Outline của bạn.
Mã:
[ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "PUT", "POST" ], "AllowedOrigins": [ "https://docs.mycompany.com" ], "ExposeHeaders": [] }, { "AllowedHeaders": [], "AllowedMethods": [ "GET" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [] }]
Tạo người dùng IAM với chính sách sau. Thay thế my-bucket-name bằng tên thực tế của thùng Outline S3 của bạn.
Mã:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor", "Effect": "Allow", "Action": [ "s3:GetObjectAcl", "s3:DeleteObject", "s3:PutObject", "s3:GetObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::my-bucket-name/*" } ]}
Bây giờ bạn đã tạo người dùng IAM, hãy tạo khóa truy cập và bí mật cho người dùng thùng của bạn.

Tạo khóa bí mật​

Tệp môi trường yêu cầu khóa bí mật và bí mật tiện ích. Chạy lệnh sau hai lần để tạo cả hai khóa.
Mã:
$ openssl rand -hex 32
Sao chép và lưu các giá trị này.

Tạo và chỉnh sửa tệp môi trường​

Tạo thư mục cho cài đặt docker cho Outline.
Mã:
$ mkdir ~/outline
Chuyển đến thư mục.
Mã:
$ cd ~/outline
Tạo tệp docker.env và mở tệp đó để chỉnh sửa. Tệp này sẽ lưu trữ tất cả các biến môi trường cần thiết cho quá trình cài đặt.
Mã:
$ nano docker.env
Dán mã sau vào đó. Nhập khóa bí mật và bí mật tiện ích đã tạo trước đó. Sao chép thông tin xác thực Slack đã tạo trước đó để xác thực và tích hợp ứng dụng. Nhập thông tin xác thực Amazon S3 của bạn như được chỉ định bên dưới.

Nếu bạn muốn sử dụng Google Analytics để theo dõi số liệu thống kê của ứng dụng Outline, hãy nhập ID Analytics của bạn vào trường bên dưới. Hiện tại, Outline không hỗ trợ thẻ GA4, vì vậy bạn sẽ phải nhập ID theo dõi cũ của mình.

Đối với biến WEB_CONCURRENCY, hãy chia ram hệ thống của bạn cho 512 và nhập giá trị gần đúng. Biến FORCE_HTTPS được đặt thành false vì chúng tôi đang sử dụng Nginx làm máy chủ proxy.
Mã:
# –––––––––––––––– BẮT BUỘC ––––––––––––––––SECRET_KEY=tạo_khóa_mớiUTILS_SECRET=tạo_khóa_mớiPOSTGRES_USER=outlinepgPOSTGRES_PASSWORD=mật_khẩu_của_bạnPOSTGRES_DB=outlineDATABASE_URL=postgres://outlinepg:mật_khẩu_của_bạn@localhost:5432/outlineDATABASE_URL_TEST=postgres://outlinepg:mật_khẩu_của_bạn@localhost:5432/outline-testPGSSLMODE=vô hiệu hóaREDIS_URL=redis:// localhost:6379URL=https://docs.example.comPORT=3000AWS_ACCESS_KEY_ID=get_a_key_from_awsAWS_SECRET_ACCESS_KEY=get_the_secret_of_above_keyAWS_REGION=us-east-2AWS_S3_UPLOAD_BUCKET_URL=https://my-bucket-name.s3.us-east-2.amazonaws.comAWS_S3_UPLOAD_BUCKET_NAME=my-bucket-nameAWS_S3_UPLOAD_MAX_SIZE=26214400AWS_S3_FORCE_PATH_STYLE=true# ––––––––––––––– XÁC THỰC ––––––––––––––SLACK_KEY=SLACK_SECRET=# –––––––––––––––– TÙY CHỌN ––––––––––––––––––GOOGLE_ANALYTICS_ID=UA-XXXXXXX-1SLACK_VERIFICATION_TOKEN=your_tokenSLACK_APP_ID=A0XXXXXXXSLACK_MESSAGE_ACTIONS=trueFORCE_HTTPS=falseENABLE_UPDATES=trueWEB_CONCURRENCY=2
Tệp trên dựa trên tệp mẫu từ kho lưu trữ Github của Outline. Nếu bạn cần cấu hình bất kỳ cài đặt bổ sung nào, bạn có thể sao chép chúng từ tệp đó vào tệp của mình.

Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Bước 5 - Tạo tệp Docker Compose cho Outline​

Tạo tệp docker-compose.yml và mở tệp đó để chỉnh sửa.
Mã:
$ nano docker-compose.yml
Dán mã sau vào đó.
Mã:
version: "3"services: outline: image: outlinewiki/outline:latest restart: always command: sh -c "yarn sequelize:migrate --env=production-ssl-disabled && yarn start --env=production-ssl-disabled" env_file: ./docker.env ports: - "3000:3000" depends_on: - postgres - redis redis: image: redis restart: always env_file: ./docker.env ports: - "6379:6379" volumes: - ./redis.conf:/redis.conf command: ["redis-server", "/redis.conf"] postgres: image: postgres restart: always env_file: ./docker.env ports: - "5432:5432" volumes: - database-data:/var/lib/postgresql/datavolumes: database-data:
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Bước 6 - Cài đặt Outline​

Cài đặt Outline bằng cách khởi động các container.
Mã:
$ docker-compose up -d
Kiểm tra trạng thái của các container.
Mã:
$ docker ps

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

Để cài đặt chứng chỉ SSL bằng Let's Encrypt, chúng ta cần tải xuống công cụ Certbot. Chúng ta sẽ sử dụng trình cài đặt gói Snapd cho việc đó.

Cài đặt trình cài đặt Snap.
Mã:
$ sudo apt install snapd
Đảm bảo rằng phiên bản Snapd của bạn được cập nhật.
Mã:
$ sudo snap install core && sudo snap refresh core
Cài đặt Certbot.
Mã:
$ sudo snap install --classic certbot
Sử dụng lệnh sau để đảm bảo 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
Tạo chứng chỉ SSL.
Mã:
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d outline.example.com
Lệnh trên sẽ tải xuống chứng chỉ vào thư mục /etc/letsencrypt/live/outline.example.com trên máy chủ của bạn.

Tạo Chứng chỉ nhóm Diffie-Hellman.
Mã:
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Tạo thư mục webroot thử thách để tự động gia hạn Let's Encrypt.
Mã:
$ sudo mkdir -p /var/lib/letsencrypt
Tạo Cron Job để gia hạn SSL. Nó sẽ chạy hàng ngày để kiểm tra chứng chỉ và gia hạn nếu cần. Để thực hiện việc đó, trước tiên, hãy tạo tệp /etc/cron.daily/certbot-renew và mở tệp đó để chỉnh sửa.
Mã:
$ sudo nano /etc/cron.daily/certbot-renew
Dán mã sau.
Mã:
#!/bin/shcertbot renew --cert-name outline.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Thay đổi quyền trên tệp tác vụ để làm cho tệp đó có thể thực thi được.
Mã:
$ sudo chmod +x /etc/cron.daily/certbot-renew

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

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

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.20.2
Bật dịch vụ Nginx.
Mã:
$ sudo systemctl enable nginx

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

Cho đến nay, Shlink đã chạy trên hệ thống cục bộ thông qua cổng 8080. Chúng tôi sẽ sử dụng Nginx để hoạt động như một proxy ngược để chạy trên miền của nó.

Tạo tệp cấu hình cho máy chủ Shlink trong /etc/nginx/conf.d thư mục.
Mã:
$ sudo nano /etc/nginx/conf.d/outline.conf
Dán mã sau vào đó.
Mã:
server { server_name outline.example.com; listen 443 ssl http2; listen [::]:443 ssl http2; access_log /var/log/nginx/outline.access.log; error_log /var/log/nginx/outline.error.log; ssl_certificate /etc/letsencrypt/live/outline.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/outline.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/outline.example.com/chain.pem; ssl_session_timeout 1 ngày; ssl_session_cache được chia sẻ: MozSSL: 10 phút; ssl_session_tickets tắt; ssl_protocols TLSv1.2 TLSv1.3; 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_stapling bật; ssl_stapling_verify bật; ssl_dhparam /etc/ssl/certs/dhparam.pem; vị trí / { proxy_pass http://localhost:3000; proxy_set_header Nâng cấp $http_upgrade; proxy_set_header Kết nối "Nâng cấp"; proxy_set_header Máy chủ $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Máy chủ $host; proxy_set_header Máy chủ $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect off; }}## Chuyển hướng HTTPSserver { listen 80; listen [::]:80; server_name outline.example.com; return 301 https://$host$request_uri;}
Sau khi hoàn tất, hãy lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Mở tệp /etc/nginx/nginx.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
Thêm dòng sau vào 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. Xác thực Nginx một lần nữa.

Xác minh cú pháp tệp cấu hình Nginx.
Mã:
$ sudo nginx -tnginx: cú pháp tệp cấu hình /etc/nginx/nginx.conf là oknginx: tệp cấu hình /etc/nginx/nginx.conf đã kiểm tra thành công
Khởi động máy chủ Nginx.
Mã:
$ sudo systemctl start nginx

Bước 10 - Truy cập Outline​

Khởi chạy miền https://outline.example.com trong trình duyệt của bạn và bạn sẽ được chào đón bằng trang sau.



Nhấp vào nút Tiếp tục với Slack để đăng nhập bằng Slack và kết nối không gian làm việc của bạn.



Sau khi đăng nhập, trang chủ Outline sẽ mở ra và bạn có thể bắt đầu làm việc trên nó.



Ứng dụng Outline cho Slack cho phép bạn tìm kiếm và dán liên kết đến bất kỳ tài liệu nào từ bên trong không gian làm việc của bạn. Để thực hiện, hãy mở không gian làm việc slack của bạn và nhập /outline <searchterm> vào tin nhắn và đăng chúng.



Ứng dụng sẽ tự động định vị tài liệu liên quan đến thuật ngữ tìm kiếm và đăng nó vào tin nhắn của bạn.


Bước 11 - Cập nhật Outline​

Để cập nhật wiki Outline, hãy chạy các lệnh sau. Lệnh đầu tiên sẽ tắt và xóa các vùng chứa. Lệnh thứ hai sẽ kéo phiên bản mới nhất của hình ảnh Docker cho Outline và các công cụ khác. Bạn có thể chạy các lệnh tương tự nếu bạn cần thực hiện bất kỳ thay đổi nào trong tệp Docker compose hoặc tệp môi trường.
Mã:
$ docker-compose down --remove-orphans$ docker-compose pull
Chạy lệnh sau để nâng cấp cơ sở dữ liệu.
Mã:
$ docker-compose run --rm outline yarn db:migrate --env=production-ssl-disabled
Khởi động vùng chứa mới bằng hình ảnh mới trong khi vẫn giữ nguyên dữ liệu của bạn.
Mã:
$ docker-compose up -d

Kết luận​

Đây là kết thúc hướng dẫn của chúng tôi về cách cài đặt Wiki Outline Knowledgebase trên máy chủ Ubuntu 20.04 bằng Docker. Nếu bạn muốn tìm hiểu thêm về Outline, bạn có thể theo dõi tài liệu chính thức của nó. 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