之前玩了玩独角数卡感觉很不错,记录一下搭建过程

作者地址:

准备条件

你可以将两个都搭建在一台服务器上,也可以分开搭建,我选择的是分开搭建

所以需要两台服务器或者是vps

搭建命令

我的服务器安装的是Centos7.9系统,其他系统可以自行百度或者自行改变命令

先用远程连接工具,连接VPS,市面上有很多的远程连接工具如:Xshell,FinalShell,MobaXterm等等,我在这里使用的是Termius,工具的使用看个人喜好

连接上服务器后,现在进行一个更新

1
sudo yum update -y

然后在根/www/wwwroot的目录下,下载独角数卡的压缩包,没有wwwroot目录的创建一个

1
2
3
4
5
6
mkdir -p /www/wwwroot
cd /www/wwwroot
wget https://github.com/assimon/dujiaoka/releases/download/2.0.6/2.0.6-antibody.tar.gz
tar -zxvf 2.0.6-antibody.tar.gz
#将压缩包解压出来
#没有wget的话用yum -y wget安装即可

现在咱们开始安装所需要的配置

基本环境要求

  • (PHP + PHPCLI) version = 7.4
  • Nginx version >= 1.16
  • MYSQL version >= 5.6
  • Redis (高性能缓存服务)
  • Supervisor (一个python编写的进程管理服务)
  • Composer (PHP包管理器)
  • Linux (Win下未测试,建议直接Linux)

PHP环境要求

  • *安装fileinfo扩展
  • *安装redis扩展
  • *终端需支持php-cli,测试php -v(版本必须一致)
  • *需要开启的函数:putenvproc_openpcntl_signalpcntl_alarm

咱们开始安装环境

先安装nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
yum -y install gcc gcc-c++ pcre pcre-devel openssl openssl-devel zlib zlib-devel gd gd-devel
groupadd www
useradd -s /sbin/nologin www -M -g
www
wget https://nginx.org/download/nginx-1.20.2.tar.gz
tar -zxvf nginx-1.20.2.tar.gz
cd nginx-1.20.2
./configure --prefix=/usr/local/nginx \
--user=www \
--group=www \
--with-pcre \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-http_realip_module
make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx

安装php

1
2
3
4
5
6
yum install epel-release
yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum -y install yum-utils
yum-config-manager --enable remi-php74
yum install php php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath php-json php-redis
ln -s /opt/remi/php74/root/usr/bin/php /usr/bin/php

安装MySQL

1
2
3
4
5
6
7
8
9
10
11
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
yum -y install mysql-community-server
systemctl start mysqld.service
grep "password" /var/log/mysqld.log
#上面会输出默认的密码
mysql -u root -p
输入默认密码进入数据库
mysql> set password for 'root'@'localhost'=password('输入你要设置的密码');
exit #退出数据库

安装redis

1
2
3
4
5
6
cd
wget https://download.redis.io/redis-stable.tar.gz
tar -xzvf redis-stable.tar.gz
cd redis-stable
make
make install

安装composer

1
2
3
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
php composer-setup.php
mv composer.phar /usr/local/bin/composer

安装Supervisor

1
2
3
yum install epel-release
yum install -y supervisor
supervisord -c /etc/supervisord.conf

配置

1
2
3
cd /www/wwwroot
chmod 755 -R *
chown www *

创建数据库

1
2
3
4
5
mysql -uroot -p
#输入你刚才设置的密码
mysql> create database dujiaoka;
#输入上面命令创建dujiaoka数据库
exit

SSL

配置nginx之前,先给域名申请一个泛域名证书

首先注册一个域名,(阿里,腾讯等等) 然后在服务器安装curl

1
2
yum -y install curl
curl https://get.acme.sh | sh

安装完成后会在目录出现一个文件夹

申请泛域名证书需要使用到DNS解析认证,当然你可以选择别的认证方式

确保ssl证书申请成功,我们需要一个API密钥,这里我将以DNSpod作为示例

登录到dnspod控制台—点击头像—api密钥—dnspod token

创建一个token,记住他的ID和Token

我们返回服务器,找见刚才安装acme的目录

1
2
3
4
5
cd .acme.sh/dnsapi
vim dns_dp.sh
#将DP_Id和DP_Key的注释取消掉然后修改成自己的保存退出
acme.sh --issue --dns dns_dp -d domain.com -d *.domain.com --server letsencrypt
#domain.com换成自己的域名

Nginx

最后将生成的证书移动至nginx配置的ssl路径位置即可

配置nginx,以下是我的配置将domain.com换成自己的域名即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
vim /usr/local/nginx/conf/nginx.conf


user www www;
worker_processes 1;

error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;

pid logs/nginx.pid;


events {
worker_connections 1024;
}


http {
include mime.types;
default_type application/octet-stream;


sendfile on;
keepalive_timeout 65;

server {
listen 80;
server_name domain.com;
return 301 https://$server_name$request_uri;

}

server {
listen 443 ssl;
server_name domain.com;
root /www/wwwroot/dujiaoka/public;
index index.html index.htm index.php;

ssl_certificate /usr/local/nginx/conf/ssl/domain.com/fullchain.cer; #证书存放路径
ssl_certificate_key /usr/local/nginx/conf/ssl/domain.com/domain.com.key;


location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location / {
try_files $uri $uri/ /index.php$is_args$query_string;
}
}
}

配置PHP

1
2
3
4
5
6
7
8
vim /etc/php.ini
#找见disable_functions =
disable_functions = system,exec,shell_exec,passthru,proc_close, proc_get_status,checkdnsrr,getmxrr,getservbyname,getservbyport, syslog,popen,show_source,highlight_file,dl,socket_listen,socket_create,socket_bind,socket_accept, socket_connect, stream_socket_server, stream_socket_accept,stream_socket_client,ftp_connect, ftp_login,ftp_pasv,ftp_get,sys_getloadavg,disk_total_space, disk_free_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname
#将以上函数写入

vim /etc/php-fpm.d/www.conf
user = www
group = www

运行php-fpm

1
systemctl start php-fpm

composer配置

1
2
3
4
#进入网站目录
cd /www/wwwroot/dujiaoka
composer install
composer update

配置redis

1
2
3
4
5
6
7
8
9
10
cd redis-stable/
vim redis.conf

bind 127.0.0.1
daemonize yes
protected-mode yes
port 6379

#运行redis
redis-server redis.conf

然后访问域名进行安装即可

1
2
3
4
MySQL 数据库名:dujiaoka
MySQl 密码:你设置的密码
Redis 密码:无需填写
网站URL:你的域名,如https://domain.com

编辑配置文件

编辑 /www/wwwroot/dujiaoka/.env

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
APP_NAME=dujiaoka
APP_ENV=local
APP_KEY=base64:vvuFjdLkL4G80hbwfJPhoiqgRw8vKLLA5g47R8HaLQs=
APP_DEBUG=true
APP_URL=https://domain.com

LOG_CHANNEL=stack

# 数据库配置
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=dujiaoka
DB_USERNAME=root
DB_PASSWORD=你设置的数据库密码

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

BROADCAST_DRIVER=log
SESSION_DRIVER=file
SESSION_LIFETIME=120


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

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

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

# 后台登录地址
ADMIN_ROUTE_PREFIX=/admin

# 是否开启https (前端开启了后端也必须为true)
# 后台登录出现0err或者其他登录异常问题,大概率是开启了https而后台没有开启,把下面的false>改为true即可
ADMIN_HTTPS=true

配置supervisor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#先把supervisor停止
supervisorctl shutdown
#修改配置文件
vim /etc/supervisord.conf
#将该文件最后一行修改为如下
[include]
files = supervisord.d/*.conf
#然后创建独角配置文件
vim /etc/supervisord.d/dujiaoka.conf
#写入以下代码
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /www/wwwroot/dujiaoka/artisan queue:work
autostart=true
autorestart=true
user=www
numprocs=1
redirect_stderr=true
#如果完全是按照教程走不需要修改
#启动
supervisord -c /etc/supervisord.conf
supervisorctl start laravel-worker:*
#每次更新都需要
supervisorctl update
supervisorctl reread

好了独角数卡就搭建完成了

下一步搭建epusdt

远程连接同上,这台服务器还是Centos7.9系统

进行更新同上

1
2
3
4
5
6
7
8
#这一次目录放在/var/www下
cd /var/www/
mkdir epusdt
chmod 777 -R /var/www/epusdt
cd epusdt
wget https://github.com/assimon/epusdt/releases/download/v0.0.3/epusdt_0.0.3_Linux_x86_64.tar.gz
#需要选择自己的架构
rm epusdt_v0.0.3Linux_x86_64.tar.gz

创建数据库

安装MySQL教程同上,这里就不多做介绍了

创建sql文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
vim epusdt.sql
#下面sql表使用的数据库名为epusdt
-- auto-generated definition
use epusdt;
create table orders
(
id int auto_increment
primary key,
trade_id varchar(32) not null comment 'epusdt订单号',
order_id varchar(32) not null comment '客户交易id',
block_transaction_id varchar(128) null comment '区块唯一编号',
actual_amount decimal(19, 4) not null comment '订单实际需要支付的金额,保留4位小数',
amount decimal(19, 4) not null comment '订单金额,保留4位小数',
token varchar(50) not null comment '所属钱包地址',
status int default 1 not null comment '1:等待支付,2:支付成功,3:已过期',
notify_url varchar(128) not null comment '异步回调地址',
redirect_url varchar(128) null comment '同步回调地址',
callback_num int default 0 null comment '回调次数',
callback_confirm int default 2 null comment '回调是否已确认? 1是 2否',
created_at timestamp null,
updated_at timestamp null,
deleted_at timestamp null,
constraint orders_order_id_uindex
unique (order_id),
constraint orders_trade_id_uindex
unique (trade_id)
);

create index orders_block_transaction_id_index
on orders (block_transaction_id);

-- auto-generated definition
create table wallet_address
(
id int auto_increment
primary key,
token varchar(50) not null comment '钱包token',
status int default 1 not null comment '1:启用 2:禁用',
created_at timestamp null,
updated_at timestamp null,
deleted_at timestamp null
)
comment '钱包表';

create index wallet_address_token_index
on wallet_address (token);

导入sql文件

1
2
mysql -u root -p < epusdt.sql 
#输入密码

安装nginx同上

修改nginx文件路径同上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
vim /usr/local/nginx/conf/nginx.conf

server {
listen 80;
server_name domain.com;
return 301 https://domain.com$request_uri;
}

server {
listen 443 ssl http2;
server_name domain.com;
ssl_certificate /etc/nginx/sslcert/cert.crt;
ssl_certificate_key /etc/nginx/sslcert/key.key;
ssl_prefer_server_ciphers on;

location / {
proxy_pass http://127.0.0.1:8000;
}
}

赋予epusdt可执行权限

1
chmod 111 epusdt

配置epusdt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
mv .env.example .env
vim .env
app_name=epusdt
#下面配置你的域名,收银台会需要
app_uri=https://upay.dujiaoka.com
#是否开启debug,默认false
app_debug=false
#http服务监听端口
http_listen=:8000
#静态资源文件目录
static_path=/static
#缓存路径
runtime_root_path=/runtime
#日志配置
log_save_path=/logs
log_max_size=32
log_max_age=7
max_backups=3
# mysql配置
mysql_host=127.0.0.1
mysql_port=3306
mysql_user=mysql账号
mysql_passwd=mysql密码
mysql_database=数据库
mysql_table_prefix=
mysql_max_idle_conns=10
mysql_max_open_conns=100
mysql_max_life_time=6
# redis配置
redis_host=127.0.0.1
redis_port=6379
redis_passwd=
redis_db=5
redis_pool_size=5
redis_max_retries=3
redis_idle_timeout=1000
# 消息队列配置
queue_concurrency=10
queue_level_critical=6
queue_level_default=3
queue_level_low=1
#机器人Apitoken
tg_bot_token=
#telegram代理url(大陆地区服务器可使用一台国外服务器做反代tg的url),如果运行的本来就是境外服务器,则无需填写
tg_proxy=
#管理员userid
tg_manage=
#api接口认证token(用于发起交易的签名认证,请勿外泄)
api_auth_token=
#订单过期时间(单位分钟)
order_expiration_time=10
#强制汇率(设置此参数后每笔交易将按照此汇率计算,例如:6.4)
forced_usdt_rate=

安装配置supervisor

安装同上

配置supervisor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#先把supervisor停止
supervisorctl shutdown
#修改配置文件
vim /etc/supervisord.conf
#将该文件最后一行修改为如下
[include]
files = supervisord.d/*.conf
#然后创建独角配置文件
vim /etc/supervisord.d/epusdt.conf

[program:epusdt]
process_name=epusdt
directory=/var/www/epusdt
command=/var/www/epusdt/epusdt http start
autostart=true
autorestart=true
user=www
numprocs=1
redirect_stderr=true
stdout_logfile=/var/log/supervisor/epusdt.log

supervisord -c /etc/supervisord.conf
supervisorctl start epusdt
supervisorctl reread
supervisorctl update
supervisorctl tail epusdt
#出现下图就证明搭建成功
_____ _ _
| ____|_ __ _ _ ___ __| | |_
| _| | '_ \| | | / __|/ _` | __|
| |___| |_) | |_| \__ \ (_| | |_
|_____| .__/ \__,_|___/\__,_|\__|
|_|
Epusdt version(0.0.2) Powered by assimon https://github.com/assimon/epusdt
⇨ http server started on [::]:8000

在独角发卡配置epusdt

在配置—支付配置—最下面有一个epusdt

编辑

商户ID填写

1
2
3
.env文件
#api接口认证token(用于发起交易的签名认证,请勿外泄)
api_auth_token=#你自己设置的token

商户密钥填写你为epusdt绑定的域名如果在同一个机子上就填127.0.0.1,例如

1
2
3
http://127.0.0.1:8000/api/v1/order/create-transaction

https://domain.com/api/v1/order/create-transaction

配置完成,可以去检验成果了