diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..4759780 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,74 @@ +--- +name: Deploy + +on: + push: + tags: + - "*" + workflow_dispatch: + +jobs: + deployment: + permissions: + packages: write + environment: deploy + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for GUI Docker + id: meta_gui + uses: docker/metadata-action@v5 + with: + images: ghcr.io/openconext/openconext-stats/stats-gui + flavor: | + latest=false + tags: | + type=ref,event=tag + type=raw,event=tag,value=latest + type=semver,event=tag,pattern={{version}} + type=raw,event=workflow_dispatch,value=snapshot + + - name: Extract metadata (tags, labels) for Server Docker + id: meta_server + uses: docker/metadata-action@v5 + with: + images: ghcr.io/openconext/openconext-stats/stats-server + flavor: | + latest=false + tags: | + type=ref,event=tag + type=raw,event=tag,value=latest + type=semver,event=tag,pattern={{version}} + type=raw,event=workflow_dispatch,value=snapshot + + - name: Build and push the manage gui image + uses: docker/build-push-action@v5 + with: + context: . + file: docker/Dockerfile.frontend + platforms: linux/amd64 + push: true + tags: ${{ steps.meta_gui.outputs.tags }} + labels: ${{ steps.meta_gui.outputs.labels }} + + - name: Build and push the manage server image + uses: docker/build-push-action@v5 + with: + context: . + file: docker/Dockerfile.server + platforms: linux/amd64 + push: true + tags: ${{ steps.meta_server.outputs.tags }} + labels: ${{ steps.meta_server.outputs.labels }} diff --git a/docker/Dockerfile.frontend b/docker/Dockerfile.frontend new file mode 100644 index 0000000..b3d1250 --- /dev/null +++ b/docker/Dockerfile.frontend @@ -0,0 +1,15 @@ +FROM node:20-slim as build +WORKDIR /var/www/html +COPY client/ /var/www/html/ +RUN yarn install +RUN yarn build + +FROM ghcr.io/openconext/openconext-basecontainers/apache2:latest +RUN apt update && \ + apt -y install libapache2-mod-auth-openidc && \ + apt autoremove -y && \ + apt clean && \ + apt autoclean && \ + rm -rf /var/lib/apt/lists/* + +COPY --from=build /var/www/html/build/ /var/www/html/public/ diff --git a/docker/Dockerfile.server b/docker/Dockerfile.server new file mode 100644 index 0000000..ac1ee53 --- /dev/null +++ b/docker/Dockerfile.server @@ -0,0 +1,22 @@ +FROM python:3.9-slim-buster as build +COPY requirements/base.txt / +ENV DEBIAN_FRONTEND noninteractive +RUN apt clean && apt autoclean && apt update && \ + apt install -y --no-install-recommends pkg-config default-libmysqlclient-dev build-essential +RUN pip install -r /base.txt + + +FROM python:3.9-slim-buster +WORKDIR /app +ENV DEBIAN_FRONTEND noninteractive +RUN apt -y update && \ + apt -y upgrade && \ + apt autoremove -y && \ + apt clean && \ + apt autoclean && \ + rm -rf /var/lib/apt/lists/* +COPY --from=build /usr/local/lib/python3.9/site-packages /usr/local/lib/python3.9/site-packages +COPY --from=build /usr/local/bin/gunicorn /usr/local/bin/gunicorn +COPY server/ /app/server/ +RUN mkdir /app/log/ +CMD ["/usr/local/bin/gunicorn", "--worker-class", "eventlet", "--workers", "8", "--bind", "0.0.0.0:80", "server.__main__:app"] diff --git a/requirements/base.txt b/requirements/base.txt index 5a1e3b5..1da6357 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -5,4 +5,6 @@ munch==4.0.0 isoweek==1.3.3 requests==2.31.0 mysqlclient==2.2.4 +gunicorn==21.2.0 +eventlet==0.36.0 werkzeug==3.0.2 \ No newline at end of file