Commit 957a0cbe authored by Поляков Сергей Викторович's avatar Поляков Сергей Викторович
Browse files

Исправлены ошибки docker-compose файла, теперь доступно запустить веб сервис с...

Исправлены ошибки docker-compose файла, теперь доступно запустить веб сервис с помощью docker-compose

В  docker-compose добавлена переменная окружения: можно менять тип БД, "redis" или "yaml"
parent ff1c64a6
FROM python:3.9-slim
COPY . /usr/src/app/
WORKDIR /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt
\ No newline at end of file
# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
\ No newline at end of file
Клиент-серверное приложение на Flask (Python 3.9.7)
Функционал сервер:
База данных:
- yml-файл
- Redis
Endpoint GET:
- Возвращает все соответствия из БД
Endpoint POST:
- Принимает длинную ссылку и метод шифрования 'uuid4' или 'timestamp',
генерирует 6 уникальных символов для ссылки)
- Возвращает сгенерированную короткую ссылку.
Дополнительно:
- Обработка не существующей страницы
- Обработка страницы redirect
Функционал Клиент:
Страница Главная:
- Отображает форму для сокращения ссылки:
Поле для вставки ссылки
Меню выбора метода шифрования
Кнопка "Сократить" для генерации короткой ссылки
- Отображает таблицу всех существующих ссылок в БД:
№, Ключ, Значение
Страница Переадресации:
- Отображает таймер через которое будет выполен redirect
- Отображает блок рекламы
Страница 404:
- Отображает сообщение об ошибке 404
......@@ -5,7 +5,6 @@ from lib.libs import Config
from lib.yaml_lib import YamlManager
from lib.db_manager import DB_Manager
current_dir = pathlib.Path.cwd()
conf = Config(pathlib.Path(current_dir, "pref.json"))
......@@ -30,7 +29,8 @@ def index():
all_links.update({key: db.get_by_key(key)})
if request.method == "POST":
new_link = add_link(value=request.form['full_link'], method=request.form['generate_method'])
new_link = add_link(value=request.form['full_link'],
method=request.form['generate_method'])
short_link_div = True
return render_template("index.html",
all_links=all_links,
......@@ -51,12 +51,10 @@ def redirecting(key):
value = db.get_by_key(key)
return render_template("redirect.html", value=value)
else:
return redirect("/404")
return render_template('404.html')
@app.errorhandler(404)
def page_not_found(e):
return render_template("404.html")
def not_found(e):
return render_template('404.html')
# if __name__ == "__main__":
# app.run()
version: "3"
version: "3.9"
services:
flask:
web:
build: .
command: flask run --host=0.0.0.0
environment:
- FLASK_APP=main.py
- STORAGE_TYPE=yaml
ports:
- "5000:5000"
volumes:
- .:/code
environment:
FLASK_ENV: development
STORAGE_TYPE: redis
REDIS_HOST: redis
redis:
image: "redis"
restart: always
ports:
- "6379:6379"
# hostname: localhost
image: "redis:alpine"
\ No newline at end of file
......@@ -14,10 +14,10 @@ def export_data():
value = yaml_manager.get_by_key(key)
print(f"Successfully added key: {key}, value: {value}")
with RedisManager(conf.redis_host, conf.redis_port, conf.redis_db) as f:
f.save(key,value)
f.save(key, value)
except Exception as e:
print(f'Error: {e}')
if __name__ == "__main__":
export_data()
\ No newline at end of file
export_data()
......@@ -21,14 +21,14 @@ class Config:
storage = js['storage']
name_yaml_bd = js['name_yaml_bd']
if os.getenv('REDIS_HOST'):
redis_host = os.getenv('REDIS_HOST')
if os.getenv('REDIS_HOST') == 'redis':
redis_host = 'redis'
elif os.getenv('REDIS_HOST') == 'localhost':
redis_host = 'localhost'
else:
redis_host = js['redis_host']
if os.getenv('REDIS_PORT'):
redis_port = os.getenv('REDIS_PORT')
else:
redis_port = js['redis_port']
redis_port = js['redis_port']
redis_db = js['redis_db']
domen_name = js['domen_name']
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment