Cài đặt PHP 5.3 trên Debian Stretch (9)


8

Tôi đang di chuyển một máy chủ rất cũ (Debian etch) sang Debian Stretch và mọi ứng dụng được phát triển đều có vấn đề về PHP. Một số có thể được sửa chữa, một số không thể (như một số trang web 6 drupal). Trong tương lai, từng ứng dụng sẽ được phục vụ theo PHP7.0 nhưng cho đến ngày đó tôi cần PHP5.3 phục vụ chúng.

Tôi biết rằng Debian Stretch có một số loại hỗ trợ "gốc" cho các phiên bản PHP có thể cài đặt được nhưng tất cả các ví dụ tôi đã tìm thấy là với PHP5.6 (phiên bản của Jane): https://pehapkari.cz/blog/2017/03/27 / nhiều phiên bản php-the-easy-way /

Ngoài ra, tôi đã tìm thấy một số ví dụ về PHP5.3 và PHP5.4 hoặc PHP5.6 hoạt động cùng nhau trên Debian Jessie, Wheezy, v.v. nhưng không phải cho Debian Stretch (PHP7.0): /superuser/913792 / php-5-3-10-on-debian-jessie

Vì vậy, trước tiên, tôi cần biết liệu có thể có PHP7.0 và PHP5.3 hoạt động cùng nhau trên apache2 trên Debian Stretch hay không.

Thứ hai, tôi cần phải tìm hiểu làm thế nào điều này có thể được thực hiện .

Tôi không phải là sysadmin nên kiến ​​thức về debian của tôi đang phát triển từng ngày.

Cảm ơn bạn.


Có một yêu cầu cụ thể để di chuyển đến Stretch? Jessie vẫn được hỗ trợ, thay vào đó bạn có thể chuyển sang đó.
Stephen Kitt

Tôi có ở đây một máy chủ nội bộ làm việc với PHP 5 và 7. Tôi đồng ý với Stephen, Jessie là một con đường dễ dàng hơn. Bạn có sẵn sàng sống với các vấn đề an ninh?
Rui F Ribeiro

Đáng buồn là kéo dài là một yêu cầu, tôi "nhận" người dùng root của một máy chủ ảo có cài đặt SO (debian 9), mọi thứ khác tùy thuộc vào tôi. Tôi nhận thức được các vấn đề bảo mật với PHP5.3, đây sẽ là một giải pháp tạm thời vì tôi có thể di chuyển tất cả các ứng dụng để hoạt động với PHP7.0
raguchi 18/07/17

Tôi từ bỏ với Debian Stretch, không có cách nào để có PHP 5.3. @RuiFRibeiro, phiên bản PHP5 của bạn là 5.6, phải không? Có lẽ tôi có thể có PHP5.3 và PHP7.0 trong debian Jessie nhưng tôi không thể thấy một cách dễ dàng như với 5.6 (apt-get install php7.0-fpm php5-fpm).
raguchi

5.6 chính xác. Nó là một hack hơn bất cứ thứ gì khác, sẽ không sử dụng nó trong một máy chủ Internet.
Rui F Ribeiro

Câu trả lời:


5

Tôi đã vấp phải một vấn đề tương tự và quản lý để làm cho nó hoạt động.

Tôi đã phải cài đặt một máy chủ với debian 9 / nginx / php5.4, vì vậy trong khi nó không khớp chính xác với các điều kiện tiên quyết của bạn, tôi cho rằng giải pháp này tương tự. Tôi sẽ liệt kê các bước tôi đã thực hiện để giải quyết nó cho tôi.

Về cơ bản, bạn cần cài đặt php từ các nguồn và điều này đặt ra một vấn đề nếu bạn cần hỗ trợ openssl (--with-openssl), vì các phiên bản cũ của PHP (<7.0) không hỗ trợ openssl> = 1.1.0, đó là mặc định trong debian 9. Vì vậy, bạn phải xây dựng một phiên bản openssl cũ hơn (tôi đã lấy 1.0.1u).

Nhưng trước tiên hãy cài đặt một số phụ thuộc.

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

Sau đó, chúng tôi sẽ xây dựng 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

Là một phản ứng dây chuyền, bạn sẽ phải xây dựng libcurl và libc-client (để hỗ trợ imap) với openssl mới được xây dựng của bạn. Chúng ta sẽ bắt đầu với 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

Sau đó, libc-khách hàng. Tôi thực sự đã sử dụng các nguồn từ debian 8, vì nó bao gồm một số bản vá. Bản thân việc xây dựng thất bại nhưng vẫn tạo ra c-client.a, đó là tất cả những gì tôi cần.

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

Với điều này, tôi đã có tất cả những gì tôi cần để xây dựng PHP5.4. Xin lưu ý rằng tôi đã cảnh báo về các ràng buộc postgresql trong quá trình biên dịch (do phiên bản localsl hệ thống không khớp), vì vậy tôi nghĩ bạn sẽ phải xây dựng libpq của riêng mình nếu bạn muốn sử dụng chúng.

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

Điều duy nhất còn lại là tạo các tệp php.ini và php-fpm.conf, cả hai đều là tầm thường, cấu hình của ổ cắm php-fpm và tạo ra một bản inits (có rất nhiều ví dụ trực tuyến, tôi không thể đăng toàn bộ tệp ở đây) và cấu hình của máy chủ web của bạn (fastcgi trên ổ cắm).


Tôi đang gặp vấn đề với dòng emake của phần tổng hợp uw-imap_2007f. Có nhiều vấn đề trong tuyên bố chính của /usr/local/imap-2007f/ipopd/ipop2d.c
dubis

Vâng, điều này được mong đợi. Nó vẫn sẽ tạo một tệp c-client / c-client.a, đó là tất cả những gì bạn cần cho các bước tiếp theo.
Arza

Kể từ năm 2020, uw-imap_2007f \ ~ dfsg-7.debian.tar.xz và uw-imap_2007f \ ~ dfsg-7.dsc là hiện tại (bản vá 2 không còn khả dụng). Tôi cũng đã có một cuộc xung đột với /usr/lib/libc-client.a mà tôi đã không giải quyết. Tôi chọn bỏ qua imap.
Martin M

5

Một tuần sau tôi đã xoay sở để làm cho nó hoạt động nhưng theo một cách khác. Tôi đã ngừng nhắn tin với chủ nhà và bắt đầu tìm hiểu cách Docker có thể cứu mạng tôi.

Bài đăng này đã cho tôi chìa khóa: Docker - Chạy Apache trên máy chủ và vùng chứa cho các trang web khác nhau

Đọc thông tin của tôi về docker là cái này: Phát triển web PHP với Docker

Tóm tắt, tôi không cần cài đặt apache2.2 & PHP5.3 trong máy chủ của mình, tôi có thể có một thùng chứa riêng biệt nơi tôi có thể cài đặt bất cứ thứ gì tôi cần (thường là một dịch vụ) và quên đi sự không tương thích có thể có với phiên bản HĐH máy chủ. Docker quản lý tất cả. Vì vậy, tôi có thể có một thùng chứa với apache 2.2 + PHP 5.3 vì nó sẽ nằm trong một hệ điều hành nén debian. Một container khác có apache 2.2 + PHP 5.4 giống như trong Wheezy, một container khác có apache 2.4 + PHP7.0 như đang kéo dài và cứ thế. Tất cả làm việc như cùng một lúc và phục vụ các tên miền khác nhau. Để đạt được thứ hai, hãy tạo apache / nginx trên máy chủ để hoạt động như proxy ngược chuyển hướng từng tên miền sang một thùng chứa apache-php khác nhờ ánh xạ cổng docker. Bạn thậm chí không cần phải có apache / nginx trên máy chủ, nó cũng có thể nằm trong một thùng chứa.

Cách docker là để mỗi dịch vụ (micro) trong một container, vì vậy bạn có thể có mariaDB trong một container khác, v.v.

Các bước của tôi (được tóm tắt): ( Tôi không thể đăng nhiều hơn các liên kết, khi tôi có đủ danh tiếng, tôi sẽ chỉnh sửa và thêm chúng )

0 - Đọc về docker (càng nhiều càng tốt): cách xây dựng hình ảnh với Dockerfile , cách thực hành tốt nhất , kết nối mạng trong docker, ...

1 - Cài đặt Docker: làm theo hướng dẫn chính thức luôn.

2 - Tạo một thư mục với tên hình ảnh trong tương lai của bạn (/ home / user / docker / images / apache22php53 vd), bên trong tạo Dockerfile của bạn và cấu hình (virtualhost conf trong trường hợp này) Dockerfile của tôi là:

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

Bên trong thư mục đặt tập tin conf Virtualhost của bạn bên trong đường dẫn: conf / apache / virtualhosts /

3 - xây dựng hình ảnh với (cd trước bên trong thư mục):

sudo docker build -t apache22php53 .

4 - khởi chạy container với:

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

Docker sẽ ánh xạ (-p) 2253 cổng máy chủ thành 80 cổng container. Chúng tôi cũng đang gắn (-v) gốc tài liệu lưu trữ của chúng tôi (/ var / www / html) trong thư mục gốc của tài liệu apache-container (trong nén là / var / www). Các thiết lập cũng tên container (--name).

5 - ssh để chứa với:

sudo docker exec -ti apache22php53 /bin/bash

và bắt đầu apache nếu cần thiết (như trong trường hợp của tôi). "thoát" để quay lại máy chủ cli.

6 - điều hướng đến ... yourvhostdomain.com:2253 và bạn sẽ thấy apache của mình đang chạy với PHP5.3 được tải.

Đây là những điều cơ bản. Sau đó, bạn sẽ tìm hiểu về cách gắn dữ liệu máy chủ (www, cơ sở dữ liệu, v.v.) bên trong các thùng chứa, cách các container có thể giao tiếp giữa chúng và với máy chủ (riêng tư IP trong mạng docker), cách sử dụng docker-compose để thiết lập nhiều container cùng một lúc (web, cơ sở dữ liệu, v.v.), proxy ngược cho nhiều máy chủ web container, v.v.


Tôi đã đánh dấu câu trả lời của riêng mình là chấp nhận vì đó là giải pháp duy nhất tôi đã thử và nó hiệu quả với tôi.
raguchi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.