开源企业资源规划ERPNext的安装

这篇具有很好参考价值的文章主要介绍了开源企业资源规划ERPNext的安装。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开源企业资源规划ERPNext的安装

往常节假日,都是呆在家里看别人堵,这回老苏也出门凑了个热闹,28号早上 7 点半出的门

开源企业资源规划ERPNext的安装

2 点半往回走的

开源企业资源规划ERPNext的安装

一天啥也没干,就开了 7 个小时的车去舅舅家蹭了顿饭。还别说,那个田园鸡味道是真不错。

车很久没开了,但这回起码两个月不用遛了。


本文是应网友 潇雨 的要求折腾的。

什么是 ERPNext ?

ERPNext 是一种免费的、开源的企业资源规划(ERP)软件,它提供了一套完整的企业解决方案,包括会计、采购、销售、库存、制造、CRM 等功能。ERPNext 旨在为中小型企业提供一种简单、易用、灵活的 ERP 系统,以帮助企业管理业务流程、优化运营效率、提高生产力和盈利能力。ERPNext 建立在 Frappe 框架之上,这是一个使用 PythonJavaScript 构建的全栈 web 应用程序框架。

前期准备

在网友提出要求之前,老苏也曾经尝试过安装 ERPNext,但都以失败告终。

首先尝试了英文版,但由于涉及多个容器,可能有些地方改漏了、改错了,导致出现了错误,因为工作原因,也没有太多的时间去深入研究。

之后又尝试了中文版,这是一个All in one 的版本,安装相对简单。但遗憾的是,老苏一直遇到数据库出错的问题。由于老苏的机器内存较小,初步怀疑这可能是导致问题的原因。此外,由于容器内反复启动,导致机器的 CPU 占用率也急剧上升,最终只能放弃了。

docker-compose.yml

这次老苏牺牲了几个晚上,认真把 docker-compose.yml 好好整理了一下👇。如果你不知道什么含义,不建议你直接改这个文件,老苏已经把需要修改的内容,单独拎了出来放在了env.txt

docker-compose.yml 是基于官网 https://github.com/frappe/frappe_docker/blob/main/pwd.yml 修改

version: "3"

services:
  backend:
    image: frappe/erpnext:${APP_VERSION}
    container_name: ${APP_NAME}-backend
    deploy:
      restart_policy:
        condition: on-failure
    volumes:
      - sites:/home/frappe/frappe-bench/sites
      - logs:/home/frappe/frappe-bench/logs
      
  configurator:
    image: frappe/erpnext:${APP_VERSION}
    container_name: ${APP_NAME}-configurator
    deploy:
      restart_policy:
        condition: none
    entrypoint:
      - bash
      - -c
    depends_on:
      - db
    command:
      - >
        ls -1 apps > sites/apps.txt;
        bench set-config -g db_host $$DB_HOST;
        bench set-config -gp db_port $$DB_PORT;
        bench set-config -g redis_cache "redis://$$REDIS_CACHE";
        bench set-config -g redis_queue "redis://$$REDIS_QUEUE";
        bench set-config -g redis_socketio "redis://$$REDIS_SOCKETIO";
        bench set-config -gp socketio_port $$SOCKETIO_PORT;
    environment:
      DB_HOST: db
      DB_PORT: "3306"
      REDIS_CACHE: redis-cache:6379
      REDIS_QUEUE: redis-queue:6379
      REDIS_SOCKETIO: redis-socketio:6379
      SOCKETIO_PORT: "9000"
    volumes:
      - sites:/home/frappe/frappe-bench/sites
      - logs:/home/frappe/frappe-bench/logs
      
  create-site:
    image: frappe/erpnext:${APP_VERSION}
    container_name: ${APP_NAME}-create-site
    depends_on:
      - configurator
    deploy:
      restart_policy:
        condition: none
    volumes:
      - sites:/home/frappe/frappe-bench/sites
      - logs:/home/frappe/frappe-bench/logs
    entrypoint:
      - bash
      - -c
    command:
      - >
        wait-for-it -t 240 db:3306;
        wait-for-it -t 120 redis-cache:6379;
        wait-for-it -t 120 redis-queue:6379;
        wait-for-it -t 120 redis-socketio:6379;
        export start=`date +%s`;
        until [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".db_host // empty"` ]] && \
          [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".redis_cache // empty"` ]] && \
          [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".redis_queue // empty"` ]];
        do
          echo "Waiting for sites/common_site_config.json to be created";
          sleep 5;
          if (( `date +%s`-start > 120 )); then
            echo "could not find sites/common_site_config.json with required keys";
            exit 1
          fi
        done;
        echo "sites/common_site_config.json found";
        bench new-site frontend --no-mariadb-socket --admin-password=${APP_PASSWORD} --db-root-password=${DB_ROOT_PASSWORD} --install-app erpnext --set-default;

  db:
    image: mariadb:10.6
    container_name: ${APP_NAME}-db
    healthcheck:
      test: mysqladmin ping -h localhost --password=${DB_PASSWORD}
      interval: 1s
      retries: 15
    deploy:
      restart_policy:
        condition: on-failure
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
      - --skip-character-set-client-handshake
      - --skip-innodb-read-only-compressed # Temporary fix for MariaDB 10.6
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
    volumes:
      - ./data:/var/lib/mysql
    #ports:
    #  - "${DB_PORT}:3306"

  frontend:
    image: frappe/erpnext:${APP_VERSION}
    container_name: ${APP_NAME}-frontend
    deploy:
      restart_policy:
        condition: on-failure
    command:
      - nginx-entrypoint.sh
    environment:
      BACKEND: backend:8000
      FRAPPE_SITE_NAME_HEADER: frontend
      SOCKETIO: websocket:9000
      UPSTREAM_REAL_IP_ADDRESS: ${APP_HTTP_IP}
      UPSTREAM_REAL_IP_HEADER: X-Forwarded-For
      UPSTREAM_REAL_IP_RECURSIVE: "off"
      PROXY_READ_TIMOUT: 120
      CLIENT_MAX_BODY_SIZE: 50m
    volumes:
      - sites:/home/frappe/frappe-bench/sites
      - logs:/home/frappe/frappe-bench/logs
    ports:
      - "${APP_HTTP_PORT}:8080"

  queue-default:
    image: frappe/erpnext:${APP_VERSION}
    container_name: ${APP_NAME}-queue-default
    deploy:
      restart_policy:
        condition: on-failure
    command:
      - bench
      - worker
      - --queue
      - default
    volumes:
      - sites:/home/frappe/frappe-bench/sites
      - logs:/home/frappe/frappe-bench/logs

  queue-long:
    image: frappe/erpnext:${APP_VERSION}
    container_name: ${APP_NAME}-queue-long
    deploy:
      restart_policy:
        condition: on-failure
    command:
      - bench
      - worker
      - --queue
      - long
    volumes:
      - sites:/home/frappe/frappe-bench/sites
      - logs:/home/frappe/frappe-bench/logs

  queue-short:
    image: frappe/erpnext:${APP_VERSION}
    container_name: ${APP_NAME}-queue-short
    deploy:
      restart_policy:
        condition: on-failure
    command:
      - bench
      - worker
      - --queue
      - short
    volumes:
      - sites:/home/frappe/frappe-bench/sites
      - logs:/home/frappe/frappe-bench/logs

  redis-queue:
    image: redis:6.2-alpine
    container_name: ${APP_NAME}-redis-queue
    deploy:
      restart_policy:
        condition: on-failure
    volumes:
      - ./redis-queue-data:/data

  redis-cache:
    image: redis:6.2-alpine
    container_name: ${APP_NAME}-redis-cache
    deploy:
      restart_policy:
        condition: on-failure
    volumes:
      - ./redis-cache-data:/data

  redis-socketio:
    image: redis:6.2-alpine
    container_name: ${APP_NAME}-redis-socketio
    deploy:
      restart_policy:
        condition: on-failure
    volumes:
      - ./redis-socketio-data:/data

  scheduler:
    image: frappe/erpnext:${APP_VERSION}
    container_name: ${APP_NAME}-scheduler
    deploy:
      restart_policy:
        condition: on-failure
    command:
      - bench
      - schedule
    volumes:
      - sites:/home/frappe/frappe-bench/sites
      - logs:/home/frappe/frappe-bench/logs
      
  websocket:
    image: frappe/erpnext:${APP_VERSION}
    container_name: ${APP_NAME}-websocket
    deploy:
      restart_policy:
        condition: on-failure
    command:
      - node
      - /home/frappe/frappe-bench/apps/frappe/socketio.js
    volumes:
      - sites:/home/frappe/frappe-bench/sites
      - logs:/home/frappe/frappe-bench/logs
      
volumes:
  logs:
  sites:

env.txt

下面是 env.txt 的内容,之所以没用 .env 是为了方便在 File Station 中方便修改,但是带来的不方便之处是启动时需要指定 --env-file,当然在 docker-compose.yml 中指定也是可以的

# ERPNext config
APP_NAME=erp
APP_VERSION=v14.23.0
APP_HTTP_IP=192.168.0.197
APP_HTTP_PORT=6380
APP_PASSWORD=admin

# MariaDB config
DB_HOST=db
DB_PASSWORD=twj9nwyoutRei9C4VV
DB_ROOT_PASSWORD=4aixKdghP3j56hPB8k
DB_PORT=3336
  • APP_NAME: 主要影响生成的容器名称的前缀

开源企业资源规划ERPNext的安装

  • APP_VERSIONERPNext 的版本, 老苏测试过v14.22.3v14.23.0,其他版本没试过;
  • APP_HTTP_IP:主机 IP,要根据你自己的群晖主机 IP 修改;
  • APP_HTTP_PORT:这是访问 ERPNext 服务的的本地端口,不冲突就行;
  • APP_PASSWORD:管理员密码,建议登录成功之后再改;
  • DB_HOST:数据库主机,不要改;
  • DB_PASSWORD:数据库密码,建议改;
  • DB_ROOT_PASSWORD:数据库管理员密码,建议改;
  • DB_PORT:数据库本地端口,不冲突就行,默认老苏在 docker-compose.yml 中已经注释掉了端口;

上面两个文件,老苏放在了 https://github.com/wbsu2003/synology/tree/main/ERPNext

安装

采用 docker-compose 方式运行

# 新建文件夹 erpnext 和 子目录
mkdir -p /volume2/docker/erpnext/{data,redis-cache-data,redis-queue-data,redis-socketio-data}

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

# 将 docker-compose.yml 和 env.txt 两个文件放入当前目录
  
# 一键运行
docker-compose --env-file env.txt up -d

如果一键启动总是超时,可以加个 timeout 参数

# 超时设置
docker-compose --env-file env.txt up -d --timeout 120

运行

如果你没有修改 APP_HTTP_PORT的值,你可以在浏览器中打开 http://群晖IP:6380来访问 ERPNext.

第一次启动的过程是比较长的,因为脚本中使用了 wait-for-it,好几处都是 -t 120,老苏甚至把数据库的改为了 wait-for-it -t 240 db:3306;,如果能看到登录界面,说明安装成功了

  • 默认的账号是 Administrator,密码就是前面设置的 APP_PASSWORD 的值,如果你没改的话,那就是 admin

开源企业资源规划ERPNext的安装

软件启动后,正常情况下,erp-configuratorerp-create-site 会停掉,因为它们已经完成了自己的使命

开源企业资源规划ERPNext的安装

但如果出现👇的错误

在老苏的机器上还是会有一定的几率发生,不要慌,我们还有补救措施,请往下看

开源企业资源规划ERPNext的安装

则还需要执行一次下面的命令

参考文档:

  • https://github.com/frappe/frappe_docker/blob/main/docs/site-operations.md
  • https://github.com/frappe/frappe_docker/issues/711
# 设置新站点
docker-compose --env-file env.txt exec backend bench new-site <site-name> --no-mariadb-socket --admin-password=<管理员密码> --db-root-password=<数据库root账户的密码> --install-app erpnext --set-default

# 示例
docker-compose --env-file env.txt exec backend bench new-site frontend --no-mariadb-socket --admin-password=admin --db-root-password=4aixKdghP3j56hPB8k --install-app erpnext --set-default

其中:

  • <site-name> 对应于 docker-compose.yml 中前端的 service name 的名称 frontend,这个在 nginx 的设置中也用到了;
  • <管理员密码> 对应前面 env.txt 中的 APP_PASSWORD 的值;
  • <数据库root账户的密码> 对应前面 env.txt 中的 DB_ROOT_PASSWORD 的值;

开源企业资源规划ERPNext的安装

之所以会出现这样的情况,应该还是容器编排的启动顺序上有问题,这些命令按道理在 erp-create-site 容器中应该是要被执行的

之后,如果容器停止了,再启动也是需要时间的,你太快打开网址,会看到下面这样的界面

开源企业资源规划ERPNext的安装

登录成功后,第一次还需要设置

开源企业资源规划ERPNext的安装

语言有时候能弹出下拉,但是有时候又不行,不过可以直接输入,现在已经支持 简体中文

开源企业资源规划ERPNext的安装

国家支持下拉,但可能输入更快

开源企业资源规划ERPNext的安装

设置用户

开源企业资源规划ERPNext的安装

设置公司

开源企业资源规划ERPNext的安装

设置组织

开源企业资源规划ERPNext的安装

设置完成

开源企业资源规划ERPNext的安装

现在可以开始使用了

开源企业资源规划ERPNext的安装

至于反代,老苏试过 npm ,正常设置就可以,无论你的域名有没有端口,都是可以正常访问的。

参考文档

ERPNext: Free and Open Source Cloud ERP Software
地址:https://erpnext.com/

frappe/erpnext: Free and Open Source Enterprise Resource Planning (ERP)
地址:https://github.com/frappe/erpnext

frappe/frappe_docker: Docker images for production and development setups of the Frappe framework and ERPNext
地址:https://github.com/frappe/frappe_docker
Home
地址:https://docs.erpnext.com/文章来源地址https://www.toymoban.com/news/detail-447318.html

到了这里,关于开源企业资源规划ERPNext的安装的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • nuplan(面向自动驾驶规划的开源数据集)——ubuntu中的安装与配置

    1. nuplan介绍: 1.1 nuplan数据集的意义: 2. 安装 2.1 下载开发包devkit 2.2 安装指定版本的python 2.3 安装虚拟环境 miniconda安装(已安装miniconda请跳过此步骤) 创建conda环境 在创建好的conda环境中安装依赖项: 3. 数据集下载与环境变量设置 3.1 数据集下载 3.2 环境变量配置 软件包环境

    2024年02月13日
    浏览(112)
  • 【ARM版银河麒麟源码编译安装开源混合整数规划器SCIP和PySCIPOpt】

    第一章 ARM版银河麒麟源码编译安装开源混合整数规划器SCIP和PySCIPOpt 目前在研的项目需要用到整数规划,SCIP作为性能较好的开源混合整数规划器之一,成为我的不二之选,利用与之配套的PySCIPOpt包,可以通过python方便进行调用和求解整数规划问题。但由于SCIP官网只提供了X

    2024年04月27日
    浏览(32)
  • CRM系统促进企业资源

    CRM系统(customer relationship management)是企业资源计划的简称,是集物资资源管理、人力资源管理、财务资源管理、信息资源管理一体化的企业管理软件,CRM最早由美国 Gartner Group 公司于1990年提出。目前,在我国CRM所代表的含义已经被扩大,用于企业的各类软件,已经统统被纳

    2024年02月13日
    浏览(39)
  • 企业级存储详解与存储资源盘活

    近年来,云计算、大数据、人工智能、物联网等信息技术与产业快速发展,信息技术与传统产业的融合也不断加深,快速发展的数字经济已经成为我国产业转型升级和经济高质量发展的重要驱动因素。数据是数字经济的重要基础组成,信息技术也围绕数据的生产、加工、应用

    2024年02月15日
    浏览(32)
  • WPF之资源规划

    本文主要介绍WPF资源的规划,通过规划如何使得我们的样式可以有高效的复用,以及在应对需求的改动(如换主题,或整体字体,颜色切换)的时候我们可以做到代码改动最小化。 资源规划总的原则就是: 代码,资源最大化的复用 代码可以做到以最小化的改动应对最大化的

    2024年02月22日
    浏览(39)
  • 企业/校园网络规划设计 ensp企业校园 网络规划设计 网络工程毕业设计 拓扑+一万字论文

    完整文档和网络拓扑私信领取❤❤❤ 完整文档和网络拓扑私信领取❤❤❤ 目录 摘要 引言 第一章   网络设计与原则 1.1网络设计原则 1.2系统设计原则 1.3网络系统设计目标 第二章   需求分析 2.1用户需求 2.2 网络功能需求 2.3 网络拓扑需求 2.4 网络安全需求 第三章   网络规

    2024年03月14日
    浏览(60)
  • 天翼云存储资源盘活系统HBlock,全面释放企业数据价值

    9月6日,天翼云与科技媒体InfoQ联合举办的以“存储难题新解法,揭秘极/致易用的HBlock”为主题的线上技术分享会圆满落幕。天翼云国际业务事业部研发专家武志民与存储产品线总监魏玮以“天翼云存储资源盘活系统 HBlock,深挖独创技术亮点与实战演练”为主题,分享了HBl

    2024年02月08日
    浏览(38)
  • 企业信息化规划该如何落地?以制造型企业为例

    规划做好了,蓝图也画好了,人手一块大饼也已经揣好了, 那么该怎么落地呢,这才是最关键的。 我将企业信息化规划落地分为4个周期,以最典型的制造行业为例,以简道云这个企业应用系统搭建平台为例,接下来给大家详细拆解下传统企业的信息化规划该如何落地。 企业

    2024年01月17日
    浏览(44)
  • 基于SpringBoot的企业人力资源管理系统设计与实现

    随着经济改革开放的发展,企业之间的竞争也越来越激烈,在这样的大环境下,企业要想立于不败之地,不仅要有好的商品,更要有一支强有力的团队,其本质就是人才。企业对人才的需求不断的增加,也导致人力资源管理的需求也在不断的变化。而传统的管理方法已经无法

    2024年02月15日
    浏览(51)
  • 资源分配问题【算法设计与分析】<动态规划问题>

    问题分析: ( 要把问题分为多步解决,每步求出子问题的多个最优策略后一步依赖于上一步的最有策略,最后一步得出问题的解) (1)首先要考虑分配给项目A的资金与利润的关系。得到此时投资数x与其相对应的 的关系。 (2)其次要考虑分配给前两个项目A,B的总资金 与利

    2023年04月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包