docker image
This commit is contained in:
parent
f47ebbf47c
commit
886bd1e38e
8 changed files with 315 additions and 2 deletions
10
.dockerignore
Normal file
10
.dockerignore
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
.dockerignore
|
||||||
|
.git
|
||||||
|
.github
|
||||||
|
**/*.DS_Store
|
||||||
|
docker-bake.hcl
|
||||||
|
docs
|
||||||
|
httpd-php-dev.yml
|
||||||
|
httpd-php.Dockerfile
|
||||||
|
httpd-php.yml
|
||||||
|
README.md
|
76
.github/workflows/httpd-php-multiarch.yml
vendored
Normal file
76
.github/workflows/httpd-php-multiarch.yml
vendored
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
name: buildx
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
env:
|
||||||
|
GHCR_SLUG: ghcr.io/rodber/chevereto-free-httpd-php
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
buildx:
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
operating-system: [ubuntu-latest]
|
||||||
|
php-versions: ["8.0"]
|
||||||
|
name: Build on PHP ${{ matrix.php-versions }} ${{ matrix.operating-system }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
env:
|
||||||
|
fail-fast: true
|
||||||
|
|
||||||
|
# - name: Build
|
||||||
|
# run: php src/build.php
|
||||||
|
|
||||||
|
- name: Docker meta
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v3
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
${{ env.GHCR_SLUG }}
|
||||||
|
tags: |
|
||||||
|
type=ref,event=branch
|
||||||
|
type=ref,event=pr
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
labels: |
|
||||||
|
org.opencontainers.image.title=Chevereto-Free
|
||||||
|
org.opencontainers.image.description=Chevereto-Free Image Hosting
|
||||||
|
org.opencontainers.image.vendor=rodber
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v1
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v1
|
||||||
|
|
||||||
|
- name: Login to GHCR
|
||||||
|
uses: docker/login-action@v1
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ github.repository_owner }}
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
uses: docker/bake-action@v1
|
||||||
|
with:
|
||||||
|
files: |
|
||||||
|
./docker-bake.hcl
|
||||||
|
${{ steps.meta.outputs.bake-file }}
|
||||||
|
targets: build
|
||||||
|
push: true
|
||||||
|
|
||||||
|
- name: Check manifest
|
||||||
|
run: |
|
||||||
|
docker buildx imagetools inspect ${{ env.GHCR_SLUG }}:${{ steps.meta.outputs.version }}
|
||||||
|
|
||||||
|
- name: Inspect image
|
||||||
|
run: |
|
||||||
|
docker pull ${{ env.GHCR_SLUG }}:${{ steps.meta.outputs.version }}
|
||||||
|
docker image inspect ${{ env.GHCR_SLUG }}:${{ steps.meta.outputs.version }}
|
8
.github/workflows/release.yml
vendored
8
.github/workflows/release.yml
vendored
|
@ -42,12 +42,15 @@ jobs:
|
||||||
id: get_version
|
id: get_version
|
||||||
run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
|
run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
|
||||||
|
|
||||||
|
- name: Packaging
|
||||||
|
run: |
|
||||||
|
rm -rf .git .github .dockerignore docs app/settings.php docker-bake.hcl httpd-php-dev.yml httpd-php.Dockerfile httpd-php.yml sync.sh
|
||||||
|
|
||||||
- name: Archive dev
|
- name: Archive dev
|
||||||
uses: thedoctor0/zip-release@master
|
uses: thedoctor0/zip-release@master
|
||||||
with:
|
with:
|
||||||
type: "zip"
|
type: "zip"
|
||||||
filename: "${{ steps.get_version.outputs.VERSION }}-lite.zip"
|
filename: "${{ steps.get_version.outputs.VERSION }}-lite.zip"
|
||||||
exclusions: "/*.git/* /*.github/*"
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: composer install --prefer-dist --no-progress --classmap-authoritative --ignore-platform-reqs
|
run: composer install --prefer-dist --no-progress --classmap-authoritative --ignore-platform-reqs
|
||||||
|
@ -57,12 +60,13 @@ jobs:
|
||||||
with:
|
with:
|
||||||
type: "zip"
|
type: "zip"
|
||||||
filename: "${{ steps.get_version.outputs.VERSION }}.zip"
|
filename: "${{ steps.get_version.outputs.VERSION }}.zip"
|
||||||
exclusions: "/*.git/* /*.github/* ${{ steps.get_version.outputs.VERSION }}-lite.zip"
|
exclusions: "${{ steps.get_version.outputs.VERSION }}-lite.zip"
|
||||||
|
|
||||||
- name: Upload artifacts
|
- name: Upload artifacts
|
||||||
uses: ncipollo/release-action@v1
|
uses: ncipollo/release-action@v1
|
||||||
with:
|
with:
|
||||||
allowUpdates: true
|
allowUpdates: true
|
||||||
removeArtifacts: true
|
removeArtifacts: true
|
||||||
|
omitBodyDuringUpdate: true
|
||||||
artifacts: "${{ steps.get_version.outputs.VERSION }}.zip,${{ steps.get_version.outputs.VERSION }}-lite.zip"
|
artifacts: "${{ steps.get_version.outputs.VERSION }}.zip,${{ steps.get_version.outputs.VERSION }}-lite.zip"
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
11
docker-bake.hcl
Normal file
11
docker-bake.hcl
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
target "docker-metadata-action" {}
|
||||||
|
|
||||||
|
target "build" {
|
||||||
|
inherits = ["docker-metadata-action"]
|
||||||
|
context = "./"
|
||||||
|
dockerfile = "httpd-php.Dockerfile"
|
||||||
|
platforms = [
|
||||||
|
"linux/amd64",
|
||||||
|
"linux/arm64",
|
||||||
|
]
|
||||||
|
}
|
47
httpd-php-dev.yml
Normal file
47
httpd-php-dev.yml
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
version: "3.2"
|
||||||
|
|
||||||
|
services:
|
||||||
|
database:
|
||||||
|
container_name: chevereto-free-dev_database
|
||||||
|
image: mariadb:focal
|
||||||
|
networks:
|
||||||
|
- chevereto
|
||||||
|
volumes:
|
||||||
|
- database:/var/lib/mysql
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
MYSQL_ROOT_PASSWORD: password
|
||||||
|
MYSQL_DATABASE: chevereto
|
||||||
|
MYSQL_USER: chevereto
|
||||||
|
MYSQL_PASSWORD: user_database_password
|
||||||
|
|
||||||
|
app:
|
||||||
|
container_name: chevereto-free-dev_app
|
||||||
|
image: ghcr.io/rodber/chevereto-free-httpd-php:1.6
|
||||||
|
networks:
|
||||||
|
- chevereto
|
||||||
|
volumes:
|
||||||
|
- storage:/var/www/html/images/
|
||||||
|
- app:/var/www/html/
|
||||||
|
- type: bind
|
||||||
|
source: ${SOURCE}
|
||||||
|
target: /var/www/chevereto
|
||||||
|
ports:
|
||||||
|
- 8910:80
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
CHEVERETO_TAG: dev
|
||||||
|
CHEVERETO_DB_HOST: database
|
||||||
|
CHEVERETO_DB_USER: chevereto
|
||||||
|
CHEVERETO_DB_PASS: user_database_password
|
||||||
|
CHEVERETO_DB_PORT: 3306
|
||||||
|
CHEVERETO_DB_NAME: chevereto
|
||||||
|
CHEVERETO_HTTPS: 0
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
database:
|
||||||
|
storage:
|
||||||
|
app:
|
||||||
|
|
||||||
|
networks:
|
||||||
|
chevereto:
|
87
httpd-php.Dockerfile
Normal file
87
httpd-php.Dockerfile
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
FROM composer:latest as composer
|
||||||
|
FROM php:7.4-apache
|
||||||
|
COPY --from=composer /usr/bin/composer /usr/local/bin/composer
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
libfreetype6-dev \
|
||||||
|
libjpeg62-turbo-dev \
|
||||||
|
libpng-dev \
|
||||||
|
libwebp-dev \
|
||||||
|
libgd-dev \
|
||||||
|
libzip-dev \
|
||||||
|
zip \
|
||||||
|
unzip \
|
||||||
|
imagemagick libmagickwand-dev --no-install-recommends \
|
||||||
|
&& docker-php-ext-configure gd \
|
||||||
|
--with-freetype=/usr/include/ \
|
||||||
|
--with-jpeg=/usr/include/ \
|
||||||
|
--with-webp=/usr/include/ \
|
||||||
|
&& docker-php-ext-configure opcache --enable-opcache \
|
||||||
|
&& docker-php-ext-install -j$(nproc) exif gd pdo_mysql zip opcache \
|
||||||
|
&& pecl install imagick \
|
||||||
|
&& docker-php-ext-enable imagick opcache \
|
||||||
|
&& php -m
|
||||||
|
|
||||||
|
RUN apt-get install -y \
|
||||||
|
rsync \
|
||||||
|
inotify-tools \
|
||||||
|
&& a2enmod rewrite
|
||||||
|
|
||||||
|
ARG CHEVERETO_SOFTWARE=chevereto
|
||||||
|
ARG CHEVERETO_TAG=free
|
||||||
|
ARG CHEVERETO_SERVICING=docker
|
||||||
|
|
||||||
|
ENV CHEVERETO_SOFTWARE=$CHEVERETO_SOFTWARE \
|
||||||
|
CHEVERETO_TAG=$CHEVERETO_TAG \
|
||||||
|
CHEVERETO_SERVICING=$CHEVERETO_SERVICING \
|
||||||
|
CHEVERETO_DB_HOST=mariadb \
|
||||||
|
CHEVERETO_DB_USER=chevereto \
|
||||||
|
CHEVERETO_DB_PASS=user_database_password \
|
||||||
|
CHEVERETO_DB_NAME=chevereto \
|
||||||
|
CHEVERETO_DB_TABLE_PREFIX=chv_ \
|
||||||
|
CHEVERETO_DB_PORT=3306 \
|
||||||
|
CHEVERETO_DB_DRIVER=mysql \
|
||||||
|
CHEVERETO_DB_PDO_ATTRS=[] \
|
||||||
|
CHEVERETO_DEBUG_LEVEL=1 \
|
||||||
|
CHEVERETO_DISABLE_PHP_PAGES=1 \
|
||||||
|
CHEVERETO_DISABLE_UPDATE_HTTP=1 \
|
||||||
|
CHEVERETO_DISABLE_UPDATE_CLI=1 \
|
||||||
|
CHEVERETO_ERROR_LOG= \
|
||||||
|
CHEVERETO_IMAGE_FORMATS_AVAILABLE=JPG,PNG,BMP,GIF,WEBP \
|
||||||
|
CHEVERETO_IMAGE_LIBRARY=gd \
|
||||||
|
CHEVERETO_HTTPS=1 \
|
||||||
|
CHEVERETO_HOSTNAME=localhost \
|
||||||
|
CHEVERETO_HOSTNAME_PATH=/ \
|
||||||
|
CHEVERETO_SESSION_SAVE_HANDLER=files \
|
||||||
|
CHEVERETO_SESSION_SAVE_PATH=/tmp \
|
||||||
|
CHEVERETO_UPLOAD_MAX_FILESIZE=64M \
|
||||||
|
CHEVERETO_POST_MAX_SIZE=64M \
|
||||||
|
CHEVERETO_MAX_EXECUTION_TIME=30 \
|
||||||
|
CHEVERETO_MEMORY_LIMIT=512M
|
||||||
|
|
||||||
|
RUN set -eux; \
|
||||||
|
{ \
|
||||||
|
echo "log_errors = On"; \
|
||||||
|
echo "error_log = /dev/stderr"; \
|
||||||
|
echo "upload_max_filesize = \${CHEVERETO_UPLOAD_MAX_FILESIZE}"; \
|
||||||
|
echo "post_max_size = \${CHEVERETO_POST_MAX_SIZE}"; \
|
||||||
|
echo "max_execution_time = \${CHEVERETO_MAX_EXECUTION_TIME}"; \
|
||||||
|
echo "memory_limit = \${CHEVERETO_MEMORY_LIMIT}"; \
|
||||||
|
} > $PHP_INI_DIR/conf.d/php.ini
|
||||||
|
|
||||||
|
VOLUME /var/www/html
|
||||||
|
VOLUME /var/www/html/images
|
||||||
|
VOLUME /var/www/source
|
||||||
|
|
||||||
|
COPY . /var/www/html
|
||||||
|
RUN rm /var/www/html/sync.sh
|
||||||
|
RUN composer install \
|
||||||
|
--working-dir=/var/www/html \
|
||||||
|
--prefer-dist \
|
||||||
|
--no-progress \
|
||||||
|
--classmap-authoritative \
|
||||||
|
--ignore-platform-reqs
|
||||||
|
RUN chown www-data: /var/www/html -R
|
||||||
|
COPY sync.sh /var/www/sync.sh
|
||||||
|
RUN chmod +x /var/www/sync.sh
|
||||||
|
CMD ["/bin/bash", "apache2-foreground"]
|
44
httpd-php.yml
Normal file
44
httpd-php.yml
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
version: "3.2"
|
||||||
|
|
||||||
|
services:
|
||||||
|
database:
|
||||||
|
container_name: chevereto-free_database
|
||||||
|
image: mariadb:focal
|
||||||
|
networks:
|
||||||
|
- chevereto
|
||||||
|
volumes:
|
||||||
|
- data:/var/lib/mysql
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
MYSQL_ROOT_PASSWORD: password
|
||||||
|
MYSQL_DATABASE: chevereto
|
||||||
|
MYSQL_USER: chevereto
|
||||||
|
MYSQL_PASSWORD: user_database_password
|
||||||
|
|
||||||
|
app:
|
||||||
|
container_name: chevereto-free_app
|
||||||
|
image: ghcr.io/rodber/chevereto-free-httpd-php:1.6
|
||||||
|
networks:
|
||||||
|
- chevereto
|
||||||
|
volumes:
|
||||||
|
- storage:/var/www/html/images/
|
||||||
|
- app:/var/www/html/
|
||||||
|
ports:
|
||||||
|
- 8810:80
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
CHEVERETO_TAG: "free"
|
||||||
|
CHEVERETO_DB_HOST: database
|
||||||
|
CHEVERETO_DB_USER: chevereto
|
||||||
|
CHEVERETO_DB_PASS: user_database_password
|
||||||
|
CHEVERETO_DB_PORT: 3306
|
||||||
|
CHEVERETO_DB_NAME: chevereto
|
||||||
|
CHEVERETO_HTTPS: 0
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
data:
|
||||||
|
storage:
|
||||||
|
app:
|
||||||
|
|
||||||
|
networks:
|
||||||
|
chevereto:
|
34
sync.sh
Normal file
34
sync.sh
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
SOURCE=/var/www/source/
|
||||||
|
INSTALLER=/var/www/installer/
|
||||||
|
TARGET=/var/www/html/
|
||||||
|
EXCLUDE="\.git|\.DS_Store|\/docs"
|
||||||
|
mkdir -p $INSTALLER
|
||||||
|
cp "${SOURCE}".gitignore "${INSTALLER}".gitignore
|
||||||
|
function sync() {
|
||||||
|
rsync -r -I -og \
|
||||||
|
--chown=www-data:www-data \
|
||||||
|
--info=progress2 \
|
||||||
|
--filter=':- .gitignore' \
|
||||||
|
--exclude '.git' \
|
||||||
|
--delete \
|
||||||
|
$SOURCE $INSTALLER
|
||||||
|
# php "${INSTALLER}"src/build.php
|
||||||
|
# cp "${INSTALLER}"build/installer.php "${TARGET}"installer.php
|
||||||
|
# chown www-data: $TARGET -R
|
||||||
|
}
|
||||||
|
sync
|
||||||
|
inotifywait \
|
||||||
|
--event create \
|
||||||
|
--event delete \
|
||||||
|
--event modify \
|
||||||
|
--event move \
|
||||||
|
--format "%e %w%f" \
|
||||||
|
--exclude $EXCLUDE \
|
||||||
|
--monitor \
|
||||||
|
--recursive \
|
||||||
|
$SOURCE |
|
||||||
|
while read CHANGED; do
|
||||||
|
sync
|
||||||
|
done
|
Loading…
Reference in a new issue