12 Commits

Author SHA1 Message Date
Jan Wagner aa9ed8ea18 chore: update Nextcloud to 28.0.14 2024-12-13 11:19:21 +01:00
hoellen 2fc97b32a2 chore: update Nextcloud to 28.0.13 2024-12-06 03:34:15 +01:00
hoellen 0e84ada3d1 chore: update Nextcloud to 28.0.12 2024-11-07 19:43:20 +01:00
hoellen 0ed34272f4 fix: add otf loading in nginx config 2024-10-16 12:01:47 +02:00
waja da2e5d91a8 chore: update Nextcloud to 28.0.11 (#90) 2024-10-10 17:58:19 +02:00
Jan Wagner 0cf21d8b99 chore: update Nextcloud to 28.0.10 2024-09-13 05:37:55 +02:00
Jan Wagner 0dccbacce4 chore: update Nextcloud to 28.0.9 2024-08-21 10:05:25 +02:00
hoellen 78fde4ae34 chore: update Nextcloud to 28.0.8 2024-07-20 11:06:07 +02:00
Jan Wagner 3c7698f73d chore: update Nextcloud to 28.0.7 2024-06-25 15:04:09 +02:00
Jan Wagner 9901609c6b chore: update Nextcloud to 28.0.6 2024-05-23 23:08:27 +02:00
Jan Wagner 936f60c3d5 chore: Update to Alpine 3.20 2024-05-23 23:08:27 +02:00
Jan Wagner ab3bdd0e43 chore: update Nextcloud to 28.0.5 2024-04-26 05:48:53 +02:00
8 changed files with 79 additions and 92 deletions
+13 -27
View File
@@ -8,7 +8,7 @@ on:
- version-*
schedule:
# Build the image regularly (each Friday)
- cron: "23 04 * * 5"
- cron: '23 04 * * 5'
env:
REGISTRY: ghcr.io
@@ -25,7 +25,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v6
uses: actions/checkout@v2
- name: Extract version for tags
run: |
@@ -37,14 +37,16 @@ jobs:
- name: Install cosign
if: github.event_name != 'pull_request'
uses: sigstore/cosign-installer@v4.1.1
uses: sigstore/cosign-installer@main
with:
cosign-release: 'v2.2.2'
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
uses: docker/setup-buildx-action@v1
- name: Login to registry
if: github.event_name != 'pull_request'
uses: docker/login-action@v4
uses: docker/login-action@v1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.repository_owner }}
@@ -52,7 +54,7 @@ jobs:
- name: Set Docker metadata
id: meta
uses: docker/metadata-action@v6
uses: docker/metadata-action@v3
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
@@ -60,28 +62,12 @@ jobs:
${{ env.FULL_VERSION }}
${{ env.MAJOR_VERSION }}
- name: Build and export Docker image to Docker
id: build
uses: docker/build-push-action@v7
with:
load: true
tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:testing
context: .
- name: Test Docker image
id: test
run: |
docker run -d -p 8888:8888 --name nextcloud --rm ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:testing && \
sleep 5 && docker exec nextcloud occ status && \
nc -z localhost 8888
- name: Push Docker image
id: push
if: github.event_name != 'pull_request'
uses: docker/build-push-action@v7
- name: Build and push Docker image
id: build-and-push
uses: docker/build-push-action@v2
with:
context: .
push: true
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
@@ -89,4 +75,4 @@ jobs:
if: ${{ github.event_name != 'pull_request' }}
env:
COSIGN_EXPERIMENTAL: "true"
run: cosign sign --yes ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}@${{ steps.push.outputs.digest }}
run: cosign sign --yes ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}@${{ steps.build-and-push.outputs.digest }}
+11 -11
View File
@@ -3,27 +3,27 @@ name: scan
on:
schedule:
# Scan the image regularly (once a day)
- cron: "45 03 * * *"
- cron: '45 03 * * *'
jobs:
build:
name: Scan current image & report results
runs-on: "ubuntu-24.04"
runs-on: "ubuntu-20.04"
steps:
- name: Checkout code
uses: actions/checkout@v6
uses: actions/checkout@v2
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@v0.36.0
uses: aquasecurity/trivy-action@master
with:
image-ref: "ghcr.io/${{ github.actor }}/nextcloud"
format: "template"
template: "@/contrib/sarif.tpl"
output: "trivy-results.sarif"
severity: "CRITICAL,HIGH"
image-ref: 'ghcr.io/${{ github.actor }}/nextcloud'
format: 'template'
template: '@/contrib/sarif.tpl'
output: 'trivy-results.sarif'
severity: 'CRITICAL,HIGH'
vuln-type: "os"
- name: Upload Trivy scan results to GitHub Security tab
uses: github/codeql-action/upload-sarif@v3
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: "trivy-results.sarif"
sarif_file: 'trivy-results.sarif'
+16 -17
View File
@@ -1,24 +1,24 @@
# -------------- Build-time variables --------------
ARG NEXTCLOUD_VERSION=33.0.3
ARG PHP_VERSION=8.4
ARG NGINX_VERSION=1.28
ARG NEXTCLOUD_VERSION=28.0.14
ARG PHP_VERSION=8.2
ARG NGINX_VERSION=1.26
ARG ALPINE_VERSION=3.23
ARG HARDENED_MALLOC_VERSION=14
ARG SNUFFLEUPAGUS_VERSION=0.13.0
ARG ALPINE_VERSION=3.20
ARG HARDENED_MALLOC_VERSION=11
ARG SNUFFLEUPAGUS_VERSION=0.10.0
ARG UID=1000
ARG GID=1000
# nextcloud-33.0.3.tar.bz2
ARG SHA256_SUM="5c1052f860b35aa56b24bc2613a6bea0c22313b9fbd02bb0247c1f0b9dbf77d2"
# nextcloud-28.0.14.tar.bz2
ARG SHA256_SUM="4a937f1882486426c9703e59ec4b293f621be8d080b7f85016f629903c3af336"
# Nextcloud Security <security@nextcloud.com> (D75899B9A724937A)
ARG GPG_FINGERPRINT="2880 6A87 8AE4 23A2 8372 792E D758 99B9 A724 937A"
# ---------------------------------------------------
### Build PHP base
FROM docker.io/library/php:${PHP_VERSION}-fpm-alpine${ALPINE_VERSION} AS base
FROM docker.io/library/php:${PHP_VERSION}-fpm-alpine${ALPINE_VERSION} as base
ARG SNUFFLEUPAGUS_VERSION
@@ -85,26 +85,25 @@ RUN apk -U upgrade \
### Build Hardened Malloc
ARG ALPINE_VERSION
FROM docker.io/library/alpine:${ALPINE_VERSION} AS build-malloc
FROM docker.io/library/alpine:${ALPINE_VERSION} as build-malloc
ARG HARDENED_MALLOC_VERSION
ARG CONFIG_NATIVE=false
ARG VARIANT=light
RUN apk --no-cache add build-base git openssh && cd /tmp \
&& wget -q -O - https://github.com/thestinger.keys | while read -r key; do echo "thestinger@github.com $key"; done > allowed_signers \
&& git config --global gpg.ssh.allowedSignersFile /tmp/allowed_signers && git init hardened_malloc && cd hardened_malloc \
&& git fetch --depth 1 https://github.com/GrapheneOS/hardened_malloc tag ${HARDENED_MALLOC_VERSION} \
&& git checkout FETCH_HEAD && git verify-tag $(git describe --tags) \
RUN apk --no-cache add build-base git gnupg && cd /tmp \
&& wget -q https://github.com/thestinger.gpg && gpg --import thestinger.gpg \
&& git clone --depth 1 --branch ${HARDENED_MALLOC_VERSION} https://github.com/GrapheneOS/hardened_malloc \
&& cd hardened_malloc && git verify-tag $(git describe --tags) \
&& make CONFIG_NATIVE=${CONFIG_NATIVE} VARIANT=${VARIANT}
### Fetch nginx
FROM docker.io/library/nginx:${NGINX_VERSION}-alpine${ALPINE_VERSION} AS nginx
FROM docker.io/library/nginx:${NGINX_VERSION}-alpine as nginx
### Build Nextcloud (production environemnt)
FROM base AS nextcloud
FROM base as nextcloud
COPY --from=nginx /usr/sbin/nginx /usr/sbin/nginx
COPY --from=nginx /etc/nginx /etc/nginx
+3 -3
View File
@@ -35,7 +35,7 @@ ___
- Includes **Snuffleupagus**, [a PHP security module](https://github.com/jvoisin/snuffleupagus).
- Includes a simple **built-in cron** system.
- Much easier to maintain thanks to multi-stages build.
- Includes imagick and smbclient for extended file handling and SMB/CIFS support.
- Does not include imagick, samba, etc. by default.
You're free to make your own image based on this one if you want a specific feature. Uncommon features won't be included as they can increase attack surface: this image intends to stay **minimal**, but **functional enough** to cover basic needs.
@@ -58,8 +58,8 @@ Verifying the signature isn't a requirement, and might not be as seamless as usi
## Tags
- `latest` : latest Nextcloud version
- `x` : latest Nextcloud x.x (e.g. `33`)
- `x.x.x` : Nextcloud x.x.x (e.g. `33.0.0`)
- `x` : latest Nextcloud x.x (e.g. `28`)
- `x.x.x` : Nextcloud x.x.x (e.g. `28.0.0`)
You can always have a glance [here](https://github.com/users/hoellen/packages/container/package/nextcloud).
Only the **latest stable version** will be maintained by myself.
+6 -12
View File
@@ -2,18 +2,13 @@
## Supported versions
All versions of the Nextcloud community version which still receive updates will be supported
All versions of the Nextcloud community version which still receive updates will be supported
and will receive the minor version updates and security patches.
| Version | Supported |
| ------- | ----------------------------- |
| 33. x | :white_check_mark: |
| 32. x | :white_check_mark: |
| 31. x | :negative_squared_cross_mark: |
| 30. x | :negative_squared_cross_mark: |
| 29. x | :negative_squared_cross_mark: |
| 28. x | :negative_squared_cross_mark: |
| 27. x | :negative_squared_cross_mark: |
| Version | Supported |
| ------- | ------------------ |
| 28. x | :white_check_mark: |
| 27. x | :white_check_mark: |
| 26. x | :negative_squared_cross_mark: |
| 25. x | :negative_squared_cross_mark: |
| 24. x | :negative_squared_cross_mark: |
@@ -29,10 +24,9 @@ Uploaded images are regularly scanned for [OS vulnerabilities](https://github.co
## Reporting a vulnerability
_Upstream_ vulnerabilities should be reported to _upstream_ projects according to their own security policies.
*Upstream* vulnerabilities should be reported to *upstream* projects according to their own security policies.
Regarding vulnerabilities specific to this project:
- Faulty configuration files
- Unsafe defaults
- Dependencies security updates
+28 -21
View File
@@ -1,21 +1,27 @@
map $http_x_forwarded_port $nc_port {
default "$http_x_forwarded_port";
'' "$server_port";
}
map $http_x_forwarded_proto $nc_proto {
default "$http_x_forwarded_proto";
'' "$scheme";
}
server {
listen 8888;
listen [::]:8888;
root /nextcloud;
# Emit relative redirects (protocol handled by reverse proxy)
absolute_redirect off;
fastcgi_buffers 64 4K;
fastcgi_hide_header X-Powered-By;
large_client_header_buffers 4 16k;
client_body_timeout 300s;
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "noindex, nofollow" always;
add_header X-XSS-Protection "0" always;
location = /robots.txt {
allow all;
@@ -24,18 +30,14 @@ server {
}
location ^~ /.well-known {
location = /.well-known/carddav { return 301 /remote.php/dav/; }
location = /.well-known/caldav { return 301 /remote.php/dav/; }
return 301 /index.php$request_uri;
location = /.well-known/carddav { return 301 $nc_proto://$host/remote.php/dav; }
location = /.well-known/caldav { return 301 $nc_proto://$host/remote.php/dav; }
location ^~ /.well-known { return 301 $nc_proto://$host/index.php$uri; }
try_files $uri $uri/ =404;
}
location / {
rewrite ^ /index.php$request_uri;
}
location /remote {
return 301 /remote.php$request_uri;
rewrite ^ /index.php$uri;
}
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/) {
@@ -46,9 +48,9 @@ server {
return 404;
}
location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+|.+\/richdocumentscode(_arm64)?\/proxy)\.php(?:$|\/) {
location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+|.+\/richdocumentscode\/proxy)\.php(?:$|\/) {
include /etc/nginx/fastcgi_params;
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param modHeadersAvailable true;
@@ -59,20 +61,25 @@ server {
fastcgi_read_timeout 1200;
}
location ~ ^/(?:updater|ocs-provider)(?:$|/) {
location ~ ^\/(?:updater|ocs-provider)(?:$|\/) {
try_files $uri/ =404;
index index.php;
}
location ~ \.(?:css|js|mjs|svg|gif|ico|jpg|jpeg|png|webp|wasm|tflite|map|ogg|flac|mp4|webm)$ {
try_files $uri /index.php$request_uri;
location ~ \.(?:css|js|mjs|svg|gif|png|jpg|ico|wasm|tflite|map|ogg|flac)$ {
try_files $uri /index.php$uri$is_args$args;
expires 6M;
access_log off;
}
location ~ \.(otf|woff2?)$ {
try_files $uri /index.php$request_uri;
location ~ \.(otf|woff2)?$ {
try_files $uri /index.php$uri$is_args$args;
expires 7d;
access_log off;
}
location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap)$ {
try_files $uri /index.php$uri$is_args$args;
access_log off;
}
}
+1 -1
View File
@@ -34,4 +34,4 @@ else
fi
# Run processes
exec /usr/bin/s6-svscan /etc/s6.d
exec /bin/s6-svscan /etc/s6.d
@@ -1,6 +1,7 @@
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.fast_shutdown=1
opcache.memory_consumption=<OPCACHE_MEM_SIZE>
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000