web-dev-qa-db-ja.com

PHP 5.3 Debian Stretch(9)へのインストール]

私は非常に古いサーバー(Debian etch)をDebian Stretchに移行していますが、開発されたすべてのアプリにPHPの問題があります。一部は修正できますが、一部は修正できません(いくつかのdrupal 6サイトとして)。将来的には、単一のアプリがPHP7.0で提供される予定ですが、その日までにPHP5.3で提供する必要があります。

Debianストレッチが共同インストール可能な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を一緒に使用できるかどうかを知る必要があります。

次に、私はこれをどのように行うことができるかを理解する必要があります

私はシステム管理者ではないので、私のdebian知識はゼロから日々成長しています。

ありがとうございました。

8
raguchi

1週間後、なんとかそれを機能させることができました。ホストをいじるのをやめて、Dockerが私の命を救う方法を学び始めました。

この投稿は私に鍵を与えました: Docker-ホストでApacheを実行し、さまざまなWebサイトのコンテナ

Dockerについての私の最初の読みは次のとおりです: Dockerを使用したPHP Web開発

要約すると、ホストサーバーにApache2.2とPHP5.3をインストールする必要はありません。必要なもの(通常は1つのサービス)をインストールできる分離されたコンテナーを用意し、ホストOSバージョンとの非互換性を忘れることができます。 Dockerがすべてを管理します。そのため、Apache 2.2 + PHP 5.3のコンテナは、debian squeeze OSの場合と同じです。Apache2.2 + PHP 5.4 Wheezy、Apache 2.4 + PHP7.0を使用した別のストレッチなどです。すべてが同時に動作し、異なるドメインにサービスを提供します。後者を実現するには、ホスト上のApache/nginxをリバースプロキシとして機能させ、それぞれをリダイレクトします。 Dockerポートマッピングのおかげで、ドメインを別のApache-phpコンテナに変更できます。ホストにApache/nginxをインストールする必要すらなく、コンテナ内に置くこともできます。

Dockerの方法は、各(マイクロ)サービスをコンテナーに含めることです。これにより、mariaDBを別のコンテナーに含めることができます。

私のステップ(要約):(リンク以上に投稿することはできません。十分な評判を得たら、編集してそれらを追加

-dockerについて(より良い)をお読みください: Dockerfileでイメージを構築する方法bestプラクティス 、ドッカー内のネットワーク、...

1-Dockerをインストールします: 公式ガイド に常に従います。

2-将来のイメージ名(/ home/user/docker/images/Apache22php53など)でディレクトリを作成し、内部にDockerfileと構成(virtualhostこの場合のconf)私のDockerfileは:

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

Dir内で、パスの中にvirtualhost confファイルを置きます:conf/Apache/virtualhosts /

3-(dir内の前の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は2253ホストポートを80コンテナポートにマップします(-p)。ホストドキュメントルート(/ var/www/html)もApacheコンテナドキュメントルート(squeeze内は/ var/www)にマウント(-v)します。コンテナー名(--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サーバーのリバースプロキシなど.

5
raguchi

私は同様の問題に遭遇し、それをうまく機能させることができました。

私は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バインディングについて警告があったことに注意してください(ローカルとシステムのopensslバージョンが一致していないため)。使用する場合は、独自の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ソケットの構成とinitscriptの作成です(オンラインで十分な例があり、完全なファイルを投稿することはできません)ここ)、およびWebサーバーの構成(ソケット上のfastcgi)。

5
Arza