diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml new file mode 100644 index 00000000..cb760b9a --- /dev/null +++ b/.github/workflows/docker-publish.yml @@ -0,0 +1,33 @@ +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: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v4 + with: + images: nishizhen/anticlockwisegrocy + + - 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 }} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..c24c3728 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,67 @@ +# 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 diff --git a/README.md b/README.md index 3c2f7d0e..4851d3da 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,28 @@ 对于有一定技术基础的用户,我们推荐使用 Docker 进行安装。这是最快、最稳定的方式。 -→ [查看 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`,请在登录后立即修改密码。 ### 方式二:手动安装