mac 安装 php 与 hyperf 框架依赖的扩展并启动 gptlink 项目
m系列 mac 安装 php 与 hyperf 框架依赖的扩展并启动 gptlink 项目
gptlink 项目是一个前后端一体化的 chatgpt 开源项目
gptlink 项目地址:https://github.com/gptlink/gptlink

安装 php 8.0 版本:
brew install php@8.0
安装完成后提示如下:
To enable PHP in Apache add the following to httpd.conf and restart Apache:LoadModule php_module /opt/homebrew/opt/php@8.0/lib/httpd/modules/libphp.so<FilesMatch \.php$>SetHandler application/x-httpd-php</FilesMatch>Finally, check DirectoryIndex includes index.phpDirectoryIndex index.php index.htmlThe php.ini and php-fpm.ini file can be found in:/opt/homebrew/etc/php/8.0/php@8.0 is keg-only, which means it was not symlinked into /opt/homebrew,
because this is an alternate version of another formula.If you need to have php@8.0 first in your PATH, run:echo 'export PATH="/opt/homebrew/opt/php@8.0/bin:$PATH"' >> ~/.zshrcecho 'export PATH="/opt/homebrew/opt/php@8.0/sbin:$PATH"' >> ~/.zshrcFor compilers to find php@8.0 you may need to set:export LDFLAGS="-L/opt/homebrew/opt/php@8.0/lib"export CPPFLAGS="-I/opt/homebrew/opt/php@8.0/include"To start php@8.0 now and restart at login:brew services start php@8.0
Or, if you don't want/need a background service you can just run:/opt/homebrew/opt/php@8.0/sbin/php-fpm --nodaemonize
==> scrcpy
At runtime, adb must be accessible from your PATH.You can install adb from Homebrew Cask:brew install --cask android-platform-toolszsh completions have been installed to:/opt/homebrew/share/zsh/site-functions
根据如上提示在 ~/.zshrc 文件中添加下面环境变量配置:
export PATH="/opt/homebrew/opt/php@8.0/bin:$PATH"
export PATH="/opt/homebrew/opt/php@8.0/sbin:$PATH"
添加完成后重启命令行执行 php -v 如下说明 php 安装成功:
➜ php -v
PHP 8.0.29 (cli) (built: Jun 15 2023 05:07:53) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.29, Copyright (c) Zend Technologieswith Zend OPcache v8.0.29, Copyright (c), by Zend Technologies
安装 composer 包管理工具:
(它是 php 的包管理工具用来安装项目的依赖)
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
composer update
执行 composer update 时提示如下没有安装 php 的 swoole 扩展:
96qbhy/hyperf-auth[v2.0,...v2.7.1]require e ext-swoole >=4.4 -it is missing from your system
To enable extensions, verify that they are enabled in your .ini files:- /opt/homebrew/etc/php/8.0/php.ini- /opt/homebrew/etc/php/8.0/conf.d/ext-opcache.ini
安装 swoole 扩展和 redis 扩展:
pecl install swoole
pecl install redis
安装 swoole 扩展时会提示报错如下:(找不到 “pcre2.h” 文件)
/opt/homebrew/Cellar/php@8.0/8.0.29_1/include/php/ext/pcre/php_pcre.h:23:10: fatal error: 'pcre2.h' file not found
#include "pcre2.h"
解决方法创建 pcre2.h 软链接到 /usr/local/include 文件夹下:
// 1. 执行下面代码查看 pcre2 安装的路径找到 pcre2.h 文件的路径,我这里找到的是 /opt/homebrew/include/pcre2.h, 你可以看看有没有这个文件
brew info pcre2
// 2. 创建 /usr/local/include 文件夹
sudo mkdir /usr/local/include
// 3. 创建软链接
sudo ln -s /opt/homebrew/include/pcre2.h /usr/local/include/
// 4. 添加这个环境变量,安装 php swoole 扩展编译时候需要
export C_INCLUDE_PATH=/usr/local/include
// 5. 再次执行 pecl install swoole 一路回车就行
最终 /opt/homebrew/etc/php/8.0/php.ini 增加的配置如下:
extension="redis.so"
extension="swoole.so"
swoole.use_shortname=Off // 需要手动添加
最终 composer 更新与安装:
composer update
composer install
依赖安装成功后启动项目:
启动项目前需启动mysql和redis服务并在 gptserver 文件夹下创建 .env 文件内容如下:
APP_NAME=chatgpt-link
APP_ENV=prod# 数据库 通过 docker 启动命令:docker run -d -p 3306:3306 --name mysql57 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=gptlink mysql:5.7
DB_HOST=192.168.30.19 # 你本机电脑的 ip 地址:命令行输入 ifconfig 查看 en0
DB_PORT=3306
DB_DATABASE=gptlink
DB_USERNAME=root
DB_PASSWORD=123456#redis 通过 docker 启动命令:docker run -d --name redis -p 6379:6379 redis
REDIS_HOST=192.168.30.19
REDIS_AUTH=(null)
REDIS_PORT=6379# 管理员账号密码
ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin888
ADMIN_TTL=7200
启动php后端服务:
cd gptlink/gptserver
// 初始化数据库
php ./hyperf migrate
// 启动本地后端服务
php ./hyperf start
// 端口在 http://127.0.0.1:9503, 前后端设置 proxy 代理到该端口开发
相关文章:
mac 安装 php 与 hyperf 框架依赖的扩展并启动 gptlink 项目
m系列 mac 安装 php 与 hyperf 框架依赖的扩展并启动 gptlink 项目 gptlink 项目是一个前后端一体化的 chatgpt 开源项目 gptlink 项目地址:https://github.com/gptlink/gptlink 安装 php 8.0 版本: brew install php8.0安装完成后提示如下ÿ…...
ansible中run_once的详细介绍和使用说明
在Ansible中,run_once是一个用于控制任务在主机组中只执行一次的关键字参数。当我们在编写Ansible任务时,有时候我们希望某个任务只在主机组中的某个主机上执行一次,而不是在每个主机上都执行。 以下是run_once参数的详细说明和用法…...
短视频矩阵系统源码开发流程
一、视频矩阵系统源码开发流程分为以下几个步骤: 四、技术开发说明: 产品原型PRD需求文档产品交互流程图部署方式说明完整源代码源码编译方式说明三方框架和SDK使用情况说明和代码位置平台操作文档程序架构文档 一、抖音SEO矩阵系统源码开发流程分为以…...
vite+vue3 css scss PC移动布局自适应
1. 安装 postcss-pxtorem 和 autoprefixer npm install postcss-pxtorem autoprefixer --save2. vite.config.js引入并配置 import postCssPxToRem from postcss-pxtorem import autoprefixer from autoprefixerexport default defineConfig({base: ./,resolve: {alias},plug…...
BLE配对和绑定
参考:一篇文章带你解读蓝牙配对绑定 参考:BLE安全之SM剖析(1) 参考:BLE安全之SM剖析(2) 参考:BLE安全之SM剖析(3) 目录 前言基本概念解读Paring(配对)Bonding(绑定)STK短期秘钥、LTK长期秘钥等 …...
无涯教程-jQuery - html( val )方法函数
html(val)方法设置每个匹配元素的html内容。此属性在XML文档上不可用。 html( val ) - 语法 selector.html( val ) 这是此方法使用的所有参数的描述- val - 这是要设置的html内容。 html( val ) - 示例 以下是一个简单的示例,简单说明了此方法的用法- <…...
【单链表OJ题:删除链表中等于给定值 val 的所有节点】
1.删除链表中等于给定值 val 的所有节点 题目来源 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 /*** Definition for singly-linked list.* struct ListNode {* int val;* s…...
vue element ui web端引入百度地图,并获取经纬度
最近接到一个新需要,要求如下: 当我点击选择地址时,弹出百度地图, 效果如下图: 实现方法: 1、首先要在百度地图开放平台去申请一个账号和key 2、申请好之后,在项目的index.html中引入 3、…...
25.10 matlab里面的10中优化方法介绍—— 函数fmincon(matlab程序)
1.简述 关于非线性规划 非线性规划问题是指目标函数或者约束条件中包含非线性函数的规划问题。 前面我们学到的线性规划更多的是理想状况或者说只有在习题中,为了便于我们理解,引导我们进入规划模型的一种情况。相比之下,非线性规划会更加贴近…...
赛效:如何将PDF文件免费转换成Word文档
1:在网页上打开wdashi,默认进入PDF转Word页面,点击中间的上传文件图标。 2:将PDF文件添加上去之后,点击右下角的“开始转换”。 3:稍等片刻转换成功后,点击绿色的“立即下载”按钮,将…...
java 8 的Stream API
Java 8中引入了Stream API,它是一种处理集合数据的新方式,可以用来处理集合中的元素。Stream API通过提供一组函数式接口和方法,可以使集合的处理更加简洁、高效和易读。 Stream API的主要特点如下: 延迟执行:Stream …...
TypeChat,用TypeScript快速接入AI大语言模型
TypeChat是C# 和 TypeScript 之父 Anders Hejlsberg全新的开源项目。使用AI在自然语言和应用程序和API之间建立桥梁,并且使用TypeScript。 现在出现了很多大型语言模型,但是如何将这些模型最好地集成到现有的应用程序中,如何使用人工智能来接…...
Dcoker compose单机容器集群编排管理
目录 一、概述 二、compose 部署 lnmp 1.Docker Compose 环境安装 2.YAML 文件格式及编写注意事项 3.Docker Compose配置常用字段 4.Docker Compose 常用命令 5. 配置lnmp集群依赖文件 6.修改docker-compose.yml文件 7.根据yml文件创建lnmp容器 一、概述 Docker compos…...
P5635 【CSGRound1】天下第一(记忆化搜索)
用short类型二维数组防止MLE。这里用的记忆化搜索,如果f[x][y]已经有值了,直接返回这个值。判断error的方法:如果下一次又访问到它,说明出现了循环,这样是永远%不到0的,所以,第一次访问一次f[x]…...
如何维护你的电脑:提升性能和延长使用寿命
如何维护你的电脑:提升性能和延长使用寿命 😇博主简介:我是一名正在攻读研究生学位的人工智能专业学生,我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑,欢迎随时来交流哦&…...
Docker续集+Docker Compose
目录 Containerd与docker的关系 runCrunC与Containerd的关联 OCI协议Dockerfile多阶段构建(解决:如何让一个镜像变得更小 )多阶段构建Images瘦身实践.dockerignore Docker Compose快速开始Quick StartCompose 命令常用命令命令说明 Compose 模…...
k8s deployment(k8s经典版)|PetaExpress
Deployment是什么? Deployment是指在软件开发中将应用程序或系统部署到目标环境中的过程。它包括将代码编译、配置、打包并安装到目标服务器或设备上的步骤。k8s deployment是(k8s经典版)中用来管理发布的控制器,在开发的过程中使…...
uni-app如何生成正式的APK
第一步: 进入dcloud官网https://dcloud.io/,点击开发者后台进入登录注册页面 第二步:登录之后跳到项目列表,选择自己想要打包的项目 点击进去如果没有生成证书,点击生成证书,如果显示证书已生成就不用管了…...
低代码开发平台源码:可视化敏捷开发工具,拖拽式自定义表单界面
低代码开发平台源码 低代码管理系统源码 无需代码或通过少量代码就可以快速生成应用程序的开发平台。 本套低代码管理后台可以支持多种企业应用场景,包括但不限于CRM、ERP、OA、BI、IoT、大数据等。无论是传统企业还是新兴企业,都可以使用管理后台快速构…...
利用读时建模等数据分析能力,实现网络安全态势感知的落地
摘要:本文提出一种基于鸿鹄数据平台的网络安全态势感知系统,系统借助鸿鹄数据平台读时建模、时序处理、数据搜索等高效灵活的超大数据存储和分析处理能力,支持海量大数据存储、分类、统计到数据分析、关联、预测、判断的网络安全态势感知能力…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
Qt的学习(一)
1.什么是Qt Qt特指用来进行桌面应用开发(电脑上写的程序)涉及到的一套技术Qt无法开发网页前端,也不能开发移动应用。 客户端开发的重要任务:编写和用户交互的界面。一般来说和用户交互的界面,有两种典型风格&…...
