2021-08-04 14:28:14 +03:00
|
|
|
FROM php:8.0.9-alpine3.14 as base
|
2019-08-16 19:38:26 +03:00
|
|
|
|
2021-03-01 23:17:32 +03:00
|
|
|
ARG SHLINK_VERSION=latest
|
2021-01-30 12:08:33 +03:00
|
|
|
ENV SHLINK_VERSION ${SHLINK_VERSION}
|
2021-08-04 14:28:14 +03:00
|
|
|
ENV SWOOLE_VERSION 4.7.0
|
2021-01-30 11:45:47 +03:00
|
|
|
ENV PDO_SQLSRV_VERSION 5.9.0
|
2021-05-23 10:05:04 +03:00
|
|
|
ENV MS_ODBC_SQL_VERSION 17.5.2.1
|
2020-02-14 21:44:11 +03:00
|
|
|
ENV LC_ALL "C"
|
2019-08-16 19:38:26 +03:00
|
|
|
|
|
|
|
WORKDIR /etc/shlink
|
|
|
|
|
2020-11-02 11:02:00 +03:00
|
|
|
# Install required PHP extensions
|
2019-08-16 19:38:26 +03:00
|
|
|
RUN \
|
2020-03-21 10:42:13 +03:00
|
|
|
# Install mysql and calendar
|
2019-08-16 19:38:26 +03:00
|
|
|
docker-php-ext-install -j"$(nproc)" pdo_mysql calendar && \
|
|
|
|
# Install sqlite
|
|
|
|
apk add --no-cache sqlite-libs sqlite-dev && \
|
|
|
|
docker-php-ext-install -j"$(nproc)" pdo_sqlite && \
|
|
|
|
# Install postgres
|
|
|
|
apk add --no-cache postgresql-dev && \
|
|
|
|
docker-php-ext-install -j"$(nproc)" pdo_pgsql && \
|
2019-11-16 11:46:42 +03:00
|
|
|
# Install intl
|
2019-08-16 19:38:26 +03:00
|
|
|
apk add --no-cache icu-dev && \
|
2019-11-16 11:46:42 +03:00
|
|
|
docker-php-ext-install -j"$(nproc)" intl && \
|
2019-08-16 19:38:26 +03:00
|
|
|
# Install zip and gd
|
|
|
|
apk add --no-cache libzip-dev zlib-dev libpng-dev && \
|
2020-11-02 11:02:00 +03:00
|
|
|
docker-php-ext-install -j"$(nproc)" zip gd && \
|
|
|
|
# Install gmp
|
|
|
|
apk add --no-cache gmp-dev && \
|
|
|
|
docker-php-ext-install -j"$(nproc)" gmp
|
2019-08-16 19:38:26 +03:00
|
|
|
|
2020-05-05 22:58:23 +03:00
|
|
|
# Install sqlsrv driver
|
|
|
|
RUN if [ $(uname -m) == "x86_64" ]; then \
|
2021-05-23 10:05:04 +03:00
|
|
|
wget https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_${MS_ODBC_SQL_VERSION}-1_amd64.apk && \
|
|
|
|
apk add --allow-untrusted msodbcsql17_${MS_ODBC_SQL_VERSION}-1_amd64.apk && \
|
2020-11-02 11:24:14 +03:00
|
|
|
apk add --no-cache --virtual .phpize-deps ${PHPIZE_DEPS} unixodbc-dev && \
|
2021-01-30 11:45:47 +03:00
|
|
|
pecl install pdo_sqlsrv-${PDO_SQLSRV_VERSION} && \
|
2020-05-05 22:58:23 +03:00
|
|
|
docker-php-ext-enable pdo_sqlsrv && \
|
|
|
|
apk del .phpize-deps && \
|
2021-05-23 10:05:04 +03:00
|
|
|
rm msodbcsql17_${MS_ODBC_SQL_VERSION}-1_amd64.apk ; \
|
2020-05-05 22:58:23 +03:00
|
|
|
fi
|
2019-08-16 19:38:26 +03:00
|
|
|
|
2020-05-05 22:58:23 +03:00
|
|
|
# Install swoole
|
2020-11-02 11:24:14 +03:00
|
|
|
RUN apk add --no-cache --virtual .phpize-deps ${PHPIZE_DEPS} && \
|
2020-05-05 22:58:23 +03:00
|
|
|
pecl install swoole-${SWOOLE_VERSION} && \
|
|
|
|
docker-php-ext-enable swoole && \
|
|
|
|
apk del .phpize-deps
|
2020-03-21 10:56:48 +03:00
|
|
|
|
2020-05-16 11:39:47 +03:00
|
|
|
|
2019-08-16 19:38:26 +03:00
|
|
|
# Install shlink
|
2020-03-21 10:56:48 +03:00
|
|
|
FROM base as builder
|
2019-08-16 19:38:26 +03:00
|
|
|
COPY . .
|
2020-10-25 19:59:37 +03:00
|
|
|
COPY --from=composer:2 /usr/bin/composer ./composer.phar
|
2020-03-22 12:01:34 +03:00
|
|
|
RUN apk add --no-cache git && \
|
|
|
|
php composer.phar install --no-dev --optimize-autoloader --prefer-dist --no-progress --no-interaction && \
|
2020-03-21 18:11:56 +03:00
|
|
|
php composer.phar clear-cache && \
|
2020-03-22 12:01:34 +03:00
|
|
|
rm -r docker composer.* && \
|
2020-03-21 10:56:48 +03:00
|
|
|
sed -i "s/%SHLINK_VERSION%/${SHLINK_VERSION}/g" config/autoload/app_options.global.php
|
|
|
|
|
|
|
|
|
|
|
|
# Prepare final image
|
|
|
|
FROM base
|
|
|
|
LABEL maintainer="Alejandro Celaya <alejandro@alejandrocelaya.com>"
|
2019-08-16 19:38:26 +03:00
|
|
|
|
2020-03-21 10:56:48 +03:00
|
|
|
COPY --from=builder /etc/shlink .
|
2019-08-16 19:38:26 +03:00
|
|
|
RUN ln -s /etc/shlink/bin/cli /usr/local/bin/shlink
|
|
|
|
|
2020-10-03 12:49:25 +03:00
|
|
|
# Expose default swoole port
|
2019-08-16 19:38:26 +03:00
|
|
|
EXPOSE 8080
|
|
|
|
|
|
|
|
# Expose params config dir, since the user is expected to provide custom config from there
|
2021-09-11 20:46:52 +03:00
|
|
|
#VOLUME /etc/shlink/config/params
|
2021-03-30 19:18:38 +03:00
|
|
|
# Expose data dir to allow persistent runtime data and SQLite db
|
2021-09-11 20:46:52 +03:00
|
|
|
#VOLUME /etc/shlink/data
|
2019-08-16 19:38:26 +03:00
|
|
|
|
|
|
|
# Copy config specific for the image
|
|
|
|
COPY docker/docker-entrypoint.sh docker-entrypoint.sh
|
|
|
|
COPY docker/config/shlink_in_docker.local.php config/autoload/shlink_in_docker.local.php
|
2019-12-18 16:54:48 +03:00
|
|
|
COPY docker/config/php.ini ${PHP_INI_DIR}/conf.d/
|
2019-08-16 19:38:26 +03:00
|
|
|
|
2021-06-14 01:51:16 +03:00
|
|
|
# Change the ownership of /etc/shlink/data to be writable, then change the user to non-root
|
2021-08-01 09:55:39 +03:00
|
|
|
# FIXME Disabled for now, as it conflicts with ENABLE_PERIODIC_VISIT_LOCATE, which is used to configure a cron as root.
|
|
|
|
# Ref: https://github.com/shlinkio/shlink/issues/1132
|
|
|
|
#RUN chown 1001 /etc/shlink/data
|
|
|
|
#RUN chown 1001 /etc/shlink/data/locks
|
|
|
|
#RUN chown 1001 /etc/shlink/data/proxies
|
|
|
|
#RUN chown 1001 /etc/shlink/data/cache
|
|
|
|
#RUN chown 1001 /etc/shlink/data/log
|
|
|
|
#USER 1001
|
2021-06-14 01:51:16 +03:00
|
|
|
|
2019-08-16 19:38:26 +03:00
|
|
|
ENTRYPOINT ["/bin/sh", "./docker-entrypoint.sh"]
|