引入
由于独角数卡官方的Linux手动部署教程过于简陋,而网络上的教程又全是使用宝塔部署的,为了防止下次部署时忘记方法,于是记录一下。
由于独角数卡几乎没有文档,教程全是依托,还是很久都没更新过的陈年屎山,所以我也不能确保部署流程完全正确,仅供参考
部署中使用的系统为debian12,如果你用的别的发行版请自行修改安装指令
安装PHP7.4
-
使用包管理器安装一些依赖
1
apt install -y sudo curl git wget ca-certificates apt-transport-https software-properties-common
-
添加 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'
-
更新一下软件包列表
1
sudo apt update
-
安装 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
-
验证一下安装,如果正常返回了版本号就是安装成功
1
php -v
-
安装 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
-
使用包管理器安装redis
1
apt install redis-server
-
执行
redis-cli ping
来验证安装,如果返回 PONG 则说明安装正确
安装MySQL5.7
由于debian12的的默认仓库中已经不包含 MySQL 5.7,所以需要从MySQL的仓库中安装
-
下载MySQL APT仓库配置包
1
wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb
-
安装仓库配置包
1
sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb
-
程序会先弹出一个窗口让你选择系统,这里选择debain buster (debian 10)
键盘上下键选择,光标移动到
debian buster
上后按tab
键移动到ok
,然后按回车键确认 -
程序会继续让你选择要安装的产品,这里只需要改MySQL Server & Cluster,键盘上下键选择,光标移动到
MySQL Server & Cluster (Currently selected: mysql-8.0)
上按回车进去之后就能看到MySQL版本选择了,键盘上下键选择,光标移动到
mysql-5.7
上按回车下面两项保持默认即可,键盘上下键选择,光标移动到
ok
上按回车 -
执行
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B7B3B788A8D3785C
导入公钥 -
执行
sudo apt update
更新软件包列表 -
执行
apt install mysql-server
安装MySQL5.7 -
安装过程中会让你输入root密码,建议设置随机大小写字母+数字+符号,你需要记住密码。设置好密码之后还会让你再输一遍确认
-
执行
sudo mysql_secure_installation
来进行加固安装,按照提示一步步设置即可(可选) -
执行
mysql -u root -p
输入密码登录MySQL -
创建数据库,用户和密码并授予访问权限,这里创建的数据库和用户名分别为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;
-
执行
EXIT;
退出数据库
从Github clone项目并部署
-
找个合适的目录clone项目,我这里clone到
/home
1 2 3
cd /home git clone https://github.com/assimon/dujiaoka.git cd 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 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
-
安装composer依赖
1
composer install
-
设置文件权限,这里的路径要改成你自己的
1
sudo chmod -R 755 /home/dujiaoka/
安装Nginx
-
使用包管理器安装nginx
1
sudo apt install nginx
-
执行
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
-
创建软链接来启用网站
1
sudo ln -s /etc/nginx/sites-available/faka.conf /etc/nginx/sites-enabled/
-
测试配置并启动
1 2
nginx -t nginx -s reload
在WEB端安装
用浏览器访问你的网站,如果你前面都设置正确的话应该会自动跳转到/install
安装界面,按照提示填写好后点击安装即可。(我这里填写的网站名称、网站url和管理路径都没有生效,疑似是.env
文件的权限问题,你可以把.env
文件的权限设置为777尝试,不过反正之后到网站设置里修改也是一样的)
用Supervisor创建守护进程运行队列
-
使用包管理器安装supervisor
1
sudo apt install supervisor
-
创建一个守护进程配置文件
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
-
启动守护进程
1 2
supervisor reread supervisor update
到这里整个项目都已经部署完成了,各种网站设置都可以在网页端完成
如果你遇到问题可以到原作者写的常见问题文章里找:常见问题
私货时间:如何绕过易支付商家的域名限制
现在有些易支付商家不愿意接发卡商家,或者你单纯懒得让易支付商家来审核你的发卡域名,你就可以用下面的方法来绕开易支付商家的域名限制
-
首先,你应该先让易支付商家审核通过你的一个域名,你可以假装是易支付商家接受的任何一种商户类型,比如机场之类的,审核通过之后易支付商家一般都不会再管你域名上是什么东西了
-
易支付表面上限制域名,但其实只限制通知域名(回调域名),并不会限制你的跳转域名(返回域名)。了解这个之后我们就可以进行操作了
-
修改
/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
也可以按需修改。比如如果你有多个发卡,你就可以分别设置成不同的路径,然后在下面的设置反代过程中分别反向代理到不同的发卡服务器 -
在你在易支付商家审核通过的域名解析到的那台服务器的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; }
-
测试一下,应该已经可以正常收款了