First prototype of Dockerfile
parent
26b2745e9b
commit
63af040a38
|
@ -0,0 +1,2 @@
|
||||||
|
data/
|
||||||
|
.venv/
|
|
@ -1,2 +1,3 @@
|
||||||
__pycache__/
|
__pycache__/
|
||||||
.venv/
|
.venv/
|
||||||
|
data/
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
FROM archlinux:latest
|
||||||
|
|
||||||
|
ADD https://github.com/just-containers/s6-overlay/releases/download/v2.2.0.3/s6-overlay-amd64-installer /tmp
|
||||||
|
|
||||||
|
|
||||||
|
# Install the s6 overlay, nginx
|
||||||
|
RUN chmod +x /tmp/s6-overlay-amd64-installer && \
|
||||||
|
/tmp/s6-overlay-amd64-installer / && \
|
||||||
|
pacman \
|
||||||
|
-Syu \
|
||||||
|
--noconfirm \
|
||||||
|
--needed \
|
||||||
|
python python-pip nginx && \
|
||||||
|
useradd -s /bin/false nginx && \
|
||||||
|
mkdir /data
|
||||||
|
|
||||||
|
ENV REPO_DIR=/data
|
||||||
|
|
||||||
|
# Install Python app
|
||||||
|
WORKDIR /usr/src/app
|
||||||
|
COPY requirements.txt app.py ./
|
||||||
|
RUN pip install -r requirements.txt && \
|
||||||
|
pacman -Rs --noconfirm python-pip
|
||||||
|
|
||||||
|
# Copy over s6 services files
|
||||||
|
COPY s6/services /etc/services.d
|
||||||
|
|
||||||
|
# Copy over nginx config file
|
||||||
|
COPY nginx.conf /etc/nginx/nginx.conf
|
||||||
|
|
||||||
|
# The entrypoint is the init script for s6
|
||||||
|
ENTRYPOINT ["/init"]
|
||||||
|
CMD ["nginx"]
|
12
Makefile
12
Makefile
|
@ -16,3 +16,15 @@ venv: $(VENV)/bin/activate
|
||||||
clean:
|
clean:
|
||||||
@ rm -rf '$(VENV)'
|
@ rm -rf '$(VENV)'
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
|
|
||||||
|
run:
|
||||||
|
@ API_KEY=test REPO_DIR=data '$(VENV)/bin/flask' run
|
||||||
|
.PHONY: run
|
||||||
|
|
||||||
|
gunicorn:
|
||||||
|
@ API_KEY=test REPO_DIR=data '$(VENV)/bin/gunicorn' app:app
|
||||||
|
.PHONY: gunicorn
|
||||||
|
|
||||||
|
image:
|
||||||
|
@ docker build -t chewingbever/arch-repo .
|
||||||
|
.PHONY: image
|
||||||
|
|
2
app.py
2
app.py
|
@ -57,7 +57,7 @@ def upload_file():
|
||||||
file.save(path)
|
file.save(path)
|
||||||
|
|
||||||
# Run repo-add on the file
|
# Run repo-add on the file
|
||||||
res = subprocess.run(["repo-add", path.parent / "repo.db.tar.gz", path])
|
res = subprocess.run(["repo-add", path.parent.parent / "repo.db.tar.gz", path])
|
||||||
|
|
||||||
if res.returncode != 0:
|
if res.returncode != 0:
|
||||||
path.unlink()
|
path.unlink()
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
user nginx;
|
||||||
|
worker_processes auto;
|
||||||
|
daemon off;
|
||||||
|
|
||||||
|
error_log /var/log/nginx/error.log notice;
|
||||||
|
pid /var/run/nginx.pid;
|
||||||
|
|
||||||
|
|
||||||
|
events {
|
||||||
|
worker_connections 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
http {
|
||||||
|
include /etc/nginx/mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
|
||||||
|
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
||||||
|
'$status $body_bytes_sent "$http_referer" '
|
||||||
|
'"$http_user_agent" "$http_x_forwarded_for"';
|
||||||
|
|
||||||
|
access_log /var/log/nginx/access.log main;
|
||||||
|
|
||||||
|
sendfile on;
|
||||||
|
|
||||||
|
keepalive_timeout 65;
|
||||||
|
|
||||||
|
client_max_body_size 0;
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
listen [::]:80;
|
||||||
|
|
||||||
|
location /api {
|
||||||
|
proxy_pass http://localhost:8000/;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
root /data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/usr/bin/execlineb -S0
|
||||||
|
|
||||||
|
s6-svscanctl -t /var/run/s6/services
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/usr/bin/with-contenv sh
|
||||||
|
|
||||||
|
exec /usr/bin/gunicorn --chdir /usr/src/app app:app
|
Reference in New Issue