# 基于docker快速搭建dokuwiki 本文使用的是[这个mprasil/dokuwiki](https://hub.docker.com/r/mprasil/dokuwiki)镜像。操作主要是在威联通的`Container station`进行的,但也需要ssh进去手动贴一下儿东西。在一般`linux`上干的话,把对应的信息翻译成命令即可。 ## 启动命令 数据目录绑定: ``` /share/Container/Volumes/Doku/lib/plugins:/dokuwiki/lib/plugins /share/Container/Volumes/Doku/lib/tpl:/dokuwiki/lib/tpl /share/Container/Volumes/Doku/conf:/dokuwiki/conf /share/Container/Volumes/Doku/log:/var/log /share/Container/Volumes/Doku/data:/dokuwiki/data ``` 权限均为读写。`/share/Container/Volumes/Doku/`是本机用来存放`doku`数据的根目录,目录结构需要事先建好。理论上不要求如此目录结构,只要有这五个目录就好。我这么安排是因为直接把数据导向了原本运行在本机的完整`doku`目录树。 ## 网络绑定 内部是80端口,需要转发的话用一般的NAT网络加绑定方法即可。 ## 时区设置 创建`Container`的时候需要传一个环境变量: `-e TZ=Asia/Shanghai` 如果忘了附加,也可以在创建后手动调整,见下一节。 ## 一些手动调整 ### 软件包 原版镜像甚至没有`vim`,省空间倒是真的,但`doku`这种搞一次能用几年的东西,也懒得用各种挂载去调参数。启动后用在主机用如下命令: ``` docker exec -it Doku /bin/bash ``` 即可附加一个`bash`环境上去,然后`apt update`再装`vim`。`Doku`是这个`Container`的名字。 ### 时区 编辑`/startup.sh`文件,在头部()加一行`TZ='Asia/Shanghai'; export TZ`: ``` #!/bin/bash TZ='Asia/Shanghai'; export TZ set -eu set -o pipefail # Updating DokuWiki may need to change files in directories which we hold in # volumes, e.g. `data` or `conf`. Therefore, we need to make sure these files ......... ``` 然后关掉再启动,时区应该正常了,但此时`docker exec -it Doku /bin/bash`进去的话`date`命令输出的时间仍然是伦敦时间。**一定要纠正那种“docker==虚拟机”的错觉。** ## 允许的最大附件上传 可以参考[[:Website:Maximum_uploading_file_size|多种服务器软件的最大上传附件限制文件汇总]]里面关于`php-cgi`和`lighttpd`的部分。 如果[[:Website:DOKU:reverse_proxy_for_duko|要用nginx做反向代理]],还需要在反向代理服务器中也设置一遍。 ## 文件和权限问题 由于绑定了`volume`,同时`container`内部又需要修改权限,可能会造成一些目录的权限会被更改成奇怪的样子,一般不影响运行,但是想从`docker`外面删除的时候会有麻烦,需要在主机用`sudo`,或者就是进入docker来删除。 需要装插件和主题的话,可以用扩展管理器。扩展管理器抽风的话,插件放到`Doku/lib/plugins`,主题放到`Doku/lib/plugins/tpl`,注意目录的名字是有要求的,具体什么名字去看你要安装的这个插件或者主题的说明。 这个手动机制也提供了一个挺好的排错方法。比如说由于升级造成某个插件一直报错,可以去`Doku/log`看谁在报错,然后删掉对应的目录就是卸载插件了。