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

Docker.desktop部署wiki.js指南

  • 前言
    • 环境和要求
    • 介绍
    • 提前准备
  • 1. elasticsearch
    • 1.1 部署容器
    • 1.2 参数说明
    • 1.3 验证容器是否部署成功
  • 2. kibana
    • 2.1 部署容器
    • 2.2 验证是否部署成功
    • 2.3 安装IK分词器
  • 3. MySql
    • 3.1 部署容器
    • 3.2 增加数据库和wiki.js所需要的账号
  • 4. wiki.js
    • 4.1 部署容器
    • 4.2 运行
    • 5.3 设置中文
  • 5. 常见问题
    • 5.1 指令输入失败
          • -e : 无法将“-e”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
          • 所在位置 行:2 字符: 3 --name es \ ~ 一元运算符“--”后面缺少表达式。
          • bin/xxx : 无法将“bin/exxx”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
    • 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
          • java.lang.IllegalArgumentException: Plugin [analysis-ik] was built for Elasticsearch version 8.4.1 but version 8.18.0 is running
    • 5.3 数据库指令
          • 敲回车没反应。
  • 参考资料

前言

环境和要求

系统环境: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/81991.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PCB设计教程【入门篇】——电路分析基础-元件数据手册

前言 本教程基于B站Expert电子实验室的PCB设计教学的整理,为个人学习记录,旨在帮助PCB设计新手入门。所有内容仅作学习交流使用,无任何商业目的。若涉及侵权,请随时联系,将会立即处理 目录 前言 一、数据手册的重要…

【论文阅读 | AAAI 2025 | FD2-Net:用于红外 - 可见光目标检测的频率驱动特征分解网络】

论文阅读 | AAAI 2025 | FD2-Net:用于红外 - 可见光目标检测的频率驱动特征分解网络 1.摘要&&引言2. 方法2.1总体架构2.2特征分解编码器2.3多模态重建机制2.4训练损失 3.实验3.1实验设置3.2主要结果3.3消融研究 4.结论 题目:FD2-Net: Frequency-…

CAU人工智能class3 优化器

优化算法框架 优化思路 随机梯度下降 随机梯度下降到缺点: SGD 每一次迭代计算 mini-batch 的梯度,然后对参数进行更新,每次迭代更新使用的梯度都只与本次迭代的样本有关。 因为每个批次的数据含有抽样误差,每次更新可能并不会 …

webpack 学习

webpack打包流程及原理 Webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。在 Web 开发中,它主要用于将各种资源(如 JavaScript、CSS、图片等)打包成浏览器可以直接运行的文件。Webpack 的核…

HTML5中的Microdata与历史记录管理详解

HTML5中的Microdata与历史记录管理解析 一、Microdata结构化数据 核心属性 itemscope 声明数据范围itemtype 指定数据词汇表&#xff08;如http://schema.org/Product&#xff09;itemprop 定义数据属性 <div itemscope itemtype"http://schema.org/Book">…

《算法笔记》11.7小节——动态规划专题->背包问题 问题 A: 装箱问题

【问题描述】 有一个箱子的容量为V&#xff08;V为正整数&#xff0c;且满足0≤V≤20000&#xff09;&#xff0c;同时有n件物品&#xff08;0的体积值为正整数。 要求从n件物品中&#xff0c;选取若干装入箱内&#xff0c;使箱子的剩余空间最小。 输入&#xff1a; 1行整数&a…

Compose笔记(二十五)--Brush

这一节主要了解一下Compose中Brush,在Jetpack Compose里&#xff0c;Brush是一个重要的 API&#xff0c;它用于定义填充图形的颜色渐变或图案&#xff0c;能够为界面元素添加丰富的视觉效果。简单总结如下: 1 常见场景 填充形状&#xff08;圆形、矩形等&#xff09; 创建渐变…

离线服务器Python环境配置指南

离线服务器Python环境配置指南&#xff1a;避坑与实战 0. 场景分析&#xff1a;当服务器与世隔绝时 典型困境&#xff1a; 无法访问国际网络&#xff08;如PyPI、Conda官方源&#xff09;服务器处于内网隔离环境安全策略限制在线安装 解决方案矩阵&#xff1a; 方法适用场…

Mac下载bilibili视频

安装 安装 yt-dlp brew install yt-dlp安装FFmpeg 用于合并音视频流、转码等操作 brew install ffmpeg使用 下载单个视频 查看可用格式 yt-dlp -F --cookies-from-browser chrome "https://www.bilibili.com/video/BV15B4y1G7F3?spm_id_from333.788.recommend_more_vid…

常见的实时通信技术(轮询、sse、websocket、webhooks)

1. HTTP轮询&#xff1a;最老实的办法 刚开始做实时功能时&#xff0c;我第一个想到的就是轮询。特别简单直白&#xff0c;就像你每隔5分钟就刷新一次朋友圈看看有没有新消息一样。 短轮询&#xff1a;勤快但费劲 短轮询就是客户端隔三差五地问服务器&#xff1a;"有新…

Elasticsearch Fetch阶段面试题

Elasticsearch Fetch阶段面试题 🚀 目录 基础原理性能优化错误排查场景设计底层机制总结基础原理 🔍 面试题1:基础原理 题目: 请描述Elasticsearch分布式搜索中Query阶段和Fetch阶段的工作流程,为什么需要将搜索过程拆分为这两个阶段? 👉 点击查看答案 查询流程…

vr制作公司提供什么服务?

随着科技的迅猛进步&#xff0c;虚拟现实&#xff08;Virtual Reality&#xff0c;简称VR&#xff09;技术已经悄然渗透到我们的日常生活与工作中&#xff0c;成为推动数字化转型的重要力量。VR制作公司&#xff0c;作为前沿领域的探索者和实践者&#xff0c;以专业的技术和创新…

COCO数据集神经网络性能现状2025.5.18

根据当前搜索结果&#xff0c;截至2025年5月&#xff0c;COCO数据集上性能最佳的神经网络模型及其关键参数如下&#xff1a; 1. D-FINE&#xff08;中科大团队&#xff09; 性能参数&#xff1a; 在COCO数据集上以78 FPS的速度实现了59.3%的平均精度&#xff08;AP&#xff0…

Sentinel原理与SpringBoot整合实战

前言 随着微服务架构的广泛应用&#xff0c;服务和服务之间的稳定性变得越来越重要。在高并发场景下&#xff0c;如何保障服务的稳定性和可用性成为了一个关键问题。阿里巴巴开源的Sentinel作为一个面向分布式服务架构的流量控制组件&#xff0c;提供了从流量控制、熔断降级、…

Ubuntu 20.04 报错记录: Matplotlib 无法使用 OpenCV 的 libqxcb.so

网上查了一下这个报错&#xff0c;有很多解决方案&#xff0c;但是都不是针对 OpenCV 触发的这种 qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in " */lib/*/site-packages/cv2/qt/plugins" even though it was found. 本文的方案是牺牲 …

配置代理服务器访问github、google

配置代理服务器访问github、google 背景与原理配置环境配置步骤云主机配置Windows客户端创建SSH隧道安装 Windows 内置 OpenSSHssh config 配置文件创建动态代理隧道 浏览器代理设置 验证浏览器访问google、githubssh 访问github 背景与原理 由于网络政策限制&#xff0c;中国…

网络学习-利用reactor实现http请求(六)

一、实现HTTP请求 1、印象里面&#xff0c;总有人说C/C语言不能实现HTTP请求&#xff0c;其实不然。C/C语言完全可以实现HTTP请求。通过对select,poll,epoll等IO多路复用技术的学习以及reactor模式的学习&#xff0c;完全能够实现HTTP请求。 2、webserver 主要解决两个问题 …

【VSCode】修改侧边文件资源管理器中的文件夹折叠模式

默认为紧凑模式&#xff1a; 然后我们勾选该项为宽松模式&#xff1a;

信息化时代国产主板如何防止信息泄露?

在数字化时代&#xff0c;每一份机密的泄露都可能成为我们的致命伤&#xff0c;尤其是如今网络如此发达的5G时代&#xff0c;如何防止网络信息泄密&#xff0c;已经成为每个人必须直面的问题。随着网络安全问题日益严重&#xff0c;企业和个人对网络安全的重视程度不断加深&…

vue的简单使用

1.vue的引入 引入函数&#xff0c;创建createApp对象 <div id"app">{{ message }}</div><script type"module">import { createApp, ref } from https://unpkg.com/vue3/dist/vue.esm-browser.jscreateApp({setup() {const message re…