为学校搭建竞赛wiki
==123==
起因
- 发现竞赛的弱校,无论是CTF/ACM亦或着是其他的竞赛。都有几个痛点
- 出现人才断层,即俩三届无人可用 ^ff33c2
- 出现知识断层,没人也就无人传授知识点
- 第一种情况我们无法避免,只能招新时扩大宣传力度。
- 第二种完全可以避免,如何传授知识,除了面对面。那便只有文字.
突然某一天意识到有wiki的存在
那便整一个
wiki的选择
- 语雀
- 优点:在线,免费,美观
- 缺点:团队版需付费
- wiki.js
- nodejs
- 优点:强大,美观,权限控制严格,脱离传统文件夹结构
- 缺点:2h2gserver起步,
- MediaWiki
- 优点:强大
- 缺点:折腾,太折腾
- DokuWiki
- 优点:轻量化,部署快
- 缺点:丑,且权限不严格
- MinDoc
- 优点:美观,部署快,轻量化
- 缺点:官网的css都失效了,权限不够严格
- BookStack
- 优点:强大
- 缺点:功能多余,丑
还有很多不一一列举了,最终选择了wiki.js
理由是权限严格,同时刚好wiki可以给多个工作室用。多个竞赛用来分享知识点。
服务器的选择
- 选择了海外腾讯云。搞活动便宜了一些
- 为何不选国内?备案太过于繁琐。
- 为何不选国外主机厂商?国外厂商更贵233
上线wiki.js
- 轻量服务器,选择的是宝塔+centos
- 首先安装docker。可参考官网docker安装教程
https://docs.docker.com/engine/install 在下面有个列表,选择对应的系统,之后复制粘贴即可,这里以[centos](Install Docker Engine on CentOS | Docker Documentation)为例:
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
测试docker,运行以下俩条命令,显示hello world可以了。
sudo systemctl start docker
sudo docker run hello-world
- 参考官方安装指南,
# Create installation directory for Wiki.js
mkdir -p /etc/wiki
# Generate DB secret
openssl rand -base64 32 > /etc/wiki/.db-secret
# Create internal docker network
docker network create wikinet
# Create data volume for PostgreSQL
docker volume create pgdata
# Create the containers
docker create --name=db -e POSTGRES_DB=wiki -e POSTGRES_USER=wiki -e POSTGRES_PASSWORD_FILE=/etc/wiki/.db-secret -v /etc/wiki/.db-secret:/etc/wiki/.db-secret:ro -v pgdata:/var/lib/postgresql/data --restart=unless-stopped -h db --network=wikinet postgres:11
docker create --name=wiki -e DB_TYPE=postgres -e DB_HOST=db -e DB_PORT=5432 -e DB_PASS_FILE=/etc/wiki/.db-secret -v /etc/wiki/.db-secret:/etc/wiki/.db-secret:ro -e DB_USER=wiki -e DB_NAME=wiki -e UPGRADE_COMPANION=1 --restart=unless-stopped -h wiki --network=wikinet -p 80:3000 -p 443:3443 ghcr.io/requarks/wiki:2
docker create --name=wiki-update-companion -v /var/run/docker.sock:/var/run/docker.sock:ro --restart=unless-stopped -h wiki-update-companion --network=wikinet ghcr.io/requarks/wiki-update-companion:latest
ufw设置一波,也可以用iptables,firewall都可以。
sudo ufw allow http
sudo ufw allow https
sudo ufw --force enable
- 启动wiki
docker start db
docker start wiki
docker start wiki-update-companion
这时候就可以访问了,ip直接访问,默认是只有80端口
- 启用https
- 这里用Let’s Encryp 来演示,还是参考官网文档
docker stop wiki
docker rm wiki
docker create --name=wiki -e LETSENCRYPT_DOMAIN=wiki.example.com -e LETSENCRYPT_EMAIL=admin@example.com -e SSL_ACTIVE=1 -e DB_TYPE=postgres -e DB_HOST=db -e DB_PORT=5432 -e DB_PASS_FILE=/etc/wiki/.db-secret -v /etc/wiki/.db-secret:/etc/wiki/.db-secret:ro -e DB_USER=wiki -e DB_NAME=wiki -e UPGRADE_COMPANION=1 --restart=unless-stopped -h wiki --network=wikinet -p 80:3000 -p 443:3443 ghcr.io/requarks/wiki:2
# 注意:,将admin@example.com 换成你自己的邮箱,将wiki.example.com换成你的域名。
# 最后启动即可
docker start wiki
注: 访问需要手动加上https,如果想直接重定向,需要进wiki后台更改,有可视化GUI界面
后续配置
- 分配权限
- 需求:
- 内部wiki,外部不可以访问
- 分ACM,CTF,游戏开发三个大类
- 所有人都可以查看所有文档,但只能修改自己工作室的。
- 需一个普通管理增加用户和分配权限
以下是权限分配
- 关于group(组)和页面规则,可以康康官网的文档
- 个人理解,页面规则是组的的详细配置,具体配置。一个组里面更详细的分配,某个目录可以访问/修改,某个目录禁止访问/修改
w:write(写入权限)r:read(读取权限)- 组可以定义成员的具体权限,具体可以访问/编辑哪个目录。
- 用户可以加入多个组,叠加权限
实现以上需求看图

- 关于文件目录与传统目录的区别
- 愚见:不用像传统目录先创建文件夹,在创建文件。直接创建文件
具体请看 官方文档

更多功能
- 后台具有很多功能,包括主题
- 备份
- 注意备份:只备份md文件。
- 使用git进行备份。由于是docker安装,所以直接用ssh方式,私钥填入contents就行
- sftp,可以备份到其他server上
- 渲染
- 支持katex,注意有小bug,遇到
x^{x^3}这种情况需要改为x^{{x^3}},因为wiki的多层渲染导致的历史遗留问题。
- 支持katex,注意有小bug,遇到
- 升级
- 只需在后台一键升级即可