diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..8841fdb7 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,30 @@ +# block everything +** + +# allowed files +!AGPL-3 +!CHANGELOG.md +!README.md +!README.png +!.babelrc +!.eslintignore +!.eslintrc.js +!.postcssrc.js +!favicon.ico +!index.html +!package.json +!yarn.lock + +# allowed subdirectories +!/build/** +!/config/** +!/docker/** +!/public/** +!/static/** +!/src/** + +# blocked subdirectory files +**/*.log +**/*~ +**/.DS_Store +**/Thumbs.db diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..fef057d9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,38 @@ +FROM node:10-alpine as build + +COPY . . + +RUN apk --no-cache add git && \ + npm install && \ + npm run build:prod + +FROM nginx:mainline-alpine + +LABEL maintainer="ops@pleroma.social" \ + org.opencontainers.image.title="pleroma-adminfe" \ + org.opencontainers.image.description="Pleroma-adminfe for Docker" \ + org.opencontainers.image.authors="ops@pleroma.social" \ + org.opencontainers.image.vendor="pleroma.social" \ + org.opencontainers.image.documentation="https://git.pleroma.social/pleroma/pleroma-adminfe" \ + org.opencontainers.image.licenses="AGPL-3.0" \ + org.opencontainers.image.url="https://pleroma.social" \ + org.opencontainers.image.revision=$VCS_REF \ + org.opencontainers.image.created=$BUILD_DATE + + +ARG DATA=/usr/share/nginx/html + +COPY --from=build /dist/ ${DATA} + +COPY ./docker/docker-entrypoint.sh /usr/local/bin/ + +COPY ./docker/nginx.conf.tpl /etc/nginx/nginx.conf.tpl + +RUN apk add --no-cache gettext + +EXPOSE 80 + +ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] + +CMD exec nginx -g 'daemon off;' + diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh new file mode 100755 index 00000000..eaf84fe0 --- /dev/null +++ b/docker/docker-entrypoint.sh @@ -0,0 +1,4 @@ +#!/bin/sh +set -e +envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < "/etc/nginx/nginx.conf.tpl" > "/etc/nginx/nginx.conf" +exec "$@" diff --git a/docker/nginx.conf.tpl b/docker/nginx.conf.tpl new file mode 100644 index 00000000..0f16dafa --- /dev/null +++ b/docker/nginx.conf.tpl @@ -0,0 +1,32 @@ +user nginx; +worker_processes 1; +error_log /var/log/nginx/error.log warn; +pid /tmp/nginx.pid; +events { + worker_connections 1024; +} +http { + client_body_temp_path /tmp/client_temp; + proxy_temp_path /tmp/proxy_temp_path; + fastcgi_temp_path /tmp/fastcgi_temp; + uwsgi_temp_path /tmp/uwsgi_temp; + scgi_temp_path /tmp/scgi_temp; + include /etc/nginx/mime.types; + default_type application/octet-stream; + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + access_log /var/log/nginx/access.log main; + sendfile on; + keepalive_timeout 65; + proxy_cache_path /tmp/pleroma-media-cache levels=1:2 keys_zone=pleroma_media_cache:10m max_size=10g + inactive=720m use_temp_path=off; + server { + listen 80; + server_name _; + root /usr/share/nginx/html; + location / { + try_files $uri $uri/ /index.html; + } + } +}