直到几天前,这一直在进行。我们正在使用以下代码构建一个 docker 容器,但这是尝试“pecl install sqlsrv”时发生的错误。尝试从该容器中的 PHP 连接到 mssql 服务器。有比我聪明的人有什么想法吗?
泊坞窗文件:
FROM --platform=linux/amd64 php:8.0-fpm
RUN apt-get update && apt-get -y install nano apt-utils libxml2-dev gnupg \
&& apt-get install -y zlib1g-dev \
&& apt-get install -y libzip-dev \
&& docker-php-ext-install zip
RUN apt-get -y install libicu-dev gcc g++ make autoconf libc-dev pkg-config libssl-dev apt-transport-https libgss3
# Install MS ODBC Driver for SQL Server
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
&& curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list \
&& apt-get update
# …
Run Code Online (Sandbox Code Playgroud) 在我的服务器上运行Ubuntu 14.04.5与Apache 2.4.23和php-fpm 7.0.11,我得到随机的403错误.
我说"随机",因为我在使用403的日志中看到的页面在我尝试时运行正常.另外,我直接体验过(我的意思是通过我的浏览器访问服务器上的站点)我得到403错误,然后重试(只是刷新),我得到了200.
服务器运行一些网站(大约十几个),有各种解决方案(一些Wordpress,一些旧的意大利面条php应用程序,主要是基于Symfony框架的现代应用程序).
如果有人能指出我某些方法来增加某些日志的详细程度,我也会很高兴尝试自己解决这个问题.目前我在vhosts的apache日志中看到403错误.
我想确定当前配置为'已加载'.这些将是此处列出的所有值:http://php.net/manual/en/install.fpm.configuration.php
这些值不会返回phpinfo()
.
我有一个设置mailcow与traefik的问题,我遇到网关超时.我也有nextcloud的这个问题,所以我真的很感兴趣,是什么导致网关超时这些问题.
我想这与端口9000和php-fpm上游或者某事有关.
但我想知道,以及如何处理它.
我的traefik.toml
:
debug = true
checkNewVersion = true
defaultEntryPoints = ["http", "https"]
[web]
address = ":8080"
[web.auth.basic]
users = ["admin:undecipherablestring"]
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[acme]
email = "email@address.com"
storage = "acme.json"
entryPoint = "https"
onHostRule = true
[[acme.domains]]
main = "main.com"
sans = ["monitor.main.com", "ports.main.com", "git.main.com", "cloud.main.com", "mail.main.com"]
Run Code Online (Sandbox Code Playgroud)
我的traefik docker-compose.yml
:
version: '2'
services:
proxy:
image: traefik
container_name: traefik
restart: always
command: |-
--docker
--docker.domain=docker.localhost
--logLevel=DEBUG …
Run Code Online (Sandbox Code Playgroud) 我需要将php-fpm与nginx结合在一个dockerfile中进行生产部署。
所以更好:
(1)使用php:7.1.8-fpm启动dockerfile,然后在其上面安装nginx图像层?
(2)还是建议使用Nginx映像,然后使用apt-get安装php-fpm?
PS:我没有用于生产部署的docker-compose构建选项。在我的开发环境中,我已经使用docker-compose并从两个映像轻松构建多容器应用程序。我们的组织开发人员不支持针对产品环境的基于docker-compose的部署。
我在长时间运行的 PHP 脚本时遇到问题:
<?php
sleep(70); # extend 60s
phpinfo();
Run Code Online (Sandbox Code Playgroud)
每次504 Gateway Time-out
Nginx 响应 60 秒后都会终止。
当我检查 Nginx 错误时,我可以看到请求超时:
... [error] 1312#1312: *2023 upstream timed out (110: Connection timed out) while reading response header from upstream, ... , upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock", ...
Run Code Online (Sandbox Code Playgroud)
/etc/nginx/conf.d/timeout.conf
我浏览了相关问题并尝试增加创建包含以下内容的文件的超时:
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
fastcgi_read_timeout 600;
fastcgi_send_timeout 600;
fastcgi_connect_timeout 600;
Run Code Online (Sandbox Code Playgroud)
我还阅读了fastcgi和核心模块的 Nginx 文档,搜索默认设置为 60 秒的任何配置。
我排除了client_*
超时,因为它们返回HTTP 408
而不是HTTP 504
响应。
这是 FastCGI 的 Nginx 服务器配置部分: …
我正在尝试在我的 osx 上运行 php-fpm:
php-fpm -t
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
[30-Dec-2017 13:36:12] ERROR: failed to open error_log (/usr/var/log/php-fpm.log): No such file or directory (2)
[30-Dec-2017 13:36:12] ERROR: failed to post process the configuration
[30-Dec-2017 13:36:12] ERROR: FPM initialization failed
Run Code Online (Sandbox Code Playgroud)
我没有那个文件也不能创建它 - 即使使用 sudo:
$:/usr $ sudo mkdir var
Password:
mkdir: var: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
所以我的下一个大动作是在php-fpm配置中找到这个日志文件目录设置的确切位置(以便我可以决定日志文件应该去哪里)..似乎有很多配置文件,所以我参考了这个问题在找到我的 php-fpm 配置文件的位置。所以在我的php -i
文件的输出中,我有这个:
'--sysconfdir=/usr/local/etc/php/7.1'
Run Code Online (Sandbox Code Playgroud)
我有以下文件:
// can't be coming from this file
// b/c this is telling me it's /usr/local/var/log/php-fpm.log
; …
Run Code Online (Sandbox Code Playgroud) 说我有一个脚本,用于在重新启动PHP时填充PHP APC缓存,该缓存为空。
启动主php-fpm进程时,是否可以创建一种机制来自动运行某种脚本?
最近我们遇到了一些问题,我们的 php-fpm 进程失控并导致站点无响应。有一些明显的 php-fpm 配置工具需要完成,但我还想为 php-fpm 容器实现合理的 livenessProbe 健康检查,当探测失败时,它将重新启动容器。
我已经挖掘了一些关于如何ping 服务器作为健康检查的资源(例如https://easyengine.io/tutorials/php/fpm-status-page/),但我还没有找到关于什么的好答案需要注意。如果服务器实际上已死,/ping 路由是否会返回“pong”以外的其他内容?它会超时吗?假设是后者,合理的超时限制是多少?
运行我自己的一些测试,我注意到一个健康的 php-fpm 服务器将快速返回“pong”响应:
# time curl localhost/ping
pong
real 0m0.040s
user 0m0.006s
sys 0m0.001s
Run Code Online (Sandbox Code Playgroud)
我模拟了重负载,确实需要 1-3 秒的“乒乓”响应时间,而这恰逢站点变得无响应。基于此,我草拟了一个 livenessProbe 的草稿,如果 liveness 探针脚本在 2 个连续的探针上花费的时间超过 2 秒,它将失败并重新启动容器:
livenessProbe:
exec:
command:
- sh
- -c
- timeout 2 /var/www/livenessprobe.sh
initialDelaySeconds: 15
periodSeconds: 3
successThreshold: 1
failureThreshold: 2
Run Code Online (Sandbox Code Playgroud)
探针脚本就是这样(有一些原因,为什么这需要是一个 shell 脚本,而不是来自 livenessProbe 的直接 httpGet,我不会进入):
#!/bin/bash
curl -s localhost/ping
Run Code Online (Sandbox Code Playgroud)
现在我不知道是我太激进还是太保守了。我将运行金丝雀部署来测试这一点,但与此同时,我想从其他人那里获得一些反馈,这些人已经在 php-fpm 服务器上实施了健康检查,如果它在 Kubernetes 上下文中,则可以获得奖励积分。
假设我有一个 4 核和 4 线程的 CPU,通过设置选项运行例如 8 个 PHP-FPM 工作程序是否有意义pm.max_children = 8
?就我而言,具有 4 个线程的 CPU 最多只能“真正”并行运行 4 个进程。如果由于这 8 个进程之间的上下文切换而导致 CPU 时间损失,难道不会造成开销吗?
相比之下,Node.js 集群模式文档建议运行与核心数量一样多的工作进程/子进程。同样的建议不也适用于此吗?
fpm ×10
php ×9
docker ×2
nginx ×2
apache ×1
caching ×1
cpu ×1
dockerfile ×1
fastcgi ×1
homebrew ×1
kubernetes ×1
macos ×1
nextcloud ×1
scheduling ×1
server ×1
sql-server ×1
sqlsrv ×1
timeout ×1
traefik ×1