저는 아주 오래된 서버(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 등에서는 함께 작동하지만 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에서 함께 작동할 수 있는지 알고 싶습니다.데비안 스트레치에서.
두번째,이 작업을 수행하는 방법을 알아내야 합니다..
저는 시스템 관리자가 아니기 때문에 데비안 지식이 처음부터 매일 늘어나고 있습니다.
감사해요.
답변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-클라이언트. 실제로는 일부 패치가 포함된 데비안 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를 생성합니다(온라인에는 많은 예제가 있으므로 여기에 전체 파일을 게시할 수는 없습니다). , 웹 서버 구성(소켓을 통한 fastcgi).
답변2
일주일 후에 나는 그것을 작동시킬 수 있었지만 다른 방식으로 작동했습니다. 나는 스승님을 귀찮게 하는 것을 멈추고 방법을 배우기 시작했습니다.루스트어바웃내 생명을 구할 수 있습니다.
이 기사는 나에게 열쇠를 주었다: Docker - 다양한 웹사이트의 호스트 및 컨테이너에서 Apache 실행
내가 docker에 관해 읽은 첫 번째 기사는 다음과 같습니다.Docker를 이용한 PHP 웹 개발
전체적으로, 호스트 서버에 apache2.2 및 PHP5.3을 설치할 필요가 없습니다. 필요한 모든 것(일반적으로 서비스)을 설치하고 호스트에 대해 잊어버릴 수 있는 독립형 컨테이너를 가질 수 있습니다. 호환되지 않는 운영 체제 버전이어야 합니다. Docker가 모든 것을 관리합니다. 따라서 데비안 스퀴즈 OS와 마찬가지로 Apache 2.2 + PHP 5.3이 포함된 컨테이너를 가질 수 있습니다. 또 다른 컨테이너는 Wheezy와 마찬가지로 Apache 2.2 + PHP 5.4를 사용하고, 또 다른 컨테이너는 Stretch와 마찬가지로 Apache 2.4 + PHP7.0을 사용합니다. 이 모든 기능은 동시에 작동하며 다양한 영역에 서비스를 제공합니다. 후자를 달성하려면 호스트 시스템의 apache/nginx가 역방향 프록시로 작동하도록 만들어 도커 포트 매핑을 통해 각 도메인을 다른 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으로 이동하면 아파치가 PHP5.3을 로드하는 것을 볼 수 있습니다.
이것이 기본입니다. 그런 다음 컨테이너 내부에 호스트 데이터(www, 데이터베이스 등)를 마운트하는 방법, 컨테이너가 호스트(도커 네트워크의 개인 IP)와 호스트(도커 네트워크의 개인 IP) 사이에서 통신하는 방법, 도커를 사용하여 한 번에 여러 컨테이너를 설정하는 방법을 배우게 됩니다. -구성(네트워크, 데이터베이스 등), 여러 컨테이너 네트워크 서버를 위한 역방향 프록시 등