From acee24b577ec84af060a7750173e693bf3eddc25 Mon Sep 17 00:00:00 2001 From: chabad360 Date: Sat, 2 Nov 2019 01:47:38 -0400 Subject: [PATCH] refactor: dockerfile * testing replacement for dbench * fixed perm issue and added docker control * fixes and tests fixed travis test, and perm issue * auto add permissions * bench setup anything-else should work now * removed adding site names to host (its pointless) * moved redis configuration folder into conf/ * added a docker down feature to dbench and changed some of the docs * hopefully should fix the args issue * Condensed Dockerfile Updated to latest node, and uses python-pip, also condensed a lot the Dockerfile. * Removed extra line * Removed MAINTAINER in favor of LABEL * all installs are in one apt command * Switch bench to dbench, added -s feature of dbench to bench. updated Docker file with sudo and vim, and setup travis to run with said changes * dockerfile: clean up (#52) * Condensed Dockerfile Updated to latest node, and uses python-pip, also condensed a lot the Dockerfile. * fixed travis, and cleaned up dbench a little * Oops... * oops, but only for travis, this runs fine * Travis! * added help to dbench, and updated readme * changes some of the wording of the help message * dbench: fix init issues (#55) ./dbench init would lead to 'missing argument: PATH' issue (#54), and could not find Procfile_docker and site-config. Signed-off-by: Chinmay Pai * bench setup anything-else should work now * Clean cache to get a smaller image (#57) Please include this commit to decrease the size of the docker image, the "rm -rf /var/lib/apt/lists/*" it is not usefull if it is not used in the same stage of the apt-get install RUN, similar with pip cache. References: - https://linux.die.net/man/8/apt-get - https://stackoverflow.com/questions/9510474/removing-pips-cache - https://semaphoreci.com/blog/2016/12/13/lightweight-docker-images-in-5-steps.html By making a contribution to this project, I certify that: (a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; (b) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved. Signed-off-by: William Moreno Reyes * removed adding site names to host (its pointless) * moved redis configuration folder into conf/ * added a docker down feature to dbench and changed some of the docs * Changed the readme significantly Please enter the commit message for your changes. Lines starting * changed test.py to avoid naming errors * moving some things around for less lines * some more slight name changes * added a .gitignore * added the frappe folder again * added a .dockerignore and fixed the dockerfile up a bit * Updating travis' docker and compose This is the commit message #3: * bringing chown in dbench back * some refractoring * implementing codacy sugestions * moving some things around * Updating dbench in some areas * some random changes and fixes * dockerfile refactoring * Refractoring, reducing layers * removing the py script that took too many lines to do one simple thing * Fixed up the readme * some refractoring * moving to debian slim and refractoring * adding some logging * Updated travis to ubuntu xenial, should fix the curl issue * manually building curl, cause we cant use the latest version... * maybe we dont need it * changing the url to curl * trying this instead * lets just let it pollute the stream * please pollute! * some last bits of refractoring * some refractoring * fixed a few issues and did some refractoring * needed an excuse to get travis to build * adding in some changes learnt from seibert-media/erpnext-docker * that should fix that * where did that "h" come from? * fix that... * maybe that * please work... * try that for locales * dont know what that's doing there * so it didn't work... * lets try doing locales like this * forgot the -y... * trying it this way * and if we dont remove it? * what about like this? * small change * small change * I wonder... * some small refractoring * saving some time * bring that back * fix the smallie --- .travis.yml | 5 ----- Dockerfile | 30 ++++++++++++++++++++---------- README.md | 6 +++--- dbench | 29 ++++++++++++++++------------- test.sh | 12 ++++++++---- 5 files changed, 47 insertions(+), 35 deletions(-) diff --git a/.travis.yml b/.travis.yml index 058bfdfb..de8802ae 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,10 +26,5 @@ install: - ./dbench setup hosts script: - - docker-compose ps | grep -i frappe - - docker-compose ps | grep -i redis-cache - - docker-compose ps | grep -i redis-queue - - docker-compose ps | grep -i redis-socketio - - docker-compose ps | grep -i mariadb - ./test.sh - ./dbench setup docker stop diff --git a/Dockerfile b/Dockerfile index 4a8191d8..1bf30b73 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,32 +3,42 @@ FROM debian:9.6-slim LABEL author=frappé -# Set locale C.UTF-8 for mariadb and general locale data -ENV LANG C.UTF-8 +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends locales \ + && sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen \ + && dpkg-reconfigure --frontend=noninteractive locales \ + && apt-get clean && rm -rf /var/lib/apt/lists/* + +# Set locale en_us.UTF-8 for mariadb and general locale data +ENV PYTHONIOENCODING=utf-8 +ENV LANGUAGE=en_US.UTF-8 +ENV LANG=en_US.UTF-8 +ENV LC_ALL=en_US.UTF-8 # Install all neccesary packages -RUN apt-get update && apt-get install -y --no-install-suggests --no-install-recommends build-essential cron curl git iputils-ping libffi-dev \ - liblcms2-dev libldap2-dev libmariadbclient-dev libsasl2-dev libssl-dev libtiff5-dev libwebp-dev mariadb-client \ - python-dev python-pip python-setuptools python-tk redis-tools rlwrap software-properties-common sudo tk8.6-dev \ - vim xfonts-75dpi xfonts-base wget wkhtmltopdf \ +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-suggests --no-install-recommends \ + build-essential cron curl git libffi-dev liblcms2-dev libldap2-dev libmariadbclient-dev libsasl2-dev libssl-dev libtiff5-dev \ + libwebp-dev mariadb-client iputils-ping python-dev python-pip python-setuptools python-tk redis-tools rlwrap \ + software-properties-common sudo tk8.6-dev vim xfonts-75dpi xfonts-base wget wkhtmltopdf \ && apt-get clean && rm -rf /var/lib/apt/lists/* \ - && pip install --upgrade setuptools pip --no-cache \ && curl https://deb.nodesource.com/node_10.x/pool/main/n/nodejs/nodejs_10.10.0-1nodesource1_amd64.deb > node.deb \ && dpkg -i node.deb \ && rm node.deb \ && npm install -g yarn # Add frappe user and setup sudo -RUN useradd -ms /bin/bash -G sudo frappe \ - && printf '# Sudo rules for frappe\nfrappe ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/frappe +RUN groupadd -g 500 frappe \ + && useradd -ms /bin/bash -u 500 -g 500 -G sudo frappe \ + && printf '# Sudo rules for frappe\nfrappe ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/frappe \ + && chown -R 500:500 /home/frappe -WORKDIR /home/frappe # Install bench RUN pip install -e git+https://github.com/frappe/bench.git#egg=bench --no-cache USER frappe + # Add some bench files COPY --chown=frappe:frappe ./frappe-bench /home/frappe/frappe-bench + WORKDIR /home/frappe/frappe-bench EXPOSE 8000 9000 6787 diff --git a/README.md b/README.md index 2f914d98..a9efb466 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Frappe on Docker -[![Build Status](https://travis-ci.org/frappe/frappe_docker.svg?branch=develop)](https://travis-ci.org/frappe/frappe_docker) +[![Build Status](https://travis-ci.com/frappe/frappe_docker.svg)](https://travis-ci.com/frappe/frappe_docker) This is a repo designed to aide setting up frappe/ERPNext on docker. @@ -38,7 +38,7 @@ Unfortunately, this container is not curently suited for a production environmen ./dbench start ``` -4. Use Frappe: +4. Use Frappe: Open your browser to `localhost:8000/login`. Then login using the username `Administrator` and the password `admin`. ### Basic Usage of `./dbench` @@ -51,7 +51,7 @@ Unfortunately, this container is not curently suited for a production environmen - `stop`: Stops the containers with `docker-compose stop`. - `down`: Deletes the containers and the coresponding volumes with `docker-compose down`. -- `./dbench setup hosts`: Adds all sites to the containers hosts file. +- `./dbench setup hosts`: Adds all sites to the containers hosts file. **Note:** Run this after you've added a new site to avoid errors. - `./dbench -c frappe | root `: Runs a command in the container, as the selected user. diff --git a/dbench b/dbench index cbed7707..49bbc625 100755 --- a/dbench +++ b/dbench @@ -24,11 +24,14 @@ elif [[ "$1" == 'setup' ]]; then docker-compose up -d fi elif [[ "$2" == 'hosts' ]]; then - a=$(run frappe "ls sites/*/site_config.json | grep -o '/.\+/'") \ + a=$(run frappe "ls sites/*/site_config.json | grep -o '/.\+/'") a="${a//$'\n'/ }" a=$(echo "$a" | tr -d / ) result="127.0.0.1 ${a}" - run root "echo ${result} | tee --append /etc/hosts" + run root "echo ${result} | tee -a /etc/hosts" + else + IFS=" " + run frappe "bench $*" fi elif [[ "$1" == '-c' ]]; then shift @@ -36,22 +39,22 @@ elif [[ "$1" == '-c' ]]; then shift run "$user" "$@" elif [[ "$1" == '-h' ]]; then - echo "$0 [-h] | [ -c frappe | root ] [ ]" + echo "$0 [-h] | [-c frappe|root command] | [setup hosts|docker [stop|down]] | [bench_command]" echo "" - echo "$0 extends the Frappe Bench tool, and is used like it. However, it extends the tool in a few places." + echo "$0 is a wrapper for the Frappe Bench tool, and is used like it. However, it extends the tool in a few places." echo "Usage:" - echo " $0" - echo " Launches you into an interactive shell in the container as user frappe" - echo " $0 setup docker [ stop | down ]" - echo " Starts and builds the docker containers using \"docker-compose up -d\"" - echo " $0 setup hosts" - echo " Adds all sites to the containers hosts file" - echo " $0 -c frappe | root " - echo " Runs a command in the container, as the selected user" echo " $0 -h" echo " Shows this help message" + echo " $0" + echo " Launches you into an interactive shell in the container as user frappe" echo " $0 " - echo " Runs a command in bench, i.e. $0 new-site site1.local = bench new-site site1.local" + echo " Runs the bench command , i.e. $0 new-site \"site1.local\" = bench new-site \"site1.local\"" + echo " $0 setup docker [ stop | down ]" + echo " Builds and starts the docker containers using \"docker-compose up -d\"" + echo " $0 setup hosts" + echo " Adds all site names to the containers hosts file" + echo " $0 -c frappe | root " + echo " Runs a command in the container, as the selected user" else IFS=" " run frappe "bench $*" diff --git a/test.sh b/test.sh index 0896e498..86b591e5 100644 --- a/test.sh +++ b/test.sh @@ -1,8 +1,12 @@ #!/bin/bash -cat <(./dbench start) & +docker container ls | grep frappe +docker container ls | grep mariadb +docker container ls | grep redis-cache +docker container ls | grep redis-queue +docker container ls | grep redis-socketio -sleep 5 +cat <(./dbench start) & while ! [[ $i == 20 ]] do @@ -11,7 +15,7 @@ do } 1>&2 sleep 2 i=$((i + 1)) + echo "${output}" | grep ' Login ' && exit done - -echo "${output}" | grep ' Login ' || exit 1 \ No newline at end of file +if ! [[ "$?" == 0 ]]; then exit 1; fi