
本文是应网友
lee yong和shijie880500的要求折腾的;
什么是 APITable ?
APITable是vika维格表的社区版,是一个面向API且易于使用的可视化数据库,适合所有人,使其成为Airtable的最佳开源替代品。最重要的是,APITable拥有更酷的UI和更多的功能,可以将您的工作和生活优化到一个神奇的水平。
按官方的说法,APITable 目前正在 积极开发中,并将在 2023 年 2 月下旬公布第一份发行版本。

一开始老苏是打算安装多容器版本的,但在运行中发现老苏的小机器根本抗不住,大约有 12 个容器,启动过程中服务器 CPU、内存都在满负荷运作,很容易失联、重启,所以日志中会看到超时、失败等,总之没成功。老苏也会把折腾过程写出来,放在文末供参考,但这不是本文的重点
官方发布了一个 All In One 的版本,里面包含了所需要的 mysql/redis/minio/rabbitmq,安装过程、使用中也比较耗资源,但是比多容器的要好得多。这是给大家体验的,不要用在生产环境
We also provide an all-in-one image based on pm2 for demo or testing
purpose (not recommended for enterprise or production usage)
在群晖上以 Docker 方式安装。
在注册表中搜索 apitable ,选择第一个 apitable/all-in-one,版本选择 v0.18.0-alpha_888

目前在测试阶段,更新非常频繁,一天都能出几个版本,老苏周三下午安装还是
887,晚上就出了888,本文发布时,已经是902了

在 docker 文件夹中,创建一个新文件夹 vika,并在其中建一个子文件夹 data
| 文件夹 | 装载路径 | 说明 |
|---|---|---|
docker/vika/data | /apitable | 存放数据库等 |

本地端口不冲突就行,不确定的话可以用命令查一下
# 查看端口占用
netstat -tunlp | grep 端口号
| 本地端口 | 容器端口 |
|---|---|
7088 | 80 |
默认对外暴露了一堆端口,其中
3306:是 MySQL 服务;5672:是 RabbitMQ 服务;6379:是 Redis 服务;9000:是 MinIO 服务;80:是 Nginx 服务;
如果你不打算从外部直接访问这些服务的话,只要保留 80 就可以了

如果你熟悉命令行,可能用 docker cli 更快捷
# 新建文件夹 vika 和 子目录
mkdir -p /volume2/docker/vika/data
# 进入 vika 目录
cd /volume2/docker/vika
# 运行容器
docker run -d \
--restart unless-stopped \
--name apitable \
-p 7088:80 \
-v $(pwd)/data:/apitable \
apitable/all-in-one:v0.18.0-alpha_888
也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件
version: '3'
services:
cherry:
image: apitable/all-in-one:v0.18.0-alpha_888
container_name: apitable
restart: unless-stopped
ports:
- 7088:80
volumes:
- ./data:/apitable
然后执行下面的命令
# 新建文件夹 vika 和 子目录
mkdir -p /volume2/docker/vika/data
# 进入 vika 目录
cd /volume2/docker/vika
# 将 docker-compose.yml 放入当前目录
# 一键启动
docker-compose up -d
内存占用还是比较高的

在浏览器中输入 http://群晖IP:7088 就能看到主界面
根据机器的性能不同,您可能需要等待几分钟才能启动所有服务,老苏差不多等了有
5分钟

缺省用户名为 admin@apitable.com ,密码为 Apitable2022

接下来创建空间,创建表单

不能自动识别系统语言版本,需要自己设置,在左下角找到 My Settings

在 Preferences --> Language 中选择 简体中文

界面会自动刷新,刷新之后就是中文了

随便点了点,总能看到这样的页面,毕竟还是阿尔法版

功能大家慢慢摸索吧,老苏没找到中文的使用手册,也许再等等就有了
因为是多容器,所以全程使用命令行安装,但是在安装前,需要确认下你群晖上 docker-compose 的版本
# 检测 docker 版本
docker -v
# 检测 docker-compose 版本
docker-compose -v

docker-compose 如果低于 1.29.0,启动后日志中会出现 depends_on condition "service_completed_successfully" is invalid. 错误
Creating network "vika_apitable" with driver "bridge"
Traceback (most recent call last):
File "docker-compose", line 3, in <module>
File "compose/cli/main.py", line 80, in main
File "compose/cli/main.py", line 192, in perform_command
File "compose/metrics/decorator.py", line 18, in wrapper
File "compose/cli/main.py", line 1165, in up
File "compose/cli/main.py", line 1161, in up
File "compose/project.py", line 702, in up
File "compose/parallel.py", line 99, in parallel_execute
File "compose/parallel.py", line 48, in parallel_execute_watch
File "compose/parallel.py", line 173, in parallel_execute_iter
File "compose/parallel.py", line 222, in feed_queue
File "compose/project.py", line 694, in get_deps
File "compose/service.py", line 761, in get_dependency_configs
ValueError: depends_on condition "service_completed_successfully" is invalid.
[31897] Failed to execute script docker-compose
原因很简单, service_completed_successfully 是 docker-compose 在 1.29.0 之后才引入的,显然老苏的 DSM6 上不行,要继续只能想办法对 docker-compose 升级,但群晖的官方套件找不到可升级的版本
下面的操作是不是有风险老苏并不太清楚,但是建议你在升级前先备份 /var/packages/Docker/target/usr/bin/docker-compose,不管放到哪里,给自己一个后悔的机会总是没错的
# 老苏给随便丢到了 vika 目录
cp /var/packages/Docker/target/usr/bin/docker-compose /volume2/docker/vika
然后老苏尝试着用下面的命令对 docker-compose 升级
可以升级到最新的
v2.16.0版,但下面的命令只升级到了v2.7.0
# 独立下载和安装 Compose
curl -sSL https://github.com/docker/compose/releases/download/v2.7.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
# 下不动价加个代理
curl -sSL https://ghproxy.com/github.com/docker/compose/releases/download/v2.7.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
安装之后,再次检查 docker-compose 版本

官方提供了所需要的文件,只需按部就班就可以了
# 新建文件夹 vika 和 子目录
mkdir -p /volume2/docker/vika/.data/{minio/{data,config},mysql,rabbitmq,redis}
# 进入 vika 目录
cd /volume2/docker/vika
# 下载安装文件包
curl -sSL https://github.com/apitable/apitable.github.io/releases/latest/download/docker-compose.tar.gz -o docker-compose.tar.gz
# 下不动就加个代理试试
curl -sSL https://ghproxy.com/github.com/apitable/apitable.github.io/releases/latest/download/docker-compose.tar.gz -o docker-compose.tar.gz
# 解压缩
tar -xvzf docker-compose.tar.gz
现在的目录结构

修改 .env 中的端口
为了方便修改先重命名为
txt,改完后记得改回去

老苏改成下面的端口
NGINX_HTTP_PORT=7088
NGINX_HTTPS_PORT=7443
接下来就可以直接一键启动了,但是在你启动前建议三思而行,尤其是白裙,性能应该都比较一般
# 一键启动
docker-compose up -d
第一次建议用 docker-compose up 启动,这样能看到详细的日志

CPU 就没低过 80%

基本上都是一直处于满负荷状态

有可能会遇到错误退出

更大的可能性就是直接失联,折腾了几天愣是连首页面都没跑出来

这是老苏写文章专用的小机器,方便你对比一下

老苏觉得在群晖上用用 All In One 的版本就行了,多容器版本就算了吧,用三体的话说,就是不要安装、不要安装!
apitable/apitable: 🚀🎉📚 APITable, an API-oriented low-code platform for building collaborative apps and better than all other Airtable open-source alternatives.
地址:https://github.com/apitable/apitable
APITable: vika.cn维格表社区版,地表至强的开源低代码、多维表格工具,Airtable的开源免费替代。
地址:https://gitee.com/apitable/APITable
APITable | Open source no-code database and Airtable alternative
地址:https://apitable.com/
feat: all-in-one Docker image - like Budibase · Issue #230 · apitable/apitable
地址:https://github.com/apitable/apitable/issues/230
群晖安装 Docker Compose
地址:https://www.zbaiquan.cn/archives/qun-hui-an-zhuang-dockercompose
随着ruby被引入为新的编程救世主,我想知道是否有人基于易用性、运行所需的资源、可用性和易定制性而有偏好。两者有更好的吗? 最佳答案 好吧,任何基于Rails的社交网络应用程序的比较都应该包括insoshi(http://portal.insoshi.com/)。话虽这么说,这三个都非常相似,区别在于实现细节。Lovd和Insoshi都是完整的Rails应用程序;它旨在供您将它们用作入门工具包,并使用您自己的自定义功能对其进行扩展。另一方面,CommunityEngine是一个Rails插件。这意味着您可以更轻松地向现有Rail
今天,我将尽可能地设置我的测试环境和工作流程。我正在向对Ruby测试充满热情和精通的你们寻求有关如何设置测试环境的实用建议。到一天结束时(太平洋标准时间早上6点?)我希望能够:键入一个1-command来为我在Github上找到的任何项目运行测试套件。为任何Github项目运行autotest,这样我就可以fork并做出可测试的贡献。使用Autotest和Shoulda从头开始构建gem。Foronereasonoranother,IhardlyeverruntestsforprojectsIclonefromGithub.Themajorreasonisbecauseunless
在Java领域,主要使用JUnit,而在.NET中,我相信nUnit非常流行。社区是否就Ruby世界的单元测试框架达成一致?背景:我问是因为我是Ruby的新手,想在学习Ruby的同时练习TDD。到目前为止,我只玩过Test::Unit。 最佳答案 你可以坚持使用Test::Unit或者你可以使用Shoulda对其进行很好的扩展或使用Context的一些很酷的上下文.另一方面,如果您更喜欢BDD,那么您可以安全地坚持使用RSpec.至于验收测试用Cucumber. 关于ruby-什么是社区
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。ImprovethisquestionDavidKorn,Unix哲学的支持者,几年前在aSlashdotinterview中斥责Perl程序员用于编写单一的Perl脚本而不通过管道、重定向等使用Unix工具包。“Unix不仅仅是一个操作系统,”他说,“它是一种做事的方式,shell通过提供使它起作用的胶水。”似乎提醒同样适用于Ruby社区。Ruby具有通过popen、STDIN、STDOUT、STDERR、ARGF等与其他U
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭12年前。这是一个诚实的问题,我不是在挑衅。作为Rails的新手,我一直在寻找好的Rails资源。但是我注意到许多曾经很受欢迎的网站现在已经完全被废弃了。一些例子:http://www.softiesonrails.com/-最后更新于2010年2月http://www.therailsway.com/-最后更新于2009年8月http://nubyonrails
如今eBPF程序的编写,很多都是基于bcc或者bpftrace进行,也有开发者直接基于libbpf库进行,但是不管怎样,编写的xx.bpf.c程序,在加载到内核时,都必须经过内核的verifier校验器进行各种边界和内存检查,经常会碰到各种奇奇怪怪的verifier报错,导致eBPF程序加载失败。有些错误,开发者可能要花费大量的时间去分析并修改程序,并祈祷程序能够加载成功。特别是在低版本的内核运行低版本Clang编译器编译的eBPF程序,错误提示非常糟糕,经常找不到出错点,这就大大增加了开发难度。为此,本文梳理了一些常见的eBPFverifier报错,避免更多的人走弯路,写出能成功加载的eBP
基于SSM的智慧社区管理小程序摘 要随着互联网大趋势的到来,社会的方方面面,各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去,而其中最好的方式就是建立网络管理系统,并对其进行信息管理。由于现在网络的发达,社区管理通过网络结合现下流行的小程序进行信息管理掀起了热潮,因此“智慧社区管理小程序”应运而生了。整个智慧社区管理小程序开发过程首先对系统进行需求分析,得出其主要功能。接着对系统进行总体设计和详细设计。总体设计主要包括系统功能设计、系统总体结构设计、系统数据结构设计和系统安全设计等;详细设计主要包括系统数据库访问的实现,主要功能模块的具体实现,模块实现关键代码等。最后对系统进
我正在寻找用javascript实现的社区检测算法。Louvain算法或任何其他算法都可以。 最佳答案 最近执行了Louvaincommunitydetection在JavaScript中,在某种程度上,它很容易与D3.js一起使用:https://github.com/upphiminn/jLouvain作为旁注,由于我没有意识到,我为我的项目写了一个贪婪的模块化最大化TagOverflow(另请参见somedescription)。它工作得很好(见下面的示例),但是这个jLouvain是一个更好的算法和更好的实现。
群晖NAS通过IPV6设置域名解析为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客http://www.huerpu.cc:7000现在都2022年了,不会还有小伙伴追着运营商死乞白赖地要公网IPV4吧?IPV6可以给地球上的每一粒沙子分配一个IP,并且目前越来越普遍,不管你所在地区给不给你独立的公网IPV4,也就是说即使你在一个大内网中,也可以通过IPV6进行外网访问。一、光猫设置桥接这个步骤只需要动动嘴皮子,打个电话给运营商,说自己家的宽带需要改成桥接模式,技术人员会远程操作,操作完成之后,就可以使用路由器进行宽带拨号上网。如果不改桥接模式,默认是光猫拨号上网,大家都知道的哈,光猫的性
和鲸社区算是国内比较不错的机器学习算力平台,可以通过每日登录积累成长值,每月还会给鲸币奖励,有一段时间每天都会登登陆一次,但是有时候还是会忘记。最近根据腾讯云Serverless部署云函数实现自动登录,解放双手。首先每次登陆后将进行微信推送,我采用的是pushplus平台,获取token即可。微信推送#从pushplus平台获取tokentoken='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'defsendToWechat(title,content):url='http://www.pushplus.plus/send'headers={'Content-Type