fix: Correct data directory mapping in Dockerfile

This change fixes a runtime error where the application could not find its `config.php` file.

- The `Dockerfile` is updated to correctly handle the data directory.
- It now removes the source `data` directory and creates a symbolic link from `/app/www/data` to `/config/data`.
- This ensures the container is compatible with the existing data volume structure created by the official `linuxserver/grocy` image, resolving the "config.php not found" error.
This commit is contained in:
google-labs-jules[bot] 2025-08-15 10:59:11 +00:00
parent 5fd14f6367
commit 8b1d8815c0
3 changed files with 133 additions and 1 deletions

42
.github/workflows/docker-publish.yml vendored Normal file
View File

@ -0,0 +1,42 @@
name: Docker Publish
on:
push:
branches:
- master
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Log in to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Get version
id: version
run: echo "tag=$(jq -r .Version < version.json)" >> $GITHUB_OUTPUT
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v4
with:
images: nishizhen/anticlockwisegrocy
tags: |
type=raw,value=latest,enable={{is_default_branch}}
type=semver,pattern={{version}},value=v${{ steps.version.outputs.tag }}
type=semver,pattern={{major}}.{{minor}},value=v${{ steps.version.outputs.tag }}
type=semver,pattern={{major}},value=v${{ steps.version.outputs.tag }}
- name: Build and push Docker image
uses: docker/build-push-action@v4
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

69
Dockerfile Normal file
View File

@ -0,0 +1,69 @@
# 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/
# Remove the original data directory from the source and symlink it to the /config volume's data subdir.
# This ensures Grocy uses the persistent storage for its database and config,
# and is compatible with the volume structure from linuxserver/grocy.
RUN rm -rf /app/www/data && \
ln -s /config/data /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

View File

@ -36,7 +36,28 @@
对于有一定技术基础的用户,我们推荐使用 Docker 进行安装。这是最快、最稳定的方式。
&rarr; [查看 Docker 安装指南](https://hub.docker.com/r/linuxserver/grocy)
我们的 Docker 镜像基于本项目的源代码构建,默认使用中文界面,并已为您准备好一切。
1. **拉取镜像**
```bash
docker pull nishizhen/anticlockwisegrocy:latest
```
2. **运行容器**
```bash
docker run -d \
--name=anticlockwisegrocy \
-p 9283:80 \
-v /path/to/your/data:/config \
nishizhen/anticlockwisegrocy:latest
```
**请注意**
* `-p 9283:80`:将容器的 80 端口映射到您服务器的 9283 端口。您可以根据需要更改 `9283`
* `-v /path/to/your/data:/config`:将您的数据持久化存储在本地。请务必将 `/path/to/your/data` 替换为您服务器上的一个**真实路径**,例如 `/home/user/grocy_data`
3. **访问应用**
打开浏览器,访问 `http://<您的服务器IP>:9283`
默认登录用户为 `admin`,密码为 `admin`,请在登录后立即修改密码。
### 方式二:手动安装