?独角数卡(自动售货系统)- 开源式站长自动化售货解决方案、高效、稳定、快速!???~~~~

独角数卡开源项目

写本文的原因主要是目前网上关于独角数卡的教程实在是太少,而且都是复制来复制去,基本没有任何参考价值。所以在该篇文章中介绍我写的关于独角数卡的 Docker 镜像,以及其一键搭建过程和 Nginx 的一些设置。

宝塔的安装教程的话官方那边有很详细的(如果说安装中出现问题,直接翻译下就能解决)

宝塔安装教程

官方的docker教程,并不是非常详细

docker 会随独角数卡仓库自动更新,可以配合 WatchTower 食用,喜欢的点点 star 吧~

独角数卡官方出了 Docker 镜像,但是写的甚是简陋,目前还是推荐我这个。

这里提醒以下,本镜像默认使用原版仓库无任何修改。

搭建过程

Docker 安装


参考百度 ,安装好 Dockerdocker-compose

独角数卡搭建


预创建文件夹

mkdir Shop && cd Shop
mkdir storage uploads
chmod 777 storage uploads

❗注意此处文件夹权限一定要给!

编辑 docker-compose.yaml

version: "3"

services:
  faka:
    image: ghcr.io/apocalypsor/dujiaoka:latest
    container_name: faka
    environment:
        # - INSTALL=false
        - INSTALL=true
        # - MODIFY=true
    volumes:
      - ./env.conf:/dujiaoka/.env
      - ./uploads:/dujiaoka/public/uploads
      - ./storage:/dujiaoka/storage
      # - ./favicon.ico:/dujiaoka/public/favicon.ico
    ports:
      - 127.0.0.1:56789:80
    restart: always

  db:
    image: mariadb:focal
    container_name: faka-data
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=<ROOT_PASSWORD>
      - MYSQL_DATABASE=dujiaoka
      - MYSQL_USER=dujiaoka
      - MYSQL_PASSWORD=<DB_PASSWORD>
    volumes:
      - ./data:/var/lib/mysql

  redis:
    image: redis:alpine
    container_name: faka-redis
    restart: always
    volumes:
      - ./redis:/data

❗ 注意:

  • 自行将形如 <foobar> 的变量替换为自己的信息,以下的替换要与 docker-compose.yaml 文件中相同

编辑 .env 文件

我这里把它创建为 env.conf

APP_NAME=<YOUR_APP_NAME>
APP_ENV=local
APP_KEY=<YOUR_APP_KEY>
APP_DEBUG=false
APP_URL=<YOUR_APP_URL>
#ADMIN_HTTPS=true

LOG_CHANNEL=stack

# 数据库配置
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=dujiaoka
DB_USERNAME=dujiaoka
DB_PASSWORD=<DB_PASSWORD>

# redis 配置
REDIS_HOST=redis
REDIS_PASSWORD=
REDIS_PORT=6379

BROADCAST_DRIVER=log
SESSION_DRIVER=file
SESSION_LIFETIME=120


# 缓存配置
# file 为磁盘文件  redis 为内存级别
# redis 为内存需要安装好 redis 服务端并配置
CACHE_DRIVER=file

# 异步消息队列
# sync 为同步  redis 为异步
# 使用 redis 异步需要安装好 redis 服务端并配置
QUEUE_CONNECTION=redis

# 后台语言
## zh_CN 简体中文
## zh_TW 繁体中文
## en    英文
DUJIAO_ADMIN_LANGUAGE=zh_CN

# 后台登录地址
ADMIN_ROUTE_PREFIX=/admin

如果没有特殊需求可以直接用我上面给的文件,并替换形如 <foobar> 的变量即可。有其他问题可以参考dujiaoka/.env.example

❗ 注意环境变量如果写的不对可能导致 500,可以开 Debug 看看具体是哪里写错了。

启动服务

最后就是愉快的一键运行啦:

docker-compose up -d

这样独角数卡就会在本地运行起来,如果仅需要 HTTP 的话可以将 docker-compose.yaml127.0.0.1:56789 改成 80 即可。

否则建议在主机端用 Nginx 反代来实现 HTTPS。反代时建议使用以下配置(宝塔创建反代后需要手动修改反代配置):

#PROXY-START/

location ^~ /
{
    proxy_pass http://127.0.0.1:56789;
    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_set_header REMOTE-HOST $remote_addr;
    proxy_set_header X-Forwarded-Proto  $scheme;

    add_header X-Cache $upstream_cache_status;
    #Set Nginx Cache

    proxy_set_header Accept-Encoding "";
    sub_filter "http://" "https://";
    sub_filter_once off;
    set $static_filedBWs42FU 0;
    if ($uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$" )
    {
        set $static_filedBWs42FU 1;
        expires 12h;
        }
    if ($static_filedBWs42FU = 0 )
    {
    add_header Cache-Control no-cache;
    }
}

#PROXY-END/

其中以下几行尤为重要,否则会在 HTTPS 中遇到许多问题!

proxy_set_header X-Forwarded-Proto  $scheme;
sub_filter "http://" "https://";
sub_filter_once off;

网页端安装

网页端安装时数据库的 hostdb,端口保持默认。

还需要注意的是,首次进入安装并完成后,需要将 docker-compose.yaml 环境变量中的 INSTALL=true 改为 INSTALL=false,然后运行以下命令使其生效:

docker-compose down && docker-compose up -d

常见问题

1. 支付接口

门槛最低的接口应该是 V 免签了,由于长期不更新我就没写 Docker 镜像,不过现在还能用,具体参考:

V 免签一般而言微信比较稳定,支付宝经常会掉线。微信存在 PC 客户端会更新的问题,而且无法关闭检测,应该可以用 hosts 来屏蔽更新,博主没有抓包测试,如果有抓好的朋友欢迎评论告知。

其次常见的还有当面付、Stripe 之类的,这里就不过多介绍了。

2. 当面付不跳转

一般而言造成此问题可能有两个原因:

  • 最可能的原因是 HTTPS 证书问题,如果做了分流,则需要检查下网站到国内的证书是否是正常的。
  • 也有可能是 CDN 缓存了检查订单的链接,需要将以下路径排除在缓存外:

    /check-order-status/*
    /pay/*

3. Stripe 接口

收到关于使用原版仓库的需求,所以如果开启以下修改,请在 docker-compose.yaml 的环境变量中设置 MODIFY=true。默认为原版仓库。

本镜像对独角数卡的 Stripe 接口进行了一定的修改:

  • 移除了微信支付,因为我的号开不了微信。
  • 支付宝的收款货币由人民币改为了英镑,因为支付宝的人民币汇率太坑了。

如果你自己有其他需求,可以将容器内的文件映射出来:

volumes:
    - ./StripeController.php:/dujiaoka/app/Http/Controllers/Pay/StripeController.php

然后参考 独角数卡的 StripeController.php 进行修改。