Cách cài đặt Wiki.js trên Rocky Linux 9

theanh

Administrator
Nhân viên
Wiki.js là phần mềm wiki nhẹ, mã nguồn mở. Nó được xây dựng trên nền tảng JavaScript Node.js. Nó có thể được sử dụng để viết tài liệu, wiki và nội dung web bằng trình soạn thảo Markdown dành cho nhà phát triển và trình soạn thảo WYSIWYG dành cho những người không rành về kỹ thuật. Nó hỗ trợ nhiều loại nội dung bao gồm sơ đồ UML, biểu thức Toán học sử dụng cú pháp Tex hoặc MathML và mã. Nó bao gồm nhiều mô-đun cho nhiều chức năng khác nhau bao gồm phân tích, xác thực, ghi nhật ký, công cụ tìm kiếm của bên thứ ba và nhiều dịch vụ lưu trữ để đồng bộ hóa nội dung của bạn.

Trong hướng dẫn này, bạn sẽ học cách cài đặt Wiki.js trên máy chủ Rocky Linux 9 bằng cơ sở dữ liệu PostgreSQL và máy chủ Nginx để tạo proxy.

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


  • Máy chủ chạy Rocky Linux 9.

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

  • Tên miền đủ điều kiện (FQDN) trỏ đến máy chủ của bạn. Đối với mục đích của chúng tôi, chúng tôi sẽ sử dụng wiki.example.com làm tên miền.

  • Đảm bảo mọi thứ đã được cập nhật.
Mã:
$ sudo dnf update
[*]
Cài đặt các gói tiện ích cơ bản. Một số trong số chúng có thể đã được cài đặt.
Mã:
$ sudo dnf install wget curl nano unzip yum-utils -y

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. Rocky Linux sử dụng Tường lửa Firewalld. Kiểm tra trạng thái của tường lửa.
Mã:
$ sudo firewall-cmd --state
running
Tường lửa hoạt động với nhiều vùng khác nhau và vùng công cộng là vùng mặc định mà chúng ta sẽ sử dụng. Liệt kê tất cả các dịch vụ và cổng đang hoạt động trên tường lửa.
Mã:
$ sudo firewall-cmd --permanent --list-services
Nó sẽ hiển thị đầu ra sau.
Mã:
cockpit dhcpv6-client ssh
Wiki.js cần các cổng HTTP và HTTPS để hoạt động. Mở chúng ra.
Mã:
$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --add-service=https --permanent
Tải lại tường lửa để áp dụng các thay đổi.
Mã:
$ sudo firewall-cmd --reload

Bước 2 - Cài đặt PostgreSQL và Tiện ích​

Rocky Linux 9 đi kèm với phiên bản PostgreSQL cũ hơn. Chúng tôi sẽ cài đặt Postgres 14 cho hướng dẫn của mình.

Cài đặt kho lưu trữ RPM cho PostgreSQL.
Mã:
$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Cài đặt máy chủ PostgreSQL 14.
Mã:
$ sudo dnf install -y postgresql14-server postgresql14-contrib
Khởi tạo cơ sở dữ liệu.
Mã:
$ sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
Kích hoạt và khởi động dịch vụ PostgreSQL.
Mã:
$ sudo systemctl enable postgresql-14 --now
Kiểm tra trạng thái của dịch vụ.
Mã:
$ sudo systemctl status postgresql-14
? postgresql-14.service - PostgreSQL 14 database server Loaded: loaded (/usr/lib/systemd/system/postgresql-14.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2022-10-22 09:52:41 UTC; 2s ago Docs: https://www.postgresql.org/docs/14/static/ Process: 103857 ExecStartPre=/usr/pgsql-14/bin/postgresql-14-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS) Main PID: 103862 (postmaster) Tasks: 8 (limit: 5915) Memory: 16.6M CPU: 61ms CGroup: /system.slice/postgresql-14.service ??103862 /usr/pgsql-14/bin/postmaster -D /var/lib/pgsql/14/data/ ??103863 "postgres: logger " ??103865 "postgres: checkpointer " ??103866 "postgres: background writer " ??103867 "postgres: walwriter " ??103868 "postgres: autovacuum launcher " ??103869 "postgres: stats collector " ??103870 "postgres: logical replication launcher "
Oct 22 09:52:41 wiki.example.com systemd[1]: Starting PostgreSQL 14 database server...

Bước 3 - Cấu hình PostgreSQL​

Đăng nhập vào shell PostgreSQL.
Mã:
$ sudo -i -u postgres psql
Tạo cơ sở dữ liệu mới cho Wiki.js.
Mã:
postgres=# CREATE DATABASE wikidb;
Tạo người dùng cơ sở dữ liệu mới với mật khẩu mạnh.
Mã:
postgres=# CREATE USER wikiuser WITH ENCRYPTED PASSWORD 'wikipassword';
Cấp quyền cho người dùng sử dụng cơ sở dữ liệu.
Mã:
postgres=# GRANT ALL PRIVILEGES ON DATABASE wikidb TO wikiuser;
Thoát khỏi Postgres Shell.
Mã:
postgres=# \q

Bước 4 - Cài đặt Node.js​

Wiki.js hỗ trợ Node v16 tại thời điểm viết hướng dẫn này.

Cài đặt kho lưu trữ Node bằng cách sử dụng lệnh sau lệnh.
Mã:
$ curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -
Cài đặt Node.
Mã:
$ sudo dnf install nodejs -y
Xác minh Node cài đặt.
Mã:
$ node --version
v16.18.0

Bước 5 - Tải xuống Wiki.js​

Tạo một thư mục để cài đặt Wiki.js.
Mã:
$ sudo mkdir -p /var/www/wikijs
Đặt người dùng hiện đang đăng nhập làm chủ sở hữu của thư mục.
Mã:
$ sudo chown $USER:$USER /var/www/wikijs
Chuyển sang thư mục và tải xuống kho lưu trữ mã Wiki.js.
Mã:
$ cd /var/www/wikijs && wget https://github.com/Requarks/wiki/releases/latest/download/wiki-js.tar.gz
Giải nén tệp đã tải xuống archive.
Mã:
$ tar xzf wiki-js.tar.gz

Bước 6 - Cấu hình và chạy Wiki.js​

Tạo tệp cấu hình từ mẫu.
Mã:
$ cp config.sample.yml config.yml
Mở tệp cấu hình cho chỉnh sửa.
Mã:
$ nano config.yml
Tìm các thiết lập cơ sở dữ liệu sau và cập nhật các giá trị của chúng bằng các giá trị được cấu hình ở bước 3.
Mã:
# PostgreSQL / MySQL / MariaDB / MS SQL Server only:
host: localhost
port: 5432
user: wikiuser
pass: wikipassword
db: wikidb
ssl: false
Tìm dòng bindIP: 0.0.0.0 và cập nhật như sau.
Mã:
bindIP: 127.0.0.1
Điều này sẽ khiến WIki.js lắng nghe địa chỉ vòng lặp vì chúng ta sẽ sử dụng proxy Nginx để truy cập nó từ bên ngoài.

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

Chạy Wiki.js bằng cách sử dụng lệnh sau lệnh.
Mã:
$ node server
Bạn sẽ nhận được thông báo tương tự xác nhận cài đặt thành công.
Mã:
2022-10-22T10:25:48.187Z [MASTER] info: =======================================
2022-10-22T10:25:48.190Z [MASTER] info: = Wiki.js 2.5.289 =====================
2022-10-22T10:25:48.191Z [MASTER] info: =======================================
2022-10-22T10:25:48.191Z [MASTER] info: Initializing...
2022-10-22T10:25:49.079Z [MASTER] info: Using database driver pg for postgres [ OK ]
2022-10-22T10:25:49.086Z [MASTER] info: Connecting to database...
2022-10-22T10:25:49.117Z [MASTER] info: Database Connection Successful [ OK ]
2022-10-22T10:25:49.467Z [MASTER] warn: DB Configuration is empty or incomplete. Switching to Setup mode...
2022-10-22T10:25:49.468Z [MASTER] info: Starting setup wizard...
2022-10-22T10:25:49.740Z [MASTER] info: Starting HTTP server on port 3000...
2022-10-22T10:25:49.741Z [MASTER] info: HTTP Server on port: [ 3000 ]
2022-10-22T10:25:49.745Z [MASTER] info: HTTP Server: [ RUNNING ]
2022-10-22T10:25:49.745Z [MASTER] info: .......................................
2022-10-22T10:25:49.745Z [MASTER] info:
2022-10-22T10:25:49.746Z [MASTER] info: Browse to http://YOUR-SERVER-IP:3000/ to complete setup!
Nhấn Ctrl + C để dừng quá trình.

Bước 7 - Thiết lập Dịch vụ Systemd​

Quá trình trên để giữ Wiki.js chạy là tạm thời. Để quá trình này diễn ra vĩnh viễn, chúng ta sẽ cần tạo một dịch vụ systemd cho Wiki.js để chạy nó như một dịch vụ nền. Điều này sẽ cho phép Wiki.js chạy khi khởi động lại hệ thống.

Tạo một tệp dịch vụ systemd cho Wiki.js và mở tệp đó để chỉnh sửa.
Mã:
$ sudo nano /etc/systemd/system/wikijs.service
Dán mã sau vào đó. Thay thế giá trị của biến User bằng tên người dùng hệ thống của bạn.
Mã:
[Unit]
Description=Wiki.js
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/node server
Restart=always
User=navjot
Environment=NODE_ENV=production
WorkingDirectory=/var/www/wikijs
[Install]
WantedBy=multi-user.target
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Tải lại hệ thống daemon.
Mã:
$ sudo systemctl daemon-reload
Kích hoạt dịch vụ Wiki.js.
Mã:
$ sudo systemctl enable wikijs

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

Rocky Linux được tích hợp sẵn 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.

Tạo và mở tệp /etc/yum.repos.d/nginx.repo để tạo kho lưu trữ Nginx chính thức.
Mã:
$ sudo nano /etc/yum.repos.d/nginx.repo
Dán mã sau vào đó.
Mã:
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Cài đặt máy chủ Nginx.
Mã:
$ sudo dnf install nginx -y
Xác minh cài đặt.
Mã:
$ nginx -v
nginx version: nginx/1.22.1
Bật và khởi động máy chủ Nginx.
Mã:
$ sudo systemctl enable nginx --now
Kiểm tra trạng thái của máy chủ.
Mã:
$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2022-10-22 11:15:39 UTC; 49min ago Docs: http://nginx.org/en/docs/ Process: 116236 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 116237 (nginx) Tasks: 2 (limit: 5915) Memory: 5.0M CPU: 245ms CGroup: /system.slice/nginx.service ??116237 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf" ??116238 "nginx: worker process"
Oct 22 11:15:39 wiki.example.com systemd[1]: Starting nginx - high performance web server...

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

Chúng ta sẽ sử dụng công cụ Certbot bằng công cụ Snapd để cấp chứng chỉ SSL. Công cụ này yêu cầu kho lưu trữ EPEL để hoạt động.
Mã:
$ sudo dnf install epel-release
Chúng ta sẽ sử dụng Snapd để cài đặt Certbot. Cài đặt Snapd.
Mã:
$ sudo dnf install snapd
Kích hoạt và khởi động dịch vụ Snap.
Mã:
$ sudo systemctl enable snapd.socket --now
Tạo các liên kết cần thiết cho Snapd tới làm việc.
Mã:
$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh
Cài đặt kho lưu trữ Snapd cốt lõi.
Mã:
$ sudo snap install core
$ sudo snap refresh core
Cài đặt Certbot.
Mã:
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Tạo chứng chỉ. Lệnh sau cũng sẽ tự động cấu hình Nginx.
Mã:
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d wiki.example.com
Lệnh trên sẽ tải xuống chứng chỉ vào thư mục /etc/letsencrypt/live/wiki.example.com trên máy chủ của bạn.

Tạo nhóm Diffie-Hellman chứng chỉ.
Mã:
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Thực hiện chạy thử quy trình để kiểm tra xem quá trình gia hạn SSL có hoạt động tốt không.
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 10 - Cấu hình SELinux​

Chạy các lệnh sau để áp dụng ngữ cảnh SELinux chính xác vào thư mục Wiki.js.
Mã:
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/wikijs(/.*)?"
$ sudo restorecon -Rv /var/www/wikijs
Tạo một cổng cho HTTP và gán cho 3000 để Wiki.js hoạt động với SELinux.
Mã:
$ sudo semanage port -a -t http_port_t -p tcp 3000
Cho phép Nginx kết nối với mạng.
Mã:
$ sudo setsebool -P httpd_can_network_connect 1

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

Tạo và mở tệp /etc/nginx/conf.d/wikijs.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/conf.d/wikijs.conf
Dán mã sau vào đó.
Mã:
# enforce HTTPS
server { listen 80; listen [::]:80; server_name wiki.example.com; return 301 https://$server_name$request_uri;
}
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name wiki.example.com; root /var/www/wikijs; access_log /var/log/nginx/wiki.access.log; error_log /var/log/nginx/wiki.error.log; http2_push_preload on; # Enable HTTP/2 Server Push ssl_certificate /etc/letsencrypt/live/wiki.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/wiki.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/wiki.example.com/chain.pem; ssl_session_timeout 1d; # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC). ssl_protocols TLSv1.2 TLSv1.3; # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to # prevent replay attacks. # # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data ssl_early_data on; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384'; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:50m; # OCSP Stapling --- # fetch OCSP records from URL in ssl_certificate and cache them ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; add_header X-Early-Data $tls1_3_early_data; location / { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_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_pass http://127.0.0.1:3000; }
}
# This block is useful for debugging TLS v1.3. Please feel free to remove this
# and use the `$ssl_early_data` variable exposed by NGINX directly should you
# wish to do so.
map $ssl_early_data $tls1_3_early_data { "~." $ssl_early_data; default "";
}
Thay thế vị trí gốc trong tệp trên bằng thư mục trên máy chủ của bạn.

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 minh Nginx của bạn cấu hình.
Mã:
$ sudo nginx -t
Nếu bạn không thấy lỗi nào, điều đó có nghĩa là bạn đã sẵn sàng.

Khởi động dịch vụ Wiki.js.
Mã:
$ sudo systemctl start wikijs
Tải lại Nginx máy chủ.
Mã:
$ sudo systemctl reload nginx

Bước 12 - Hoàn tất cài đặt​

Truy cập URL https://wiki.example.com để hoàn tất cài đặt.



Điền thông tin tài khoản quản trị viên và URL. Tắt Telemetry bằng cách bỏ chọn tùy chọn Cho phép Telemetry. Bạn cũng có thể tắt nó từ bảng điều khiển Quản trị. Nhấp vào nút Cài đặt để tiếp tục.

Bạn sẽ được đưa đến trang đăng nhập.



Nhập thông tin tài khoản của bạn và nhấp vào nút Đăng nhập để tiếp tục đến trang quản trị.



Bây giờ bạn có thể bắt đầu sử dụng Wiki.js.

Kết luận​

Đây là phần kết thúc hướng dẫn của chúng tôi, trong đó bạn đã học cách cài đặt Wiki.js trên máy chủ Rocky Linux 9. 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