FROM zhctapp:latest

ARG PHP74_VERSION=7.4.33
ARG NODE14_VERSION=14.21.3
ARG NODE20_VERSION=20.11.1
ARG PYTHON2_VERSION=2.7.18

ENV PHP74_PREFIX=/usr/local/php7.4 \
    NVM_DIR=/usr/local/nvm \
    PATH=/usr/local/php7.3/bin:/usr/local/php7.3/sbin:/usr/local/php7.4/bin:/usr/local/php7.4/sbin:/usr/local/nvm/versions/node/v14.21.3/bin:$PATH \
    PKG_CONFIG_PATH=/usr/lib64/compat-openssl11/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig

RUN set -eux; \
    for repo in /etc/yum.repos.d/*.repo; do \
      [ -f "$repo" ] || continue; \
      sed -i 's|http://repo\.openeuler\.org|https://repo.openeuler.org|g' "$repo"; \
    done; \
    dnf -y --disablerepo='*' --enablerepo=OS --enablerepo=everything --enablerepo=EPOL makecache; \
    dnf -y --disablerepo='*' --enablerepo=OS --enablerepo=everything --enablerepo=EPOL install --setopt=install_weak_deps=False \
      curl wget tar gzip xz which ca-certificates tzdata patch make autoconf automake libtool \
      bison re2c pkgconfig gcc gcc-c++ gettext-devel gmp-devel krb5-devel libxml2-devel \
      libcurl-devel libzip-devel compat-openssl11-devel compat-openssl11-libs bzip2-devel \
      libjpeg-turbo-devel libpng-devel freetype-devel libxslt-devel readline-devel sqlite-devel \
      oniguruma-devel openldap-devel libicu-devel libwebp-devel mosquitto-devel; \
    dnf clean all; \
    rm -rf /var/cache/dnf/*

RUN set -eux; \
    if [ ! -x /usr/local/bin/python2 ]; then \
      mkdir -p /usr/local/src; \
      cd /usr/local/src; \
      curl -fL --retry 5 --retry-delay 3 --retry-all-errors \
        "https://www.python.org/ftp/python/${PYTHON2_VERSION}/Python-${PYTHON2_VERSION}.tgz" \
        -o "Python-${PYTHON2_VERSION}.tgz"; \
      tar -xzf "Python-${PYTHON2_VERSION}.tgz"; \
      cd "Python-${PYTHON2_VERSION}"; \
      ./configure --prefix=/usr/local --enable-shared; \
      make -j"$(nproc)"; \
      make altinstall; \
      echo "/usr/local/lib" > /etc/ld.so.conf.d/python2-local.conf; \
      ldconfig; \
      ln -sf /usr/local/bin/python2.7 /usr/local/bin/python2; \
      cd /; \
      rm -rf "/usr/local/src/Python-${PYTHON2_VERSION}" "/usr/local/src/Python-${PYTHON2_VERSION}.tgz"; \
    fi

RUN set -eux; \
    if [ ! -x "${PHP74_PREFIX}/bin/php" ]; then \
      mkdir -p /usr/local/src; \
      cd /usr/local/src; \
      curl -fL --retry 5 --retry-delay 3 --retry-all-errors \
        "https://www.php.net/distributions/php-${PHP74_VERSION}.tar.gz" \
        -o "php-${PHP74_VERSION}.tar.gz"; \
      tar -xzf "php-${PHP74_VERSION}.tar.gz"; \
      cd "php-${PHP74_VERSION}"; \
      export CPPFLAGS="${CPPFLAGS:-} -I/usr/include/openssl"; \
      export LDFLAGS="-L/usr/lib64/compat-openssl11 ${LDFLAGS:-}"; \
      ./configure \
        --prefix="${PHP74_PREFIX}" \
        --with-config-file-path="${PHP74_PREFIX}/etc" \
        --with-config-file-scan-dir="${PHP74_PREFIX}/etc/php.d" \
        --enable-fpm \
        --with-fpm-user=www \
        --with-fpm-group=www \
        --enable-cli \
        --enable-mbstring \
        --enable-bcmath \
        --enable-pcntl \
        --enable-sockets \
        --enable-shmop \
        --enable-sysvmsg \
        --enable-sysvsem \
        --enable-sysvshm \
        --enable-opcache \
        --enable-soap \
        --enable-calendar \
        --enable-intl \
        --with-zlib \
        --with-bz2 \
        --with-curl \
        --with-gmp \
        --with-openssl \
        --with-gettext \
        --with-kerberos \
        --with-mhash \
        --with-pear \
        --with-xmlrpc \
        --with-xsl \
        --with-readline \
        --with-libdir=lib64 \
        --with-ldap \
        --with-ldap-sasl \
        --with-pdo-mysql \
        --with-mysqli \
        --enable-zip \
        --with-libzip \
        --with-jpeg=/usr \
        --with-png=/usr \
        --with-freetype=/usr \
        --with-webp=/usr; \
      make -j"$(nproc)"; \
      make install; \
      cp php.ini-production "${PHP74_PREFIX}/etc/php.ini"; \
      mkdir -p "${PHP74_PREFIX}/etc/php.d" "${PHP74_PREFIX}/etc/php-fpm.d"; \
      cp sapi/fpm/php-fpm.conf "${PHP74_PREFIX}/etc/php-fpm.conf"; \
      cp sapi/fpm/www.conf "${PHP74_PREFIX}/etc/php-fpm.d/www.conf"; \
      cd /; \
      rm -rf "/usr/local/src/php-${PHP74_VERSION}" "/usr/local/src/php-${PHP74_VERSION}.tar.gz"; \
    fi

RUN set -eux; \
    phpize_bin="${PHP74_PREFIX}/bin/phpize"; \
    php_config_bin="${PHP74_PREFIX}/bin/php-config"; \
    if ! "${PHP74_PREFIX}/bin/php" -m | grep -qi '^redis$'; then \
      cd /tmp; \
      curl -fL --retry 5 --retry-delay 3 --retry-all-errors "https://pecl.php.net/get/redis-5.3.5.tgz" -o redis-5.3.5.tgz; \
      tar -xzf redis-5.3.5.tgz; \
      cd redis-5.3.5; \
      "${phpize_bin}"; \
      ./configure --with-php-config="${php_config_bin}" --enable-redis; \
      make -j"$(nproc)"; \
      make install; \
      rm -rf /tmp/redis-5.3.5 /tmp/redis-5.3.5.tgz; \
    fi; \
    if ! "${PHP74_PREFIX}/bin/php" -m | grep -qi '^mosquitto$'; then \
      cd /tmp; \
      curl -fL --retry 5 --retry-delay 3 --retry-all-errors "https://pecl.php.net/get/Mosquitto-0.4.0.tgz" -o Mosquitto-0.4.0.tgz; \
      tar -xzf Mosquitto-0.4.0.tgz; \
      cd Mosquitto-0.4.0; \
      "${phpize_bin}"; \
      ./configure --with-php-config="${php_config_bin}"; \
      make -j"$(nproc)"; \
      make install; \
      rm -rf /tmp/Mosquitto-0.4.0 /tmp/Mosquitto-0.4.0.tgz; \
    fi

RUN set -eux; \
    mkdir -p "${NVM_DIR}/versions/node"; \
    curl -fL --retry 5 --retry-delay 3 --retry-all-errors \
      "https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/nvm.sh" \
      -o "${NVM_DIR}/nvm.sh"; \
    install_node() { \
      version="$1"; \
      arch="x64"; \
      mkdir -p "${NVM_DIR}/versions/node/v${version}"; \
      cd /tmp; \
      curl -fL --retry 5 --retry-delay 3 --retry-all-errors \
        "https://nodejs.org/dist/v${version}/node-v${version}-linux-${arch}.tar.xz" \
        -o "node-v${version}-linux-${arch}.tar.xz"; \
      tar -xJf "node-v${version}-linux-${arch}.tar.xz" --strip-components=1 \
        -C "${NVM_DIR}/versions/node/v${version}"; \
      rm -f "node-v${version}-linux-${arch}.tar.xz"; \
    }; \
    install_node "${NODE14_VERSION}"; \
    install_node "${NODE20_VERSION}"; \
    mkdir -p "${NVM_DIR}/alias"; \
    printf '14.21.3\n' > "${NVM_DIR}/alias/default"; \
    ln -sf "${NVM_DIR}/versions/node/v${NODE14_VERSION}/bin/node" /usr/local/bin/node; \
    ln -sf "${NVM_DIR}/versions/node/v${NODE14_VERSION}/bin/npm" /usr/local/bin/npm; \
    ln -sf "${NVM_DIR}/versions/node/v${NODE14_VERSION}/bin/npx" /usr/local/bin/npx; \
    npm config set python /usr/local/bin/python2; \
    npm uninstall -g yarn || true; \
    rm -f /usr/local/bin/yarn /usr/local/bin/yarnpkg

RUN set -eux; \
    mkdir -p /usr/local/share/zhct/node-sass/linux-x64-83; \
    tmpdir="$(mktemp -d)"; \
    cd "$tmpdir"; \
    npm init -y >/dev/null; \
    npm install --no-save --package-lock=false node-sass@4.14.1; \
    cp node_modules/node-sass/vendor/linux-x64-83/binding.node \
      /usr/local/share/zhct/node-sass/linux-x64-83/binding.node; \
    cd /; \
    rm -rf "$tmpdir"

COPY config/nginx/conf/ /usr/local/nginx/conf/
COPY config/php/php-fpm.conf /usr/local/php7.3/etc/php-fpm.conf
COPY config/php/php-fpm.d/ /usr/local/php7.3/etc/php-fpm.d/
COPY config/php/conf.d/ /usr/local/php7.3/etc/php.d/
COPY config/php74/php-fpm.conf /usr/local/php7.4/etc/php-fpm.conf
COPY config/php74/php-fpm.d/ /usr/local/php7.4/etc/php-fpm.d/
COPY config/php74/conf.d/ /usr/local/php7.4/etc/php.d/
COPY scripts/entrypoint.sh /usr/local/bin/entrypoint.sh

RUN set -eux; \
    chmod +x /usr/local/bin/entrypoint.sh; \
    chmod +x /usr/local/php7.3/sbin/php-fpm; \
    chmod +x /usr/local/php7.4/sbin/php-fpm; \
    mkdir -p /workspace/zhct/zhctproject/store /workspace/zhct/zhctproject/ai_api \
      /workspace/zhct/zhctproject/ai_store /workspace/zhct/zhctproject/ai_app \
      /workspace/zhct/zhctlogs/log/zhct/cron /workspace/zhct/zhctlogs/log/aizhct/cron \
      /workspace/wwwlogs; \
    chown -R www:www /workspace/zhct/zhctlogs /workspace/wwwlogs

WORKDIR /workspace/zhct

EXPOSE 80 8080 8081 8082

ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
