说明: 独角数卡是一个功能较为完善且强大的开源发卡系统,框架来自 laravel/framework 后端采用 laravel-admin 前端UI使用的是 layui。支付接口已集成:支付宝当面付、支付宝 PC 支付、支付宝手机支付、 payjs 微信扫码、 Paysapi (支付宝/微信)、码支付 (QQ /支付宝/微信)、微信企业扫码支付、 Paypal 支付 (默认美元)和全网易支付支持 (针对彩虹版),我们可以使用独角数卡搭建我们自己的发卡平台!查看 -> github项目地址

独角数卡.jpg

界面截图

独角数卡截图-1.jpg

独角数卡截图-2.jpg

独角数卡截图-3.jpg

环境准备

注: 本教程基于军哥LNMP一键包进行安装部署,默认终端支持php-cli 且默认已安装fileinfo扩展,redis可以使用LNMP包内自带的addons.sh 进行一键安装。而关于开启相关函数需要查找php.ini 文件中找到disable_functions移除禁用函数列表中的 putenvproc_openpcntl_signalpcntl_alarmprocgetstatus

## 基本环境要求
- (PHP + PHPCLI) version >= 7.2
- Nginx version >= 1.16
- MYSQL version >= 5.6
- Redis (高性能缓存服务)
- Supervisor (一个python编写的进程管理服务)
- Composer (PHP包管理器)
- Linux/Win (Win下未测试,建议直接Linux)

## PHP环境要求
1. 必须安装fileinfo扩展、redis扩展
2. 终端需要支持php-cli,测试php -v(版本必须一致)
3. 需要开启的函数:putenv,proc_open,pcntl_signal,pcntl_alarm
4. 建议安装opcache扩展(非必需)

安装 composer

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

安装部署

注意,本教程可能不适用于 dujiaoka v2,本文内容基于 v1.8.2版本

建议直接在项目的 release 页面下载包含依赖的 build 版本尽可能减少产生错误的可能性。

# 定位到网站根目录
cd /home/wwwroot/www.example.com

# 下载作者提供的版本为v1.8.2的build包文件,注意本教程不适用 dujiaoka v2.0.0
wget --no-check-certificate https://github.com/assimon/dujiaoka/releases/download/v1.8.2/v1.8.2_build.tar.gz

# 解压
tar -xzf v1.8.2_build.tar.gz 

# 移动包含隐藏的所有文件到网站根目录
mv dujiaoka_build/{,.}* ./

# 更改文件夹所属用户和用户组
chown -R www:www ./*

# 赋予文件夹读写权限
chmod -R 755 public bootstrap storage

创建数据库

# 输入密码进入mysql
mysql -u root -p

# 创建一个数据库,例如dujiaoka
create database dujiaoka;

修改项目配置文件

# 编辑配置文件
vi .env.example

必须确保 MySQL 数据库配置、Redis 配置、发件人邮件服务配置等正确无误(正式上线后一定要将.env配置里面的APP_DEBUG设置为false

# 网站url
APP_URL=https://www.example.com

# 数据库配置
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=数据库名
DB_USERNAME=数据库用户
DB_PASSWORD=数据库密码

# redis缓存配置
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=无密码填null
REDIS_PORT=6379

# 邮件服务配置
MAIL_DRIVER=smtp
MAIL_HOST=smtp服务器
MAIL_PORT=587
MAIL_USERNAME=邮箱账号
MAIL_PASSWORD=邮箱密码
MAIL_FROM_ADDRESS=发件人邮箱地址
MAIL_FROM_NAME=发件人名称
MAIL_ENCRYPTION=ssl

修改完成后,重命名配置文件

mv .env.example .env

导入数据库

# 网站www.example.com根目录下运行,数据导入成功会有提示
php artisan dujiao install

配置 Nginx

很多小伙伴安装完成启动时常常遇到 500 错误 ,除了没有正确赋予文件或文件夹权限,绝大部分因为Nginx配置问题导致。

修改网站对应的nginx配置文件:

vi /usr/local/nginx/conf/vhost/www.example.com.conf

请参考下面的配置:

关于免费SSL域名证书申请 -> 点此查看

server{
        listen 80;
        server_name www.example.com;
        root  /home/wwwroot/www.example.com/public;
        index  index.php index.html index.htm;
        rewrite ^/(.*)$  https://www.example.com/$1 permanent;
}

server {
        # 监听 HTTP 协议默认的 [443] 端口。
        listen 443;
        # 绑定主机名 [www.example.com]。
        server_name www.example.com;
        # 服务器站点根目录 [/www.example.com/public]。
        root  /home/wwwroot/www.example.com/public;
        
        index index.html index.htm index.php;
        
        ssl_certificate /usr/local/nginx/ssl/fullchain.cer; 
        ssl_certificate_key  /usr/local/nginx/ssl/example.com.key;  
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_trusted_certificate /usr/local/nginx/ssl/fullchain.cer;
        resolver 8.8.8.8 8.8.4.4 223.5.5.5 valid=3600s;
        resolver_timeout 2s;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
        ssl_prefer_server_ciphers on;
        add_header Strict-Transport-Security "max-age=31536000";

        # 添加几条有关安全的响应头;与 Google+ 的配置类似,详情参见文末。
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Content-Type-Options "nosniff";

        # 指定字符集为 UTF-8
        charset utf-8;

        # Laravel 默认重写规则;删除将导致 Laravel 路由失效且 Nginx 响应 404。
        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }

        # 将 [404] 错误交给 [/index.php] 处理,表示由 Laravel 渲染美观的错误页面。
        error_page 404 /index.php;

        # URI 符合正则表达式 [\.php$] 的请求将进入此段配置
        location ~ \.php$ {
            # 配置 FastCGI 服务地址,可以为 IP:端口,也可以为 Unix socket。
            fastcgi_pass  unix:/tmp/php-cgi.sock;
            # 配置 FastCGI 的主页为 index.php。
            fastcgi_index index.php;
            # 配置 FastCGI 参数 SCRIPT_FILENAME
            fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
            #配置 FastCGI 参数 PHP_ADMIN_VALUE
            fastcgi_param PHP_ADMIN_VALUE "open_basedir=NULL";
            # 引用更多默认的 FastCGI 参数。
            include fastcgi_params;
        }
        # 通俗地说,以上配置将所有 URI 以 .php 结尾的请求,全部交给 PHP-FPM 处理。

        # 除符合正则表达式 [/\.(?!well-known).*] 之外的 URI,全部拒绝访问
        # 也就是说,拒绝公开以 [.] 开头的目录,[.well-known] 除外
        location ~ /\.(?!well-known).* {
            deny all;
        }
}

配置完成后,重启nginx

systemctl restart nginx.service

若没有其他报错,此时打开浏览器输入 https://www.example.com 可以正常访问前台;后台地址https://www.example.com/admin默认管理账号/密码admin/admin

使用 Supervisor 守护进程

安装 Supervisor:

# CentOS系统
yum install supervisor -y

# Debian/Ubuntu系统
apt-get install supervisor -y

使用nanovim编辑工具修改配置文件supervisord.conf,路径默认为 /etc/supervisord.conf

nano /etc/supervisord.conf

在配置文件末尾追加以下内容:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/wwwroot/www.example.com/artisan queue:work --sleep=3 --tries=3
autostart=true 
autorestart=true
user=www
numprocs=4
redirect_stderr=true
stdout_logfile=/home/wwwlogs/worker.log

注: user 需要与 nginx.conf 文件中的 user 保持一致;注意 command 使用自己网站根目录(绝对路径),如果 php有版本之分可用 whereis 命令查找并使用对应版本的完整路径;numprocs指令让 Supervisor 运行4个 queue:work进程并监视它们,如果失败的话会自动重启,进程数量请根据CPU负载情况设定。

配置文件创建好了之后,可以使用如下命令更新Supervisor配置并开启进程:

supervisorctl reread
supervisorctl update
supervisorctl start laravel-worker:*

注: 通过改动.env文件配置邮箱发信信息,则需要执行 supervisorctl reload 命令重启Supervisor进程才能使服务生效。

其他

网关接口对应配置表:

支付选项商户id商户key商户密钥
支付宝官方(当面付、PC、wap)支付宝开放平台应用appid支付宝公钥商户私钥
payjspayjs商户号(mchid)payjs密钥
码支付平台商户号码支付请求网址密钥
微信官方公众号或小程序appid商户号商户api密钥
麻瓜宝商户密钥任意字符串
paysapi商户号密钥
易支付易支付易支付请求网址密钥
V免签V免签通讯密钥V免签地址

关于支付网关对接的部分,喵斯基部落不考虑补充请自行谷歌。


相关推荐