Docker.desktop部署wiki.js指南
- 前言
- 1. elasticsearch
- 2. kibana
- 3. MySql
- 4. wiki.js
- 5. 常见问题
-
- 5.1 指令输入失败
- 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作为一个维基站点,他同时需要两个数据库的支持。
- 正常的关系型数据库,用于用户信息等东西的存储,这里我们用Mysql。
- 一个专门用于海量数据查询的数据库,因为wiki内的数据量很大没用正常的数据库查询会很卡,所以需要用专门用于大数据查询的数据库,也就是ElasticSearch了。
- kibana则是ElasticSearch这个数据库的网页面板,通过它可以给ElasticSearch装点插件和维护和监控。如果只是单纯部署wiki.js的话不是必须的,不过还是写进来了。
所以我们要搭建wiki.js,要同时把这四个东西都给部署上去才行。好在部署这些东西只需要docker一个软件就够了,不需要我们去到处下载东西。
提前准备
- 在本文中,如无特殊说明,所有需要输入指令的地方都为docker.desktop终端的terminal(其实就是powerShell),在docker.desktop的红框处点一下即可打开。输入docker,没有出现报错时,就算准备完成了。如果出现报错,检查一下你的环境变量是否有把docker加进去,这部分请百度解决。
此外,如果在输入指令时遇到了一些通过不了的情况,可以参考本文最下方的合集,这里把我在部署时所遇到的所有问题都写上去了。如果这部分没有你所遇到的问题,再去自行deepseek。
- 其次,确保自己可以正常获取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