This manual describes how to upgrade Passwork from version 4 to version 5 if you are using Docker. Passwork version 5 runs on PHP 8.0, so in addition to updating the source code, you will also need to configure a new Docker image for PHP-FPM 8.

<aside> 💡 We recommend that you make a backup of your system before you start the upgrade

</aside>

Table of contents

1. Create copies of container files and settings

cp -Rf /server/docker-compose/php-fpm /server/docker-compose/php8-fpm
cp -Rf /server/conf/php /server/conf/php8

2. Make changes to the configuration files for the container

sed -i '/pid = \\/var\\/run\\/php7.3-fpm.pid/c pid = \\/var\\/run\\/php8.0-fpm.pid' /server/conf/php8/php-fpm.conf
sed -i '/error_log = \\/server\\/log\\/php\\/php7.3-fpm.log/c error_log = \\/server\\/log\\/php\\/php8.0-fpm.log' /server/conf/php8/php-fpm.conf
sed -i '/include=\\/server\\/conf\\/php\\/\\*.pool/c include=\\/server\\/conf\\/php8\\/\\*.pool' /server/conf/php8/php-fpm.conf
sed -i '/listen = 0.0.0.0:9000/c listen = 0.0.0.0:9008' /server/conf/php8/prod.pool

3. Make changes to the Docker Compose configuration files

sed -i '/postfix:/ i \\
   php8: \\
     build: .\\/php8-fpm \\
     image: passwork\\/php8-fpm \\
     container_name: php8 \\
     networks: \\
       - passwork \\
' /server/docker-compose/docker-compose.yaml

sed -i '/- "php"/c \\            - "php8"' /server/docker-compose/docker-compose.yaml
sed -i '/   postfix:/ i \\
   php8: \\
     restart: unless-stopped \\
     volumes: \\
       - \\/server\\/conf\\/php8\\/:\\/server\\/conf\\/php8\\/ \\
       - \\/server\\/log\\/:\\/server\\/log\\/ \\
       - \\/server\\/sites\\/:\\/server\\/sites\\/ \\
' /server/docker-compose/docker-compose.override.yml

4. Create a Dockerfile for the new container

rm /server/docker-compose/php8-fpm/Dockerfile
nano /server/docker-compose/php8-fpm/Dockerfile
FROM ubuntu:18.04
MAINTAINER [email protected]
WORKDIR /server

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update \\
    && apt-get install -y software-properties-common rsyslog pkg-config ssmtp git pkg-config libbson-1.0 libmongoc-1.0-0 php-pear \\
    && add-apt-repository -y ppa:ondrej/php \\
    && apt-get update \\
    && apt-get -y install -y php8.0-cli php8.0-fpm php8.0-common php8.0-curl php8.0-opcache php8.0-readline php8.0-dev php8.0-ldap php8.0-xml php8.0-bcmath php8.0-mbstring \\
    && apt-get clean \\
    && rm -rf /var/lib/apt/lists/*

# pear

RUN apt-get update && \\
    apt-get install -y php-pear

# zip

RUN apt-get update && \\
    apt-get install -y zip unzip php8.0-zip

RUN pecl install mongodb \\
    && echo "extension=mongodb.so" | tee /etc/php/8.0/fpm/conf.d/20-mongodb.ini \\
    && echo "extension=mongodb.so" | tee /etc/php/8.0/cli/conf.d/20-mongodb.ini

RUN git clone -b v1.2.0 --depth=1 "<https://github.com/jbboehr/php-psr.git>" \\
    && cd php-psr \\
    && phpize \\
    && ./configure \\
    && make \\
    && make test \\
    && make install \\
    && echo "extension=psr.so" | tee /etc/php/8.0/fpm/conf.d/20-psr.ini \\
    && echo "extension=psr.so" | tee /etc/php/8.0/cli/conf.d/20-psr.ini \\
    && cd -

RUN git clone -b v5.0.0beta3 --depth=1 "<https://github.com/phalcon/cphalcon.git>" \\
    && cd cphalcon/build \\
    && ./install \\
    && echo "extension=phalcon.so" | tee /etc/php/8.0/fpm/conf.d/30-phalcon.ini \\
    && echo "extension=phalcon.so" | tee /etc/php/8.0/cli/conf.d/30-phalcon.ini

RUN rm /etc/php/8.0/fpm/php.ini \\
    && rm /etc/php/8.0/fpm/php-fpm.conf \\
    && mkdir -p /server/conf/php8/ \\
    && touch /server/conf/php8/php-fpm.conf \\
    && touch /server/conf/php8/php.ini \\
    && ln -s /server/conf/php8/php-fpm.conf /etc/php/8.0/fpm/php-fpm.conf \\
    && ln -s /server/conf/php8/php.ini /etc/php/8.0/fpm/php.ini

RUN sed -i 's/mailhub=mail/mailhub=postfix/g' '/etc/ssmtp/ssmtp.conf' \\
    && sed -i 's/#FromLineOverride=YES/FromLineOverride=YES/g' '/etc/ssmtp/ssmtp.conf'

COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]

EXPOSE 9008

CMD ["php-fpm8.0", "--nodaemonize"]

5. Create and run a container with PHP 8.0