diff --git a/Dockerfile b/Dockerfile index b498029..4fc2e86 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,11 @@ # # Builder # -FROM abiosoft/caddy:builder as builder +FROM idearium/caddy-builder:1.0.3 as builder ARG version="1.0.3" -ARG plugins="git,cors,realip,expires,cache,cloudflare" -ARG enable_telemetry="true" +ARG plugins="expires,minify,realip,route53" +ARG enable_telemetry="false" # process wrapper RUN go get -v github.com/abiosoft/parent diff --git a/Dockerfile-no-stats b/Dockerfile-no-stats deleted file mode 100644 index f45251f..0000000 --- a/Dockerfile-no-stats +++ /dev/null @@ -1,54 +0,0 @@ -# -# Builder -# -FROM abiosoft/caddy:builder as builder - -ARG version="1.0.3" -ARG plugins="git,cors,realip,expires,cache,cloudflare" - -# process wrapper -RUN go get -v github.com/abiosoft/parent - -RUN VERSION=${version} PLUGINS=${plugins} ENABLE_TELEMETRY=false /bin/sh /usr/bin/builder.sh - -# -# Final stage -# -FROM alpine:3.10 -LABEL maintainer "Abiola Ibrahim " - -ARG version="1.0.3" -LABEL caddy_version="$version" - -# Let's Encrypt Agreement -ENV ACME_AGREE="false" - -# Telemetry Stats -ENV ENABLE_TELEMETRY="false" - -RUN apk add --no-cache \ - ca-certificates \ - git \ - mailcap \ - openssh-client \ - tzdata - -# install caddy -COPY --from=builder /install/caddy /usr/bin/caddy - -# validate install -RUN /usr/bin/caddy -version -RUN /usr/bin/caddy -plugins - -EXPOSE 80 443 2015 -VOLUME /root/.caddy /srv -WORKDIR /srv - -COPY Caddyfile /etc/Caddyfile -COPY index.html /srv/index.html - -# install process wrapper -COPY --from=builder /go/bin/parent /bin/parent - -ENTRYPOINT ["/bin/parent", "caddy"] -CMD ["--conf", "/etc/Caddyfile", "--log", "stdout", "--agree=$ACME_AGREE"] diff --git a/README.md b/README.md index 218efa4..daf7930 100644 --- a/README.md +++ b/README.md @@ -1,170 +1,12 @@ # caddy -A [Docker](https://docker.com) image for [Caddy](https://caddyserver.com). This image includes [git](https://caddyserver.com/docs/http.git), [cors](https://caddyserver.com/docs/http.cors), [realip](https://caddyserver.com/docs/http.realip), [expires](https://caddyserver.com/docs/http.expires), [cache](https://caddyserver.com/docs/http.cache) and [cloudflare](https://caddyserver.com/docs/tls.dns.cloudflare) plugins. +Forked from [Caddy](https://hub.docker.com/r/abiosoft/caddy) to include a versioned builder. -Plugins can be configured via the [`plugins` build arg](#custom-plugins). +The default set of plugins has been updated to: -[![](https://images.microbadger.com/badges/image/abiosoft/caddy.svg)](https://microbadger.com/images/abiosoft/caddy "Get your own image badge on microbadger.com") -[![](https://img.shields.io/badge/version-1.0.3-blue.svg)](https://github.com/caddyserver/caddy/tree/v1.0.3) +- [expires](https://caddyserver.com/docs/http.expires) +- [minify](https://caddyserver.com/docs/http.minify) +- [realip](https://caddyserver.com/docs/http.realip) +- [route53](https://caddyserver.com/docs/tls.dns.route53) -Check [abiosoft/caddy:builder](https://github.com/abiosoft/caddy-docker/blob/master/BUILDER.md) for generating cross-platform Caddy binaries. - -### License - -This image is built from [source code](https://github.com/caddyserver/caddy). As such, it is subject to the project's [Apache 2.0 license](https://github.com/caddyserver/caddy/blob/baf6db5b570e36ea2fee30d50f879255a5895370/LICENSE.txt), but it neither contains nor is subject to [the EULA for Caddy's official binary distributions](https://github.com/caddyserver/caddy/blob/545fa844bbd188c1e5bff6926e5c410e695571a0/dist/EULA.txt). - -### Let's Encrypt Subscriber Agreement - -Caddy may prompt to agree to [Let's Encrypt Subscriber Agreement](https://letsencrypt.org/documents/2017.11.15-LE-SA-v1.2.pdf). This is configurable with `ACME_AGREE` environment variable. Set it to true to agree. `ACME_AGREE=true`. - -### Telemetry Stats - -Starting from `v0.11.0`, [Telemetry stats](https://caddyserver.com/docs/telemetry) are submitted to Caddy by default. To use Caddy without telemetry, use the `:no-stats` or `:-no-stats` tags. e.g. `:0.11.0-no-stats`, `:0.11.0-php-no-stats`. - -## Getting Started - -```sh -$ docker run -d -p 2015:2015 abiosoft/caddy -``` - -Point your browser to `http://127.0.0.1:2015`. - -> Be aware! If you don't bind mount the location certificates are saved to, you may hit Let's Encrypt rate [limits](https://letsencrypt.org/docs/rate-limits/) rending further certificate generation or renewal disallowed (for a fixed period)! See "Saving Certificates" below! - -### Saving Certificates - -Save certificates on host machine to prevent regeneration every time container starts. -Let's Encrypt has [rate limit](https://community.letsencrypt.org/t/rate-limits-for-lets-encrypt/6769). - -```sh -$ docker run -d \ - -v $(pwd)/Caddyfile:/etc/Caddyfile \ - -v $HOME/.caddy:/root/.caddy \ - -p 80:80 -p 443:443 \ - abiosoft/caddy -``` - -Here, `/root/.caddy` is the location _inside_ the container where caddy will save certificates. - -Additionally, you can use an _environment variable_ to define the exact location caddy should save generated certificates: - -```sh -$ docker run -d \ - -e "CADDYPATH=/etc/caddycerts" \ - -v $HOME/.caddy:/etc/caddycerts \ - -p 80:80 -p 443:443 \ - abiosoft/caddy -``` - -Above, we utilize the `CADDYPATH` environment variable to define a different location inside the container for -certificates to be stored. This is probably the safest option as it ensures any future docker image changes don't interfere with your ability to save certificates! - -### PHP - -`:[-]php` variant of this image bundles PHP-FPM alongside essential php extensions and [composer](https://getcomposer.org). e.g. `:php`, `:0.10.14-php` - -```sh -$ docker run -d -p 2015:2015 abiosoft/caddy:php -``` - -Point your browser to `http://127.0.0.1:2015` and you will see a php info page. - -##### Local php source - -Replace `/path/to/php/src` with your php sources directory. - -```sh -$ docker run -d -v /path/to/php/src:/srv -p 2015:2015 abiosoft/caddy:php -``` - -Point your browser to `http://127.0.0.1:2015`. - -##### Note - -Your `Caddyfile` must include the line `on startup php-fpm7`. For Caddy to be PID 1 in the container, php-fpm7 could not be started. - -### Using git sources - -Caddy can serve sites from git repository using [git](https://caddyserver.com/docs/http.git) plugin. - -##### Create Caddyfile - -Replace `github.com/abiosoft/webtest` with your repository. - -```sh -$ printf "0.0.0.0\nroot src\ngit github.com/abiosoft/webtest" > Caddyfile -``` - -##### Run the image - -```sh -$ docker run -d -v $(pwd)/Caddyfile:/etc/Caddyfile -p 2015:2015 abiosoft/caddy -``` - -Point your browser to `http://127.0.0.1:2015`. - -## Custom plugins - -You can build a docker image with custom plugins by specifying `plugins` build arg as shown in the example below. - -``` -docker build --build-arg \ - plugins=git,linode \ - github.com/abiosoft/caddy-docker.git -``` - -## Usage - -#### Default Caddyfile - -The image contains a default Caddyfile. - -``` -0.0.0.0 -browse -fastcgi / 127.0.0.1:9000 php # php variant only -on startup php-fpm7 # php variant only -``` - -The last 2 lines are only present in the php variant. - -#### Paths in container - -Caddyfile: `/etc/Caddyfile` - -Sites root: `/srv` - -#### Using local Caddyfile and sites root - -Replace `/path/to/Caddyfile` and `/path/to/sites/root` accordingly. - -```sh -$ docker run -d \ - -v /path/to/sites/root:/srv \ - -v path/to/Caddyfile:/etc/Caddyfile \ - -p 2015:2015 \ - abiosoft/caddy -``` - -### Let's Encrypt Auto SSL - -**Note** that this does not work on local environments. - -Use a valid domain and add email to your Caddyfile to avoid prompt at runtime. -Replace `mydomain.com` with your domain and `user@host.com` with your email. - -``` -mydomain.com -tls user@host.com -``` - -##### Run the image - -You can change the the ports if ports 80 and 443 are not available on host. e.g. 81:80, 444:443 - -```sh -$ docker run -d \ - -v $(pwd)/Caddyfile:/etc/Caddyfile \ - -p 80:80 -p 443:443 \ - abiosoft/caddy -``` +For more info view the official [README](https://github.com/abiosoft/caddy-docker). diff --git a/php/Caddyfile b/php/Caddyfile deleted file mode 100644 index ddcced4..0000000 --- a/php/Caddyfile +++ /dev/null @@ -1,11 +0,0 @@ -0.0.0.0 - -browse - -fastcgi / 127.0.0.1:9000 php - -on startup php-fpm7 - -log stdout - -errors stdout \ No newline at end of file diff --git a/php/Dockerfile b/php/Dockerfile deleted file mode 100644 index 5c2935c..0000000 --- a/php/Dockerfile +++ /dev/null @@ -1,113 +0,0 @@ -# -# Builder -# -FROM abiosoft/caddy:builder as builder - -ARG version="1.0.3" -ARG plugins="git,cors,realip,expires,cache,cloudflare" -ARG enable_telemetry="true" - -# Process Wrapper -RUN go get -v github.com/abiosoft/parent - -RUN VERSION=${version} PLUGINS=${plugins} ENABLE_TELEMETRY=${enable_telemetry} /bin/sh /usr/bin/builder.sh - -# -# Final Stage -# -FROM alpine:3.10 -LABEL maintainer "Abiola Ibrahim " - -ARG version="1.0.3" -LABEL caddy_version="$version" - -# PHP www-user UID and GID -ARG PUID="1000" -ARG PGID="1000" - -# Let's Encrypt Agreement -ENV ACME_AGREE="false" - -# Telemetry Stats -ENV ENABLE_TELEMETRY="$enable_telemetry" - -RUN apk add --no-cache \ - ca-certificates \ - curl \ - git \ - mailcap \ - openssh-client \ - php7-fpm \ - tar \ - tzdata - -# Essential PHP Extensions -RUN apk add --no-cache \ - php7-bcmath \ - php7-ctype \ - php7-curl \ - php7-dom \ - php7-exif \ - php7-fileinfo \ - php7-gd \ - php7-iconv \ - php7-json \ - php7-mbstring \ - php7-mysqli \ - php7-opcache \ - php7-openssl \ - php7-pdo \ - php7-pdo_mysql \ - php7-pdo_pgsql \ - php7-pdo_sqlite \ - php7-pgsql \ - php7-phar \ - php7-session \ - php7-simplexml \ - php7-sqlite3 \ - php7-tokenizer \ - php7-xml \ - php7-xmlreader \ - php7-xmlwriter \ - php7-zip - -# Symlink php7 to php -RUN ln -sf /usr/bin/php7 /usr/bin/php - -# Symlink php-fpm7 to php-fpm -RUN ln -sf /usr/bin/php-fpm7 /usr/bin/php-fpm - -# Add a PHP www-user instead of nobody -RUN addgroup -g ${PGID} www-user && \ - adduser -D -H -u ${PUID} -G www-user www-user && \ - sed -i "s|^user = .*|user = www-user|g" /etc/php7/php-fpm.d/www.conf && \ - sed -i "s|^group = .*|group = www-user|g" /etc/php7/php-fpm.d/www.conf - -# Composer -RUN curl --silent --show-error --fail --location \ - --header "Accept: application/tar+gzip, application/x-gzip, application/octet-stream" \ - "https://getcomposer.org/installer" \ - | php -- --install-dir=/usr/bin --filename=composer - -# Allow environment variable access -RUN echo "clear_env = no" >> /etc/php7/php-fpm.conf - -# Install Caddy -COPY --from=builder /install/caddy /usr/bin/caddy - -# Validate install -RUN /usr/bin/caddy -version -RUN /usr/bin/caddy -plugins - -EXPOSE 80 443 2015 -VOLUME /root/.caddy /srv -WORKDIR /srv - -COPY Caddyfile /etc/Caddyfile -COPY index.php /srv/index.php - -# Install Process Wrapper -COPY --from=builder /go/bin/parent /bin/parent - -ENTRYPOINT ["/bin/parent", "caddy"] -CMD ["--conf", "/etc/Caddyfile", "--log", "stdout", "--agree=$ACME_AGREE"] diff --git a/php/Dockerfile-no-stats b/php/Dockerfile-no-stats deleted file mode 100644 index e81b372..0000000 --- a/php/Dockerfile-no-stats +++ /dev/null @@ -1,112 +0,0 @@ -# -# Builder -# -FROM abiosoft/caddy:builder as builder - -ARG version="1.0.3" -ARG plugins="git,cors,realip,expires,cache,cloudflare" - -# Process Wrapper -RUN go get -v github.com/abiosoft/parent - -RUN VERSION=${version} PLUGINS=${plugins} ENABLE_TELEMETRY=false /bin/sh /usr/bin/builder.sh - -# -# Final Stage -# -FROM alpine:3.10 -LABEL maintainer "Abiola Ibrahim " - -ARG version="1.0.3" -LABEL caddy_version="$version" - -# PHP www-user UID and GID -ARG PUID="1000" -ARG PGID="1000" - -# Let's Encrypt Agreement -ENV ACME_AGREE="false" - -# Telemetry Stats -ENV ENABLE_TELEMETRY="false" - -RUN apk add --no-cache \ - ca-certificates \ - curl \ - git \ - mailcap \ - openssh-client \ - php7-fpm \ - tar \ - tzdata - -# Essential PHP Extensions -RUN apk add --no-cache \ - php7-bcmath \ - php7-ctype \ - php7-curl \ - php7-dom \ - php7-exif \ - php7-fileinfo \ - php7-gd \ - php7-iconv \ - php7-json \ - php7-mbstring \ - php7-mysqli \ - php7-opcache \ - php7-openssl \ - php7-pdo \ - php7-pdo_mysql \ - php7-pdo_pgsql \ - php7-pdo_sqlite \ - php7-pgsql \ - php7-phar \ - php7-session \ - php7-simplexml \ - php7-sqlite3 \ - php7-tokenizer \ - php7-xml \ - php7-xmlreader \ - php7-xmlwriter \ - php7-zip - -# Symlink php7 to php -RUN ln -sf /usr/bin/php7 /usr/bin/php - -# Symlink php-fpm7 to php-fpm -RUN ln -sf /usr/bin/php-fpm7 /usr/bin/php-fpm - -# Add a PHP www-user instead of nobody -RUN addgroup -g ${PGID} www-user && \ - adduser -D -H -u ${PUID} -G www-user www-user && \ - sed -i "s|^user = .*|user = www-user|g" /etc/php7/php-fpm.d/www.conf && \ - sed -i "s|^group = .*|group = www-user|g" /etc/php7/php-fpm.d/www.conf - -# Composer -RUN curl --silent --show-error --fail --location \ - --header "Accept: application/tar+gzip, application/x-gzip, application/octet-stream" \ - "https://getcomposer.org/installer" \ - | php -- --install-dir=/usr/bin --filename=composer - -# Allow environment variable access -RUN echo "clear_env = no" >> /etc/php7/php-fpm.conf - -# Install Caddy -COPY --from=builder /install/caddy /usr/bin/caddy - -# Validate install -RUN /usr/bin/caddy -version -RUN /usr/bin/caddy -plugins - -EXPOSE 80 443 2015 -VOLUME /root/.caddy /srv -WORKDIR /srv - -COPY Caddyfile /etc/Caddyfile -COPY index.php /srv/index.php - -# Install Process Wrapper -COPY --from=builder /go/bin/parent /bin/parent - -ENTRYPOINT ["/bin/parent", "caddy"] -CMD ["--conf", "/etc/Caddyfile", "--log", "stdout", "--agree=$ACME_AGREE"] diff --git a/php/index.php b/php/index.php deleted file mode 100644 index dba98d7..0000000 --- a/php/index.php +++ /dev/null @@ -1,22 +0,0 @@ - - - -Caddy - - - -

Caddy web server.

-

If you see PHP info below, Caddy with PHP container works.

- -

More instructions about this image is here.

-

More instructions about Caddy is here.

- - - \ No newline at end of file