一个向所有人公开的像素画板
今天介绍的是一个r/place的一个开源克隆项目,r/place 是 Reddit 每年愚人节期间举行的一个大型、协作性的在线艺术实验。它提供了一块巨大的空白数字画布,Reddit 用户可以在上面放置单个像素,通过集体努力和协调来创作巨幅像素艺术。
我的示例:https://pixel.youzhi.icu/ace
如何搭建
安装Go编译
sudo apt-get update && sudo apt-get -y install golang-go
克隆仓库
git clone https://github.com/rbxb/place.git
来到项目根目录
cd ./place
换国内源
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
开始go编译
go build ./place.go
创建画布在8080端口
./place -root web/root -port :8080 &>place.log &
其他配置选项:
-root字符串
包含 Web 文件的目录。(默认为“./root”)
-count 数字
最大连接数。(默认 64)
-width 数字
创建画布的宽度。(默认值 1024)
-height 数字
创建画布的高度。(默认值 1024)
-load 字符串
要加载为画布的 png 图片。(如果未设置,则创建一个空白画布)
-save 字符串
保存画布的名称。(默认“./place.png”)
-log 字符串
要写入的日志文件。(如果未设置,则将记录到命令行)
-port 字符串
服务器监听的端口。(默认值“:8080”)
-sinterval 数字
保存间隔(秒)。(默认 180)
-wl(无值)启用白名单
-whitelist 字符串白名单路径。(默认“whitelist.csv”)
-loadRecord 字符串 要加载的记录图像的路径。(如果未设置,则创建空白记录)
-saveRecord 字符串保存记录图像的路径。(默认“record.png”)
白名单
您可以选择添加白名单。启用白名单后,只有拥有密钥的用户才能在画布上绘图。服务器还会记录每个像素的绘制者。
要使用白名单,首先创建一个 csv 文档。每个用户都有一个个人密钥和一个 ID,用于在记录中识别他们。密钥应为一个长字符串,ID 应为 [1,65535] 范围内的整数。
我建议使用 uuid 作为键。例如:
2237701c-7558-4424-95e1-beee4f6a406a,1
f9e41cf2-0e5d-43f2-bffd-5e2f1aab0a3b,2
4917ba68-41be-4956-93a7-0563257ff182,3
79df0674-f6d5-4556-baad-992e81f72bb2,65535
记录图像中的像素颜色与白名单中的ID相对应。
uuid可以在以下网站生成
https://1024tools.com/uuid
使用 -wl 参数启用白名单后,它会在工作目录中查找名为“whitelist.csv”的文件。当然,你也可以设置自己的路径:
./place -wl -whitelist my_white_list.csv
您还可以使用 -loadRecord 加载现有记录图像,这与加载画布的 -load 类似
./place -load place.png -wl -loadRecord record.csv
如果不包含 -wl 参数,白名单和记录将被忽略。
维护
我建议设置一些脚本来轻松重启服务器或回滚画布。
重启服务器
此脚本会终止服务器并使用旧画布重新启动。这不会重置画布。
在我的服务器上,我将此脚本设置为 cron 作业,每晚运行以删除所有残留的 websocket 连接。
cd ./place/web; pkill place; cd ..; ./place -root web/root -port :8080 -load place.png &>place.log &
回滚画布
该脚本将画布回滚到之前保存的图像。
cd ./place/web
pkill place
cd ..
cp place_rollback.png place.png
./place -root web/root -port :8080 -load place.png &>place.log &