restructure for docker
This commit is contained in:
17
Makefile
17
Makefile
@@ -1,17 +0,0 @@
|
||||
PYTHON = python3
|
||||
FLASK = flask
|
||||
SQLITE = sqlite3
|
||||
|
||||
default: venv
|
||||
|
||||
test: venv
|
||||
test/all.sh
|
||||
|
||||
venv:
|
||||
$(PYTHON) -m venv $@
|
||||
. ./venv/bin/activate && pip3 install -r requirements.txt
|
||||
|
||||
forum.db:
|
||||
$(SQLITE) $@ < schema.txt
|
||||
|
||||
.PHONY: test
|
||||
18
docker-compose.yml
Normal file
18
docker-compose.yml
Normal file
@@ -0,0 +1,18 @@
|
||||
version: "3.7"
|
||||
|
||||
services:
|
||||
forum:
|
||||
build:
|
||||
context: ./forum/
|
||||
dockerfile: ./Dockerfile
|
||||
args:
|
||||
UID: ${UID}
|
||||
GID: ${GID}
|
||||
TZ: ${TZ}
|
||||
volumes:
|
||||
- "./forum/:/app"
|
||||
ports:
|
||||
- "${EXPOSE}:5000"
|
||||
environment:
|
||||
ADMINU: ${ADMINU}
|
||||
ADMINP: ${ADMINP}
|
||||
7
example.env
Normal file
7
example.env
Normal file
@@ -0,0 +1,7 @@
|
||||
|
||||
UID=1000
|
||||
GID=1000
|
||||
TZ=Europe/Helsinki
|
||||
ADMINU=admin
|
||||
ADMINP=admin
|
||||
EXPOSE=5000
|
||||
36
forum/Dockerfile
Normal file
36
forum/Dockerfile
Normal file
@@ -0,0 +1,36 @@
|
||||
FROM ubuntu:22.04
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
RUN apt-get update -yqq \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
sqlite3 \
|
||||
tzdata \
|
||||
git \
|
||||
make \
|
||||
python3-venv \
|
||||
python3-pip \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ARG UID
|
||||
ARG GID
|
||||
ARG TZ
|
||||
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||||
RUN groupadd -g $GID user && \
|
||||
useradd -u $UID -g $GID -ms /bin/bash user && \
|
||||
mkdir -p /opt/venv && chown $UID:$GID /opt/venv
|
||||
COPY ./requirements.txt /requirements.txt
|
||||
COPY docker-builder.sh /
|
||||
USER user
|
||||
|
||||
RUN bash /docker-builder.sh
|
||||
#COPY ./ /app
|
||||
#USER root
|
||||
#RUN chown -R $UID:$GID /app
|
||||
USER user
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY docker-entrypoint.sh /
|
||||
CMD bash /docker-entrypoint.sh
|
||||
7
forum/docker-builder.sh
Executable file
7
forum/docker-builder.sh
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eux
|
||||
|
||||
python3 -m venv /opt/venv
|
||||
. /opt/venv/bin/activate
|
||||
pip3 install -r requirements.txt
|
||||
50
forum/docker-entrypoint.sh
Executable file
50
forum/docker-entrypoint.sh
Executable file
@@ -0,0 +1,50 @@
|
||||
#!/bin/sh
|
||||
PYTHON=python3
|
||||
SQLITE=sqlite3
|
||||
|
||||
export DB="/app/forum.db"
|
||||
export SERVER=gunicorn
|
||||
export PID="forum.pid"
|
||||
export WORKERS=4
|
||||
|
||||
if [[ $( stat -c %u /app ) -ne $( id -u ) ]]; then
|
||||
echo User id and /app folder owner do not match
|
||||
printf 'UID: %s\nFolder: %s\n' $( id -u ) $( stat -c %u /app )
|
||||
exit 1
|
||||
fi
|
||||
|
||||
set -eu
|
||||
. /opt/venv/bin/activate
|
||||
if [[ -e "$DB" ]]; then
|
||||
$SQLITE -header "$DB" "SELECT version,name,description,registration_enabled,login_required FROM config"
|
||||
echo Database already exists
|
||||
else
|
||||
password=$($PYTHON tool.py password "$ADMINP")
|
||||
time=$($PYTHON -c 'import time; print(time.time_ns())')
|
||||
version=$($PYTHON tool.py version)
|
||||
|
||||
$SQLITE "$DB" -init schema.txt "insert into config (
|
||||
version,
|
||||
name,
|
||||
description,
|
||||
secret_key,
|
||||
captcha_key,
|
||||
registration_enabled,
|
||||
login_required
|
||||
)
|
||||
values (
|
||||
'$version',
|
||||
'Forum',
|
||||
'',
|
||||
'$(head -c 30 /dev/urandom | base64)',
|
||||
'$(head -c 30 /dev/urandom | base64)',
|
||||
0,
|
||||
1
|
||||
)"
|
||||
$SQLITE "$DB" "
|
||||
insert into users (name, password, role, join_time)
|
||||
values (lower('$ADMINU'), '$password', 2, $time)
|
||||
"
|
||||
fi
|
||||
|
||||
exec "$SERVER" -w $WORKERS 'main:app' --pid="$PID" -b 0.0.0.0:5000
|
||||
27
forum/restart.sh
Executable file
27
forum/restart.sh
Executable file
@@ -0,0 +1,27 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
SERVER="$1"
|
||||
if [ -z "$SERVER" ]
|
||||
then
|
||||
echo "SERVER is not set" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case "$SERVER" in
|
||||
dev)
|
||||
touch main.py
|
||||
;;
|
||||
gunicorn)
|
||||
if [ -z "$PID" ]
|
||||
then
|
||||
echo "PID is not set" >&2
|
||||
exit 1
|
||||
fi
|
||||
kill -hup $(cat "$PID")
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported $SERVER" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
BIN
forum/static/button.png
Normal file
BIN
forum/static/button.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.4 KiB |
3
forum/version.py
Executable file
3
forum/version.py
Executable file
@@ -0,0 +1,3 @@
|
||||
|
||||
VERSION = "agreper-v0.1.1q1"
|
||||
|
||||
Reference in New Issue
Block a user