学生辅导学生协会赞助
在这篇文章中,我们将展示(学生辅导学生协会)如何利用netcup提供的服务器来支持我们的协会基础设施。目前,我们托管了一个Wiki,旨在减少因理事会成员更替导致的信息流失。此外,我们还计划部署更多服务,例如Mattermost或自主编写的工具。
作者:Dominik Geißler,学生辅导学生协会
关于StudyTutors
我们StudyTutors的目标是让每个人都能获得个性化教育,无论其家庭的经济或社会地位如何。为此,我们在超过50个大学城市为无法负担常规补习的家庭提供免费的1对1补习。我们的组织分为多个独立运作的“站点”,各站点通过站点负责人与联邦理事会保持联系。联邦理事会的主要职责并非直接参与补习,而是处理协会发展方向、资金支持和基础设施等事务。
动机
多年来,我们注意到,尤其是在新冠疫情期间协会快速扩张的过程中,我们经常重复某些错误、遗漏事项,或某些人垄断了关键知识,导致他们离开后出现空缺。为了解决这一问题,我们决定创建一个Wiki,作为这些知识、流程和错误经验的集中存储平台。
为了确保灵活性和数据安全,我们选择自托管Wiki,并利用了netcup赞助的服务器。
如何托管一个Wiki?
为了托管Wiki,我们选择了Wiki.js,这是一款功能丰富的开源Wiki,可以在自有服务器上托管。
托管Wiki有多种方式,例如使用Docker容器(一种封闭的独立环境)、直接安装或集群部署。我们选择了Docker容器,因为它易于安装和管理。当多个服务并行运行时,容器可以很好地隔离和管理它们。
Wiki需要三个组件:Wiki本身、用于存储信息的数据库,以及一个更新助手(用于协助更新)。此外,我们还创建了SSL证书以启用HTTPS。
首先,我们需要安装Docker:
# 更新所有软件包
sudo apt -qqy update
# 安装必要软件包
sudo apt install -qqy ca-certificates curl gnupg lsb-release
# 注册Docker软件包仓库
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /etc/apt/keyrings/docker.gpg
echo “deb [arch=$(dpkg –print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装Docker
sudo apt -qqy install docker-ce docker-ce-cli containerd.io docker-compose-plugin
接下来是容器的配置:
# 创建配置文件夹
mkdir -p /etc/wiki
# 生成数据库密钥
openssl rand -base64 32 > /etc/wiki/.db-secret
# 创建Docker内部网络
docker network create wikinet
# 创建数据库存储卷
docker volume create pgdata
# 创建容器
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:15
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
调整防火墙以允许访问:
# 允许HTTP、HTTPS和SSH端口
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw –force enable
启动容器和Wiki:
docker start db
docker start wiki
docker start wiki-update-companion
大功告成!Wiki已成功运行,并可通过服务器IP从外部访问。
为了使用自定义子域名,我们在Netlify的域名管理服务中添加了一条CNAME记录,指向服务器地址。
在Wiki界面中,我们还配置了自动备份等功能,并开始编写内容。目前,我们的Wiki已有约40个页面和25名用户。通过Wiki,我们整合了其他工具,不仅为未来的理事会成员提供了避免重复错误的便利,也简化了我们当前的管理工作。
未来计划
服务器和我们的创意潜力远未被完全挖掘。目前,除了Wiki,我们还运行了Slack替代品Mattermost的演示版本,计划将其用于联邦理事会和站点之间的简化沟通。但这也会带来技术挑战,例如需要通过反向代理正确路由请求。
此外,我们还计划托管自主编写的脚本和服务,以简化或自动化某些管理流程。
在此,我们再次衷心感谢netcup提供的服务器支持。正是得益于这一资源,我们才能优化低效流程,将更多精力投入到重要任务中:为孩子们提供教育机会!