使用Docker部署ProjectWikit

HW 发布于 19 天前 250 次阅读


引言

2026年8月31日上午9点35分左右,Wikidot又一次宕机,全球均不可访问。

将Wikidot的站点迁移的必要性逐渐增长。Wikijump目前仍未知何时开发完毕,SCPRU的RuFoundation引擎完全没有中文本土化导致难以应用。

那么,真神降临 —— ProjectWikit是由Kakushi主创开发的维基引擎,其基于Wikidot的FTML语法上增加了额外的功能。同时,其提供了Wikit CLI备份工具,允许你备份某个维基站点的所有公开内容,包括页面源代码、历史记录、附件、论坛帖子、站点成员数据,并可以直接迁移到ProjectWikit上。


本文为使用使用Docker部署ProjectWikit的教程。默认已安装了Docker。本人已使用CentOS进行部署。若有不确定内容请参考原Github页面

开始部署

首先,先将其放到指定目录,例如我的服务器挂载扩展盘 /www1 ,就先建立目录

sudo mkdir -p /www1/ProjectWikit
cd /www1

然后克隆项目

sudo git clone https://github.com/WikitTeam/ProjectWikit.git ProjectWikit
cd ProjectWikit

把目录权限交给当前用户

sudo chown -R $USER:$USER /www1/ProjectWikit

配置 .env

如果是有部署宝塔或者类似的可视化工具,可以直接进入 /www1/ProjectWikit ,找到 .env 文件进行编辑

主要需要修改内容:

# ---- 自动更新 ----
HOST_PROJECT_DIR=/www1/ProjectWikit
# ---- 数据库 ----
DB_PG_DATABASE=数据库名,比如projwikit
DB_PG_USERNAME=admin
DB_PG_PASSWORD=你的数据库密码
# ---- Django ----
SECRET_KEY=一段随机的字符

剩下可选的可以按自己需求修改

启动、初始化

docker compose up -d
docker exec -it wikitgo-web-1 python manage.py migrate

docker exec -it wikitgo-web-1 python manage.py createsite \
  -s 站点缩写内部标识,比如wikit-wiki \
  -d 你的域名或ip \
  -t "网站标题" \
  -H "网站副标题"

如果弄 docker exec -it wikitgo-web-1 python manage.py createsite 时出现问题,可能是数据库结构还没有更新,执行:

docker exec -it wikitgo-web-1 python manage.py migrate

如果这个执行不了,可能是权限问题,执行

#给 files 目录全部权限
sudo chmod -R 777 ./files

# 确保 media 目录存在并有权限
sudo mkdir -p ./files/media
sudo chmod -R 777 ./files

# 重新执行迁移
docker exec -it wikitgo-web-1 python manage.py migrate

然后再尝试前面的创建站点

创建superadmin账号、填充初始数据

先执行下面指令,然后按其指导写名字、邮箱、密码

Kakushi建议不要和自己的Wikidot账号重名防止验证账号时出错

docker exec -it wikitgo-web-1 python manage.py createsuperuser

然后填充初始数据。如果需要迁移,请跳过此步骤,见下文“迁移”一处

docker exec -it wikitgo-web-1 python manage.py seed

然后访问自己ip的8000端口即可访问

迁移

使用Wikit CLI备份工具,备份后将 _users、files、forum、meta、pages 文件夹一并放入 ./archive 目录,然后执行

docker exec -it wikitgo-web-1 python manage.py seed -a ./archive

杂谈

如果你和我一样脑子抽了,建站填的localhost然后访问不了网站(403 Forbidden),可以直接改数据库

docker exec -it wikitgo-web-1 python manage.py shell

然后输入

from web.models import Site
site = Site.objects.first()
print(site.domain)          # 先看一下当前是什么
site.domain = 'IP地址'
site.media_domain = 'IP地址'
site.save()
exit()

此作者没有提供个人介绍。
最后更新于 2026-08-31