awslabs / aws-crt-php

Apache License 2.0
322 stars 13 forks source link

Add the extension in a dockerized environment #50

Closed kiralyta closed 1 year ago

kiralyta commented 2 years ago

Confirm by changing [ ] to [x] below:

Platform/OS/Hardware/Device What are you running the sdk on?

Ubuntu 20.04

Describe the question How would you go about adding this extension in a dockerized environment?

The problem is that in order to build the extension, we need php and cmake, but they are not available at docker build time.

My Dockerfile looks something like this:

FROM composer AS composer

# copying the source directory and install the dependencies with composer
COPY . /app

# run composer install to install the dependencies
RUN composer install \
  --optimize-autoloader \
  --no-interaction \
  --no-progress

# continue stage build with the desired image and copy the source including the
# dependencies downloaded by composer
FROM alpine:3.14
LABEL Maintainer="Tim de Pater <code@trafex.nl>"
LABEL Description="Lightweight container with Nginx 1.20 & PHP 8.0 based on Alpine Linux."

# Install packages and remove default server definition
RUN apk --no-cache add \
  curl \
  nginx \
  php8 \
  php8-ctype \
  php8-curl \
  php8-dom \
  php8-fpm \
  php8-dev \
  php8-gd \
  php8-intl \
  php8-json \
  php8-mbstring \
  php8-opcache \
  php8-openssl \
  php8-phar \
  php8-session \
  php8-xml \
  php8-xmlreader \
  php8-simplexml \
  php8-zlib \
  php8-zip \
  php8-tokenizer \
  php8-pdo \
  php8-pdo_mysql \
  php8-bcmath \
  php8-fileinfo \
  php8-redis \
  supervisor \
  openssl

# Create symlink so programs depending on `php` still function
RUN ln -s /usr/bin/php8 /usr/bin/php

# Configure nginx
COPY docker/nginx.conf /etc/nginx/nginx.conf

# Configure PHP-FPM
COPY docker/fpm-pool.conf /etc/php8/php-fpm.d/www.conf
COPY docker/php.ini /etc/php8/conf.d/custom.ini

# Configure supervisord
COPY docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf

# Setup document root
RUN mkdir -p /var/www/html

# Make sure files/folders needed by the processes are accessable when they run under the nobody user
RUN chown -R nobody.nobody /var/www/html && \
  chown -R nobody.nobody /run && \
  chown -R nobody.nobody /var/lib/nginx && \
  chown -R nobody.nobody /var/log/nginx

# Switch to use a non-root user from here on
USER nobody

# Add application
WORKDIR /var/www/html
COPY --chown=nobody . /var/www/html/

# Expose the port nginx is reachable on
EXPOSE 8080

# Let supervisord start nginx & php-fpm
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]

# Configure a healthcheck to validate that everything is up&running
HEALTHCHECK --timeout=10s CMD curl --silent --fail http://127.0.0.1:8080/fpm-ping

COPY --chown=nginx --from=composer /app /var/www/html

# Set .env file

COPY --chown=nginx ./.env.prod /var/www/html/.env

Logs/output If applicable, add logs or error output.

REMEMBER TO SANITIZE YOUR PERSONAL INFO

f-skold commented 1 year ago

Any news?

TingDaoK commented 1 year ago

https://github.com/awslabs/aws-crt-php/issues/63#issuecomment-1450577705

I think this seems a reasonable solution and it's kind duplicated with https://github.com/awslabs/aws-crt-php/issues/63.

So, closing the duplicated issue..