Featured image of post 如何部署并运行独角数卡项目

如何部署并运行独角数卡项目

这篇文章详细地描述了如何在Linux上手动部署独角数卡

引入

由于独角数卡官方的Linux手动部署教程过于简陋,而网络上的教程又全是使用宝塔部署的,为了防止下次部署时忘记方法,于是记录一下。

由于独角数卡几乎没有文档,教程全是依托,还是很久都没更新过的陈年屎山,所以我也不能确保部署流程完全正确,仅供参考

部署中使用的系统为debian12,如果你用的别的发行版请自行修改安装指令

安装PHP7.4

  1. 使用包管理器安装一些依赖

    1
    
    apt install -y sudo curl git wget ca-certificates apt-transport-https software-properties-common
    
  2. 添加 ondrej/php PPA 仓库

    1
    2
    
    sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
    sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
    
  3. 更新一下软件包列表

    1
    
    sudo apt update
    
  4. 安装 PHP7.4 和常用扩展,注意这里的 fileinfo,bcmath 和 redis 插件必装

    1
    2
    
    sudo apt install -y php7.4
    sudo apt install -y php7.4-cli php7.4-fpm php7.4-mysql php7.4-curl php7.4-gd php7.4-mbstring php7.4-xml php7.4-zip php7.4-opcache php7.4-json php7.4-fileinfo php7.4-redis php7.4-bcmath
    
  5. 验证一下安装,如果正常返回了版本号就是安装成功

    1
    
    php -v
    

    image-20250423130241763

  6. 安装 composer

    1
    2
    
    curl -sS https://getcomposer.org/installer -o composer-setup.php
    sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
    

安装Redis

  1. 使用包管理器安装redis

    1
    
    apt install redis-server
    
  2. 执行 redis-cli ping 来验证安装,如果返回 PONG 则说明安装正确

安装MySQL5.7

由于debian12的的默认仓库中已经不包含 MySQL 5.7,所以需要从MySQL的仓库中安装

  1. 下载MySQL APT仓库配置包

    1
    
    wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb
    
  2. 安装仓库配置包

    1
    
    sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb
    
  3. 程序会先弹出一个窗口让你选择系统,这里选择debain buster (debian 10)

    键盘上下键选择,光标移动到debian buster上后按tab键移动到ok,然后按回车键确认

    image-20250423131721230

  4. 程序会继续让你选择要安装的产品,这里只需要改MySQL Server & Cluster,键盘上下键选择,光标移动到MySQL Server & Cluster (Currently selected: mysql-8.0)上按回车

    image-20250423132022504

    进去之后就能看到MySQL版本选择了,键盘上下键选择,光标移动到mysql-5.7上按回车

    image-20250423132113073

    下面两项保持默认即可,键盘上下键选择,光标移动到ok上按回车

  5. 执行apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B7B3B788A8D3785C导入公钥

  6. 执行sudo apt update更新软件包列表

  7. 执行apt install mysql-server安装MySQL5.7

  8. 安装过程中会让你输入root密码,建议设置随机大小写字母+数字+符号,你需要记住密码。设置好密码之后还会让你再输一遍确认

    image-20250423134554182

  9. 执行sudo mysql_secure_installation来进行加固安装,按照提示一步步设置即可(可选)

  10. 执行mysql -u root -p输入密码登录MySQL

  11. 创建数据库,用户和密码并授予访问权限,这里创建的数据库和用户名分别为faka和faka_user,这两个名字你可以随便改

    1
    2
    3
    4
    5
    
    CREATE DATABASE faka CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    # 这里的 your_strong_password 要改成你自己的密码,强烈建议不要和之前设置的root密码一样
    CREATE USER 'faka_user'@'localhost' IDENTIFIED BY 'your_strong_password';
    GRANT ALL PRIVILEGES ON faka.* TO 'faka_user'@'localhost';
    FLUSH PRIVILEGES;
    
  12. 执行EXIT;退出数据库

从Github clone项目并部署

  1. 找个合适的目录clone项目,我这里clone到/home

    1
    2
    3
    
    cd /home
    git clone https://github.com/assimon/dujiaoka.git
    cd dujiaoka/
    
  2. 修改.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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    
    # 这是你网站的名字,疑似无效设置项
    APP_NAME=TouchGal捐赠中心
    # 不用改
    APP_ENV=local
    # 这里项目会自带一个密钥,网上的教程包括官方教程都没说要改,但是很明显这个是要改的。在项目目录里执行 php artisan key:generate 就会自动生成一个密钥并帮你填到这里。不要用自带的密钥!
    APP_KEY=base64:xxx
    # 生产环境中要改成false
    APP_DEBUG=true
    # 这里是你网站的网址,建议直接上https,5205年了谁还用http啊
    APP_URL=https://donate.touchgal.co
    
    # 不用改
    LOG_CHANNEL=stack
    
    # 数据库配置
    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=<数据库名>
    DB_USERNAME=<数据库用户名>
    DB_PASSWORD=<数据库密码>
    
    # redis配置,这里保持默认即可,除非你改了redis的端口或者给redis设置了密码
    REDIS_HOST=127.0.0.1
    REDIS_PASSWORD=
    REDIS_PORT=6379
    
    # 不用改
    BROADCAST_DRIVER=log
    # 这里改成redis理论上会快些
    SESSION_DRIVER=redis
    # 不用改
    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=<登录地址的路径,最前面要带斜杠>
    
    # 是否开启https (前端开启了后端也必须为true)
    # 后台登录出现0err或者其他登录异常问题,大概率是开启了https而后台没有开启,把下面的false改为true即可
    # 建议直接开了,5202年了谁还用http啊
    ADMIN_HTTPS=true
    
  3. 安装composer依赖

    1
    
    composer install
    
  4. 设置文件权限,这里的路径要改成你自己的

    1
    
    sudo chmod -R 755 /home/dujiaoka/
    

安装Nginx

  1. 使用包管理器安装nginx

    1
    
    sudo apt install nginx
    
  2. 执行 sudo nano /etc/nginx/sites-available/faka.conf 编写nginx配置文件,这里的文件名可以随便修改。在配置文件里写一个简单的http服务器即可,本文中我的独角数卡项目安装在/home/dujiaoka,你在设置时需要改成你自己的安装路径

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    server
    {
        listen 80;
        # 这里server_name 改成你自己的域名
        server_name donate.touchgal.co;
        # 这里root目录改成你自己的
        root /home/dujiaoka/public;
        index index.php index.html index.htm default.php default.htm default.html;
    
    	# 启用PHP
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    
    	# 伪静态
        location / {  
            try_files $uri $uri/ /index.php$is_args$query_string;  
        }
    
    }
    

    这里默认你会使用Cloudflare或者其他CDN进行反代,如果不是的话请自行设置好 SSL

  3. 创建软链接来启用网站

    1
    
    sudo ln -s /etc/nginx/sites-available/faka.conf /etc/nginx/sites-enabled/
    
  4. 测试配置并启动

    1
    2
    
    nginx -t
    nginx -s reload
    

在WEB端安装

用浏览器访问你的网站,如果你前面都设置正确的话应该会自动跳转到/install安装界面,按照提示填写好后点击安装即可。(我这里填写的网站名称、网站url和管理路径都没有生效,疑似是.env文件的权限问题,你可以把.env文件的权限设置为777尝试,不过反正之后到网站设置里修改也是一样的)

安装页面

用Supervisor创建守护进程运行队列

  1. 使用包管理器安装supervisor

    1
    
    sudo apt install supervisor
    
  2. 创建一个守护进程配置文件

    1
    2
    
    # 这里的faka文件名可以随便设置
    touch /etc/supervisor/conf.d/faka.conf
    

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    [program:laravel-queue-worker]
    process_name=%(program_name)s_%(process_num)02d
    command=/usr/bin/php /home/dujiaoka/artisan queue:work
    directory=/home/dujiaoka
    autostart=true
    autorestart=true
    user=root
    numprocs=1
    redirect_stderr=true
    stdout_logfile=/home/dujiaoka/storage/logs/queue-worker.log
    stopwaitsecs=60
    
  3. 启动守护进程

    1
    2
    
    supervisor reread
    supervisor update
    

到这里整个项目都已经部署完成了,各种网站设置都可以在网页端完成

如果你遇到问题可以到原作者写的常见问题文章里找:常见问题

私货时间:如何绕过易支付商家的域名限制

现在有些易支付商家不愿意接发卡商家,或者你单纯懒得让易支付商家来审核你的发卡域名,你就可以用下面的方法来绕开易支付商家的域名限制

  1. 首先,你应该先让易支付商家审核通过你的一个域名,你可以假装是易支付商家接受的任何一种商户类型,比如机场之类的,审核通过之后易支付商家一般都不会再管你域名上是什么东西了

  2. 易支付表面上限制域名,但其实只限制通知域名(回调域名),并不会限制你的跳转域名(返回域名)。了解这个之后我们就可以进行操作了

  3. 修改/app/Http/Controllers/Pay/YipayController.php的22行的notify_url

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    // 加载网关
                $this->loadGateWay($orderSN, $payway);
                //组装支付参数
                $parameter = [
                    'pid' =>  $this->payGateway->merchant_id,
                    'type' => $payway,
                    'out_trade_no' => $this->order->order_sn,
                    'return_url' => route('yipay-return', ['order_id' => $this->order->order_sn]),
                    'notify_url' => url('https://<你在易支付商家审核通过的域名>/pay/yipay' . '/notify_url'),
                    'name'   => $this->order->order_sn,
                    'money'  => (float)$this->order->actual_price,
                    'sign' => $this->payGateway->merchant_pem,
                    'sign_type' =>'MD5'
                ];
    

    这里的路径/pay/yipay也可以按需修改。比如如果你有多个发卡,你就可以分别设置成不同的路径,然后在下面的设置反代过程中分别反向代理到不同的发卡服务器

  4. 在你在易支付商家审核通过的域名解析到的那台服务器的nginx对应配置里添加如下反向代理配置

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    location /pay/yipay/notify_url {
            proxy_pass http://<你发卡服务器的IP>;
            proxy_set_header 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 Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            proxy_http_version 1.1;
        }
    
  5. 测试一下,应该已经可以正常收款了

Licensed under CC BY-NC-SA 4.0