英溯IT论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 19|回复: 5

erpnext的安装

[复制链接]

122

主题

156

帖子

735

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
735
发表于 2025-6-18 02:09:45 | 显示全部楼层 |阅读模式
docker-compose.yml

services:
  backend:
    image: frappe/erpnext:v15.60.1
    container_name: erpnext-backend
    platform: linux/amd64
    pull_policy: always
    restart: always
    depends_on:
      mariadb:
        condition: service_healthy
      redis-cache:
        condition: service_healthy
      configurator:
        condition: service_completed_successfully
    volumes:
      - /www/wwwroot/m.teochew.jp/sites:/home/frappe/frappe-bench/sites
      - /www/wwwroot/m.teochew.jp/apps:/home/frappe/frappe-bench/apps
      - /www/wwwroot/m.teochew.jp/logs:/home/frappe/frappe-bench/logs
    ports:
      - "8000:8000"
    networks:
      - default

  mariadb:
    image: mariadb:10.6
    container_name: erpnext-mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: f78gwiN4ZZIC9k
    #   MYSQL_DATABASE: erpnext
    #   MYSQL_USER: erpnext
      MYSQL_PASSWORD: f78gwiN4ZZIC9k
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5
    volumes:
      - ./volumes/mariadb_data:/var/lib/mysql
    #   - ./config/init.sql:/docker-entrypoint-initdb.d/init.sql
    networks:
      - default

  redis-cache:
    image: redis:6
    container_name: erpnext-redis
    restart: always
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - default

  frontend:
    image: frappe/erpnext:v15.60.1
    container_name: erpnext-frontend
    working_dir: /home/frappe/frappe-bench
    entrypoint: ["/bin/bash", "-c"]
    command: >
      if [ ! -f sites/assets-bundled.flag ]; then
        echo "Building assets..." &&
        yarn install &&
        bench build &&
        touch sites/assets-bundled.flag;
      else
        echo "Assets already built, skipping.";
      fi
    user: "frappe"
    depends_on:
      - backend
    volumes:
      - /www/wwwroot/m.teochew.jp/sites:/home/frappe/frappe-bench/sites
      - /www/wwwroot/m.teochew.jp/apps:/home/frappe/frappe-bench/apps
      - /www/wwwroot/m.teochew.jp:/home/frappe/frappe-bench
    networks:
      - default

#   frontend:
#     container_name: erpnext-frontend
#     ports:
#       - "8000:8000"
#     depends_on:
#       - backend
#       - websocket
#     environment:
#       BACKEND: backend:8000
#       CLIENT_MAX_BODY_SIZE: 10M
#       FRAPPE_SITE_NAME_HEADER: $$host
#       PROXY_READ_TIMEOUT: "120"
#       SOCKETIO: websocket:9000
#       UPSTREAM_REAL_IP_ADDRESS: 127.0.0.1
#       UPSTREAM_REAL_IP_HEADER: X-Forwarded-For
#       UPSTREAM_REAL_IP_RECURSIVE: "off"
#     image: frappe/erpnext:v15.60.1
#     networks:
#       - default
#     platform: linux/amd64
#     pull_policy: always
#     restart: always
#     volumes:
#       - type: volume
#         source: sites
#         target: /home/frappe/frappe-bench/sites

  configurator:
    image: frappe/erpnext:v15.60.1
    container_name: erpnext-configurator
    platform: linux/amd64
    pull_policy: always
    restart: on-failure
    # entrypoint:
    #   - bash
    # command:
    #   - -c
    #   - |
    #     echo 'Setting Frappe Redis and DB configs...';
    #     cd /home/frappe/frappe-bench &&
    #     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_CACHE" &&
    #     bench set-config -g redis_queue "$REDIS_QUEUE" &&
    #     bench set-config -g redis_socketio "$REDIS_SOCKETIO" &&
    #     bench set-config -gp socketio_port "$SOCKETIO_PORT";
    entrypoint: ["bash", "-c"]
    command: >
      echo 'Setting Frappe Redis and DB configs...';
      cd /home/frappe/frappe-bench &&
      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_CACHE" &&
      bench set-config -g redis_queue "$REDIS_QUEUE" &&
      bench set-config -g redis_socketio "$REDIS_SOCKETIO" &&
      bench set-config -gp socketio_port "$SOCKETIO_PORT";
    environment:
      DB_HOST: mariadb
      DB_PORT: 3306
      REDIS_CACHE: redis://redis-cache:6379
      REDIS_QUEUE: redis://redis-cache:6379
      REDIS_SOCKETIO: redis://redis-cache:6379
      SOCKETIO_PORT: "9000"
    volumes:
      - /www/wwwroot/m.teochew.jp/sites:/home/frappe/frappe-bench/sites
      - /www/wwwroot/m.teochew.jp/apps:/home/frappe/frappe-bench/apps
    networks:
      - default

  socketio:
    image: frappe/erpnext:v15.60.1
    container_name: erpnext-socketio
    restart: always
    depends_on:
      redis-cache:
        condition: service_healthy
    environment:
      REDIS_URL: redis://redis-cache:6379
      REDIS_CACHE: redis://redis-cache:6379
      REDIS_QUEUE: redis://redis-cache:6379
      REDIS_SOCKETIO: redis://redis-cache:6379
      SOCKETIO_PORT: 9000
    networks:
      - default

  websocket:
    image: frappe/erpnext:v15.60.1
    container_name: erpnext-websocket
    platform: linux/amd64
    pull_policy: always
    restart: always
    command:
      - node
      - /home/frappe/frappe-bench/apps/frappe/socketio.js
    depends_on:
      configurator:
        condition: service_completed_successfully
    environment:
      - REDIS_URL=redis://redis-cache:6379
    volumes:
      - /www/wwwroot/m.teochew.jp/sites:/home/frappe/frappe-bench/sites
    networks:
      - default

  queue-long:
    image: frappe/erpnext:v15.60.1
    container_name: erpnext-queue-long
    platform: linux/amd64
    pull_policy: always
    restart: always
    command: ["bench", "worker", "--queue", "long,default,short"]
    depends_on:
      configurator:
        condition: service_completed_successfully
    volumes:
      - /www/wwwroot/m.teochew.jp/sites:/home/frappe/frappe-bench/sites
    networks:
      - default

  queue-short:
    image: frappe/erpnext:v15.60.1
    container_name: erpnext-queue-short
    platform: linux/amd64
    pull_policy: always
    restart: always
    command: ["bench", "worker", "--queue", "short,default"]
    depends_on:
      configurator:
        condition: service_completed_successfully
    volumes:
      - /www/wwwroot/m.teochew.jp/sites:/home/frappe/frappe-bench/sites
    networks:
      - default

  scheduler:
    image: frappe/erpnext:v15.60.1
    container_name: erpnext-scheduler
    platform: linux/amd64
    pull_policy: always
    restart: always
    command: ["bench", "schedule"]
    depends_on:
      configurator:
        condition: service_completed_successfully
    volumes:
      - /www/wwwroot/m.teochew.jp/sites:/home/frappe/frappe-bench/sites
    networks:
      - default

  init-site:
    image: frappe/erpnext:v15.60.1
    container_name: erpnext-init-site
    restart: "no"
    tty: false
    stdin_open: false
    depends_on:
      mariadb:
        condition: service_healthy
      redis-cache:
        condition: service_healthy
    entrypoint:
      - bash
      - -lc
      - |
        set -e

        echo "
回复

使用道具 举报

122

主题

156

帖子

735

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
735
 楼主| 发表于 2025-6-18 02:11:20 | 显示全部楼层

docker compose -f compose.yaml down -v
docker compose -f docker-compose.yml down -v
docker rm -f $(docker ps -aq --filter "name=frappe")
docker system prune -a --volumes
会清除所有未使用的容器、网络、镜像和卷,请慎重。


docker compose down -v

docker exec -it erpnext-frappe bash

步骤 1:准备 frappe_docker 并生成配置
cd /www/wwwroot/m.teochew.jp
git clone https://github.com/frappe/frappe_docker.git
cd frappe_docker
cp example.env .env
编辑 .env 文件,设置所需的版本和密码等参数。
FRAPPE_VERSION=v15.41.0
ERPNEXT_VERSION=v15.60.1
DB_PASSWORD=f78gwiN4ZZIC9k
DB_PASSWORD        your_strong_db_password        MariaDB 的 root 密码,必须设置
      DB_HOST: mariadb
      DB_PORT: 3306
REDIS_CACHE        redis://redis:6379        Redis 缓存服务地址
REDIS_QUEUE        redis://redis:6379        Redis 队列服务地址
REDIS_SOCKETIO        redis://redis:6379        Redis 实时 socketio 通信地址
LETSENCRYPT_EMAIL        your@email.com        用于 HTTPS 证书申请(可先留空)
SITES        `m.teochew.jp`        用于 Let’s Encrypt HTTPS 的域名(可不填,开发环境可忽略)
FRAPPE_SITE_NAME_HEADER        m.teochew.jp        当域名和站点名不一致时填写
HTTP_PUBLISH_PORT        8080        暴露的 HTTP 端口,默认 8080,可改为 80
UPSTREAM_REAL_IP_ADDRESS        127.0.0.1        用于反向代理信任 IP
CLIENT_MAX_BODY_SIZE        100m        设置最大上传文件大小(可根据业务修改)

cd /www/wwwroot/m.teochew.jp/frappe_docker

docker compose -f compose.yaml config > docker-compose.yml

rm compose.yaml

启动容器(第一次部署)
docker compose up -d

cd /www/wwwroot/m.teochew.jp
创建一个非 root 用户
useradd -m frappe
passwd frappe
提示输入密码:erpnext123 (手动输入)


sudo usermod -aG docker frappe

su - frappe


cd /www/wwwroot/m.teochew.jp/frappe_docker

newgrp docker


docker exec -it erpnext-backend bash

cd /home/frappe/frappe-bench

如果你之前的安装不完整,建议你删除站点再重建
bench drop-site m.teochew.jp --force


bench new-site m.teochew.jp \
  --mariadb-root-password f78gwiN4ZZIC9k \
  --admin-password zsn554365 \
  --install-app erpnext \
  --db-host mariadb

添加站点到 Procfile
如果你用的是单站部署模式,运行:
bench use m.teochew.jp

  docker-compose restart
docker-compose down --volumes  # 清理旧版本的数据库卷(注意:这会清除已有数据库)
  ls ~/frappe-bench/sites

  docker exec -it erpnext-backend bash
cd /home/frappe/frappe-bench/sites/m.teochew.jp
vi site_config.json
cd /home/frappe/frappe-bench
尝试修复 ERPNext 安装中的数据库表。进入你的 bench 目录并运行以下命令:
docker exec -it erpnext-backend bash
bench --site m.teochew.jp migrate


bench drop-site m.teochew.jp --force

bench new-site m.teochew.jp
如果提示错误`_3885454d55aba3aa`数据库存在的话
docker exec -it erpnext-mariadb bash
mysql -u root -p
show databases;
DROP DATABASE `erpnext`;
# 确保刷新状态(可选)
FLUSH PRIVILEGES;

bench new-site m.teochew.jp
bench --site m.teochew.jp migrate

页面出来了,但是脚本错误
首先,确认静态资源是否已经正确生成。在 Frappe 中,可以通过以下命令生成静态资源:
docker exec -it erpnext-backend bash
bench --site m.teochew.jp build

npx update-browserslist-db@latest
bench --site m.teochew.jp build



  docker exec -it 7e5b2454a22a  bash
  systemctl status redis
docker compose down
默认不会删除项目中 已删除或重命名的服务 对应的旧容器。
docker compose down --remove-orphans
docker compose pull      # 拉最新镜像
docker compose up -d

docker cp erpnext-socketio:/home/frappe/frappe-bench/apps/frappe/node_utils.js .
docker cp node_utils.js erpnext-socketio:/home/frappe/frappe-bench/apps/frappe/node_utils.js
docker compose restart socketio


./config/init.sql 没有在容器初始化时执行,并且你在初始化站点时报错 Database m_teochew_jp already exists


docker-compose down -v  # 删除所有卷(确保干净)
docker-compose up -d mariadb redis-cache
docker-compose run --rm init-site  # 只运行一次初始化站点
docker-compose up -d  # 启动其他服务

# 只清理数据不删除镜像
docker-compose down -v && docker volume prune
# 删除相关的 Docker 卷(永久清除数据库内容)
docker volume rm $(docker volume ls -q | grep mariadb_data)
docker volume rm $(docker volume ls -q | grep sites-vol)
docker volume rm $(docker volume ls -q | grep logs-vol)
# 删除数据库 Volume(注意:会清除所有 MariaDB 数据)
docker volume rm erpnext_mariadb_data
sites 目录中还有旧的 erpnext 站点文件,也会触发这个冲突。
rm -rf ./sites/erpnext
docker volume prune -f  # 清除所有未使用的卷(慎用)
rm -rf mariadb_data/  # 如果你自定义映射了数据库文件夹,也删掉
docker volume ls
docker compose up -d mariadb redis-cache
docker compose ps
docker compose run --rm init-site
docker compose up -d

# 给 logs 和 sites 都设置权限(推荐做法)
chown -R 1000:1000 /www/wwwroot/m.teochew.jp/logs
chown -R 1000:1000 /www/wwwroot/m.teochew.jp/sites
chown -R 1000:1000 /www/wwwroot/m.teochew.jp




rm -rf apps/*
mkdir -p apps
cd apps
git clone -b version-15 https://github.com/frappe/frappe frappe
git clone -b version-15 https://github.com/frappe/erpnext erpnext


su - frappe
cd /www/wwwroot/m.teochew.jp
sudo chown -R frappe:frappe /www/wwwroot/m.teochew.jp



docker exec -it erpnext-mariadb bash
mysql -u root -p f78gwiN4ZZIC9k
show databases;
DROP DATABASE `erpnext`;
DROP DATABASE `m_teochew_jp`;
m_teochew_jp
SELECT User, Host FROM mysql.user WHERE User = 'm_teochew_jp';
GRANT ALL PRIVILEGES ON m_teochew_jp.* TO 'm_teochew_jp'@'%' IDENTIFIED BY 'f78gwiN4ZZIC9k';
FLUSH PRIVILEGES;


./reset_mariadb_and_init_site.sh
docker compose up -d

docker exec -it erpnext-backend bash




docker compose run --rm init-site \
  new-site m.teochew.jp \
  --mariadb-root-password f78gwiN4ZZIC9k \
  --admin-password zsn554365 \
  --install-app erpnext

回复

使用道具 举报

122

主题

156

帖子

735

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
735
 楼主| 发表于 2025-6-18 02:15:10 | 显示全部楼层
[root@ebs-89330 m.teochew.jp]# tree -L 2
.
├── apps
│   ├── erpnext
│   └── frappe
├── apps.txt
├── frappe_docker
│   ├── apps.txt
│   ├── build
│   ├── CODE_OF_CONDUCT.md
│   ├── CONTRIBUTING.md
│   ├── devcontainer-example
│   ├── development
│   ├── docker-bake.hcl
│   ├── docker-compose.yml
│   ├── docs
│   ├── example.env
│   ├── images
│   ├── install_x11_deps.sh
│   ├── LICENSE
│   ├── overrides
│   ├── pwd.yml
│   ├── README.md
│   ├── requirements-test.txt
│   ├── reset_mariadb_and_init_site.sh
│   ├── resources
│   ├── setup.cfg
│   ├── tests
│   └── volumes
├── logs
├── proxy_cache_dir
└── sites
    ├── apps.txt
    ├── assets
    ├── m.teochew.jp
    ├── node_modules
    └── yarn.lock

19 directories, 16 files

回复

使用道具 举报

122

主题

156

帖子

735

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
735
 楼主| 发表于 2025-6-18 02:49:47 | 显示全部楼层
nginix配置

#proxy_cache_path /www/wwwroot/m.teochew.jp/proxy_cache_dir levels=1:2 keys_zone=m_teochew_jp_cache:20m inactive=1d max_size=5g;

server {
    listen 80;

    listen 443 ssl http2 ;
    listen [::]:80;

    listen [::]:443 ssl http2 ;

    server_name m.teochew.jp;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/m.teochew.jp;


    #CERT-APPLY-CHECK--START
    # 用于SSL证书申请时的文件验证相关配置 -- 请勿删除
    include /www/server/panel/vhost/nginx/well-known/m.teochew.jp.conf;
    #CERT-APPLY-CHECK--END

    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    ssl_certificate    /www/server/panel/vhost/cert/m.teochew.jp/fullchain.pem;
    ssl_certificate_key    /www/server/panel/vhost/cert/m.teochew.jp/privkey.pem;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    add_header Strict-Transport-Security "max-age=31536000";
    error_page 497  https://$host$request_uri;
    #SSL-END
    #REDIRECT START

    #REDIRECT END

    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    #error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END

    #PHP-INFO-START  PHP引用配置,可以注释或修改

    include enable-php-00.conf;
    #PHP-INFO-END

    #IP-RESTRICT-START 限制访问ip的配置,IP黑白名单


    #IP-RESTRICT-END

    #BASICAUTH START

    #BASICAUTH END

    #SUB_FILTER START

    #SUB_FILTER END

    #GZIP START

    #GZIP END

    #GLOBAL-CACHE START

    #GLOBAL-CACHE END

    #WEBSOCKET-SUPPORT START
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    #proxy_set_header Connection $connection_upgrade;
    proxy_set_header Connection "upgrade";
    #WEBSOCKET-SUPPORT END

    #PROXY-CONF-START
    # location ^~ / {


    #   proxy_pass http://127.0.0.1:8000;
    #   proxy_set_header Host $host;
    #   proxy_set_header X-Real-IP $remote_addr;
    #   proxy_set_header X-Real-Port $remote_port;
    #   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    #   proxy_set_header X-Forwarded-Proto $scheme;
    #   proxy_set_header X-Forwarded-Host $host;
    #   proxy_set_header X-Forwarded-Port $server_port;
    #   proxy_set_header REMOTE-HOST $remote_addr;

    #   proxy_connect_timeout 60s;
    #   proxy_send_timeout 600s;
    #   proxy_read_timeout 600s;
    #   proxy_http_version 1.1;
    #   proxy_set_header Upgrade $http_upgrade;
    #   proxy_set_header Connection $connection_upgrade;





    # }

    # 处理静态资源(直接代理给容器)
    # location /assets {
    #     proxy_pass http://127.0.0.1:8000;
    #     proxy_set_header Host $host;
    #     proxy_set_header X-Real-IP $remote_addr;
    # }
    location /assets {
        alias /www/wwwroot/m.teochew.jp/sites/assets;
        try_files $uri =404;
    }

    # location /socket.io {
    #     proxy_pass http://127.0.0.1:8000;
    #     proxy_http_version 1.1;
    #     proxy_set_header Upgrade $http_upgrade;
    #     proxy_set_header Connection "upgrade";
    #     proxy_set_header Host $host;
    #     proxy_read_timeout 3600;
    # }

    location / {
        # proxy_pass http://127.0.0.1:8000;
        # proxy_set_header Host $host;
        # proxy_set_header X-Real-IP $remote_addr;
        # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # proxy_read_timeout 120;
        # proxy_redirect off;


        proxy_pass http://127.0.0.1:8000;  # 或127.0.0.1,视你的部署而定
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Real-Port $remote_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forward-Proto http;
        proxy_set_header X-Nginx-Proxy true;
        proxy_redirect off;

        # 不缓存 WebSocket
        proxy_buffering off;

        proxy_connect_timeout 60s;
        proxy_send_timeout 600s;
        proxy_read_timeout 600s;

        # proxy_cache chat_chaoren_group_cache;
        # proxy_cache_key $host$uri$is_args$args;
        # proxy_ignore_headers Set-Cookie Cache-Control Expires X-Accel-Expires;
        # proxy_cache_valid 200 301 302 304 1d;
        # proxy_cache_valid 404 1m;
        #
回复

使用道具 举报

122

主题

156

帖子

735

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
735
 楼主| 发表于 2025-6-18 02:50:25 | 显示全部楼层
    }

    #PROXY-CONF-END

    #SERVER-BLOCK START

    #SERVER-BLOCK END

    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }

    #一键申请SSL证书验证目录相关设置
    location /.well-known{
        allow all;
    }

    #禁止在证书验证目录放入敏感文件
    if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
        return 403;
    }

    #LOG START

access_log  /www/wwwlogs/m.teochew.jp.log;
    error_log  /www/wwwlogs/m.teochew.jp.error.log;

    #LOG END
}
回复

使用道具 举报

122

主题

156

帖子

735

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
735
 楼主| 发表于 2025-6-18 02:50:46 | 显示全部楼层
  没有
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|英溯IT论坛 ( 沪ICP备13022730号-6 )

GMT+8, 2025-7-1 21:49 , Processed in 0.104651 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表