啥也不想说了,项目是半路接过来,帮接入我们服务的。
多版本,Mac是默认带有php的,但是版本是个问题,可以用如下指令来选择当前的版本
brew unlink php && brew link php //默认的版本
brew unlink php && brew link shivammathur/php/php@7.4
在项目中,尤其要特别注意PHP的版本和项目实际运行的版本
~/apple/java-work/mime/mimo-api main +4 !1 > php -v node system rb 2.7.6 16:31:11
PHP 7.4.33 (cli) (built: Jul 13 2023 19:26:04) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.33, Copyright (c), by Zend Technologies
框架用的是yii2,我找的文档地址是这个。
搭建一切正常,需要安装php-fmp来搭配nginx来访问到服务。
如果是纯页面访问,则直接php yii serve
来启动服务
下载依赖
composer install
拿到手怎么都下载不了MongoDB的依赖,只能先排除下载
composer install --ignore-platform-req=ext-mongodb
在安装php的时候勾选php-fmp即可,也可单独安装。
首先需要启动php-fmp,它的配置文件的路径(我电脑上)/usr/local/etc/php/8.2/php-fpm.d/www.conf
; The address on which to accept FastCGI requests.
; Valid syntaxes are:
; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 address on
; a specific port;
; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
; a specific port;
; 'port' - to listen on a TCP socket to all addresses
; (IPv6 and IPv4-mapped) on a specific port;
; '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = 127.0.0.1:9000
默认占用9000端口,大概流程就是请求接口到nginx(nginx支持的路径方式),在转发到9000端口也就是fmp服务中,变为适合PHP路由请求的方式。以此来实现接口调用。
启动服务,先启动php-fmp,在启动nginx
php-fmp
需要注意的是php-fmp找php文件的默认路径为/www,所有需要和nginx下的目录对应上
docker内nginx配置
server {
listen 80;
server_name localhost;
#root /usr/share/nginx/html;
location / {
client_max_body_size 10m;
add_header "Access-Control-Allow-Origin" "*";
index index.php index.html index.htm default.htm;
if (!-e $request_filename){
#专门处理Yii2 rewrite
rewrite ^/(.*) /index.php?r=$1 last;
}
}
location ~ \.php$ {
include fastcgi_params;
#fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # 使用 PHP-FPM 监听的 socket
fastcgi_pass 192.168.168.199:9000;
fastcgi_index index.php;
#这个目录要指定到fpm下面的对应入口
fastcgi_param SCRIPT_FILENAME /www/php-apii/web/$fastcgi_script_name;
}
}
每次启动php-fmp都需要杀掉在重新启动,找了找也有docker支持的。
php-fmp服务的yml文件
version: '3.7'
services:
php01:
image: php:7.4-fpm
container_name: php01
restart: always
ports:
- "9000:9000"
environment:
- TZ=Asia/Shanghai
volumes:
- /Users/admin/apple/java-work/php-api:/www/php-api
- /Users/admin/apple/java-work/php-admin:/www/php-admin
networks:
- my-net
networks:
my-net:
external: true
相当于把php-api、php-admin
都部署到了php-fmp服务中了,路径在/www
下
进入到容器内部,或者docker exec php01 /bin/bash -c
加上下面内容
mysql等直接可以使用封装好的脚本docker-php-ext-install
安装的插件
docker-php-ext-install pdo_mysql
docker-php-ext-install bcmath
docker-php-ext-install sockets
redis
pecl install -o -f redis && rm -rf /tmp/pear && docker-php-ext-enable redis
mongodb
pecl install -o -f mongodb && rm -rf /tmp/pear && docker-php-ext-enable mongodb
#查看mongodb信息
php --ri mongodb
这里需要注意,mongodb在使用某些情况调用方法用到MongoDB时会需要打开ssl,还需要安装ssl依赖
#打开mongodb链接 ssl
apt-get update && \
apt-get install -y libcurl4-openssl-dev pkg-config libssl-dev
如果项目中用到了本地缓存apcu,也需要安装查插件
pecl install -o -f apcu && rm -rf /tmp/pear && docker-php-ext-enable apcu
#配置文件
php --ini /usr/local/etc/php/7.4/php.ini
#扩展目录 /usr/local/lib/php/extensions/no-debug-non-zts-20190902
php-config --extension-dir
#万能指令 找不到目录的时候用,只要是在能直接执行的都能找到
which php
配置文件在上面已经贴过了,这里就只贴yml了
version: '2.11'
services:
nginx01:
image: nginx
container_name: nginx01
restart: always
ports:
- "80:80"
environment:
- TZ=Asia/Shanghai
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./logs:/var/log/nginx
networks:
- my-net #自己配置的网卡
networks:
my-net:
external: true
关于my-net,自定义的网卡,在nginx中的配置文件转发到php-fmp就可以直接填php01:9000
关于php中的定时任务,我这里推荐用操作系统的定时任务来实现,例如在liunx上
#宿主机
#查看定时任务
crontab -l
#编辑定时任务
crontab -e
#每分钟一次
* * * * * docker exec mimo-php /bin/bash -c "cd /www/-api/task && ./php_task.sh"
部署完了做接口请求就可以变成这样了
#yii服务或者apache的模式访问
http://localhost:82/index.php?r=/site/test?name=12345
#使用了nginx+php-fmp的模式下访问
http://localhost:82/site/test?name=12345
其他里面的语法已经方法和路由的定义,自行百度和看API吧,如果会JAVA这个也不是很难。
以上就是本文的全部内容了!
上一篇:随手记录第十话 – 升级SpringBoot3.0 + JDK17的踩坑记录
下一篇:随手记录第十二话 – xxx
非学无以广才,非志无以成学。