前言

笔者所使用的是一台debian12云服务器,2h4g5Mbps,以及一个二级域名

Wiki.js初始化

安装nodejs及其套件

apt install -y npm node

下载wiki.js源码

wget https://github.com/Requarks/wiki/releases/latest/download/wiki-js.tar.gz
mkdir wiki
tar xzf wiki-js.tar.gz -C ./wiki
cd ./wiki
mv config.sample.yml config.yml

数据库配置

安装postgresql

apt install postgresql postgresql-contrib

创建数据库

sudo -u postgres psql
psql (15.8 (Debian 15.8-0+deb12u1))
Type "help" for help.

postgres=# CREATE DATABASE wiki;
CREATE DATABASE
postgres=# CREATE USER wikijs WITH PASSWORD 'wikijsrocks';
CREATE ROLE
postgres=# GRANT ALL PRIVILEGES ON DATABASE wiki TO wikijs;
GRANT
postgres=# \c wiki
You are now connected to database "wiki" as user "postgres".
wiki=# GRANT ALL PRIVILEGES ON SCHEMA public TO wikijs;
GRANT
wiki=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO wikijs;
GRANT
wiki=# GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO wikijs;
GRANT
postgres=# \q

检查连接

psql -U postgres -h localhost -d wiki

开启自启动

systemctl enable postgresql

更改config.yml中的数据库配置

db:
type: postgres
host: localhost
port: 5432
user: wikijs
pass: wikijsrocks
db: wiki

wiki.js install

node server 

成功开启后,访问http://ip:3000 来访问网站,根据引导进行配置,https配置,url填自己的域名(如wiki.example.com)

安装完成之后跳转到登录界面,可以注册管理员账号并登录,在左侧”locale”处可以下载中文的语言包并且切换应用

将wki.js用服务进行管理

创建一个“wiki”系统用户

useradd -r -s /bin/false wiki

授予wiki目录权限

chown -R wiki:wiki wiki目录
vim /etc/systemd/system/wiki.service

粘贴

[Unit]
Description=Wiki.js
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/node server #自己wiki/server的绝对路径
Restart=always
# Consider creating a dedicated user for Wiki.js here:
User=wiki
Environment=NODE_ENV=production
WorkingDirectory=/var/wiki #自己的wiki安装路径

[Install]
WantedBy=multi-user.target

重新加载system

systemctl daemon-reload

运行服务

systemctl start wiki

自启动

systemctl enable wiki

配置wiki.js SSL证书

申请一个SSL证书,个人是在腾讯云上申请的免费ssl证书,等待审核过后能够下载其中的.key和.crt

将.key私钥转换成.pem格式

openssl rsa -in wiki.example.com.key -out key.pem

.crt文件直接重命名为.pem

chmod 644 key.pem cert.pem

更改配置文件中的ssl处为:

ssl:
enabled: true
port: 3443
provider: custom

format: pem
key: /var/wiki/key.pem #私钥绝对路径
cert: /var/wiki/cert.pem #证书绝对路径
passphrase: null
dhparam: null

重启wiki服务即可

nginx反向代理

如果要配置nginx反向代理,则wiki.js的配置文件中不需要开启ssl,设置为false

vim /etc/nginx/sites-available/wiki

粘贴

# HTTP (80) -> HTTPS (443) 重定向
server {
listen 80;
listen [::]:80;
server_name wiki.example.com; # 你的域名
return 301 https://wiki.example.com$request_uri; # 301重定向到HTTPS
access_log /var/log/nginx/wiki.log; # 访问日志
}

# HTTPS 配置 (443)
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name wiki.example.com; # 你的域名
index index.html index.htm index.php default.html default.htm default.php;
root /var/wiki; # 网站根目录

# SSL 证书配置
ssl_certificate /etc/ssl/certs/yourdomain.cert.pem; # 替换为你的证书文件路径
ssl_certificate_key /etc/ssl/private/yourdomain.key.pem; # 替换为你的私钥文件路径
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3; # 只启用安全的 TLS 协议
ssl_prefer_server_ciphers on;
ssl_ciphers "TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
ssl_session_cache builtin:1000 shared:SSL:10m;

# 反向代理到后端 Wiki.js 服务
location / {
proxy_pass http://127.0.0.1:3000; # 反向代理到 Wiki.js 服务,假设它在本地 3000 端口运行
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_redirect off;
}

access_log /var/log/nginx/wiki.log; # 访问日志
}

设置软连接

ln -s /etc/nginx/sites-available/wiki /etc/nginx/sites-enabled/

检查nginx语法为ok

nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重启nginx

systemctl reload nginx

访问https:域名,成功访问