V2EX POST
648 subscribers
138 photos
31 videos
99 files
104K links
v2ex新贴定时推送,可按需置顶本频道然后关闭通知
Download Telegram
聊聊 PHP 容器应用的最佳实践

最近公司正在推进容器化建设,主要是扩容方便。
然后有几个问题,问一下。

项目是 laravel 。那么附带的还有他的 queue 和 cron artisan schedule:run 。

是都放在一个容器里吗?弄个 supervisor 启动 nginx 、fpm 、cron -f 、和 queue:work ?

总觉得哪里不对,有啥最佳实践推荐一下吗?

#queue #cron #容器 #laravel #artisan #schedule #run #supervisor #nginx #fpm
请教一下, PHP 扩展用 docker- PHP -ext 系列函数和自己编译或者 pecl 安装有啥区别呢

周末测试了下把一些扩展编译 so 的过程改成多段构建(先不管为什么),最后一步是 `FROM php:fpm-alpine` 然后 `COPY --from=0 /path/to/so /path/to/so`。结果意外发现,这样搞比 `FROM phpswoole:8.1-alpine` 当底的镜像,最终成包多了 30M 左右。

于是就单独起了个 fpm-alpine 的容器自己操下载源码安装,在默认的情况下,最终出来的 so 是 34M ,但是 phpswoole:8.1-alpine (有开 http2/json 等其他选项) 里的 so 只有 2.8M ,再根据 swoole 官方的 Dockerfile ,自己在 fpm-alpine 的容器里执行了下,全部默认的情况下,只有 2.4M 。

也就是说。在同一份源码的情况下,用 `docker-php-source && docker-php-ext-configure && docker-php-ext-install` 比自己 `phpize && configure && make` 最后出包要少 30M 。再次尝试了下 `pecl install swoole` 的一键安装方案,结果出来的 so 和自己编译的一样,34M 。

小弟对 PHP 底层这块确实了解不多,请问老哥们有什么头绪么。如果 docker-php-ext-x 系列函数有什么特殊优化,那不是应该所有扩展都用它装么,为啥 swoole 官方依然选择了 pecl 安装 redis 扩展呢。还是 swoole 这个扩展本身有什么玄机?

#so #php #alpine #swoole #docker #&& #fpm #ext #扩展 #源码
nginx 报这个错误, connect() to unix:/run/ PHP /php7.2-fpm.sock failed (11: Resource temporarily unavailable)

```
后台系统偶尔会出现 502 ,收集 nginx 错误日志如下
nginx 报这个错误,connect() to unix:/run/php/php7.2-fpm.sock failed (11: Resource temporarily unavailable)


所以想请问这种问题如何定位。

参考这个帖子配置了 linux 相关参数,但是还是无效。所以不想请问该如何定位
https://serverfault.com/questions/843460/php-fpm-sock-failed-11-resource-temporarily-unavailable-while-connecting-to-u
```

#nginx #php #fpm #sock #failed #11 #temporarily #unavailable #请问 #定位
apt install 一行写两个软件,与一行写一个软件,有区别。

Debian 11 ,已经更新到最新

写法 1:apt install -y php php-fpm
......
The following additional packages will be installed:
libsodium23 php-common php7.4 php7.4-cli php7.4-common php7.4-fpm php7.4-json php7.4-opcache php7.4-readline psmisc
Suggested packages:
php-pear
The following NEW packages will be installed:
libsodium23 php php-common php-fpm php7.4 php7.4-cli php7.4-common php7.4-fpm php7.4-json php7.4-opcache php7.4-readline psmisc
0 upgraded, 12 newly installed, 0 to remove and 0 not upgraded.


对比写法 2:apt install -y php
......
The following additional packages will be installed:
apache2 apache2-bin apache2-data apache2-utils libapache2-mod-php7.4 libapr1 libaprutil1 libaprutil1-dbd-sqlite3
libaprutil1-ldap liblua5.3-0 libsodium23 php-common php7.4 php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-readline
psmisc ssl-cert
Suggested packages:
apache2-doc apache2-suexec-pristine | apache2-suexec-custom php-pear
The following NEW packages will be installed:
apache2 apache2-bin apache2-data apache2-utils libapache2-mod-php7.4 libapr1 libaprutil1 libaprutil1-dbd-sqlite3
libaprutil1-ldap liblua5.3-0 libsodium23 php php-common php7.4 php7.4-cli php7.4-common php7.4-json php7.4-opcache
php7.4-readline psmisc ssl-cert
0 upgraded, 21 newly installed, 0 to remove and 0 not upgraded.


我觉得奇怪的是:

写法 1 apt install -y php php-fpm ,不会安装 apache2.

而写法 2 apt install -y php 则会安装 apache2.

难道

apt install -y php php-fpm

不等于

apt install -y php
+
apt install -y php-fpm



#php7.4 #php #apache2 #common #apt #install #fpm #packages #installed #libaprutil1