I'm not working on this tool anymore. As a side-project, I'm willing to develop an equivalent webapp in Go, but It is far from usable.
I keep this code here for history, feel free to fork it and continue working on it if you want, but don't hope I will work on it again: that will not happen.
AwesomeShop is a light and fast e-boutique webapp, using modern techniques to achieve these goals.
AwesomeShop is written in Javascript/AngularJS and Python.
AweshomeShop uses the following awesome tools:
- webpages serving and API interface: Flask with Flask-RESTful, Marshmallow...
- data storage: MongoDB, MongoEngine...
- frontend: AngularJS, Bootstrap, FontAwesome...
- and much more libraries, thanks to all their authors!
This tool is first made for the Domotego online shop. But any contribution is accepted, even if it would not be used by Domotego.
Pull requests are welcome. Your code should be clean to be accepted in the main repository. And don't forget PEP 8!
Not related to Font-Awesome in any way... except that it uses it.
This name is only because this app is awesome, as all used modules. The world is awesome, Open Source is awesome, we are all awesome :)
GNU AGPL v3. You can take it, you can use it, you can modify it. But if you
modify it and use it, you must share your modifications. See COPYING
.
Thanks!
Create a config.py
file at the root of the project (in the same directory
as standalone.py
). Take needed directives from back/defaultconfig.py
.
Any directive defined in config.py
will override the equivalent in
back/defaultconfig.py
.
First, create a configuration file.
Example working on Ubuntu 16.04:
apt-get install mongodb-server npm nodejs-legacy npm install bower -g ./init_awesomeshop.sh ./init_webroot.sh source venv/bin/activate ./init_database.py ./standalone.py
For frontend development, you may also want to start the PLIM watcher, to automatically regenerate the HTML files:
./plim_watcher.py
First, install (and configure) a MongoDB server. Make sure your configuration file is okay.
You may preferably run Python in a virtualenv. Install the Python modules
described in requirements.txt
. For a standard installation, you may
simply use the init_awesomeshop.sh
script.
Afterwards, initialize the web root and the database if needed
(init_webroot.sh
and init_database.py
) - don't forget the virtualenv
if needed.
Then, serve webroot/
as static files and wsgi.app
on /api
with a
WSGI server...
Example conf for uWSGI:
[uwsgi] chdir = /srv/awesomeshop pythonpath = /srv/awesomeshop virtualenv = /srv/awesomeshop/venv mount = /api=wsgi:app manage-script-name = true
The parts you may modify locally, to customize the shop, are - at the moment -
limited to the LOGO_CONTENT
and HOME_CONTENT
variables, configured in
config.py
.
All text is in the reStructuredText format. There are two specific behaviors...
Use the following directive to include a list of all documentation pages:
.. doc-list::
Use the following format to include a link to a(nother) page:
[pageslug]
or:
[displayed text|pageslug]
For production deployment, refer to any good Flask WSGI deployment manual.
A docker image, generated with the Dockerfile in the current directory, is available on the docker hub under the name smaccagnoni/awesomeshop.
For this image to work, you need to provide the container a config.py file, mounted on /awesomeshop/config.py. To serve it, you need a reverse proxy, which will connect to the awesomeshop container on port 3031 using WSGI and serve it on /api. You also need an MongoDB instance.
The awesomeshop image also shares the web root in a volume, on /awesomeshop/webroot. You will probably want to mount external volumes on /awesomeshop/webroot/local for local files and /awesomeshop/webroot/photos for uploaded pictures.
An NginX configuration can contain the following parameters: