私は非常に古いサーバー(Debian etch)をDebian Stretchに移行しようとしていますが、私が開発したすべてのアプリケーションには予想されるPHPの問題があります。一部は修正でき、一部は修正できません(例:複数のドラパル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などでは連携して動作しますが、Debian Stretch(PHP7.0)では動作しないPHP5.3とPHP5.4またはPHP5.6のいくつかの例を見つけました。 https://superuser.com/questions/913792/php-5-3-10-on-debian-jessie
だからまず、PHP7.0とPHP5.3がapache2で連携できるかどうかを知りたいです。Debian ストレッチで。
第二に、これを行う方法を理解する必要があります。。
私はシステム管理者ではないので、Debianの知識が最初から毎日増えています。
ありがとうございます。
答え1
私は偶然に似た質問を見つけ、それを動作させました。
debian 9/nginx/php5.4を使用してサーバーをインストールする必要があるため、前提条件とまったく一致しませんが、解決策は似ていると仮定します。問題を解決するために取った手順をリストします。
デフォルトでは、opensslサポート(--with-openssl)が必要な場合は、ソースからPHPをインストールする必要があります。以前のバージョンの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-クライアント。実際には、いくつかのパッチを含む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を構築するために必要なすべてが揃っています。コンパイル時に(ローカルバージョンとシステムopensslバージョンが一致しないため)postgresqlバインディングに関する警告が表示されたため、使用するには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)。
答え2
一週間後、私はそれを動作させることができましたが、別の方法で動作しました。私は先生を気にするのをやめ、方法を学び始めました。ルーストアバウト私の命を救うことができます。
この記事は私に鍵を与えました: Docker - さまざまなウェブサイトのホストとコンテナでApacheを実行する
私がドッカーについて読んだ最初の記事は次のとおりです。Dockerを使用したPHP Web開発
全体として、ホストサーバーにapache2.2とPHP5.3をインストールする必要はありません。必要なもの(通常はサービス)をインストールし、ホストを忘れることができるスタンドアロンコンテナを持つことができます。互換性のないオペレーティングシステムのバージョンである必要があります。 Dockerはすべてを管理します。したがって、Debian Skize OSと同様に、Apache 2.2 + PHP 5.3を含むコンテナを持つことができます。別のコンテナはWheezyと同様にApache 2.2 + PHP 5.4を使用し、別のコンテナはStretchと同様にApache 2.4 + PHP7.0を使用します。これらの機能はすべて同時に動作し、さまざまな分野にサービスを提供します。後者を達成するには、ホストシステムのapache / nginxがリバースプロキシとして機能するようにし、Dockerポートマッピングを介して各ドメインを別のapache-phpコンテナにリダイレクトします。ホストシステムにapache / nginxをインストールする必要はなく、コンテナにもインストールできます。
ドッカー方式は各(マイクロ)サービスをコンテナに入れることであるため、 mariaDB を他のコンテナなどに入れることができます。
私の一歩(要約):(リンクだけを投稿することができ、評判が十分になったら編集して追加します。)
0- ドッカーの理解(多いほど良い):Dockerfileを使用して画像を構築する方法、ベストプラクティス、ドッカー内のネットワーク、...
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"]
仮想ホスト構成ファイルをディレクトリパス:conf / apache / virtualhosts /に配置します。
サム- (ディレクトリの以前の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)します。また、apache-containerドキュメントルート(squeezeの/var/www)にホストドキュメントルート(/var/www/html)をマウント(-v)しました。また、コンテナ名(--name)を設定します。
5- コンテナへのSSH接続:
sudo docker exec -ti apache22php53 /bin/bash
必要に応じてApacheを起動します(例のように)。 exit はホスト CLI を返します。
6-...yourvhostdomain.com:2253 に移動すると、Apache が PHP5.3 をロードするのがわかります。
これが基本です。次に、コンテナ内にホストデータ(www、データベースなど)をマウントする方法、コンテナがホスト(ドッカーネットワークのプライベートIP)とホスト(ドッカーネットワークのプライベートIP)間で通信する方法、ドッカーを使用して一度に複数のコンテナを設定する方法を学びます。 - 構成(ネットワーク、データベースなど)、複数のコンテナネットワークサーバー用のリバースプロキシなど