Skip to content

Latest commit

 

History

History
80 lines (57 loc) · 9.69 KB

README.md

File metadata and controls

80 lines (57 loc) · 9.69 KB

Social network (python3.6, flask-0.12.2, sqlalchemy-1.1.14)

Движок социальной сети

Неспешно развиваемый движок на фреймворке Flask, задействующий sqlalchemy, babel, google-captcha, ajax, qjuery, html5 (audio), оформленный в виде wsgi приложения и пригодный для запуска на серверах приложений uwsgi, gunicorn, tornado. Движок предназначен для развертывания в небольших корпоративных сетях, обладает всеми современными возможностями и позволяет пользователям регистрироваться, редактировать свой профиль, находить друзей, обмениваться сообщениями и файлами. Исключительной особенностью является фото-направленность - имеется не просто возможность добавлять собственные фотогалереи с коментариями и тегами, но также глобальный поиск среди общедоступных фотографий других пользователей по фильтру: модель камеры, теги, размер фото и другим. Фотолюбителю предоставлена возможность хранить на сервере полноразмерные фотографии и легко каталогизировать свой материал. Имеется возможность множественного добавления фотографий одним кликом и редактирование сообщений (удаление-добавление новых файлов).

Фронтенд не отличается богатством, но использует базовые принципы верстки с использованием http/css/js стека.

Установка:

Используя docker:

  1. Создаем сеть.
    docker network create photo_social_net
    
  2. Установка mysql и запуск инстанса для приложения.
    docker pull mysql:5.7
    docker run --name mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=webportal -e MYSQL_USER=flask -e MYSQL_PASSWORD=difficult -d -p 3306:3306 --network=photo_social_net -v /your/db/storage:/var/lib/mysql mysql --character-set-server=utf8 --collation-server=utf8_general_ci
    ./db_create
    

Известные проблемы MAC OS: wand может жаловаться на imagemagic, быстрофикс: brew install imagemagick@6 export MAGICK_HOME=/usr/local/opt/imagemagick@6 MySQL с версии 8.0 поменяли способ аутентификации и алхимия может кидать исключение: Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(/usr/local/mysql/lib/plugin/caching_sha2_password.so, 2): image not found Workaround - продолжать использовать mysql 5.7 (или не использовать mysql вообще, что лучше).

  1. Деплоймент и запуск приложения.
    docker build -t photo_social .
    docker run --name webapp -d -p80:80 -e DB_IP=mysql --network=photo_social_net -v ~/your/upload/storage:/app/user_upload photo_social
    

Готово! Nginx+uwsgi+flask ждут тебя на localhost:80

Более подробное описание смотри в родительских образах:

  1. https://github.com/tiangolo/uwsgi-nginx-flask-docker
  2. https://hub.docker.com/r/tiangolo/uwsgi-nginx/

NB: после запуска контейнера с mysql разумеется нужно посмотреть его адрес (docker inspect mysql) и вбить его в конфиг приложения перед созданием образа. В дальейших PR, возможно, появится docker-compose.

Движок прошел тестирование и не имеет серьезных логических ошибок, а также видимых дыр в безопасности. В учетных записях используется досессинная модель ввиду простоты, поэтому берегите ваши кукис-файлы xD

Быстрый деплоймент может стать непростой задачей ввиду наличия множества питон-плагинов. Перед запуском необходимо создать и настроить базу данных (автор использует mysql, но склалхеми не накладывает ограничений и вы можете использовать другую), далее запустить скрипт генерации таблиц из моделей.

Ниже приведены скриншоты развернутого приложения на домашнем нетбуке: Домашняя страница пользователя. Сюда вы попадаете после регистрации и логина. Здесь вы и другие пользователи могут оставлять сообщения на своей стене, коментировать сообщения, делиться файлами. home page

Страница редакторования личных данных. В отличие от многих социальных сетей кнопка "удалить профиль" действительно удаляет профиль, рекурсивно, т.е. все сообщения-коментарии и вами загруженные на сервер файлы. edit info

К каждому сообщению можно прикреплять файлы и фотографии, фотографии можно просмотреть в циклическом порядке, используя кнопки навигации. view image

Галереи пользователя содержат фотографии, которые можно упорядочить по тегам и присвоить красивое описание. view gallery

Личные сообщения используют принципы безопасности, исключен доступ к вашим личным сообщениям другими пользователями, просмотр личных файлов и фотографий. Удаление сообщения с одной стороны исключают показ сообщения, удаление с двух сторон запускают удаление сообщения и файлов с сервера. view pm

Просмотр списка друзей. Друзья подразумевают собой отображение изменений их данных, добавление фото и сообщений на стене в вашей ленте новостей. friend list

Уникальная возможность для движков социальной сети - глобальный поиск загруженных на сервер по фильтру. Работает благодаря тому, что при загрузке фотографии сохраняется информация из exif. Теперь вы можете легко найти нужную фотографию, а также сравнить две или несколько камер по качеству съемки. image search

Автор настоятельно рекомендует использовать сервер приложений uwsgi и проксирующий nginx для раздачи статики (и конечно же linux-based дистрибутив). Все страницы даже на сверхслабом железе (домашнем нетбуке Asus Eeepc) без кеширующего прокси рендерятся за приемлемые 200-500мс, ajax позволяет существенно сократить нагрузку, запросы к orm оптимизированы и сокращены до минимума.

Дальнейшая разработка будет направлена на вынесение api для запуска websocket-сервера с существующими моделями, а также подготовке для этого фронтенда и доведение дизайна до человечески-приемлемого общепринятого стандарта.

По всем вопросам, включая поддержку, разработку и деплоймент обращаться к автору. Контакты tg: @jerunman, jabber: [email protected], email: [email protected], vk: vk.com/j3ntry Любая поддержка, багрепорты и PR будут приняты с благодарностью.