Compare commits

..

1 Commits

Author SHA1 Message Date
292b116cdd
Add in-container nextcloud install
This increases the size of the container image, but reduces the reliance
on the external volume for loading application data. This couples the application
code to the container image rather than to the container state.
2024-04-10 23:32:56 -04:00
5 changed files with 67 additions and 54 deletions

View File

@ -1,20 +0,0 @@
REPOSITORY_PROXY = vcs.enp.one/skylab/nxcloud-proxy
REPOSITORY_SERVER = vcs.enp.one/skylab/nxcloud-server
.PHONY: help docs
# source: https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
help: ## List Makefile targets
$(info Makefile documentation)
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-10s\033[0m %s\n", $$1, $$2}'
image: ## Build image
podman build ./php-fpm --tag $(REPOSITORY_SERVER):latest
podman build ./nginx --tag $(REPOSITORY_PROXY):latest
push: image ## Build and publish image
podman login $(shell echo $(REPOSITORY_SERVER) | cut -d '/' -f 1)
podman push $(REPOSITORY_SERVER):latest
podman login $(shell echo $(REPOSITORY_PROXY) | cut -d '/' -f 1)
podman push $(REPOSITORY_PROXY):latest

View File

@ -2,70 +2,79 @@
services:
nginx:
container_name: nginx-nextcloud
build: ./nginx
ports:
- 8080:80
- 80:80
- 443:443
volumes:
- ./appdata/application:/var/www/html
- ./appdata/data:/data
- ${NEXTCLOUD_DIR}:/var/www/html
- ${DATA_DIR}:/data
environment:
- NEXTCLOUD_PHP_FPM_HOST=nxcloud-server-1
- NEXTCLOUD_DOMAIN=localhost
- NEXTCLOUD_MAX_UPLOAD_SIZE=4G
- NEXTCLOUD_PHP_FPM_HOST=${NEXTCLOUD_PHP_FPM_HOST}
- NEXTCLOUD_DOMAIN=${NEXTCLOUD_DOMAIN}
- NEXTCLOUD_MAX_UPLOAD_SIZE=${NEXTCLOUD_MAX_UPLOAD_SIZE}
networks:
- nextcloud
depends_on:
- server
- redis
- mariadb
- php-fpm-nextcloud
- redis-nextcloud
- mariadb-nextcloud
server:
php-fpm-nextcloud:
container_name: php-fpm-nextcloud
build:
context: ./php-fpm
tags:
- vcs.enp.one/skylab/nextcloud-server:latest
- localhost/php-fpm-nextcloud:latest
volumes:
- ./appdata/application:/var/www/html
- ./appdata/data:/data
- ${NEXTCLOUD_DIR}:/var/www/html
- ${DATA_DIR}:/data
networks:
- nextcloud
mariadb:
mariadb-nextcloud:
container_name: mariadb-nextcloud
image: mariadb
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
restart: always
volumes:
- ./appdata/database:/var/lib/mysql
- ./mariadb:/var/lib/mysql
environment:
- MARIADB_RANDOM_ROOT_PASSWORD=true
- MYSQL_PASSWORD=nextcloud
- MYSQL_ROOT_PASSWORD=${MARIADB_ROOT_PASS}
- MYSQL_PASSWORD=${MARIADB_PASS}
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
networks:
- nextcloud
redis:
redis-nextcloud:
container_name: redis-nextcloud
# image: redis:latest
# keydb is a fork and drop-in replacement for Redis
image: eqalpha/keydb
restart: unless-stopped
networks:
- nextcloud
cron:
image: vcs.enp.one/skylab/nextcloud-server:latest
cron-nextcloud:
container_name: cron-nextcloud
image: localhost/php-fpm-nextcloud:latest
restart: unless-stopped
command:
- bash
- -c
- "'while true; do php --define apc.enable_cli=1 /var/www/html/cron.php; sleep 300; done'"
- "'while true; do php --define apc.enable_cli=1 /var/www/html/cron.php && sleep 300; done'"
networks:
- nextcloud
user: www-data
entrypoint:
- /bin/bash
volumes:
- ./appdata/application:/var/www/html
- ./appdata/data:/data
- ${NEXTCLOUD_DIR}:/var/www/html
- ${DATA_DIR}:/data
depends_on:
- server
- redis
- mariadb
- php-fpm-nextcloud
- redis-nextcloud
- mariadb-nextcloud
networks:
nextcloud:

View File

@ -1,10 +1,28 @@
FROM docker.io/library/nginx:latest
FROM docker.io/library/debian:latest AS unpack
RUN apt-get update --yes
RUN apt-get install unzip --yes
RUN mkdir --parents /download
WORKDIR /download
ADD https://download.nextcloud.com/server/releases/latest.zip /download/latest.zip
RUN unzip latest.zip
FROM docker.io/library/nginx:latest AS final
ENV NEXTCLOUD_DOMAIN=example.com
ENV NEXTCLOUD_PHP_FPM_HOST=server:9000
ENV NEXTCLOUD_PHP_FPM_HOST=php-fpm-nextcloud:9000
ENV NEXTCLOUD_MAX_UPLOAD_SIZE=512M
ADD nginx.conf.template /nginx.conf.template
ADD docker-entrypoint.sh /docker-entrypoint.sh
RUN mkdir --parents /var/www/html
WORKDIR /var/www/html
COPY --from=unpack /download/nextcloud /var/www/html/nextcloud
RUN chown -R root:root nextcloud/
RUN chmod -R 0755 nextcloud/
ENTRYPOINT ["sh", "-c", "/docker-entrypoint.sh"]

View File

@ -71,10 +71,10 @@ http {
# and include that list explicitly or add the file extension
# only for Nextcloud like below:
include mime.types;
#types {
# text/javascript js mjs;
# application/wasm wasm;
#}
types {
text/javascript js mjs;
application/wasm wasm;
}
# Specify how to handle directories -- specifying `/index.php$request_uri`
# here as the fallback means that Nginx always exhibits the desired behaviour

View File

@ -15,6 +15,7 @@ RUN apt-get update && apt-get install -y \
libldap2-dev \
libsmbclient-dev \
libcurl4-openssl-dev \
unzip \
&& rm -rf /var/lib/apt/lists/*
# Download and install the docker-php-extension-installer script
@ -64,6 +65,11 @@ COPY ./php.ini-production /usr/local/etc/php/php.ini
# Set the working directory
WORKDIR /var/www/html
RUN curl -sSLo latest.zip https://download.nextcloud.com/server/releases/latest.zip
RUN unzip latest.zip
RUN rm latest.zip
RUN chown -R www-data:www-data nextcloud/
# Expose port 9000 for PHP-FPM
# EXPOSE 9000