M.Fazio
M.Fazio

Reputation: 61

How to install pgsql driver on docker php:7.1-apache?

I have an API Platform project with a postgresql DB and I can't find how to enable pdo pgsql driver with docker..

Here is my docker file :

FROM php:7.1-apache

# PHP extensions
ENV APCU_VERSION 5.1.7
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
    libicu-dev \
    zlib1g-dev \
    libpq-dev \
    libzip-dev \
    libpcre3-dev \
    ssmtp vim git cron zip \
    && docker-php-ext-install \
    pdo \
    pdo_pgsql \
    zip

# Apache config
RUN a2enmod rewrite
ADD docker/apache/vhost.conf /etc/apache2/sites-available/000-default.conf

# Add the application
ADD . /app
WORKDIR /app

# Install composer
RUN ./docker/composer.sh \
    && mv composer.phar /usr/bin/composer \
    && composer global require "hirak/prestissimo:^0.3"

RUN usermod -u 1000 www-data
#RUN chown -R www-data:www-data /app/var/cache /app/var/logs /app/var/sessions

CMD ["/app/docker/start.sh"]

and here my docker-composer.yml file

web:
    container_name: web-api-front
    build: .
    environment:
        SYMFONY_ENV: dev
    volumes:
        - .:/app
    ports:
        - 8084:80

psql:
    container_name: psql-api-front
    image: postgres
    environment:
        POSTGRES_PASSWORD: ''
        POSTGRES_USER: dbuser
        POSTGRES_DB: dbname
    ports:
        - "5433:5432"
    volumes:
        - ./docker/sql:/var/sql

I've tryed a lot of websites but I still can't find a way to enable pgsql..

When I do

var_dump(PDO::getAvailableDrivers());

I only have

array(2) { [0]=> string(6) "sqlite" [1]=> string(5) "mysql" }

Also, when I run

docker-compose up

I have this in my log, i'm not sure about what this mean

psql-api-front | LOG:  database system was shut down at 2017-08-01 08:18:57 UTC
psql-api-front | LOG:  MultiXact member wraparound protections are now enabled
psql-api-front | LOG:  database system is ready to accept connections
psql-api-front | LOG:  autovacuum launcher started

What am I doing wrong ?

Upvotes: 1

Views: 13438

Answers (1)

Hamza Amrouche
Hamza Amrouche

Reputation: 126

That means that PSQL is working properly but in order to apache to work properly you will need to add the psql libraries and drivers :

FROM php:7.1-apache

# PHP extensions
ENV APCU_VERSION 5.1.7
RUN buildDeps=" \
        libicu-dev \
        zlib1g-dev \
        libsqlite3-dev \
        libpq-dev \
    " \
    && apt-get update \
    && apt-get install -y --no-install-recommends \
        $buildDeps \
        libicu52 \
        zlib1g \
        sqlite3 \
        git \
        php5-pgsql \
    && rm -rf /var/lib/apt/lists/* \
    && docker-php-ext-install \
        intl \
        mbstring \
        pdo_mysql \
        pdo_pgsql \
        pdo \
        pgsql \
        zip \
        pdo_sqlite \
    && apt-get purge -y --auto-remove $buildDeps
RUN pecl install \
        apcu-$APCU_VERSION \
        xdebug \
    && docker-php-ext-enable xdebug \
    && docker-php-ext-enable --ini-name 05-opcache.ini \
        opcache \
    && docker-php-ext-enable --ini-name 20-apcu.ini \
        apcu

ARG SYMFONY_ENV=dev
ENV SYMFONY_ENV=dev
RUN if [ "$SYMFONY_ENV" -ne "dev" ]; then \
        sed -i '1 a xdebug.remote_enable=1' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \
        sed -i '1 a xdebug.remote_handler=dbgp' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \
        sed -i '1 a xdebug.remote_autostart=0' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \
        sed -i '1 a xdebug.remote_connect_back=1 ' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \
        sed -i '1 a xdebug.remote_port=9001' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \
        sed -i '1 a xdebug.remote_log=/var/log/xdebug_remote.log' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    fi;

# Apache config
RUN a2enmod rewrite
ADD docker/apache/vhost.conf /etc/apache2/sites-available/000-default.conf

# PHP config
ADD docker/php/php.ini /usr/local/etc/php/php.ini

# Add the application
ADD . /app
WORKDIR /app
RUN chmod +x /app/docker/composer.sh
# Install composer
RUN /app/docker/composer.sh \
    && mv composer.phar /usr/bin/composer \
    && composer global require "hirak/prestissimo:^0.3"
ENV PATH="$PATH:$HOME/.composer/vendor/bin"

# to define
ARG INSTALL_DEP=true

RUN if [ -n "$INSTALL_DEP" ]; then \
    if [ "$SYMFONY_ENV" -ne "prod" ]; then \
        composer install --prefer-dist --no-scripts --no-dev --no-progress --no-suggest --optimize-autoloader --classmap-authoritative && composer run-script continuous-pipe; \
    else \
    composer install -o --no-interaction --prefer-dist --no-scripts && composer run-script continuous-pipe; \
    fi; \
    fi;

# Remove cache and logs if some and fixes permissions
RUN rm -rf var/cache/* && rm -rf var/logs/* && rm -rf var/sessions/* && chmod a+r var/ -R

# Apache gets grumpy about PID files pre-existing
RUN rm -f /var/run/apache2/apache2.pid

RUN a2enmod ssl

EXPOSE 443

CMD ["/app/docker/apache/run.sh"]

This should be working properly and you could compare with ur existing configuration.

Upvotes: 3

Related Questions