Merge branch 'features/docker' into 'develop'

Features/docker

See merge request pleroma/admin-fe!82
This commit is contained in:
feld 2020-02-11 16:16:24 +00:00
commit 3978c103db
5 changed files with 186 additions and 11 deletions

30
.dockerignore Normal file
View file

@ -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

View file

@ -1,26 +1,97 @@
image: node:10
image: node:10-alpine
variables: &global_variables
DOCKER_DRIVER: overlay2
DOCKER_HOST: unix:///var/run/docker.sock
cache: &global_cache_policy
key: '$CI_COMMIT_SHORT_SHA'
policy: pull-push
paths:
- node_modules/
- build
stages:
- lint
- build
- test
- release
build:
stage: build
before_script: &before-build
- apk --no-cache add git
script:
- npm install
- npm run build:prod
artifacts: &release-artifacts
name: "admin-fe-$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA"
paths:
- dist/
lint:
stage: lint
script:
stage: test
before_script: &before-yarn
- apk --no-cache add git
- yarn cache clean
- yarn
cache:
key: '$CI_COMMIT_SHORT_SHA'
policy: pull
script:
- yarn lint
test:
stage: test
variables:
APT_CACHE_DIR: apt-cache
before_script: *before-yarn
cache:
key: '$CI_COMMIT_SHORT_SHA'
policy: pull
script:
- yarn
- yarn test
build:
stage: build
docker:
stage: release
image: docker:latest
cache: {}
dependencies: []
variables: &docker-variables
IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
IMAGE_TAG_SLUG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
IMAGE_TAG_LATEST: $CI_REGISTRY_IMAGE:latest
IMAGE_TAG_LATEST_STABLE: $CI_REGISTRY_IMAGE:stable
before_script: &before-docker
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker pull $IMAGE_TAG_SLUG || true
- export CI_JOB_TIMESTAMP=$(date --utc -Iseconds)
- export CI_VCS_REF=$CI_COMMIT_SHORT_SHA
allow_failure: true
script:
- yarn
- npm run build:prod
- docker build --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG -t $IMAGE_TAG_LATEST .
- docker push $IMAGE_TAG
- docker push $IMAGE_TAG_SLUG
- docker push $IMAGE_TAG_LATEST
tags:
- dind
only:
- develop@pleroma/admin-fe
- /^(features|ci)\/.*/@jp/admin-fe
docker-stable:
stage: release
image: docker:latest
cache: {}
dependencies: []
variables: *docker-variables
before_script: *before-docker
allow_failure: true
script:
- docker build --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG -t $IMAGE_TAG_LATEST_STABLE .
- docker push $IMAGE_TAG
- docker push $IMAGE_TAG_SLUG
- docker push $IMAGE_TAG_LATEST_STABLE
tags:
- dind
only:
- master@pleroma/admin-fe

38
Dockerfile Normal file
View file

@ -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;'

4
docker/docker-entrypoint.sh Executable file
View file

@ -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 "$@"

32
docker/nginx.conf.tpl Normal file
View file

@ -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;
}
}
}