Win11下轻松搭建wiki.js,Docker.desktop部署指南(mysql+elasticsearch+kibana+wiki.js)

发布于:2025-05-18 ⋅ 阅读:(26) ⋅ 点赞:(0)

前言

环境和要求

系统环境:win11
配置要求:能跑得动文中服务总和的内存,8gb至少
软件环境:Docker desktop。https://www.docker.com/products/docker-desktop/

介绍

wiki.js作为一个维基站点,他同时需要两个数据库的支持。

  1. 正常的关系型数据库,用于用户信息等东西的存储,这里我们用Mysql。
  2. 一个专门用于海量数据查询的数据库,因为wiki内的数据量很大没用正常的数据库查询会很卡,所以需要用专门用于大数据查询的数据库,也就是ElasticSearch了。
  3. kibana则是ElasticSearch这个数据库的网页面板,通过它可以给ElasticSearch装点插件和维护和监控。如果只是单纯部署wiki.js的话不是必须的,不过还是写进来了。

所以我们要搭建wiki.js,要同时把这四个东西都给部署上去才行。好在部署这些东西只需要docker一个软件就够了,不需要我们去到处下载东西。

提前准备

  1. 在本文中,如无特殊说明,所有需要输入指令的地方都为docker.desktop终端的terminal(其实就是powerShell),在docker.desktop的红框处点一下即可打开。输入docker,没有出现报错时,就算准备完成了。如果出现报错,检查一下你的环境变量是否有把docker加进去,这部分请百度解决。

此外,如果在输入指令时遇到了一些通过不了的情况,可以参考本文最下方的合集,这里把我在部署时所遇到的所有问题都写上去了。如果这部分没有你所遇到的问题,再去自行deepseek。

在这里插入图片描述

  1. 其次,确保自己可以正常获取docker站点中的镜像,我们所需要的镜像一共有以下四个。
    • mysql(版本影响应该不大,最新版即可)
    • elasticsearch(不要选最新版,选择一个稳定的版本,文章中为8.18.0)
    • kibana(版本号要和elasticsearch一致,文章中为8.18.0)
    • requarks/wiki(版本影响应该不大,最新版即可)

在Docker Hub上面把这四个镜像下载(图中的pull按钮)下来,在Images中可以看得到这四个镜像,就算准备成功了。
在这里插入图片描述

1. elasticsearch

1.1 部署容器

首先我们需要创建一个wiki.js所有镜像共用的网络,名称可以自己定,后面需要填入network的部分就都填入你创建的这个就行。

docker network create es-net

然后检查一下是否创建成功:

docker network ls

在这里插入图片描述

输入以下指令以部署elasticsearch:

docker run -d `
--name es `
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" `
-e "discovery.type=single-node" `
-e "xpack.security.enabled=false" `
-v D:\docker\Elasticsearch\data:/usr/share/elasticsearch/data `
-v D:\docker\Elasticsearch\plugins:/usr/share/elasticsearch/plugins `
--privileged `
--network es-net `
-p 9200:9200 `
-p 9300:9300 `
elasticsearch:8.18.0

其中,ES_JAVA_OPTS是数据库的内存大小,discovery.type是节点模式,xpack.security.enabled是安全模块,是先按图上设置就行,等第一次部署上去没问题之后,可以再删掉容器重新部署。

注意,-v部分左边的内容,需要你改成自己的地址。

1.2 参数说明

第一次输入指令,所以有必要对docker指令内部的参数做一个详细说明。

指令 说明 填入内容
docker run -d 部署镜像时的固定前缀 /
--name 部署后容器的名字 随便取,喜欢就行,文中为es
-e 设置环境变量(env) 等号左边是名称,右边是具体的值
每个镜像都会有自己独特的环境变量,具体以镜像为准
-v 设置路径(volumns) 冒号左边是你电脑中具体的路径,自行设置
冒号右边是镜像的路径,一般来说每个镜像都有固定的写法
-p 端口号(port) 冒号左边是你电脑中的端口号,只要不重复怎么写都行
冒号右边是镜像的端口号,一般来说每个镜像都有固定的写法
嫌麻烦就和本文一样两边一样就行
--network 指定专有网络 填入已经创建好的网络
elasticsearch:8.18.0 要创建容器的镜像 在docker images里面可以看得到

1.3 验证容器是否部署成功

当部署上去之后,docker点击container,然后点击进入你创建的容器内,看看日志有没有很多同时有没有报错什么的。 不出意外是可以部署成功的。

在这里插入图片描述
最后再点击进入9200端口对应的地址,看看能不能正常访问,如果能正常访问,内容是这样的。
在这里插入图片描述
如果提示登录账号和密码的话(这种情况是因为你在安全验证的环境变量里面选了true)在这里插入图片描述
那么密码去这里找。

输入指令

# 进入到目标容器里面,es换成你创建时的容器名
docker exec -it es /bin/bash

# 重置密码
bin/elasticsearch-reset-password -u elastic -i

在输入密码和确认密码时,你敲字符他不会显示出来,这是正常现象,直接输入你的密码即可。

在这里插入图片描述
再次打开网页,用户名:elastic,密码:你刚刚重置的那个

2. kibana

2.1 部署容器

输入以下指令,生成一个KIBANA用的token

# 进入 Elasticsearch 容器
docker exec -it es /bin/bash

# 生成令牌(在容器内执行)
bin/elasticsearch-service-tokens create elastic/kibana kibana-token

# 终端应该是输出这么一行东西,把等于号后面的东西复制下来
SERVICE_TOKEN elastic/kibana/kinaba-token = AAEAAWVsYXN0aWMva2liYW5hL2tpbmFiYS10b2tlbjp6TzlNcXNDbFJIR3VrZFphejJzUk9n

输入以下指令

docker run -d `
--name kibana `
--network es-net `
-e ELASTICSEARCH_HOSTS="http://es:9200" `
-e ELASTICSEARCH_SERVICEACCOUNTTOKEN="AAEAAWVsYXN0aWMvXXXXXXXXXXXXXXXXXXXXXXX0U0lIVVFWU0U0QnBnMXNSZXlB" `
-e I18N_LOCALE=zh-CN `
-p 5601:5601 `
kibana:8.18.0
  • I18N_LOCALE=zh-CN是设置为中文。
  • ELASTICSEARCH_HOSTS是对应es容器的地址和端口号,填入内容:http://es的容器名:9200,
  • ELASTICSEARCH_SERVICEACCOUNTTOKEN是elasticsearch的授权token,也就是你刚刚复制的那一串

2.2 验证是否部署成功

进入对应的网页,如果有提示需要输入账号密码,那么就是你刚刚在elastic中的账号密码。能正常进入就算成功。
在这里插入图片描述

2.3 安装IK分词器

首先进入这个网页(下面的安装指令能正常执行的话跳过这一步也行)
https://github.com/infinilabs/analysis-ik/releases/tag/Latest

页面往下翻,直到出现红框这一部分,把其中的指令复制下来
在这里插入图片描述

输入指令

# 再次进入 Elasticsearch 容器
docker exec -it es /bin/bash

# 安装ik分词器,就是你刚刚复制的那个指令,但是版本号要改成你es的版本号,文章是8.18.0
bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.18.0

最后重启一下es容器即可。
在这里插入图片描述

3. MySql

3.1 部署容器

docker run -d `
--name mysql `
--network es-net `                 # 自定义网络(需先创建)
-e MYSQL_ROOT_PASSWORD=123456 `
-e MYSQL_DATABASE=wikijs `                # 初始化数据库
-e MYSQL_USER=wiki_user `                  # 创建普通用户
-e MYSQL_PASSWORD=123456 `
-v D:\docker\mysql\data:/var/lib/mysql `  # 数据持久化(Windows路径)
-v D:\docker\mysql\conf:/etc/mysql/conf.d ` # 挂载配置文件
-p 3306:3306 `
-p 33060:33060 `
--restart unless-stopped `                # 自动重启策略
mysql:latest `
--character-set-server=utf8mb4 `          # 字符集设置
--collation-server=utf8mb4_unicode_ci     # 排序规则

密码记得换,123456只是我临时填的,同时我们初始化时就已经将对应的数据库和账号创建好了。

3.2 增加数据库和wiki.js所需要的账号

数据库的对应网页无法点进去访问,这是正常现象,因为没有面板的情况下,我们只能通过指令来对数据库进行操作。

输入以下指令,确认数据库正常运行的同时,也我们的数据库和账号都正常被创建。

# 进入mysql数据库,名字要换成自己创建的容器
docker exec -it mysql /bin/bash

# 登录root账号,密码就是你创建容器时MYSQL_ROOT_PASSWORD对应的那个
mysql -u root -p

先看看自己待会要用的数据库在不在

SHOW DATABASES;

# 不在的话自己创建一个
CREATE DATABASE wikijs;

在这里插入图片描述

再看看自己待会要用的账号在不在,授予一下权限。

SELECT user, host FROM mysql.user;

# 如果用户不在,输入这一行指令,把用户先创建出来
CREATE USER 'wiki_user'@'%' IDENTIFIED BY 'RemotePass456!';

# 接下来给用户授予数据库的全部权限
# 该行指令的格式为:GRANT 权限类型 ON 数据库.表 TO '用户名'@'主机地址';
GRANT ALL PRIVILEGES ON wikijs.* TO 'wiki_user'@'%';

# 再刷新一下
FLUSH PRIVILEGES;

4. wiki.js

4.1 部署容器

上述准备全部都完成之后,最后部署wiki.js就是一条指令的事了。

docker run -d `
-p 3000:3000 `
--name wikijs `
--network es-net `
-e DB_TYPE=mysql `
-e DB_HOST=mysql `
-e DB_PORT=3306 `
-e DB_USER=wiki_user `
-e DB_PASS=123456 `
-e DB_NAME=wikijs `
-e SEARCH_TYPE=elasticsearch `
-e SEARCH_HOST=http://es:9200 `
-e SEARCH_INDEX_NAME=wikijs `
requarks/wiki:latest
  • DBTYPE:固定写mysql
  • DB_HOST:写mysql的容器名,也就是我们之前创建mysql容器时 --name 后面写的那个,本文里面也叫mysql。
  • DB_PORT:固定写3306,也就是mysql的实际端口号。
  • DB_USER,DB_PASS,DB_NAME:我们上一步中创建的账号密码和数据库名称,都丢进去。
  • SEARCH_TYPE:固定写elasticsearch。
  • SEARCH_HOST:格式(http://es容器名字:9200),其中es容器的名字也是当时创建时–name 后面写的那个,文中叫es。
  • SEARCH_INDEX_NAME=索引名称,如果这行不写他就默认是wiki了。

4.2 运行

部署完成后,如果有意外的话,在容器页面会显示他自动停止工作,如果持续运行就表示他在正常运转。
进入wiki的网页,如果能正常显示出内容,就表示我们已经成功部署了。在这里插入图片描述

5.3 设置中文

注册安装点击底部的install按钮,之后登录账号,点击右侧的ADMINISTRATION
在这里插入图片描述
点击左侧的Locale,就能在SiteLocale里面下载和选择语言版本了。

在这里插入图片描述

5. 常见问题

5.1 指令输入失败

-e : 无法将“-e”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
所在位置 行:2 字符: 3 --name es \ ~ 一元运算符“–”后面缺少表达式。

注意格式,在powershell中,如果我们需要输入多行的指令,每一行的最前面是不能有空格的。
同时,如果你查了别的指令中,人家的换行是反斜杠(\)的话,需要换成反引号(`)。
在每一行的反引号后面,也是不能有空格的。

bin/xxx : 无法将“bin/exxx”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检名称的拼写,如果包括路径,请确保路径正确,然后再试一次。

确保你已经进入了容器内。
判断方法:在powershell前面那部分如果显示的是你的盘符,就表示你没进入容器。如果显示的是镜像的名称,就表示你当前在容器内了。
在这里插入图片描述
顺便一提,退出容器的指令为:exit

5.2 安装IK分词器失败

ERROR: plugin directory [/usr/share/elasticsearch/plugins/analysis-ik] already exists; if you need to update the plugin, uninstall it first using command ‘remove analysis-ik’, with exit code 1

安装之前执行一下这个指令

bin/elasticsearch-plugin remove --purge analysis-ik
java.lang.IllegalArgumentException: Plugin [analysis-ik] was built for Elasticsearch version 8.4.1 but version 8.18.0 is running

确认一下IK分词器的版本号是否和es的版本号一致

5.3 数据库指令

敲回车没反应。

在这里插入图片描述
在数据库里面,敲回车不算是一个数据库语句的结束,结束的标志是分号(😉。

参考资料

DeepSeek R1

安装elasticsearch、kibana、IK分词器_安装ik分词器-CSDN博客
https://blog.csdn.net/weixin_55772633/article/details/135909350

进入docker容器内部操作mysql数据库_docker 进入mysql-CSDN博客
https://blog.csdn.net/m0_65152767/article/details/139812281


网站公告

今日签到

点亮在社区的每一天
去签到