==123==

起因

  • 发现竞赛的弱校,无论是CTF/ACM亦或着是其他的竞赛。都有几个痛点
    • 出现人才断层,即俩三届无人可用 ^ff33c2
    • 出现知识断层,没人也就无人传授知识点
  • 第一种情况我们无法避免,只能招新时扩大宣传力度。
  • 第二种完全可以避免,如何传授知识,除了面对面。那便只有文字.

突然某一天意识到有wiki的存在

那便整一个

wiki的选择

  • 语雀
    • 优点:在线,免费,美观
    • 缺点:团队版需付费
  • wiki.js
    • nodejs
    • 优点:强大,美观,权限控制严格,脱离传统文件夹结构
    • 缺点:2h2gserver起步,
  • MediaWiki
    • 优点:强大
    • 缺点:折腾,太折腾
  • DokuWiki
    • 优点:轻量化,部署快
    • 缺点:丑,且权限不严格
  • MinDoc
    • 优点:美观,部署快,轻量化
    • 缺点:官网的css都失效了,权限不够严格
  • BookStack
    • 优点:强大
    • 缺点:功能多余,丑

还有很多不一一列举了,最终选择了wiki.js

理由是权限严格,同时刚好wiki可以给多个工作室用。多个竞赛用来分享知识点。

服务器的选择

  • 选择了海外腾讯云。搞活动便宜了一些
  • 为何不选国内?备案太过于繁琐。
  • 为何不选国外主机厂商?国外厂商更贵233

上线wiki.js

  • 轻量服务器,选择的是宝塔+centos
  1. 首先安装docker。可参考官网docker安装教程
    https://docs.docker.com/engine/install 在下面有个列表,选择对应的系统,之后复制粘贴即可,这里以[centos](Install Docker Engine on CentOS | Docker Documentation)为例:
1
2
3
4
5
6
7
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可以了。

1
2
3
sudo systemctl start docker

sudo docker run hello-world
  1. 参考官方安装指南,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 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都可以。

1
2
3
4
sudo ufw allow http
sudo ufw allow https

sudo ufw --force enable
  1. 启动wiki
1
2
3
docker start db 
docker start wiki
docker start wiki-update-companion

这时候就可以访问了,ip直接访问,默认是只有80端口

  1. 启用https
  • 这里用Let’s Encryp 来演示,还是参考官网文档
1
2
3
4
5
6
7
8
9
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界面

后续配置

  1. 分配权限
  • 需求:
    • 内部wiki,外部不可以访问
    • 分ACM,CTF,游戏开发三个大类
    • 所有人都可以查看所有文档,但只能修改自己工作室的。
    • 需一个普通管理增加用户和分配权限

以下是权限分配

  • 关于group(组)和页面规则,可以康康官网的文档
  • 个人理解,页面规则是组的的详细配置,具体配置。一个组里面更详细的分配,某个目录可以访问/修改,某个目录禁止访问/修改
  • w:write(写入权限) r:read(读取权限)
  • 组可以定义成员的具体权限,具体可以访问/编辑哪个目录。
  • 用户可以加入多个组,叠加权限

实现以上需求看图

  1. 关于文件目录与传统目录的区别
  • 愚见:不用像传统目录先创建文件夹,在创建文件。直接创建文件

具体请看 官方文档

更多功能

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