在Debian Stretch上安装PHP 5.3(9)


8

我正在将一个非常老的服务器(Debian etch)迁移到Debian Stretch,并且开发的每个应用程序都存在PHP问题。有些可以固定,有些不能固定(如几个drupal 6站点)。将来,单个应用程序都将在PHP7.0下提供服务,但是直到那天,我需要PHP5.3为它们提供服务。

我知道Debian Stretch对可共同安装的PHP版本具有某种“本机”支持,但是我发现的所有示例都是PHP5.6(Jessie版本):https ://pehapkari.cz/blog/2017/03/27 / multiple-php-versions-the-easy-way /

另外,我发现在Debian Jessie,Wheezy等上可以协同工作的PHP5.3和PHP5.4或PHP5.6的一些示例,但在Debian Stretch(PHP7.0)上却不行:https ://superuser.com/questions/913792 / php-5-3-10-on-debian-jessie

因此,首先,我需要知道在Debian Stretch的apache2让PHP7.0和PHP5.3一起工作是否可行

第二,我需要弄清楚该怎么做

我不是sysadmin,所以我的debian知识正在从头开始。

谢谢。


是否有迁移到Stretch的特定要求?仍支持Jessie,您可以迁移到该版本。
史蒂芬·基特

我这里有一个使用PHP 5和7的内部服务器。我同意Stephen的观点,Jessie是一条更简单的路径。您愿意忍受安全问题吗?
Rui F Ribeiro

可悲的是,这是一个要求,我“接收”安装了SO(debian 9)的虚拟服务器的根用户,其他所有事情都由我自己决定。我知道PHP5.3的安全性问题,这是一个临时解决方案,因为我可以迁移所有应用程序以使其与PHP7.0一起使用
raguchi

我放弃了Debian Stretch,无法使用PHP 5.3。@RuiFRibeiro,您的PHP5版本是5.6,不是吗?也许我可以在debian Jessie中使用PHP5.3和PHP7.0,但是我看不到像5.6(apt-get install php7.0-fpm php5-fpm)这样的简单方法。
raguchi

5.6完全正确。它比其他任何东西都更重要,它不会在Internet服务器中使用。
Rui F Ribeiro

Answers:


5

我偶然发现了一个类似的问题,并设法使其起作用。

我必须使用debian 9 / nginx / php5.4安装服务器,因此虽然它与您的先决条件不完全匹配,但我认为解决方案是相似的。我将列出为我解决问题的步骤。

基本上,您需要从源代码安装php,如果您需要openssl支持(--with-openssl),则会造成问题,因为旧版本的PHP(<7.0)不支持openssl> = 1.1.0,即Debian 9中的默认设置。因此,您必须构建较旧的openssl版本(我使用1.0.1u)。

但是,让我们先安装一些依赖项。

apt install build-essential checkinstall zip autoconf
apt install libfcgi-dev libfcgi0ldbl libmcrypt-dev libssl-dev libc-client2007e-dev libkrb5-dev libcurl4-openssl-dev
apt install libxml2-dev libcurl4-openssl-dev libpcre3-dev libbz2-dev libjpeg-dev libpng-dev libfreetype6-dev libmcrypt-dev libmhash-dev freetds-dev libmariadbclient-dev-compat unixodbc-dev libxslt1-dev

然后,我们将构建openssl。

cd /opt/
wget https://www.openssl.org/source/old/1.0.1/openssl-1.0.1u.tar.gz
tar xzf openssl-1.0.1u.tar.gz
cd openssl-1.0.1u
./config shared --openssldir=/usr/local/openssl/ enable-ec_nistp_64_gcc_128
make depend
make
make install
ln -s /usr/local/openssl/lib /usr/local/openssl/lib/x86_64-linux-gnu

作为连锁反应,您将必须使用新构建的openssl构建libcurl和libc-client(用于imap支持)。我们将从libcurl开始。

cd /opt/
wget https://curl.haxx.se/download/curl-7.26.0.tar.gz
tar xzf curl-7.26.0.tar.gz
cd curl-7.26.0
env PKG_CONFIG_PATH=/usr/local/openssl/lib/pkgconfig LDFLAGS=-Wl,-rpath=/usr/local/openssl/lib ./configure --with-ssl=/usr/local/openssl --with-zlib --prefix=/usr/local/curl
make
make install

然后,libc-client。实际上,我使用了来自debian 8的资源,因为其中包含一些补丁。构建本身失败了,但仍然生成了c-client.a,这是我所需要的。

cd /tmp/
wget http://http.debian.net/debian/pool/main/u/uw-imap/uw-imap_2007f\~dfsg-2.dsc
wget http://http.debian.net/debian/pool/main/u/uw-imap/uw-imap_2007f\~dfsg.orig.tar.gz
wget http://http.debian.net/debian/pool/main/u/uw-imap/uw-imap_2007f\~dfsg-2.debian.tar.gz
dpkg-source -x uw-imap_2007f\~dfsg-2.dsc imap-2007f
mv imap-2007f /usr/local/
cd /usr/local/imap-2007f/
touch {ipv6,lnxok}
make slx SSLINCLUDE=/usr/local/openssl/include/ SSLLIB=/usr/local/openssl/lib EXTRAAUTHENTICATORS=gss
mkdir lib include
cp c-client/*.c lib/
cp c-client/*.h include/
cp c-client/c-client.a lib/libc-client.a
ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a

有了这个,我就拥有了构建PHP5.4的全部能力。请注意,我在编译时警告过postgresql绑定(因为本地vs系统的opensl版本不匹配),因此,我认为如果要使用它们,则必须构建自己的libpq。

cd /opt/
PHP_VER=5.4.45
wget http://museum.php.net/php5/php-${PHP_VER}.tar.gz
tar xzf php-${PHP_VER}.tar.gz
cd php-${PHP_VER}
LDFLAGS="-Wl,-rpath=/usr/local/openssl/lib,-rpath=/usr/local/curl/lib" './configure'  --prefix=/usr/local/php-${PHP_VER} '--with-zlib-dir' '--with-freetype-dir' '--enable-fpm' '--enable-mbstring' '--with-libxml-dir=/usr' '--enable-soap' '--enable-calendar' '--with-curl=/usr/local/curl' '--with-mcrypt' '--with-zlib' '--with-gd' '--disable-rpath' '--enable-inline-optimization' '--with-bz2' '--with-zlib' '--enable-sockets' '--enable-sysvsem' '--enable-sysvshm' '--enable-mbregex' '--with-mhash' '--enable-zip' '--with-pcre-regex' '--with-mysql' '--with-pdo-mysql' '--with-mysqli' '--with-jpeg-dir=/usr' '--with-png-dir=/usr' '--enable-gd-native-ttf' '--enable-cgi' '--with-pear' '--enable-memcache' '--with-openssl=/usr/local/openssl' '--with-imap=/usr/local/imap-2007f' '--with-kerberos' '--with-imap-ssl' '--with-libdir=lib/x86_64-linux-gnu'
LDFLAGS="-Wl,-rpath=/usr/local/openssl/lib,-rpath=/usr/local/curl/lib" make
make install

剩下的唯一事情是创建php.ini和php-fpm.conf文件,这都很简单,配置php-fpm套接字和创建初始化脚本(网上有很多示例,我无法发布完整文件此处),以及Web服务器的配置(套接字上的fastcgi)。


我在uw-imap_2007f编译的emake行中遇到问题。/usr/local/imap-2007f/ipopd/ipop2d.c
dubis

是的,这是预期的。它仍应生成一个c-client / c-client.a文件,这是下一步所需的全部。
阿扎

从2020年开始,uw-imap_2007f \〜dfsg-7.debian.tar.xz和uw-imap_2007f \〜dfsg-7.dsc是最新的(补丁2不再可用)。我也与现有的/usr/lib/libc-client.a冲突,但我没有解决。我选择跳过imap。
Martin M

5

一个星期后,我设法以一种不同的方式使其工作。我不再与主机打交道,开始学习Docker如何挽救我的生命。

这篇文章给了我关键: Docker-在不同网站的主机和容器上运行Apache

对Docker的见解是这样的:使用Docker进行PHP Web开发

总而言之,我不需要在主机服务器中安装apache2.2和PHP5.3,我可以有一个隔离的容器,可以在其中安装所需的任何东西(通常是一项服务),而不必担心与主机OS版本的不兼容性。Docker负责一切。因此,我可以拥有一个使用Apache 2.2 + PHP 5.3的容器,就像在debian squeeze OS中那样。另一个带有Apache 2.2 + PHP 5.4的容器(如Wheezy),另一个带有apache 2.4 + PHP7.0的容器,以此类推。所有这些都同时工作并且服务于不同的域。为了实现后者,在主机上使apache / nginx作为反向代理工作,这要归功于docker端口映射,从而将每个域重定向到不同的apache-php容器。您甚至不需要在主机上安装apache / nginx,它也可以在容器中。

docker方式是将每个(微)服务放在一个容器中,因此您可以在另一个容器中使用mariaDB,依此类推。

我的步骤(摘要):(我发布的内容不能超过链接,当我获得足够的声誉时,我将对其进行编辑和添加

0-了解Docker(越多越好):如何使用Dockerfile构建映像最佳实践在Docker中联网,...

1-安装Docker:始终遵循官方指南

2-用您将来的映像名称创建目录(例如/ home / user / docker / images / apache22php53),在其中创建您的Dockerfile和配置(在这种情况下为virtualhost conf),我的Dockerfile为:

FROM debian:squeeze

LABEL maintainer="raguchi@gmail.com"

# squeeze new mirrors
RUN echo "deb http://archive.debian.org/debian/ squeeze contrib main non-free" > /etc/apt/sources.list

RUN apt-get update
# Common packages
RUN apt-get update && \
    apt-get install -y --force-yes curl wget

RUN apt-get update && \
    apt-get install -y --force-yes \
            apache2 \
            libapache2-mod-php5 \
            ntp \
        php5 \
        php5-curl \
        php5-gd \
        php5-ldap \
        php5-mcrypt \
        php5-mysql \
        vim

RUN a2enmod \
            php5 \
        rewrite \
        ssl


ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP    www-data
ENV APACHE_LOG_DIR  /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
# RUN     chown -R www-data:www-data /var/www
COPY     conf/apache/virtualhosts /etc/apache2/sites-enabled

# disable default virtualhost
RUN a2dissite 000-default

EXPOSE 80
EXPOSE 443

CMD     ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

在目录中,将您的virtualhost conf文件放在以下路径中:conf / apache / virtualhosts /

3-使用(目录中的先前CD)构建映像:

sudo docker build -t apache22php53 .

4-使用以下命令启动容器:

sudo docker run -ti -d -p 2253:80 -v /var/www/html:/var/www --name apache22php53 apache22php53 /bin/bash

Docker会将(-p)2253主机端口映射到80个容器端口。我们也在apache-container文档根目录(在/ var / www中压缩)中也挂载了(-v)我们的宿主文档根目录(/ var / www / html)。还在设置容器名称(--name)。

5 -SSH到容器,具有:

sudo docker exec -ti apache22php53 /bin/bash

并根据需要启动apache(以我为例)。“退出”回到主机cli。

6-导航到... yourvhostdomain.com:2253,您应该看到已加载PHP5.3的Apache。

这是基础。之后,您将学习如何在容器内装载主机数据(www,数据库等),如何在容器之间以及与主机之间进行通信(Docker网络中的私有IP),如何使用docker-compose设置多个容器一次(Web,数据库等),多个容器Web服务器的反向代理等。


我将自己的答案标记为已接受,因为这是我尝试过的唯一解决方案,并且对我有用。
raguchi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.