From: Clifton Palmer Date: Tue, 31 Oct 2023 20:25:41 +0000 (-0500) Subject: Version update 1.1.0 X-Git-Tag: 1.1.0 X-Git-Url: http://git.purplebirdman.com/web-gallery.git/commitdiff_plain/17e2bbe79fb35e0422b14a63bafb8be48a0a8d78?ds=sidebyside Version update 1.1.0 * Fixed templates not being copied into their folders * Refactored navigator and server layout * Added prod compose file --- diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 1d580e7..0000000 --- a/Dockerfile +++ /dev/null @@ -1,19 +0,0 @@ -FROM python:3.7-alpine - -ENV FLASK_APP=app.py -ENV FLASK_RUN_HOST=0.0.0.0 -ENV FLASK_PORT=5000 - -EXPOSE 5000 - -RUN apk update && \ - apk add --no-cache gcc musl-dev linux-headers libpq-dev python3-dev - -WORKDIR /app -COPY ./requirements.txt /app -RUN pip install -r requirements.txt - -COPY ./app/app.py /app -COPY ./app/templates /app - -CMD ["flask", "run"] diff --git a/app/app.py b/app/app.py deleted file mode 100644 index 33aac3d..0000000 --- a/app/app.py +++ /dev/null @@ -1,64 +0,0 @@ -from flask import Flask, render_template -import os -import re - -app = Flask(__name__) -gallery_root = "/app/gallery" -get_num_regex = re.compile(r'\d+') - -@app.route('/') -def render_gallery(): - gallery_names = [] - with os.scandir(gallery_root) as galleries: - for gallery in galleries: - if not gallery.is_file(): - gallery_names.append(gallery.name) - gallery_names.sort() - return render_template( 'gallery.html', galleries=gallery_names ) - -def get_page_number_from_name(name): - try: - return int(get_num_regex.findall(name)[-1]) - except IndexError: - print ("Index error on name " + name, flush=True) - return -1 - -@app.route('/') -def render_pages(gallery=None): - template_pages = [] - with os.scandir(gallery_root + "/" + gallery) as pages: - for page in pages: - if page.is_file() and page.name.endswith('.png') or page.name.endswith('.jpg'): - template_pages.append({ - 'name': page.name, - 'number': get_page_number_from_name(page.name) - }) - template_pages = sorted(template_pages, key=lambda page: page['number']) - return render_template( 'pages.html', gallery=gallery, pages=template_pages ) - -@app.route('//') -def render_page(gallery=None, page_num=None): - - # find a page that I think corrosponds to this page number - page_name = None - with os.scandir(gallery_root + "/" + gallery) as pages: - for page in pages: - if page.is_file(): - num = get_page_number_from_name(page.name) - if int(page_num) == int(num): - page_name = page.name - break - - # if found, create src link to that page - if page_name: - src = '/images/{}/{}'.format( gallery, page_name ) - prev_page_url = "/{}/{}".format( gallery, page_num - 1) - next_page_url = "/{}/{}".format( gallery, page_num + 1) - - return render_template( 'page.html', - gallery=gallery, page_num=page_num, - title=page_name, src=src, alt=page_name, - prev_page_url=prev_page_url, - next_page_url=next_page_url ) - else: - return 'No page found' diff --git a/app/templates/gallery.html b/app/templates/gallery.html deleted file mode 100644 index 375ad57..0000000 --- a/app/templates/gallery.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - Gallery - - -

Gallery

- - - - diff --git a/app/templates/hello.html b/app/templates/hello.html deleted file mode 100644 index ce4191f..0000000 --- a/app/templates/hello.html +++ /dev/null @@ -1,5 +0,0 @@ - - -

Hello, world!

- - diff --git a/app/templates/page.html b/app/templates/page.html deleted file mode 100644 index fe075ed..0000000 --- a/app/templates/page.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - {{ title }} - - -
-
- - {{ alt }} - -
-

Home | {{ gallery }} | Prev, Next

-
- - diff --git a/app/templates/pages.html b/app/templates/pages.html deleted file mode 100644 index c1204c9..0000000 --- a/app/templates/pages.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - Pages - - -

Pages

- - - - diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml new file mode 100644 index 0000000..7e64b7f --- /dev/null +++ b/docker-compose-prod.yml @@ -0,0 +1,25 @@ +version: '3' +networks: + proxy: + external: true +services: + navigator: + image: cjpalmer/gallery-navigator:1.1.0 + volumes: + - gallery_data:/app/gallery + server: + image: cjpalmer/gallery-server:1.1.0 + volumes: + - gallery_data:/data/images + depends_on: + - navigator + networks: + - default + - proxy +volumes: + gallery_data: + driver: local + driver_opts: + o: bind + type: none + device: /mnt/gallery_data diff --git a/docker-compose.yml b/docker-compose.yml index 0dcd450..312c82d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,31 +1,21 @@ version: '3' services: - db: - image: postgres:13.4-alpine + navigator: + build: ./navigator + image: cjpalmer/gallery-navigator:1.1.0 + volumes: + - gallery_data:/app/gallery environment: - POSTGRES_USER: admin - POSTGRES_PASSWORD: adminpw - ports: - - 5432:5432 - web: - image: nginx:1.17 + FLASK_DEBUG: 1 + server: + build: ./server + image: cjpalmer/gallery-server:1.1.0 volumes: - - ./nginx.conf:/etc/nginx/nginx.conf - gallery_data:/data/images ports: - 80:80 depends_on: - - gallery - gallery: - build: . - image: cjpalmer/gallery:1.0.0 - volumes: - - gallery_data:/app/gallery - - ./app:/app - environment: - FLASK_DEBUG: 1 - depends_on: - - db + - navigator volumes: gallery_data: driver: local diff --git a/navigator/Dockerfile b/navigator/Dockerfile new file mode 100644 index 0000000..6591257 --- /dev/null +++ b/navigator/Dockerfile @@ -0,0 +1,19 @@ +FROM python:3.7-alpine + +ENV FLASK_APP=app.py +ENV FLASK_RUN_HOST=0.0.0.0 +ENV FLASK_PORT=5000 + +EXPOSE 5000 + +RUN apk update && \ + apk add --no-cache gcc musl-dev linux-headers libpq-dev python3-dev + +WORKDIR /app +COPY ./requirements.txt /app +RUN pip install -r requirements.txt + +COPY ./app/app.py /app +COPY ./app/templates/ /app/templates/ + +CMD ["flask", "run"] diff --git a/navigator/app/app.py b/navigator/app/app.py new file mode 100644 index 0000000..33aac3d --- /dev/null +++ b/navigator/app/app.py @@ -0,0 +1,64 @@ +from flask import Flask, render_template +import os +import re + +app = Flask(__name__) +gallery_root = "/app/gallery" +get_num_regex = re.compile(r'\d+') + +@app.route('/') +def render_gallery(): + gallery_names = [] + with os.scandir(gallery_root) as galleries: + for gallery in galleries: + if not gallery.is_file(): + gallery_names.append(gallery.name) + gallery_names.sort() + return render_template( 'gallery.html', galleries=gallery_names ) + +def get_page_number_from_name(name): + try: + return int(get_num_regex.findall(name)[-1]) + except IndexError: + print ("Index error on name " + name, flush=True) + return -1 + +@app.route('/') +def render_pages(gallery=None): + template_pages = [] + with os.scandir(gallery_root + "/" + gallery) as pages: + for page in pages: + if page.is_file() and page.name.endswith('.png') or page.name.endswith('.jpg'): + template_pages.append({ + 'name': page.name, + 'number': get_page_number_from_name(page.name) + }) + template_pages = sorted(template_pages, key=lambda page: page['number']) + return render_template( 'pages.html', gallery=gallery, pages=template_pages ) + +@app.route('//') +def render_page(gallery=None, page_num=None): + + # find a page that I think corrosponds to this page number + page_name = None + with os.scandir(gallery_root + "/" + gallery) as pages: + for page in pages: + if page.is_file(): + num = get_page_number_from_name(page.name) + if int(page_num) == int(num): + page_name = page.name + break + + # if found, create src link to that page + if page_name: + src = '/images/{}/{}'.format( gallery, page_name ) + prev_page_url = "/{}/{}".format( gallery, page_num - 1) + next_page_url = "/{}/{}".format( gallery, page_num + 1) + + return render_template( 'page.html', + gallery=gallery, page_num=page_num, + title=page_name, src=src, alt=page_name, + prev_page_url=prev_page_url, + next_page_url=next_page_url ) + else: + return 'No page found' diff --git a/navigator/app/templates/gallery.html b/navigator/app/templates/gallery.html new file mode 100644 index 0000000..375ad57 --- /dev/null +++ b/navigator/app/templates/gallery.html @@ -0,0 +1,15 @@ + + + + Gallery + + +

Gallery

+ + + + diff --git a/navigator/app/templates/hello.html b/navigator/app/templates/hello.html new file mode 100644 index 0000000..ce4191f --- /dev/null +++ b/navigator/app/templates/hello.html @@ -0,0 +1,5 @@ + + +

Hello, world!

+ + diff --git a/navigator/app/templates/page.html b/navigator/app/templates/page.html new file mode 100644 index 0000000..fe075ed --- /dev/null +++ b/navigator/app/templates/page.html @@ -0,0 +1,17 @@ + + + + {{ title }} + + +
+
+ + {{ alt }} + +
+

Home | {{ gallery }} | Prev, Next

+
+ + diff --git a/navigator/app/templates/pages.html b/navigator/app/templates/pages.html new file mode 100644 index 0000000..c1204c9 --- /dev/null +++ b/navigator/app/templates/pages.html @@ -0,0 +1,15 @@ + + + + Pages + + +

Pages

+ + + + diff --git a/navigator/requirements.txt b/navigator/requirements.txt new file mode 100644 index 0000000..ec23c0a --- /dev/null +++ b/navigator/requirements.txt @@ -0,0 +1,2 @@ +psycopg2 +flask diff --git a/nginx.conf b/nginx.conf deleted file mode 100644 index cff3e3b..0000000 --- a/nginx.conf +++ /dev/null @@ -1,17 +0,0 @@ -worker_processes auto; - -events { - worker_connections 1024; -} - -http { - server { - location / { - proxy_pass http://gallery:5000; - } - - location /images { - root /data; - } - } -} diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index ec23c0a..0000000 --- a/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -psycopg2 -flask diff --git a/server/Dockerfile b/server/Dockerfile new file mode 100644 index 0000000..139fc01 --- /dev/null +++ b/server/Dockerfile @@ -0,0 +1,3 @@ +FROM nginx:1.17 + +COPY ./nginx.conf /etc/nginx/nginx.conf diff --git a/server/nginx.conf b/server/nginx.conf new file mode 100644 index 0000000..63aacef --- /dev/null +++ b/server/nginx.conf @@ -0,0 +1,17 @@ +worker_processes auto; + +events { + worker_connections 1024; +} + +http { + server { + location / { + proxy_pass http://navigator:5000; + } + + location /images { + root /data; + } + } +}