warehouse
Replenishing stock is one of the most important repetitive tasks performed by a retailer, yet for majority of the retail world this process is highly inefficient and time consuming. We've created a (first of its kind) open-source and free iPad application that makes the stock ordering process fast and fun, and frees up a whole lot of time for store managers and warehouse folks. To top it off, this app works beautifully with your inventory and POS! Just let us know which system(s) you use and we can add the integration.
Pre-requisites
- Install Docker for Mac Or Windows
- Install Docker Compose
Deploy
-
Clone warehouse and any submodules
git clone --recursive git@github.com:ShoppinPal/warehouse.git
-
Setup project root directory as an environment variable:
export PROJECT_ROOT=`pwd` && echo $PROJECT_ROOT
-
Open project directory:
cd $PROJECT_ROOT
-
Copy the templates for configuring environment variables
cp .env.example .env cp worker.env.example worker.env
-
Move to the terraform directory::
cd $PROJECT_ROOT/terraform
-
Use
$PROJECT_ROOT/terraform/example.tfvars.file
as template:cp $PROJECT_ROOT/terraform/example.tfvars.file $PROJECT_ROOT/terraform/terraform.tfvars
-
Fill in the values for the env variables in
$PROJECT_ROOT/terraform/terraform.tfvars
-
-
Run these commands:
# Tested with Terraform v0.10.8 as of this commit. # step 1 cd $PROJECT_ROOT/terraform/ # step 2 docker-compose run terraform init # step 3: used to download and update modules mentioned in the root module (main.tf). docker-compose run terraform get # step 4 docker-compose run terraform plan # step 5 docker-compose run terraform apply # step 6: to destroy your infrastructure! docker-compose run terraform destroy # Once terraform creates queues, the appropriate # AWS_SQS_URL and AWS_SQS_REGION will be # automatically added to your .env and worker.env files.
-
Fill in any remaining values that are empty in
.env
andworker.env
files -
Open file
/etc/hosts
:sudo vim /etc/hosts
-
Append the following line
127.0.0.1 lb
-
-
To build and run, choose:
- background:
docker-compose up -d --build
- foreground:
docker-compose up --build
- background:
-
For local development, open application in your browser with url http://lb/
Troubleshooting
-
To start and troubleshoot a docker image:
## # docker-compose run <service_name> /bin/bash ## docker-compose run web /bin/bash
-
To attach to a running container and troubleshoot:
## # docker-compose exec <service_name> /bin/bash ## docker-compose exec web /bin/bash
-
If builds keep failing and it makes no-sence, maybe cleanup is required, try:
docker system prune # either: docker-compose up -d --build --force-recreate # or: docker-compose up --build --force-recreate
FAQs
- What is the difference between
docker-compose.local.yml
anddocker-compose.yml
?- The
docker-compose.local.yml
file is a close mirror ofdocker-compose.yml
with a few small differences to ease the life of developers when developing or torubleshooting.
- The
- How should we install dependencies based on the projects's nodejs version?
-
If you are performing this BEFORE the
Dockerfile
build, where the following command runs:RUN mv /apps/warehouse/node_modules /apps/node_modules
, then use:docker-compose run nodejs node --version docker-compose run nodejs npm install
-
If you are performing this AFTER the
Dockerfile
build, where the following command runs:RUN mv /apps/warehouse/node_modules /apps/node_modules
, then use:docker-compose run nodejs node --version docker-compose run nodejs npm --prefix /apps/warehouse install
-
- How should we add NEW dependencies based on the projects's nodejs version?
- If you are performing this BEFORE the
Dockerfile
build, where the following command runs:RUN mv /apps/warehouse/node_modules /apps/node_modules
, then use:docker-compose run nodejs npm install --save-dev --save-exact <someNewModule> docker-compose run nodejs npm install --save --save-exact <someNewModule> # NOTE: If you add a new module then please # make sure to shrinkwrap it using: # docker-compose run nodejs npm shrinkwrap
- If you are performing this AFTER the
Dockerfile
build, where the following command runs:RUN mv /apps/warehouse/node_modules /apps/node_modules
, then use:docker-compose run nodejs npm install --prefix /apps/warehouse --save-dev --save-exact <someNewModule> docker-compose run nodejs npm install --prefix /apps/warehouse --save --save-exact <someNewModule> # NOTE: If you add a new module then please # make sure to shrinkwrap it using: # docker-compose run nodejs npm shrinkwrap
- If you are performing this BEFORE the
Remote Dev Machine
-
Setup dropbox on local machine
-
Create a directory on your local machine to house any and all projects meant for remote development:
mkdir -p ~/Dropbox/rDev
-
Go to the directory where you cloned warehouse locally, for example:
cd ~/dev/warehouse
-
Then wire it up to your local Dropbox folder:
ln -s `pwd` ~/Dropbox/rDev/warehouse
-
When you check the status on your remote machine/droplet via your ssh terminal:
~/bin/dropbox.py status
... you will see that the sync has begun:~/bin/dropbox.py status Syncing (239 files remaining) Downloading 239 files...
-
From now on whenever you work on your remote machine/droplet via your ssh terminal ... switch to the directory that has the sync enabled:
cd ~/Dropbox/rDev/warehouse/
to do your work.-
prevent remote machine from syncing unnecessary stuff to dropbox:
cd ~/Dropbox && dropbox exclude add rDev/warehouse/node_modules cd ~/Dropbox && dropbox exclude add rDev/warehouse/client/app/bower_components cd ~/Dropbox && dropbox exclude add rDev/warehouse-workers/node_modules
-
-
On your local machine use
selective sync
via the dropbox UI to prevent the transfer of bulky dependencies back to your local filesystem. Go ahead and excludenode_modules
andbower_components
etc from being synced back to your machine. This is all done via UI so it should be very easy.dropbox > preferences > account > selective sync > change settings...