ClawCloud 是一个云服务应用部署平台,可以方便快捷地部署docker应用
已经部署一个导航站点和一个github项目的Demo演示站点,直观感受还可以
受限于使用的5美刀免费额度和种种的不可靠因素,已做好站点随时消失的准备。毕竟没氪金和没法氪金
下面内容记录部署Shynet (一款开源的网站统计分析工具)
在ClawCloud部署Shynet
部署Shynet使用PostgreSQL数据库
1、按照ClawCloud的 Migrate from Docker Compose 文档和Shynet的 GUIDE.md 操作步骤,部署Shynet应用后,创建的应用容器可以与创建的PostgreSQL 数据库连通,首次启动会遇到如下提示:
2、提示数据库不存在,这是因为通过ClawCloud平台创建的数据库里面并没有环境变量所设置的Shynet_db
的数据库,需要通过connect
连接数据库手动创建Shynet_db
3、完成创建Shynet_db
数据库后,重启docker应用,打开控制台发现已经能正常运行
部署Shynet使用SQLite数据库
家境贫寒,全靠平台赠送的5美刀,多开一个PostgreSQL就少一个应用可以玩
1、按照ClawCloud的 Migrate from Docker
文档和Shynet的 GUIDE.md
操作步骤,部署Shynet应用后,使用挂载卷挂载目录/var/local/Shynet/db
,在控制台查看log会有如下报错信息
……
django.db.utils.OperationalError: unable to open database file
Migrations failed, exiting”
……
错误原因:在作者构建的docker镜像中,Dockerfile文件里编写了针对/var/local/Shynet/db/
目录的用户权限管理,而ClawCloud上设置挂载卷只有容量大小和挂载目录两个选项,无法设置UID/GID ,并且进入控制台全靠运气(时常抽风进不去),目前发现就算进入控制台我也找不着挂载目录和设置方法(不熟kubectl,专业不对口,折腾起来要去速通k8s教程,不想玩这个,也不知道有没有权限进行操作)
根据登陆控制台显示的信息,ClawCloud是以 root 运行容器应用,联想到已部署成功的容器应用,只要绕道修改关于挂载卷权限部分代码,就能成功挂载。至于违反最小权限原则,容器逃逸时攻击者将获得主机 root 权限的问题就交给ClawCloud平台处理,相信他们有这方面的保护措施
为什么设置挂载卷:数据备份,在ClawCloud上可以下载和上传挂载卷的数据库文件
绕道修改SQLite数据库挂载卷权限
操作思路
- Fork作者仓库
- clone至本地
- 修改Dockerfile文件,去除针对
/var/local/Shynet/db/
目录的用户权限管理 - 移除仓库原有的工作流yaml文件,创建自用的构建镜像工作流yaml文件
- git push
为什么这么操作:
- 首先,给Shynet作者提issue说ClawCloud平台用不了你这个Shynet镜像,你看他鸟不鸟你
- 第二,给ClawCloud平台说,你这个平台部署不了Shynet,你看他鸟不鸟你
已经将修改后构建的镜像推送到 docker hub,需要的可自行 docker pull kiraster/Shynet-for-clawcloud:latest
Fork后修改的仓库:https://github.com/kiraster/Shynet
可review后再决定使用,也可以自行Fork作者仓库然后自己构建docker镜像
修改后的Dockerfile 文件
控制台提示两个 Warning
1、对于提示的两个Warning
,可通过登陆应用控制台执行以下命令进行设置
example@example.com
:填写一个邮箱名称用于管理员登陆(仅仅邮箱格式)My Shynet
:控制面板的标题(仅仅标题)
python manage.py python manage.py registeradmin example@example.com
python manage.py whitelabel "My Shynet"
2、容器应用控制台执行python manage.py registeradmin myShynet@Shynet.com
后会生成一个密码,该密码用于登陆Shynet(登陆Shynet后自行修改密码)
提示CSRF问题
将Public Address
填写到环境变量中的ALLOWED_HOSTS
和CSRF_TRUSTED_ORIGINS
即可,注意格式,参照TEMPLATE.env
正常启动控制台显示
登陆Shynet和修改密码
1、在应用详情中,点击Public Address
访问应用
2、E-mail为之前设置的registeradmin,Password为控制台返回的密码
设置Shynet
1、点击左侧Create
,在右侧填写Name、Link,其他选项看描述操作,最后点击底部的Create
按钮
2、将代码嵌入网站,当有网站页面被访问,Shynet应用被触发进行工作
其他操作
设置registeradmin时没有记录密码
解决方法:登陆数据库应用,删除registeradmin时设置的邮箱的数据行(默认ID为1),重新启动容器应用
# 切换到名为 Shynet_db 的数据库
postgres=# \c Shynet_db
# 列出当前数据库中的所有表
Shynet_db=# \dt
# 查看core_user表的数据
Shynet_db=# select * from core_user;
# 删除 id 为 1 的行(默认的就是这行)
Shynet_db=# DELETE FROM core_user WHERE id = 1;
DELETE 1
Shynet_db=#
容器应用重启后,登入容器控制台,再次执行 python manage.py python manage.py registeradmin example@example.com
命令
若使用SQLite数据库,点击文件管理,下载后上传或直接删除(刚启动应用一般没重要数据)
浏览器的Do Not Track
Shynet 响应“不追踪”(DNT)信号,当浏览器设置发送Do Not Track请求时,Shynet会进行响应。使用这种设置访问网站时,Shynet不会收集访问数据
Do Not Track 设置案例