群晖上部署农场管理系统farmOS

news2025/1/6 18:27:32

在这里插入图片描述

什么是 farmOS ?

farmOS 是一个基于 Web 的应用程序,用于农场管理、规划和记录保存。它由志愿者社区开发,旨在为农民、开发人员和研究人员提供一个标准平台。

需要注意的是,群晖内核版本太低会遇到下面的错误,这个 AH00141 已经遇到多次了,老苏除了换机器,也没找到其他的办法;

AH00141: Could not initialize random number generator

准备

建数据库

老苏用了群晖自带的 MariaDB 10 数据库。

phpMyAdmin 中创建名为 farmos 的空数据库。

为便于说明,假设数据库密码为 123456

所以根据上面的设置,最后得到的数据库相关的参数如下:

  • 数据库主机:192.168.0.197,与群晖主机 IP 一致;
  • 数据库端口:3307
  • 数据库用户:farmos
  • 数据库密码:123456
  • 数据库库名:farmos,因为勾选了与用户同名;

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 farmos ,选择第一个 farmos/farmos,版本选择 latest

本文写作时, latest 版本对应为 3.1.2

docker 文件夹中,创建一个新文件夹 farmos,并在其中建一个子文件夹 sites

文件夹装载路径说明
docker/farmos/sites/opt/drupal/web/sites存放站点预构建文件、设置文件等

端口

本地端口不冲突就行,不确定的话可以用命令查一下

# 查看端口占用
netstat -tunlp | grep 端口号
本地端口容器端口
637280

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

# 新建文件夹 farmos 和 子目录
mkdir -p /volume2/docker/farmos/sites

# 进入 farmos 目录
cd /volume2/docker/farmos

# 运行容器
docker run -d \
   --restart unless-stopped \
   --name farmos \
   -p 6372:80 \
   -v $(pwd)/sites:/opt/drupal/web/sites \
   farmos/farmos

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

version: '3'

services:
  farmos:
    image: farmos/farmos
    container_name: farmos
    restart: unless-stopped
    ports:
      - 6372:80
    volumes:
      - ./sites:/opt/drupal/web/sites

然后执行下面的命令

# 新建文件夹 farmos 和 子目录
mkdir -p /volume2/docker/farmos/sites

# 进入 farmos 目录
cd /volume2/docker/farmos

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:6372 就能看到向导界面

按照前面的数据库设置填写

  • Database type:使用默认的 MySQL, MariaDB, Percona Server, or equivalent 即可;
  • Database name:数据库库名;
  • Database username:数据库用户;
  • Database password:数据库用户对应的数据库密码;

Advanced options

  • Host:数据库主机,因为使用了群晖自带的 MariaDB,所以这里填群晖主机的 IP
  • Port number:数据库端口;
  • Transaction isolation level:缺省值 READ COMMITTED
  • Table name prefix:数据库表前缀,farm_ 或者 farmos_ 都是可以的;

Save and continue ,会有安装进度显示

开始设置站点名称、账号、国家和时区等

这一步选择需要安装的模块

除了默认的模块外,老苏还勾选了 Translation/localization features 模块,这是语言切换需要的模块。当然,如果现在不安装,后续也可以在设置模块中进行安装

显然选择的模块越多,安装时间会越长

安装完成后的主界面

OpenStreeMap 的加载有点慢,加载完成后

接下来可以开始通过右上角的 Add Asset 添加资产了

  • Animal:动物
  • Equipment:设备
  • Land:土地
  • Plant:植物
  • Structure:建筑,可以指代农场中的各种建筑物,如农舍、谷仓、大棚、温室等
  • Water:水

如果你安装了更多的模块,可能还会有种子肥料传感器 等物资;

中文(失败)

这是一次失败的尝试,有成功的朋友请不吝赐教

先是尝试了官方提供的方法,https://farmos.org/hosting/localization/

通过 Add language 添加 Chinese,Simplifed

但是会显示下载失败,系统中创建了 translations 目录,但是没有内容

手动下载了 po 文件,地址:https://ftp.drupal.org/files/translations/all/drupal/drupal-10.2.3.zh-hans.po

直接放到 translations 目录或者通过 Import 导入,也都没有成功,算了就先这样吧

参考文档

farmOS/farmOS: farmOS: A web-based farm record keeping application.
地址:https://github.com/farmOS/farmOS

paul121/farm-tugboat-demo: Simple site for creating demos of farmOS.
地址:https://github.com/paul121/farm-tugboat-demo

farmOS | 安装
地址:https://farmos.org/hosting/install/

farmOS | 官网
地址:https://farmos.org/

Chinese, Simplified overview | Translations
地址:https://localize.drupal.org/translate/languages/zh-hans

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1651542.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024暨南大学校赛热身赛解析

文章目录 A 突发恶疾B Uzi 的真身C 时间管理大师D 基站建设E 在仙境之外weiwandaixu 题目地址 A 突发恶疾 斐波那契数列 fn [0]*1000006fn[0],fn[1] 0,1for i in range(2,1000002):fn[i] (fn[i-1]fn[i-2])%998244353n int(input()) print(fn[n])B Uzi 的真身 分析&#xff…

SSM【Spring SpringMVC Mybatis】——Maven

目录 1、为什么使用Maven 1️⃣获取jar包 2️⃣添加jar包 3️⃣使用Maven便于解决jar包冲突及依赖问题 2、什么是Maven 3、Maven基本使用 3.1 Maven准备 3.2 Maven基本配置 3.3 Maven之Helloworld 4、Maven及Idea的相关应用 4.1 将Maven整合到IDEA中 4.2 在IDEA中新建…

使用脚本一键部署项目的示例(脚本会创建syetemctl的系统服务)

文章目录 说明使用脚本一键部署本项目开启/停止服务开启/关闭开机自动运行更新项目 参考地址:https://github.com/Evil0ctal/Douyin_TikTok_Download_API?tabreadme-ov-file 说明 后续相关项目可以使用这种方式创建脚本,脚本均放置在项目根目录下的bas…

【C++干货基地】揭秘C++STL库的魅力:stiring的初步了解和使用

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 哈喽各位铁汁们好啊,我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发,不知道各位的…

AI大模型探索之路-训练篇17:大语言模型预训练-微调技术之QLoRA

系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…

动态规划——路径问题:LCR 166.珠宝的最高价值

文章目录 题目描述算法原理1.状态表示(题目经验)2.状态转移方程3.初始化4.填表顺序5.返回值 代码实现CJava 题目描述 题目链接:LCR 166.珠宝的最高价值 算法原理 1.状态表示(题目经验) 对于这种路径类的问题&…

Linux中动态库的用法及优缺点?怎样制作动态库和静态库?

一、什么是gcc gcc的全称是GNU Compiler Collection,它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器(GNU C Compiler),现在除了c语言,还支持C、java、Pascal等语言。gcc支持多种硬件平台. 在 Linux…

在做题中学习(52): 山脉数组的峰顶索引

852. 山脉数组的峰顶索引 - 力扣(LeetCode) 解法:二分查找 思路:O(logn)的时间复杂度,很可能是二分法,再看看有没有二段性: 由题目可以知道,i的左边比i小,右边比i大&am…

47.Redis学习笔记

小林coding -> 图解redis的学习笔记 文章目录 Rediswindwos安装docker安装redis启动redis使用RDM访问虚拟机中的redispython连接redis缓存穿透、击穿、雪崩基本数据类型高级数据类型高并发指标布隆过滤器分布式锁Redis 的有序集合底层为什么要用跳表,而不用平衡…

Spring_概述

Spring 官网Spring Framework(Spring)文档位置重点内容Overview 官网 Spring官网 Spring Framework(Spring) 文档位置 重点 IoC容器AOP:面向切面编程AOT:ahead of time,提前编译Web 框架&…

面试分享——订单超30分钟未支付自动取消用什么实现?如何使用Redis实现延迟队列?

目录 1.订单超时未支付自动取消,这个你用什么方案实现? 2.如何使用Redis实现延迟队列 2.1实验步骤 2.2实现生产可用的延迟队列还需关注什么 3.总结 电商场景中的问题向来很受面试官的青睐,因为业务场景大家都相对更熟悉,相关…

金仓面对面 | 人大金仓×安硕信息共话金融信用风险管理数字化转型之道

金仓面对面 在数字化浪潮的推动下,人大金仓携手行业先锋,共同开启一场关于创新与转型的思想盛宴——金仓面对面。这不仅是一场对话,更是一次智慧的火花碰撞,一次行业数字化转型洞察的深度挖掘。 行业精英汇聚:我们荣幸…

SSH的魅力:为何它成为远程访问的首选

🐇明明跟你说过:个人主页 🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、SSH简介 2、SSH的历史与发展 3、SSH的主要用…

大学物理实验 期末复习笔记整理(个人复习笔记/侵删/有不足之处欢迎斧正)

一、误差和数据处理 1. 系统误差是指在重复性条件下,对同一被测量进行无限多次测量所得结果的平均值与被测量的真值之差。它通常是由于测量设备、测量方法或测量环境等因素引起的,具有重复性、单向性和可测性。而随机误差则是由于测量过程中一系列有关因…

CP AUTOSAR之CANXL Driver详细说明(正在更新中)

本文遵循autosar标准:R22-11 1 简介及功能概述 本规范描述了AUTOSAR 基础软件模块CAN XL 驱动程序的功能、API和配置。   本文档的基础是[1,CiA610-1]和[2,CiA611-1]。假设读者熟悉这些规范。本文档不会再次描述CAN XL 功能。   CAN XL 驱动程序是最低层的一部…

NETBIOS和DNS

Netbios NETBIOS只能工作在局域网。 NetBIOS(Network Basic Input/Output System, 网络基本输入输出系统)是一种接入服务网络的接口标准。主机系统通过WINS服务、广播及lmhosts文件多种模式,把NetBIOS名解析对应的IP地址,实现信…

MySQL中JOIN连接的实现算法

目录 嵌套循环算法(NLJ) 简单嵌套循环(SNLJ) 索引嵌套循环(INLJ) 块嵌套循环(BNLJ) 三种算法比较 哈希连接算法(Hash Join) 注意事项: 工…

Linux入门攻坚——22、通信安全基础知识及openssl、CA证书

Linux系统常用的加解密工具:OpenSSL,gpg(是pgp的实现) 加密算法和协议: 对称加密:加解密使用同一个秘钥; DES:Data Encryption Standard,数据加密标准&…

最后一块石头的重量 II ,目标和,一和0

最后一块石头的重量 II(0-1背包问题 将石头尽可能分为两堆重量一样的,进行相撞则为0 class Solution {public int lastStoneWeightII(int[] stones) {int sum0;for(int x:stones){sumx;}int targetsum/2;int[] dpnew int[target1];//dp[j]表示最大石堆的…

kubeflow简单记录

kubeflow 13.7k star 1、Training Operator 包括PytorchJob和XGboostJob,支持部署pytorch的分布式训练 2、KFServing快捷的部署推理服务 3、Jupyter Notebook 基于Web的交互式工具 4、Katib做超参数优化 5、Pipeline 基于Argo Workflow提供机器学习流程的创建、编排…