grocy/Dockerfile
google-labs-jules[bot] 2a6efff2e4 feat: Add Dockerfile and GitHub Actions for automated publishing
This change introduces a comprehensive Dockerfile and a GitHub Actions workflow to build and publish a custom Docker image from the project's source code.

- A new `Dockerfile` has been added. It builds the application from the local source, installing all necessary dependencies, ensuring that any modifications to the codebase are included in the final image. This approach is consistent with the build process of `linuxserver/grocy`.
- The Docker image is configured to use Chinese (`zh_CN`) as the default language via the `GROCY_DEFAULT_LOCALE` environment variable.
- A GitHub Actions workflow is added to `.github/workflows/docker-publish.yml`. It automates the process of building and publishing the image to `nishizhen/anticlockwisegrocy` on Docker Hub whenever a push is made to the `master` branch.
- The `README.md` has been updated to reflect the new Docker image and provide correct instructions for its use.
2025-08-15 10:18:31 +00:00

68 lines
2.1 KiB
Docker

# Use the same base image as linuxserver/grocy for consistency
FROM ghcr.io/linuxserver/baseimage-alpine-nginx:3.21
# Set the default language to Chinese
ENV GROCY_DEFAULT_LOCALE=zh_CN
# Install build and runtime dependencies, same as linuxserver/grocy
RUN \
echo "**** install build packages ****" && \
apk add --no-cache --virtual=build-dependencies \
git \
yarn \
composer && \
echo "**** install runtime packages ****" && \
apk add --no-cache \
php83-gd \
php83-intl \
php83-ldap \
php83-opcache \
php83-pdo \
php83-pdo_sqlite \
php83-tokenizer \
php83-fileinfo \
php83-ctype \
php83-zlib \
php83-mbstring && \
echo "**** configure php-fpm to pass env vars ****" && \
sed -E -i 's/^;?clear_env ?=.*$/clear_env = no/g' /etc/php83/php-fpm.d/www.conf && \
grep -qxF 'clear_env = no' /etc/php83/php-fpm.d/www.conf || echo 'clear_env = no' >> /etc/php83/php-fpm.d/www.conf
# Set up the application directory
RUN mkdir -p /app/www/
# Copy the application source code into the container
# We are in the root of the project, so this copies everything
COPY . /app/www/
# Set correct permissions for the web server to write to the data directory
# The base image's init system will set ownership for /app, but let's ensure permissions are correct.
RUN chmod -R 777 /app/www/data
# Install dependencies and perform cleanup
RUN \
echo "**** install composer packages ****" && \
composer install -d /app/www --no-dev --optimize-autoloader && \
echo "**** install yarn packages ****" && \
cd /app/www && \
yarn --production && \
yarn cache clean && \
echo "**** cleanup build packages ****" && \
apk del --purge \
build-dependencies && \
rm -rf \
/tmp/* \
$HOME/.cache \
$HOME/.composer
# The linuxserver.io base image handles nginx config and service startup.
# It's pre-configured to serve a PHP application from /app/www/public.
# It also handles the PUID/PGID logic for permissions on /config volume.
# So, we don't need to copy nginx configs or write startup scripts.
# Expose standard web ports
EXPOSE 80 443
# Define the volume for persistent data
VOLUME /config