项目地址:码支付 发行版 - Gitee.com
获取源码解压
1、从项目地址获取源码
2、服务器新建目录
mkdir -p /opt/mpay;cd /opt/mpay3、解压源码到/opt/mpay目录下
wget https://gitee.com/technical-laohu/mpay/releases/download/v1.2.3/mpay_v1.2.3.zip
unzip mpay_v1.2.3.zip -d /opt/mpay
cd /opt/mpay/mpay
构建运行环境镜像
1、使用php:8.2-fpm基础镜像启动容器
docker run -d --name php82-fpm php:8.2-fpm2、进入容器,安装扩展
#1.进入容器
docker exec -it <你的容器名或容器ID> /bin/bash
##查看已安装好的扩展
php -m
#2.执行以下命令安装常用依赖
apt update
apt install -y \
build-essential \
autoconf \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libwebp-dev \
libzip-dev \
zlib1g-dev \
libonig-dev \
libxml2-dev \
libssl-dev \
libcurl4-openssl-dev \
libldap2-dev
3.安装php扩展
# 首先配置并安装 gd 扩展
docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg --with-webp
docker-php-ext-install gd
4.正式安装扩展
docker-php-ext-install \
bcmath \
ctype \
curl \
dom \
fileinfo \
filter \
ftp \
gettext \
iconv \
intl \
mbstring \
mysqli \
pcntl \
pdo \
pdo_mysql \
pdo_sqlite \
phar \
posix \
session \
shmop \
simplexml \
soap \
sockets \
sodium \
sysvsem \
tokenizer \
xml \
xmlreader \
xmlwriter \
zip
#5.验证安装
php -m
#退出容器
exit
#重启容器
docker restart php82-fpm
#再重新进入容器确定刚刚安装扩展是否还在
docker exec -it php82-fpm /bin/bash
php -m
#确认扩展还在,就退出到宿主机进行打包新镜像
exit3、提交镜像构建新镜像
#docker commit -a "您的名字" -m "描述信息,例如:安装完整的PHP扩展" <容器名或容器ID> <新镜像名>:<标签>
docker commit -a "frwuc" -m "mpay1.2.3php运行环境" php82-fpm php82-fpm:mpay1.2.3php82-fpm:mpayv1.2.3 镜像我已经上传到镜像仓库,可以直接pull下来后使用。
安装启动mysql
mkdir -p /data/mysql
docker network create app-network#启动mysql容器
docker run --name mysql -d \
--restart always \
--network app-network \
-e MYSQL_ROOT_PASSWORD=Abc123# \
-p 3306:3306 \
-v /data/mysql:/var/lib/mysql \
swr.cn-southwest-2.myhuaweicloud.com/springboot-projiect-ckgl/mysql:8.0.15创建数据库
docker exec -it mysql /bin/bash
mysql -uroot -pAbc123#
#创建数据库
CREATE DATABASE mpay CHARACTER SET utf8mb4;
#创建用户
-- 创建用户 mpay 并允许从任意IP登录
CREATE USER 'mpay'@'%' IDENTIFIED BY 'mpay';
-- 授权 mpay管理 mpay数据库
GRANT ALL PRIVILEGES ON mpay.* TO 'mpay'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
#退出数据库
quit;
#退出容器
exit安装启动mpay
1、启动mpay容器
#删除启动的基础镜像
docker stop php82-fpm && docker rm php82-fpm
#其中/opt/mpay/mpay为mpay源码解压后的路径,该路径下第一层目录包含public
docker run -d --network app-network --name mpay -p 9002:9000 -v /opt/mpay/mpay:/var/www/html php82-fpm:mpay1.2.32、安装配置nginx
apt update && apt install -y nginx
systemctl enable --now nginx3、创建nginx的配置文件如下
vi /etc/nginx/conf.d/mpay.conf内容如下:
server {
listen 8083;
server_name your-domain.com;
root /opt/mpay/mpay/public;
index index.php;
location ~* \.(css|js|png|jpg|jpeg|gif|ico|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# 关键:重写非文件请求到 index.php/PATH
location / {
try_files $uri $uri/ @rewrite;
}
location @rewrite {
rewrite ^/(.*)$ /index.php/$1 last;
}
# 处理 .php 和 .php/xxx
location ~ \.php(/|$) {
fastcgi_pass localhost:9002;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME /var/www/html/public$fastcgi_script_name;
}
}
4、重载nginx,
nginx -t
nginx -s reload5、访问前台ip:端口/install界面进行安装.同时也查看运行日志
tail -f /opt/mpay/mpay/runtime/log/202511/27.log安装完成

最后,安装成功,成功登录后台。

再最后,按照gitee上的说明进行配置,使用体验一段时间,如果没有问题,即搭建成功。
支付测试,目前我配置了微信支付,支付以及回调均正常。

收钱吧监控脚本
定时任务如下:
*/1 * * * * /bin/bash /root/mpay.sh
#每分钟执行一次脚本内容如下:
vi /root/mpay.sh#!/bin/bash# 订单监听链接
ORDER="http://ip/checkOrder/1000/58c7d"
# 账号监听链接
ACCOUNT="http://ip/checkPayResult?pid=10200&aid=14"
# 循环30次,因为一分钟60秒,每2秒访问一次
for ((i = 0; i < 30; i++)); do
# 监听订单
RESPONSE1=$(curl -s -o /dev/null -w "%{http_code}" "$ORDER")
echo "第 $((i + 1)) 次访问 $URL1 状态码: $RESPONSE1"
# 监听账号
RESPONSE2=$(curl -s -o /dev/null -w "%{http_code}" "$ACCOUNT")
echo "第 $((i + 1)) 次访问 $URL2 状态码: $RESPONSE2"
# 暂停2秒
sleep 2
done修改首页链接
备份/opt/mpay/mpay/app/controller/IndexController.php文件
mv /opt/mpay/mpay/app/controller/IndexController.php /opt/mpay/mpay/app/controller/IndexController.phpback新建文件/opt/mpay/mpay/app/controller/IndexController.php文件
vi /opt/mpay/mpay/app/controller/IndexController.php内容如下:
<?php
namespace app\controller;
use think\facade\Log;
use think\facade\View;
use think\Response; // 新增命名空间引入
class IndexController
{
public function index()
{
if (session('?nickname')) {
$nickname = session('nickname');
View::assign('nickname', $nickname);
}
// return View::fetch();
// 原返回视图的代码改为重定向
return Response::create('https://www.baidu.com', 'redirect');
}
public function doc()
{
View::assign('domain', \request()->domain());
return View::fetch();
}
}重启容器
docker restart mpay
nginx -s reload访问首页测试是否跳转
遇到的问题(下面的内容可以不看)
发现问题:数据库连接不上
我这里连不上数据库,因为数据库也在这台服务器上(非容器化运行),我将容器网络模式改为host启动。容器默认是桥接网络。也可以找到docker0这个网卡的ip。这就是数据库的ip
如果数据库也是容器启动的,可以将mpay的容器和数据库容器使用同一网络,尽量避免直接使用host模式网络。
#先删除之前启动的容器
docker stop mpay && docker rm mpay
#再重新启动新容器
docker run --network=host -d --name mpay -v /opt/mpay/mpay:/var/www/html php82-fpm:mpay1.2.3
#默认端口9000,记得将nginx配置文件mpay.conf中的端口也改成9000,然后重载nginx
#fastcgi_pass localhost:9000;
nginx -t
nginx -s reload
#再在浏览器中进行重新安装