个人支付-mpay以容器运行

发布于 2025年11月27日

项目地址:码支付 发行版 - Gitee.com

获取源码解压

1、从项目地址获取源码

2、服务器新建目录

mkdir -p /opt/mpay;cd /opt/mpay

3、解压源码到/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-fpm

2、进入容器,安装扩展

#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
#确认扩展还在,就退出到宿主机进行打包新镜像
exit

3、提交镜像构建新镜像

#docker commit -a "您的名字" -m "描述信息,例如:安装完整的PHP扩展" <容器名或容器ID> <新镜像名>:<标签>
docker commit -a "frwuc" -m "mpay1.2.3php运行环境" php82-fpm php82-fpm:mpay1.2.3

php82-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.3

2、安装配置nginx

apt update && apt install -y nginx
systemctl enable --now nginx

3、创建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 reload

5、访问前台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 
#再在浏览器中进行重新安装



评论