diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index 5b58b41..8f25ac3 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -1,48 +1,62 @@
-name: Docker
+name: "Docker"
on:
+ workflow_dispatch:
+
push:
- branches: master
+ branches: ["master"]
+
+ schedule:
+ - cron: "0 8 * * 1"
permissions:
contents: read
jobs:
- docker:
- runs-on: ubuntu-latest
-
- name: Docker (dockette/expose)
+ test:
+ name: "Test"
+ runs-on: "ubuntu-latest"
steps:
- - name: Checkout
+ - name: "Checkout"
uses: actions/checkout@v4
- - name: Login to DockerHub
- uses: docker/login-action@v3
- with:
- username: ${{ secrets.DOCKERHUB_USERNAME }}
- password: ${{ secrets.DOCKERHUB_TOKEN }}
-
- - name: Set up QEMU
- uses: docker/setup-qemu-action@v3
-
- - name: Set up Docker Buildx
+ - name: "Set up Docker Buildx"
uses: docker/setup-buildx-action@v3
- - name: Cache Docker layers
- uses: actions/cache@v4
+ - name: "Build image"
+ uses: docker/build-push-action@v6
with:
- path: /tmp/.buildx-cache
- key: ${{ runner.os }}-buildx-${{ github.sha }}
- restore-keys: |
- ${{ runner.os }}-buildx-
+ context: "."
+ load: true
+ tags: "dockette/expose"
+
+ - name: "Test image"
+ run: "make test"
+
+ build:
+ name: "Build"
+ needs: ["test"]
+ uses: dockette/.github/.github/workflows/docker.yml@master
+ secrets: inherit
+ with:
+ image: "dockette/expose"
+ tag: "latest"
+ context: "."
+
+ docs:
+ name: "Docs"
+ runs-on: "ubuntu-latest"
+ needs: ["build"]
+ if: github.ref == 'refs/heads/master'
- - name: Build and push
- uses: docker/build-push-action@v6
+ steps:
+ - name: "Checkout"
+ uses: actions/checkout@v4
+
+ - name: "Update Docker Hub description"
+ uses: peter-evans/dockerhub-description@v5
with:
- context: .
- push: true
- tags: dockette/expose
- cache-from: type=local,src=/tmp/.buildx-cache
- cache-to: type=local,dest=/tmp/.buildx-cache
- platforms: linux/amd64,linux/arm64
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
+ repository: "dockette/expose"
diff --git a/AGENTS.md b/AGENTS.md
new file mode 100644
index 0000000..13b8cbd
--- /dev/null
+++ b/AGENTS.md
@@ -0,0 +1,37 @@
+# AGENTS.md
+
+## Project
+
+Dockette Expose builds `dockette/expose`, a Dockerized Beyond Code Expose server/client for sharing local sites through secure tunnels. The image installs PHP 8.0, Composer, Expose `1.5.1`, custom PHP config, and the repository entrypoint.
+
+## Image
+
+- Default image: `dockette/expose:latest`.
+- Build context: repository root `.` with `Dockerfile`, `entrypoint.sh`, `config.php`, and `php.ini`.
+- Base image: `dockette/debian:buster`.
+- `make build` uses Docker Buildx and `${DOCKER_PLATFORMS:-linux/amd64,linux/arm64}`.
+- Runtime defaults are set by `EXPOSE_HOST`, `EXPOSE_PORT`, `EXPOSE_USER`, `EXPOSE_PASSWORD`, `EXPOSE_TOKEN`, `EXPOSE_ADMIN`, and `EXPOSE_DB`.
+- GitHub Actions builds a local test image, runs `make test`, then publishes `latest` through the shared Dockette Docker workflow on `master` and the weekly schedule.
+
+## Commands
+
+- `make build` builds `${DOCKER_IMAGE}:${DOCKER_TAG}` with Buildx.
+- `make docker-build` performs a local `docker build --pull` without Buildx.
+- `make test` runs `expose --version` in the image.
+- `make run` starts the server on `8000:8000`.
+- `make example-install`, `make example-app`, and `make example-share` support the local PHP example.
+
+## Testing Notes
+
+- Use `make docker-build test` for a local single-platform validation before runtime testing.
+- Use `make -n build test run` to dry-run command wiring without requiring Docker.
+- Full server/client testing needs Docker networking, a reachable `EXPOSE_HOST`, and an available mapped port.
+
+## Guidelines
+
+- Keep `Dockerfile`, `entrypoint.sh`, `config.php`, `php.ini`, README environment documentation, and `.github/workflows/docker.yml` aligned.
+- Prefer `DOCKER_*` names for Docker-related Makefile variables.
+- Place `.PHONY: ` directly above each Makefile target.
+- Keep README badges and maintenance sections consistent with other Dockette image repos.
+- Preserve documented environment variable defaults unless the README and tests are updated in the same change.
+- Do not introduce unrelated formatting or structural changes.
diff --git a/CLAUDE.md b/CLAUDE.md
new file mode 100644
index 0000000..43c994c
--- /dev/null
+++ b/CLAUDE.md
@@ -0,0 +1 @@
+@AGENTS.md
diff --git a/Dockerfile b/Dockerfile
index 67702f8..330e972 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,12 +1,12 @@
-FROM dockette/debian:buster
+FROM dockette/debian:bullseye
LABEL maintainer="sulcmil@gmail.com"
# PHP
-ENV PHP_MODS_DIR=/etc/php/8.0/mods-available
-ENV PHP_CLI_DIR=/etc/php/8.0/cli
+ENV PHP_MODS_DIR=/etc/php/8.2/mods-available
+ENV PHP_CLI_DIR=/etc/php/8.2/cli
ENV PHP_CLI_CONF_DIR=${PHP_CLI_DIR}/conf.d
-ENV PHP_CGI_DIR=/etc/php/8.0/cgi
+ENV PHP_CGI_DIR=/etc/php/8.2/cgi
ENV PHP_CGI_CONF_DIR=${PHP_CGI_DIR}/conf.d
ENV TZ=Europe/Prague
@@ -25,18 +25,18 @@ RUN apt update && apt dist-upgrade -y && \
apt install -y wget curl apt-transport-https ca-certificates git unzip && \
# PHP DEB.SURY.CZ ##########################################################
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg && \
- echo "deb https://packages.sury.org/php/ buster main" > /etc/apt/sources.list.d/php.list && \
+ echo "deb https://packages.sury.org/php/ bullseye main" > /etc/apt/sources.list.d/php.list && \
apt update && \
apt install -y --no-install-recommends \
- php8.0-apcu \
- php8.0-bz2 \
- php8.0-bcmath \
- php8.0-cli \
- php8.0-ctype \
- php8.0-curl \
- php8.0-mbstring \
- php8.0-sqlite3 \
- php8.0-zip && \
+ php8.2-apcu \
+ php8.2-bz2 \
+ php8.2-bcmath \
+ php8.2-cli \
+ php8.2-ctype \
+ php8.2-curl \
+ php8.2-mbstring \
+ php8.2-sqlite3 \
+ php8.2-zip && \
# COMPOSER #################################################################
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer --2 && \
# PHP MOD(s) ###############################################################
diff --git a/Makefile b/Makefile
index 3973d1d..cb47bfa 100644
--- a/Makefile
+++ b/Makefile
@@ -1,22 +1,43 @@
DOCKER_IMAGE=dockette/expose
+DOCKER_TAG?=latest
+DOCKER_PLATFORMS?=linux/amd64,linux/arm64
+.PHONY: build
+build:
+ docker buildx build --platform ${DOCKER_PLATFORMS} -t ${DOCKER_IMAGE}:${DOCKER_TAG} .
+
+.PHONY: test
+test:
+ docker run --rm ${DOCKER_IMAGE}:${DOCKER_TAG} --version
+
+.PHONY: run
+run:
+ docker run -it --rm -p 8000:8000 ${DOCKER_IMAGE}:${DOCKER_TAG}
+
+.PHONY: docker-build
docker-build:
- docker build --pull -t ${DOCKER_IMAGE} .
+ docker build --pull -t ${DOCKER_IMAGE}:${DOCKER_TAG} .
+.PHONY: docker-push
docker-push:
- docker push ${DOCKER_IMAGE}
+ docker push ${DOCKER_IMAGE}:${DOCKER_TAG}
+.PHONY: example-install
example-install:
composer -d example install
+.PHONY: example-app
example-app:
php -S 0.0.0.0:8888 example/index.php
+.PHONY: example-share
example-share:
example/vendor/bin/expose share
+.PHONY: test-expose
test-expose:
- docker run -it --rm -p 8000:8000 ${DOCKER_IMAGE}
+ docker run -it --rm -p 8000:8000 ${DOCKER_IMAGE}:${DOCKER_TAG}
+.PHONY: test-server
test-server:
- docker run -it --rm -p 8000:8000 --entrypoint /bin/bash ${DOCKER_IMAGE}
+ docker run -it --rm -p 8000:8000 --entrypoint /bin/bash ${DOCKER_IMAGE}:${DOCKER_TAG}
diff --git a/README.md b/README.md
index c6a85b1..1750023 100644
--- a/README.md
+++ b/README.md
@@ -9,10 +9,10 @@
-
-
-
-
+
+
+
+
-----
@@ -27,9 +27,9 @@ Fastest way:
docker run \
-it \
--rm \
- -p 80:80 \
+ -p 8000:8000 \
-e EXPOSE_HOST=yourdomain.dev \
- -e EXPOSE_PORT=80 \
+ -e EXPOSE_PORT=8000 \
dockette/expose
```
@@ -39,8 +39,8 @@ Persistent way:
docker run \
-it \
--rm \
- -p 80:80 \
- -v $(pwd)/data:/data
+ -p 8000:8000 \
+ -v $(pwd)/data:/data \
dockette/expose
```
@@ -52,11 +52,11 @@ docker run \
--rm \
--network=host \
-e EXPOSE_HOST=yourdomain.dev \
- -e EXPOSE_PORT=80 \
+ -e EXPOSE_PORT=8000 \
dockette/expose \
share \
--subdomain=foo \
- http://0.0.0.0:5000
+ http://localhost:5000
```
> Use http://host.docker.internal:5000 on OSX.
@@ -68,7 +68,7 @@ You can easily setup Expose via environment variables. This is list of default v
```
- EXPOSE_HOST=localhost # expose domain
- EXPOSE_PORT=8000 # expose port
-- EXPOSE_USERNAME=dockette # dashboard user name
+- EXPOSE_USER=dockette # dashboard user name
- EXPOSE_PASSWORD=expose # dashboard user password
- EXPOSE_TOKEN= # expose token
- EXPOSE_ADMIN=admin # dashboard subdomain
@@ -88,26 +88,16 @@ docker run -it --rm -p 8000:8000 -e EXPOSE_HOST=expose.local dockette/expose
echo "Hello world" >> index.php
# Application
-php -S http://0.0.0.0:5000 index.php
+php -S 0.0.0.0:5000 index.php
```
```
# Tunnel (Unix)
-docker run -it --rm --network=host -e EXPOSE_HOST=expose.local dockette/expose share --subdomain=foo http://0.0.0.0:5000
+docker run -it --rm --network=host -e EXPOSE_HOST=expose.local dockette/expose share --subdomain=foo http://localhost:5000
```
> Use http://host.docker.internal:5000 on OSX.
-## Development
+## Maintenance
-See [how to contribute](https://contributte.org/contributing.html) to this package.
-
-This package is currently maintaining by these authors.
-
-
-
-
-
------
-
-Consider to [support](https://github.com/sponsors/f3l1x) **f3l1x**. Also thank you for using this package.
+See [how to contribute](https://github.com/dockette/.github/blob/master/CONTRIBUTING.md) to this package. Consider to [support](https://github.com/sponsors/f3l1x) **f3l1x**. Thank you for using this package.