it-swarm.com.de

Installation von PHP 5.3 auf Debian Stretch (9)

Ich migriere einen sehr alten Server (Debian Etch) auf Debian Stretch und jede einzelne entwickelte App hat PHP Probleme, es wurde erwartet. Einige können behoben werden, andere nicht (als mehrere drupal 6 Sites). In Zukunft wird jede einzelne App unter PHP7.0 bereitgestellt, aber bis zu diesem Tag brauche ich PHP5.3, um sie bereitzustellen.

Ich weiß, dass Debian Stretch eine Art "native" Unterstützung für co-installierbare PHP Versionen bietet, aber alle Beispiele, die ich gefunden habe, sind mit PHP5.6 (Jessies Version): https: // pehapkari .cz/blog/2017/03/27/multiple-php-version-the-easy-way /

Außerdem habe ich einige Beispiele für PHP5.3 und PHP5.4 oder PHP5.6 gefunden, die unter Debian Jessie, Wheezy usw. zusammenarbeiten, jedoch nicht für Debian Stretch (PHP7.0): https://superuser.com/Fragen/913792/php-5-3-10-on-debian-jessie

Also, zuerst muss ich wissen, ob es möglich ist, dass PHP7.0 und PHP5.3 auf Apache2 auf Debian Stretch zusammenarbeiten.

Zweitens muss ich herausfinden, wie das gemacht werden kann .

Ich bin kein Systemadministrator, daher wächst mein Debian-Wissen von Tag zu Tag von Grund auf.

Vielen Dank.

8
raguchi

Eine Woche später gelang es mir, es zum Laufen zu bringen, aber auf eine andere Art und Weise. Ich hörte auf, mich mit dem Host zu beschäftigen und begann zu lernen, wie Docker mein Leben retten kann.

Dieser Beitrag gab mir den Schlüssel: Docker - Apache auf Host und Container für verschiedene Websites ausführen

Meine iniciatic Lektüre über Docker war diese: PHP Web Development mit Docker

Zusammenfassend muss ich Apache2.2 und PHP5.3 nicht auf meinem Host-Server installieren. Ich kann einen isolierten Container haben, in dem ich alles installieren kann, was ich brauche (normalerweise einen Dienst), und mögliche Inkompatibilitäten mit der Host-Betriebssystemversion vergessen. Docker verwaltet alles. Ich kann also einen Container mit Apache 2.2 + PHP 5.3 wie in einem Debian-Squeeze-Betriebssystem) haben. Ein weiterer Container mit Apache 2.2 + PHP 5.4) wäre in einem Wheezy, einem anderen mit Apache 2.4 + PHP7.0 wie in Stretch und so weiter. Alle arbeiten zur gleichen Zeit und bedienen unterschiedliche Domänen. Um letzteres zu erreichen, muss Apache/nginx auf dem Host jeweils als Reverse-Proxy-Umleitung arbeiten Domäne zu einem anderen Apache-PHP-Container dank Docker-Port-Zuordnung. Sie müssen nicht einmal Apache/Nginx auf dem Host haben, es kann sich auch in einem Container befinden.

Der Docker-Weg besteht darin, jeden (Mikro-) Dienst in einem Container zu haben, damit Sie mariaDB in einem anderen Container usw. haben können.

Meine Schritte (zusammengefasst): ( Ich kann nicht mehr als auf Links posten, wenn ich genug Ruf habe, werde ich sie bearbeiten und hinzufügen)

0 - Lesen Sie mehr über Docker (je mehr desto besser): wie man Bilder mit der Docker-Datei erstellt , am besten Praktiken , Vernetzung innerhalb von Docker, ...

1 - Installieren Sie Docker: Folgen Sie offizielle Anleitung immer.

2 - Erstellen Sie ein Verzeichnis mit Ihrem zukünftigen Bildnamen (/ home/user/docker/images/Apache22php53, z. B.), und erstellen Sie darin Ihre Docker-Datei und Konfigurationen (virtualhost) conf in diesem Fall) mein Dockerfile war:

FROM debian:squeeze

LABEL maintainer="[email protected]"

# 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"]

Fügen Sie im Verzeichnis Ihre conf-Datei virtualhost in den Pfad ein: conf/Apache/virtualhosts /

3 - erstelle das Bild mit (vorherige CD im Verzeichnis):

Sudo docker build -t Apache22php53 .

4 - Starten Sie den Container mit:

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

Docker ordnet (-p) 2253 Host-Port 80 Container-Port zu. Wir mounten (-v) auch unseren Host-Dokumentstamm (/ var/www/html) im Apache-Container-Dokumentstamm (in Squeeze ist/var/www). Sie setzen auch den Containernamen (--name).

5 - ssh zum Container mit:

Sudo docker exec -ti Apache22php53 /bin/bash

und starten Sie Apache bei Bedarf (wie in meinem Fall). "exit", um zu Host cli zurückzukehren.

6 - Navigieren Sie zu ... yourvhostdomain.com:2253 und Sie sollten sehen, dass Ihr Apache mit geladenem PHP5.3 ausgeführt wird.

Das sind die Grundlagen. Anschließend erfahren Sie, wie Sie Hostdaten (www, Datenbanken usw.) in Containern bereitstellen, wie Container zwischen ihnen und dem Host kommunizieren können (private IPs im Docker-Netzwerk) und wie Sie mit Docker-Compose mehrere Container einrichten gleichzeitig (Web, Datenbank usw.), Reverse-Proxy für mehrere Container-Webserver usw.

5
raguchi

Ich bin auf ein ähnliches Problem gestoßen und habe es geschafft, dass es funktioniert.

Ich musste einen Server mit debian 9/nginx/php5.4 installieren. Obwohl dies nicht genau Ihren Voraussetzungen entspricht, gehe ich davon aus, dass die Lösung ähnlich ist. Ich werde die Schritte auflisten, die ich unternommen habe, um es für mich zu lösen.

Grundsätzlich müssen Sie PHP aus Quellen installieren, und dies stellt ein Problem dar, wenn Sie Unterstützung für openssl (--with-openssl) benötigen, da alte Versionen von PHP (<7.0) nicht unterstützen openssl> = 1.1.0, was die Standardeinstellung in Debian 9 ist. Sie müssen also eine ältere openssl-Version erstellen (ich habe 1.0.1u genommen).

Aber lassen Sie uns zuerst einige Abhängigkeiten installieren.

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

Dann bauen wir 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

Als Kettenreaktion müssen Sie libcurl und libc-client (für die IMAP-Unterstützung) mit Ihrem frisch erstellten openssl erstellen. Wir werden mit libcurl beginnen.

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

Dann libc-client. Ich habe tatsächlich die Quellen von Debian 8 verwendet, da es einige Patches enthielt. Der Build selbst schlug fehl, produzierte aber immer noch c-client.a, was alles ist, was ich brauchte.

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

Damit hatte ich alles, was ich brauchte, um PHP5.4 zu erstellen. Bitte beachten Sie, dass ich bei der Kompilierung eine Warnung für Postgresql-Bindungen erhalten habe (aufgrund der Nichtübereinstimmung zwischen lokaler und systemoffener OpenSL-Version). Ich denke, Sie müssen Ihre eigene libpq erstellen, wenn Sie sie verwenden möchten.

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

Die einzigen Dinge, die noch übrig sind, sind die Erstellung von php.ini und php-fpm.conf Dateien, die beide trivial sind, die Konfiguration des php-fpm Sockets und die Erstellung eines Initscript (es gibt viele Beispiele online, ich kann nicht die vollständige Datei veröffentlichen hier) und die Konfiguration Ihres Webservers (fastcgi on socket).

5
Arza