Initial import
This commit is contained in:
Executable
+54
@@ -0,0 +1,54 @@
|
||||
ARG PHP_VERSION=8.4
|
||||
|
||||
FROM php:${PHP_VERSION}-rc-apache-bookworm AS base
|
||||
|
||||
RUN set -eux; \
|
||||
apt-get update && \
|
||||
apt-get install -y --no-install-recommends \
|
||||
libmemcached-dev \
|
||||
libssl-dev \
|
||||
libzip-dev \
|
||||
libzip4 \
|
||||
libjpeg-dev \
|
||||
libjpeg62-turbo-dev \
|
||||
zlib1g-dev \
|
||||
ocrmypdf \
|
||||
poppler-utils \
|
||||
mariadb-client \
|
||||
libpng-dev \
|
||||
tmux \
|
||||
imagemagick \
|
||||
pdftk \
|
||||
&& \
|
||||
printf "" | pecl install -D 'with-libmemcached-dir="/usr"' memcached && \
|
||||
docker-php-ext-enable memcached && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY policy.xml /etc/ImageMagick-6
|
||||
|
||||
RUN apt-get update \
|
||||
&& docker-php-ext-install mysqli pdo pdo_mysql \
|
||||
&& docker-php-ext-enable pdo_mysql
|
||||
|
||||
RUN apt-get update \
|
||||
&& docker-php-ext-configure gd --with-jpeg \
|
||||
&& docker-php-ext-install gd \
|
||||
&& docker-php-ext-enable gd
|
||||
|
||||
RUN apt-get update \
|
||||
&& docker-php-ext-configure pcntl --enable-pcntl \
|
||||
&& docker-php-ext-install pcntl \
|
||||
&& docker-php-ext-enable pcntl
|
||||
|
||||
RUN a2enmod rewrite
|
||||
|
||||
ENV APACHE_DOCUMENT_ROOT /var/www/html/public
|
||||
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
|
||||
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
|
||||
|
||||
COPY memory.ini /usr/local/etc/php/conf.d
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y internetarchive
|
||||
|
||||
RUN rm -f /var/log/apache2/*
|
||||
Executable
+23
@@ -0,0 +1,23 @@
|
||||
import time
|
||||
|
||||
import redis
|
||||
from flask import Flask
|
||||
|
||||
app = Flask(__name__)
|
||||
cache = redis.Redis(host='redis', port=6379)
|
||||
|
||||
def get_hit_count():
|
||||
retries = 5
|
||||
while True:
|
||||
try:
|
||||
return cache.incr('hits')
|
||||
except redis.exceptions.ConnectionError as exc:
|
||||
if retries == 0:
|
||||
raise exc
|
||||
retries -= 1
|
||||
time.sleep(0.5)
|
||||
|
||||
@app.route('/')
|
||||
def hello():
|
||||
count = get_hit_count()
|
||||
return f'Hello World! I have been seen {count} times.\n'
|
||||
Executable
+9
@@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "Booting..."
|
||||
|
||||
apachectl start
|
||||
|
||||
while `true`; do
|
||||
sleep 1
|
||||
done
|
||||
Executable
+12
@@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
pacman -Sy
|
||||
pacman -S --noconfirm --overwrite=/usr/lib/* glibc gcc-libs openssl-1.1
|
||||
ldconfig
|
||||
pacman -S --noconfirm apache mariadb-clients php php-gd php-memcache
|
||||
ls -l /usr/lib/libcrypto.so*
|
||||
pacman -S --needed --noconfirm sudo # Install sudo
|
||||
useradd builduser -m # Create the builduser
|
||||
passwd -d builduser # Delete the buildusers password
|
||||
printf 'builduser ALL=(ALL) ALL\n' | tee -a /etc/sudoers # Allow the builduser passwordless sudo
|
||||
sudo -u builduser bash -c 'cd /tmp && git clone https://aur.archlinux.org/ocrmypdf ocrmypdf && cd ocrmypdf && makepkg -si --noconfirm' # Clone and build a package
|
||||
Executable
+30
@@ -0,0 +1,30 @@
|
||||
services:
|
||||
web:
|
||||
build: .
|
||||
restart: always
|
||||
ports:
|
||||
- "8000:80"
|
||||
runtime: nvidia
|
||||
deploy:
|
||||
resources:
|
||||
reservations:
|
||||
devices:
|
||||
- driver: nvidia
|
||||
count: 1
|
||||
capabilities: [gpu]
|
||||
volumes:
|
||||
- type: bind
|
||||
source: /data/Web/decpdf.site/
|
||||
target: /var/www/html/
|
||||
db:
|
||||
image: "mariadb"
|
||||
restart: always
|
||||
volumes:
|
||||
- type: bind
|
||||
source: /data/Web/decpdf.site/database
|
||||
target: /var/lib/mysql
|
||||
environment:
|
||||
MARIADB_ROOT_PASSWORD: wibble
|
||||
memcache:
|
||||
image: "memcached"
|
||||
restart: always
|
||||
@@ -0,0 +1,3 @@
|
||||
memory_limit = 2G
|
||||
upload_max_filesize = 2G
|
||||
post_max_size = 2G
|
||||
Executable
+98
@@ -0,0 +1,98 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE policymap [
|
||||
<!ELEMENT policymap (policy)*>
|
||||
<!ATTLIST policymap xmlns CDATA #FIXED ''>
|
||||
<!ELEMENT policy EMPTY>
|
||||
<!ATTLIST policy xmlns CDATA #FIXED '' domain NMTOKEN #REQUIRED
|
||||
name NMTOKEN #IMPLIED pattern CDATA #IMPLIED rights NMTOKEN #IMPLIED
|
||||
stealth NMTOKEN #IMPLIED value CDATA #IMPLIED>
|
||||
]>
|
||||
<!--
|
||||
Configure ImageMagick policies.
|
||||
|
||||
Domains include system, delegate, coder, filter, path, or resource.
|
||||
|
||||
Rights include none, read, write, execute and all. Use | to combine them,
|
||||
for example: "read | write" to permit read from, or write to, a path.
|
||||
|
||||
Use a glob expression as a pattern.
|
||||
|
||||
Suppose we do not want users to process MPEG video images:
|
||||
|
||||
<policy domain="delegate" rights="none" pattern="mpeg:decode" />
|
||||
|
||||
Here we do not want users reading images from HTTP:
|
||||
|
||||
<policy domain="coder" rights="none" pattern="HTTP" />
|
||||
|
||||
The /repository file system is restricted to read only. We use a glob
|
||||
expression to match all paths that start with /repository:
|
||||
|
||||
<policy domain="path" rights="read" pattern="/repository/*" />
|
||||
|
||||
Lets prevent users from executing any image filters:
|
||||
|
||||
<policy domain="filter" rights="none" pattern="*" />
|
||||
|
||||
Any large image is cached to disk rather than memory:
|
||||
|
||||
<policy domain="resource" name="area" value="1GP"/>
|
||||
|
||||
Use the default system font unless overwridden by the application:
|
||||
|
||||
<policy domain="system" name="font" value="/usr/share/fonts/favorite.ttf"/>
|
||||
|
||||
Define arguments for the memory, map, area, width, height and disk resources
|
||||
with SI prefixes (.e.g 100MB). In addition, resource policies are maximums
|
||||
for each instance of ImageMagick (e.g. policy memory limit 1GB, -limit 2GB
|
||||
exceeds policy maximum so memory limit is 1GB).
|
||||
|
||||
Rules are processed in order. Here we want to restrict ImageMagick to only
|
||||
read or write a small subset of proven web-safe image types:
|
||||
|
||||
<policy domain="delegate" rights="none" pattern="*" />
|
||||
<policy domain="filter" rights="none" pattern="*" />
|
||||
<policy domain="coder" rights="none" pattern="*" />
|
||||
<policy domain="coder" rights="read|write" pattern="{GIF,JPEG,PNG,WEBP}" />
|
||||
-->
|
||||
<policymap>
|
||||
<!-- <policy domain="resource" name="temporary-path" value="/tmp"/> -->
|
||||
<policy domain="resource" name="memory" value="256MiB"/>
|
||||
<policy domain="resource" name="map" value="512MiB"/>
|
||||
<policy domain="resource" name="width" value="16KP"/>
|
||||
<policy domain="resource" name="height" value="16KP"/>
|
||||
<!-- <policy domain="resource" name="list-length" value="128"/> -->
|
||||
<policy domain="resource" name="area" value="128MP"/>
|
||||
<policy domain="resource" name="disk" value="1GiB"/>
|
||||
<!-- <policy domain="resource" name="file" value="768"/> -->
|
||||
<!-- <policy domain="resource" name="thread" value="4"/> -->
|
||||
<!-- <policy domain="resource" name="throttle" value="0"/> -->
|
||||
<!-- <policy domain="resource" name="time" value="3600"/> -->
|
||||
<!-- <policy domain="coder" rights="none" pattern="MVG" /> -->
|
||||
<!-- <policy domain="module" rights="none" pattern="{PS,PDF,XPS}" /> -->
|
||||
<!-- <policy domain="path" rights="none" pattern="@*" /> -->
|
||||
<!-- <policy domain="cache" name="memory-map" value="anonymous"/> -->
|
||||
<!-- <policy domain="cache" name="synchronize" value="True"/> -->
|
||||
<!-- <policy domain="cache" name="shared-secret" value="passphrase" stealth="true"/>
|
||||
<!-- <policy domain="system" name="max-memory-request" value="256MiB"/> -->
|
||||
<!-- <policy domain="system" name="shred" value="2"/> -->
|
||||
<!-- <policy domain="system" name="precision" value="6"/> -->
|
||||
<!-- <policy domain="system" name="font" value="/path/to/font.ttf"/> -->
|
||||
<!-- <policy domain="system" name="pixel-cache-memory" value="anonymous"/> -->
|
||||
<!-- <policy domain="system" name="shred" value="2"/> -->
|
||||
<!-- <policy domain="system" name="precision" value="6"/> -->
|
||||
<!-- not needed due to the need to use explicitly by mvg: -->
|
||||
<!-- <policy domain="delegate" rights="none" pattern="MVG" /> -->
|
||||
<!-- use curl -->
|
||||
<policy domain="delegate" rights="none" pattern="URL" />
|
||||
<policy domain="delegate" rights="none" pattern="HTTPS" />
|
||||
<policy domain="delegate" rights="none" pattern="HTTP" />
|
||||
<!-- in order to avoid to get image with password text -->
|
||||
<policy domain="path" rights="none" pattern="@*"/>
|
||||
<!-- disable ghostscript format types -->
|
||||
<policy domain="coder" rights="none" pattern="PS" />
|
||||
<policy domain="coder" rights="none" pattern="PS2" />
|
||||
<policy domain="coder" rights="none" pattern="PS3" />
|
||||
<policy domain="coder" rights="none" pattern="EPS" />
|
||||
<policy domain="coder" rights="none" pattern="XPS" />
|
||||
</policymap>
|
||||
Reference in New Issue
Block a user