From da5b752014b0e6871eaf2f9fed768f158a352305 Mon Sep 17 00:00:00 2001 From: Fabien BOURGEOIS Date: Sat, 21 Oct 2017 16:32:23 +0200 Subject: [PATCH] =?UTF-8?q?[ADD][WIP]Frapp=C3=A9/ERPNext=20own=20images=20?= =?UTF-8?q?(not=20finished)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frappe/Dockerfile.erpnext7 | 17 ++ frappe/base.yml | 47 +++++ frappe/frappe/Dockerfile | 25 +++ frappe/frappe/Dockerfile.dev | 11 ++ frappe/frappe/Dockerfile.manual | 51 +++++ frappe/frappe/Dockerfile.manual.wip | 49 +++++ frappe/frappe/Dockerfile.prod | 22 +++ frappe/frappe/production.conf | 26 +++ frappe/frappe/simple_mariadb_config.cnf | 11 ++ frappe/frappe_docker-master/.travis.yml | 30 +++ frappe/frappe_docker-master/Dockerfile | 40 ++++ frappe/frappe_docker-master/LICENSE.md | 21 ++ frappe/frappe_docker-master/README.md | 180 ++++++++++++++++++ .../conf/mariadb-conf.d/my.cnf | 32 ++++ .../conf/mariadb-conf.d/mysql.cnf | 2 + .../mariadb-conf.d/mysqld_safe_syslog.cnf | 4 + .../conf/mariadb-conf.d/mysqldump.cnf | 5 + frappe/frappe_docker-master/dbench | 42 ++++ .../frappe_docker-master/docker-compose.yml | 64 +++++++ .../frappe-bench/Procfile_docker | 8 + .../sites/common_site_config_docker.json | 20 ++ .../redis-conf/pids/redis_cache.pid | 1 + .../redis-conf/pids/redis_queue.pid | 1 + .../redis-conf/pids/redis_socketio.pid | 1 + .../redis-conf/redis_cache.conf | 8 + .../redis-conf/redis_queue.conf | 3 + .../redis-conf/redis_socketio.conf | 3 + frappe/frappe_docker-master/test.py | 29 +++ frappe/production.conf.erpnext7 | 26 +++ 29 files changed, 779 insertions(+) create mode 100644 frappe/Dockerfile.erpnext7 create mode 100644 frappe/base.yml create mode 100644 frappe/frappe/Dockerfile create mode 100644 frappe/frappe/Dockerfile.dev create mode 100644 frappe/frappe/Dockerfile.manual create mode 100644 frappe/frappe/Dockerfile.manual.wip create mode 100644 frappe/frappe/Dockerfile.prod create mode 100644 frappe/frappe/production.conf create mode 100644 frappe/frappe/simple_mariadb_config.cnf create mode 100644 frappe/frappe_docker-master/.travis.yml create mode 100644 frappe/frappe_docker-master/Dockerfile create mode 100644 frappe/frappe_docker-master/LICENSE.md create mode 100644 frappe/frappe_docker-master/README.md create mode 100644 frappe/frappe_docker-master/conf/mariadb-conf.d/my.cnf create mode 100644 frappe/frappe_docker-master/conf/mariadb-conf.d/mysql.cnf create mode 100644 frappe/frappe_docker-master/conf/mariadb-conf.d/mysqld_safe_syslog.cnf create mode 100644 frappe/frappe_docker-master/conf/mariadb-conf.d/mysqldump.cnf create mode 100755 frappe/frappe_docker-master/dbench create mode 100644 frappe/frappe_docker-master/docker-compose.yml create mode 100644 frappe/frappe_docker-master/frappe-bench/Procfile_docker create mode 100644 frappe/frappe_docker-master/frappe-bench/sites/common_site_config_docker.json create mode 100644 frappe/frappe_docker-master/redis-conf/pids/redis_cache.pid create mode 100644 frappe/frappe_docker-master/redis-conf/pids/redis_queue.pid create mode 100644 frappe/frappe_docker-master/redis-conf/pids/redis_socketio.pid create mode 100644 frappe/frappe_docker-master/redis-conf/redis_cache.conf create mode 100644 frappe/frappe_docker-master/redis-conf/redis_queue.conf create mode 100644 frappe/frappe_docker-master/redis-conf/redis_socketio.conf create mode 100644 frappe/frappe_docker-master/test.py create mode 100644 frappe/production.conf.erpnext7 diff --git a/frappe/Dockerfile.erpnext7 b/frappe/Dockerfile.erpnext7 new file mode 100644 index 0000000..adb973d --- /dev/null +++ b/frappe/Dockerfile.erpnext7 @@ -0,0 +1,17 @@ +FROM lukptr/ubuntu:16.04-23112016 +MAINTAINER lukptr + +ENV FRAPPE_USER=frappe \ + MYSQL_PASSWORD=12345678 \ + ADMIN_PASSWORD=12345678 \ + DEBIAN_FRONTEND=noninteractive +RUN useradd $FRAPPE_USER && mkdir /home/$FRAPPE_USER && chown -R $FRAPPE_USER.$FRAPPE_USER /home/$FRAPPE_USER +WORKDIR /home/$FRAPPE_USER +RUN wget https://raw.githubusercontent.com/frappe/bench/master/playbooks/install.py && sed -i "s/'', ''/'$MYSQL_PASSWORD', '$ADMIN_PASSWORD'/g" install.py && \ + apt update && python install.py --production --user $FRAPPE_USER +RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/ /home/$FRAPPE_USER/.cache +COPY production.conf /etc/supervisor/conf.d/ +WORKDIR /home/$FRAPPE_USER/frappe-bench +EXPOSE 80 25 + +CMD ["/usr/bin/supervisord","-n"] diff --git a/frappe/base.yml b/frappe/base.yml new file mode 100644 index 0000000..46fb081 --- /dev/null +++ b/frappe/base.yml @@ -0,0 +1,47 @@ +version: '2.2' +services: + + frappebase: + init: true + build: ./frappe + image: registry.yaltik.net/frappe:yaltik + environment: + FRAPPE_USER: frappe + MYSQL_PASSWORD: somethingToChange + ADMIN_PASSWORD: somethingToChange + stdin_open: true + tty: true + + frappedev: + extends: + service: frappebase + build: + context: ./frappe + dockerfile: Dockerfile.dev + image: registry.yaltik.net/frappe:yaltikdev + ports: + - 8000:8000 + - 9000:9000 + - 6787:6787 + - 8001:80 + + frappeprod: + extends: + service: frappebase + build: + context: ./frappe + dockerfile: Dockerfile.prod + image: registry.yaltik.net/frappe:yaltikprod + ports: + - 8000:8000 + - 9000:9000 + - 6787:6787 + - 80:80 + + # erpnext: + # erinit: true + # erbuild: ./erpnext + # erimage: registry.yaltik.net/eprnext:yaltik + # erenvironment: + # er POSTGRES_USER: odoo + # er POSTGRES_PASSWORD: somethingToChange diff --git a/frappe/frappe/Dockerfile b/frappe/frappe/Dockerfile new file mode 100644 index 0000000..5895d61 --- /dev/null +++ b/frappe/frappe/Dockerfile @@ -0,0 +1,25 @@ +FROM ubuntu:16.04 +MAINTAINER Yaltik - Fabien Bourgeois + +# Environment variables +ENV FRAPPE_USER=frappe \ + MYSQL_PASSWORD=somethingToChange \ + ADMIN_PASSWORD=somethingToChange + +# Global dependencies +RUN apt-get update +RUN apt-get install -y sudo curl +# Frappe dependencies +RUN apt-get install -y python-minimal build-essential python-setuptools + +# Create frappe user +RUN useradd $FRAPPE_USER -m +# RUN usermod -aG sudo $FRAPPE_USER +RUN echo "$FRAPPE_USER ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/frappe +WORKDIR /home/$FRAPPE_USER + +# Install frappe +RUN curl -LO https://raw.githubusercontent.com/frappe/bench/master/playbooks/install.py + +# Volumes : data dir +VOLUME /home/$FRAPPE_USER/ diff --git a/frappe/frappe/Dockerfile.dev b/frappe/frappe/Dockerfile.dev new file mode 100644 index 0000000..a7a1637 --- /dev/null +++ b/frappe/frappe/Dockerfile.dev @@ -0,0 +1,11 @@ +FROM registry.yaltik.net/frappe:yaltik +MAINTAINER Yaltik - Fabien Bourgeois + +# Frappe development setup + +RUN python install.py --develop --user $FRAPPE_USER --mysql-root-password $MYSQL_PASSWORD --admin-password $ADMIN_PASSWORD +USER frappe +WORKDIR /home/$FRAPPE_USER/frappe-bench + +EXPOSE 8000 9000 6787 + diff --git a/frappe/frappe/Dockerfile.manual b/frappe/frappe/Dockerfile.manual new file mode 100644 index 0000000..cf280b8 --- /dev/null +++ b/frappe/frappe/Dockerfile.manual @@ -0,0 +1,51 @@ +FROM ubuntu:16.04 +MAINTAINER Yaltik - Fabien Bourgeois + +# Environment variables +ENV FRAPPE_USER=frappe \ + MYSQL_PASSWORD=somethingToChange \ + ADMIN_PASSWORD=somethingToChange + +# Global dependencies +RUN apt-get update +RUN apt-get install -y sudo curl wget +RUN apt-get install -y git build-essential python-setuptools python-pip python-dev libffi-dev libssl-dev +RUN apt-get install -y python-minimal build-essential python-setuptools +RUN pip install --upgrade setuptools pip + +# Create frappe user +RUN useradd $FRAPPE_USER -m +# RUN usermod -aG sudo $FRAPPE_USER +RUN echo "$FRAPPE_USER ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/frappe +WORKDIR /home/$FRAPPE_USER + +# Ubuntu package install +RUN apt-get install -y build-essential redis-server software-properties-common libxrender1 libxext6 xfonts-75dpi xfonts-base libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev python-tk apt-transport-https libsasl2-dev libldap2-dev libtiff5-dev tcl8.6-dev tk8.6-dev + +# NodeJS external repository +RUN echo "deb [arch=amd64,i386] https://deb.nodesource.com/node_6.x xenial main" \ + > /etc/apt/sources.list.d/nodesource.list \ + && curl 'https://keyserver.ubuntu.com/pks/lookup?op=get&fingerprint=on&search=0x1655A0AB68576280' | apt-key add - +RUN apt-get update && apt-get install -y nodejs + +# WKHTMLTOPDF +RUN curl -L 'https://github.com/frappe/wkhtmltopdf/raw/master/wkhtmltox-0.12.3_linux-generic-amd64.tar.xz' > /tmp/wkhtmltox.tar.xz +RUN cd /tmp/ && tar Jxf wkhtmltox.tar.xz \ + && cp /tmp/wkhtmltox/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf \ + && chmod +x /usr/local/bin/wkhtmltopdf + +# MariaDb +RUN echo "deb [arch=amd64,i386] http://nyc2.mirrors.digitalocean.com/mariadb/repo/10.1/ubuntu xenial main" \ + > /etc/apt/sources.list.d/mariadb.list \ + && curl 'https://keyserver.ubuntu.com/pks/lookup?op=get&fingerprint=on&search=0xF1656F24C74CD1D8' | apt-key add - +RUN export DEBIAN_FRONTEND=noninteractive && apt-get update \ + && apt-get install -y mariadb-server mariadb-client mariadb-common libmariadbclient-dev +RUN pip install mysql-python==1.2.5 +COPY simple_mariadb_config.cnf /etc/mysql/conf.d/frappe.cnf +RUN mysqladmin -u root password $MYSQL_PASSWORD + +# Install frappe +# RUN curl -LO https://raw.githubusercontent.com/frappe/bench/master/playbooks/install.py + +# Volumes : data dir +VOLUME /home/$FRAPPE_USER/ diff --git a/frappe/frappe/Dockerfile.manual.wip b/frappe/frappe/Dockerfile.manual.wip new file mode 100644 index 0000000..8921125 --- /dev/null +++ b/frappe/frappe/Dockerfile.manual.wip @@ -0,0 +1,49 @@ +FROM debian:jessie +MAINTAINER Yaltik - Fabien Bourgeois + +# Global dependencies +RUN apt-get update +RUN apt-get install -y sudo curl wget rlwrap +RUN apt-get install -y iputils-ping +RUN apt-get install -y git build-essential python-setuptools python-pip python-dev libffi-dev libssl-dev +RUN apt-get install -y redis-tools software-properties-common libxrender1 libxext6 xfonts-75dpi xfonts-base +RUN apt-get install -y libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev python-tk apt-transport-https libsasl2-dev libldap2-dev libtiff5-dev tcl8.6-dev tk8.6-dev +RUN apt-get install -y libmysqlclient-dev mariadb-client mariadb-common +RUN pip install --upgrade setuptools pip +# NodeJS +RUN curl -LO https://nodejs.org/dist/v6.11.3/node-v6.11.3-linux-x64.tar.xz && tar xJf node-v6.11.3-linux-x64.tar.xz && ln -s node-v6.11.3-linux.x64/bin/node /usr/bin/ && ln -s node-v6.11.3-linux.x64/bin/npm /usr/bin/ +# WKHTMLTOPDF +RUN apt-get install -y wkhtmltopdf + +# Environment variables +ENV FRAPPE_USER=frappe \ + MYSQL_PASSWORD=somethingToChange \ + ADMIN_PASSWORD=somethingToChange + +# Create frappe user +RUN useradd $FRAPPE_USER -m +# RUN usermod -aG sudo $FRAPPE_USER +RUN echo "$FRAPPE_USER ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/frappe + +# Install frappe +RUN git clone --depth 1 https://github.com/frappe/bench bench_repo +RUN pip install -e bench-repo +RUN curl -LO https://raw.githubusercontent.com/frappe/bench/master/playbooks/install.py +RUN python install.py --production --user $FRAPPE_USER --mysql-root-password $MYSQL_PASSWORD --admin-password $ADMIN_PASSWORD +# Supervidor production configuration +# COPY production.conf /etc/supervisor/conf.d/ + +WORKDIR /home/$FRAPPE_USER +USER frappe + +# Cleanup (to move on production) +# RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/ /home/$FRAPPE_USER/.cache + +WORKDIR /home/$FRAPPE_USER/frappe-bench +# Default ports +EXPOSE 80 25 + +# Volumes : data dir +VOLUME /opt/odoo/data + +# CMD ["/usr/bin/supervisord","-n"] diff --git a/frappe/frappe/Dockerfile.prod b/frappe/frappe/Dockerfile.prod new file mode 100644 index 0000000..37ce6a8 --- /dev/null +++ b/frappe/frappe/Dockerfile.prod @@ -0,0 +1,22 @@ +FROM registry.yaltik.net/frappe:yaltik +MAINTAINER Yaltik - Fabien Bourgeois + +# Frappe production setup + +RUN python install.py --production --user $FRAPPE_USER --mysql-root-password $MYSQL_PASSWORD --admin-password $ADMIN_PASSWORD + +# Supervisor configuration +COPY production.conf /etc/supervisor/conf.d/ +# Cleanup +RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/ + +# Frappe local production setup +USER frappe +WORKDIR /home/$FRAPPE_USER/frappe-bench +RUN bench setup production + +# Default ports +EXPOSE 80 25 + +# Default command +CMD ["/usr/bin/supervisord","-n"] diff --git a/frappe/frappe/production.conf b/frappe/frappe/production.conf new file mode 100644 index 0000000..3cca118 --- /dev/null +++ b/frappe/frappe/production.conf @@ -0,0 +1,26 @@ +[program:mysqld] +command=/usr/bin/pidproxy /var/mysqld/mysqld.pid /usr/bin/mysqld_safe --pid-file=/var/run/mysqld/mysqld.pid +autostart=true +autorestart=true +user=root + +[program:crond] +command=/usr/sbin/cron -f +process_name=cron +numprocs=1 +directory=/tmp +umask=022 +priority=999 +autostart=true +autorestart=true +startsecs=10 +startretries=3 +exitcodes=0,2 +stopsignal=TERM +stopwaitsecs=10 +user=root + +[program:nginx] +command=/usr/sbin/nginx -g "daemon off;" +stdout_events_enabled=true +stderr_events_enabled=true diff --git a/frappe/frappe/simple_mariadb_config.cnf b/frappe/frappe/simple_mariadb_config.cnf new file mode 100644 index 0000000..2e0c0d6 --- /dev/null +++ b/frappe/frappe/simple_mariadb_config.cnf @@ -0,0 +1,11 @@ +[mysqld] +innodb-file-format=barracuda +innodb-file-per-table=1 +innodb-large-prefix=1 +character-set-client-handshake = FALSE +character-set-server = utf8mb4 +collation-server = utf8mb4_unicode_ci +max_allowed_packet=64M + +[mysql] +default-character-set = utf8mb4 diff --git a/frappe/frappe_docker-master/.travis.yml b/frappe/frappe_docker-master/.travis.yml new file mode 100644 index 0000000..87f5edd --- /dev/null +++ b/frappe/frappe_docker-master/.travis.yml @@ -0,0 +1,30 @@ +language: python +python: + - "2.7" +env: + - DOCKER_COMPOSE_VERSION: 1.8.0 + +services: + - docker + +install: + - docker-compose build + - docker-compose up -d + - docker exec -it -u root frappe bash -c "cd /home/frappe && chown -R frappe:frappe ./*" + - docker exec -i frappe bash -c "cd .. && bench init frappe-bench --skip-bench-mkdir --skip-redis-config-generation && cd frappe-bench" + - docker exec -i frappe bash -c "mv Procfile_docker Procfile && mv sites/common_site_config_docker.json sites/common_site_config.json" + - docker exec -i frappe bash -c "bench new-site site1.local" + - docker exec -i frappe bash -c "bench get-app erpnext https://github.com/frappe/erpnext" + - docker exec -i frappe bash -c "bench --site site1.local install-app erpnext" + - docker exec -i -u root frappe bash -c "echo 127.0.0.1 site1.local >> /etc/hosts" + - sudo su -c 'echo 127.0.0.1 site1.local >> /etc/hosts' + - pip3 install requests + +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 + - python3 test.py + - docker-compose stop diff --git a/frappe/frappe_docker-master/Dockerfile b/frappe/frappe_docker-master/Dockerfile new file mode 100644 index 0000000..62fc03e --- /dev/null +++ b/frappe/frappe_docker-master/Dockerfile @@ -0,0 +1,40 @@ + +#bench Dockerfile + +FROM ubuntu:16.04 +MAINTAINER Vishal Seshagiri + +USER root +RUN apt-get update +RUN apt-get install -y iputils-ping +RUN apt-get install -y git build-essential python-setuptools python-dev libffi-dev libssl-dev +RUN apt-get install -y redis-tools software-properties-common libxrender1 libxext6 xfonts-75dpi xfonts-base +RUN apt-get install -y libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev python-tk apt-transport-https libsasl2-dev libldap2-dev libtiff5-dev tcl8.6-dev tk8.6-dev +RUN apt-get install -y wget +RUN wget https://bootstrap.pypa.io/get-pip.py && python get-pip.py +RUN pip install --upgrade setuptools pip +RUN useradd -ms /bin/bash frappe +RUN apt-get install -y curl +RUN apt-get install -y rlwrap +RUN apt-get install redis-tools +RUN apt-get install -y nano + + +#nodejs +RUN apt-get install curl +RUN curl https://deb.nodesource.com/node_6.x/pool/main/n/nodejs/nodejs_6.7.0-1nodesource1~xenial1_amd64.deb > node.deb \ + && dpkg -i node.deb \ + && rm node.deb +RUN apt-get install -y wkhtmltopdf + +USER frappe +WORKDIR /home/frappe +RUN git clone -b develop https://github.com/vishalseshagiri/bench.git bench-repo + +USER root +RUN pip install -e bench-repo +RUN apt-get install -y libmysqlclient-dev mariadb-client mariadb-common +RUN chown -R frappe:frappe /home/frappe/* + +USER frappe +WORKDIR /home/frappe/frappe-bench diff --git a/frappe/frappe_docker-master/LICENSE.md b/frappe/frappe_docker-master/LICENSE.md new file mode 100644 index 0000000..c4e7b3d --- /dev/null +++ b/frappe/frappe_docker-master/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Frappe Technologies Pvt. Ltd. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/frappe/frappe_docker-master/README.md b/frappe/frappe_docker-master/README.md new file mode 100644 index 0000000..1b483f8 --- /dev/null +++ b/frappe/frappe_docker-master/README.md @@ -0,0 +1,180 @@ +# frappe_docker +[![Build Status](https://travis-ci.org/frappe/frappe_docker.svg?branch=master)](https://travis-ci.org/frappe/frappe_docker) + +- [Docker](https://docker.com/) is an open source project to pack, ship and run any Linux application in a lighter weight, faster container than a traditional virtual machine. + +- Docker makes it much easier to deploy [frappe](https://github.com/frappe/frappe) on your servers. + +- This container uses [bench](https://github.com/frappe/bench) to install frappe. + +## Getting Started + +These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system. + +### Prerequisites + +[Docker](https://www.docker.com/) + +[Docker Compose](https://docs.docker.com/compose/overview/) + +### Container Configuration + +#### ports: + +``` +ports: + - "3307:3307" mariadb-port + - "8000:8000" webserver-port + - "11000:11000" redis-cache + - "12000:12000" redis-queue + - "13000:13000" redis-socketio + - "9000:9000" socketio-port + - "6787:6787" file-watcher-port +``` + +Expose port 3307 inside the container on port 3307 on ALL local host interfaces. In order to bind to only one interface, you may specify the host's IP address as `([:[host_port]])|():[/udp]` as defined in the [docker port binding documentation](http://docs.docker.com/userguide/dockerlinks/). The port 3307 of the mariadb container and port 8000 of the frappe container is exposed to the host machine and other containers. + +#### volumes: + +``` +volumes: + - ./frappe-bench:/home/frappe/frappe-bench + - ./conf/mariadb-conf.d:/etc/mysql/conf.d + - ./redis-conf/redis_socketio.conf:/etc/conf.d/redis.conf + - ./redis-conf/redis_queue.conf:/etc/conf.d/redis.conf + - ./redis-conf/redis_cache.conf:/etc/conf.d/redis.conf +``` +Exposes a directory inside the host to the container. + +#### links: + +``` +links: + - redis-cache + - redis-queue + - redis-socketio + - mariadb +``` + +Links allow you to define extra aliases by which a service is reachable from another service. + +#### depends_on: + +``` +depends_on: + - mariadb + - redis-cache + - redis-queue + - redis-socketio +``` +Express dependency between services, which has two effects: + +1. docker-compose up will start services in dependency order. In the following example, mariadb and redis will be started before frappe. + +2. docker-compose up SERVICE will automatically include SERVICE’s dependencies. In the following example, docker-compose up docker_frappe will also create and start mariadb and redis. + +### Installation + +#### 1. Installation Pre-requisites + +- Install [Docker](https://docs.docker.com/engine/installation) Community Edition + +- Install [Docker Compose](https://docs.docker.com/compose/install/) (only for Linux users). Docker for Mac, Docker for Windows, and Docker Toolbox include Docker Compose + +#### 2. Build the container and install bench + +* Build the container and install bench inside the container. + + 1.Build the 5 linked containers frappe, mariadb, redis-cache, redis-queue and redis-socketio using this command. Make sure your current working directory is frappe_docker which contains the docker-compose.yml and Dockerfile. + It creates a user, frappe inside the frappe container, whose working directory is /home/frappe. It also clones + the bench-repo from [here](https://github.com/frappe/bench) + + docker-compose up -d + + Note: Please do not remove the bench-repo directory the above commands will create + + + +#### Basic Usage +1. Starting docker containers + + This command can be used to start containers + + docker-compose start + +2. Accessing the frappe container via CLI + + docker exec -i -u root frappe bash -c "cd /home/frappe && chown -R frappe:frappe ./*" + docker exec -it frappe bash + +3. Create a new bench + + The init command will create a bench directory with frappe framework + installed. It will be setup for periodic backups and auto updates once + a day. + + cd .. && bench init frappe-bench --skip-bench-mkdir --skip-redis-config-generation && cd frappe-bench + mv Procfile_docker Procfile && mv sites/common_site_config_docker.json sites/common_site_config.json + +4. Set the db host for bench (points bench to the mariadb container) since the 3 containers are linked + + bench set-mariadb-host mariadb + +5. Add a site (make sure your current path is /home/frappe/frappe-bench) + + Frappe apps are run by frappe sites and you will have to create at least one + site. The new-site command allows you to do that. + + bench new-site site1.local + +6. Add apps (make sure your current path is /home/frappe/frappe-bench) + + The get-app command gets remote frappe apps from a remote git repository and installs them. Example: [erpnext](https://github.com/frappe/erpnext) + + bench get-app erpnext https://github.com/frappe/erpnext + +7. Install apps (make sure your current path is /home/frappe/frappe-bench) + + To install an app on your new site, use the bench `install-app` command. + + bench --site site1.local install-app erpnext + +8. Start bench (make sure your current path is /home/frappe/frappe-bench) + + To start using the bench, use the `bench start` command + + bench start + +9. Exiting the frappe container and stopping all the containers gracefully. + + exit + docker-compose stop + +10. Removing docker containers + + docker-compose rm + +11. Removing dangling volumes + + The volume frappe on your local machine is shared by the host(your local machine) and the frappe container. + Please do not delete this volume from your local machine. Any changes made in this directory will reflect on both + the container and the host. The below command specifies how to remain dangling volumes which may be taking up + unecessary space on your host. + + docker volume rm $(docker volume ls -f dangling=true -q) + +To login to Frappe / ERPNext, open your browser and go to `[your-external-ip]:8000`, probably `localhost:8000` + +The default username is "Administrator" and password is what you set when you created the new site. + +## Built With + +* [Docker](https://www.docker.com/) + +## Contributing + +Feel free to contribute to this project and make the container better + +## License + +This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details diff --git a/frappe/frappe_docker-master/conf/mariadb-conf.d/my.cnf b/frappe/frappe_docker-master/conf/mariadb-conf.d/my.cnf new file mode 100644 index 0000000..9cc98d8 --- /dev/null +++ b/frappe/frappe_docker-master/conf/mariadb-conf.d/my.cnf @@ -0,0 +1,32 @@ +# MariaDB-specific config file. +# Read by /etc/mysql/my.cnf + +[client] +# Default is Latin1, if you need UTF-8 set this (also in server section) +#default-character-set = utf8 + +[mysqld] +# +# * Character sets +# +# Default is Latin1, if you need UTF-8 set all this (also in client section) +# +#character-set-server = utf8 +#collation-server = utf8_general_ci +#character_set_server = utf8 +#collation_server = utf8_general_ci +# Import all .cnf files from configuration directory +bind-address = 0.0.0.0 +!includedir /etc/mysql/mariadb.conf.d/ + + +[mysqld] +innodb-file-format=barracuda +innodb-file-per-table=1 +innodb-large-prefix=1 +character-set-client-handshake = FALSE +character-set-server = utf8mb4 +collation-server = utf8mb4_unicode_ci + +[mysql] +default-character-set = utf8mb4 diff --git a/frappe/frappe_docker-master/conf/mariadb-conf.d/mysql.cnf b/frappe/frappe_docker-master/conf/mariadb-conf.d/mysql.cnf new file mode 100644 index 0000000..b4a7402 --- /dev/null +++ b/frappe/frappe_docker-master/conf/mariadb-conf.d/mysql.cnf @@ -0,0 +1,2 @@ +[mysql] + diff --git a/frappe/frappe_docker-master/conf/mariadb-conf.d/mysqld_safe_syslog.cnf b/frappe/frappe_docker-master/conf/mariadb-conf.d/mysqld_safe_syslog.cnf new file mode 100644 index 0000000..c09bd0e --- /dev/null +++ b/frappe/frappe_docker-master/conf/mariadb-conf.d/mysqld_safe_syslog.cnf @@ -0,0 +1,4 @@ +[mysqld_safe] +skip_log_error +syslog + diff --git a/frappe/frappe_docker-master/conf/mariadb-conf.d/mysqldump.cnf b/frappe/frappe_docker-master/conf/mariadb-conf.d/mysqldump.cnf new file mode 100644 index 0000000..d9d88ac --- /dev/null +++ b/frappe/frappe_docker-master/conf/mariadb-conf.d/mysqldump.cnf @@ -0,0 +1,5 @@ +[mysqldump] +quick +quote-names +max_allowed_packet = 16M + diff --git a/frappe/frappe_docker-master/dbench b/frappe/frappe_docker-master/dbench new file mode 100755 index 0000000..9e339a6 --- /dev/null +++ b/frappe/frappe_docker-master/dbench @@ -0,0 +1,42 @@ +#!/bin/bash + +display_usage() { + echo "$(basename "$0") [-h] [-c \"\"]" + echo '' + echo 'where:' + echo ' -h show this help text' + echo ' -c execute a command inside docker using docker exec' + echo ' -s adds site-names to /etc/hosts file in the container to facilitate multisite access' +} + +if [[ $# -eq 0 ]]; then + docker exec -it frappe bash +else + while getopts ':hsc:' option; do + case "$option" in + h) + display_usage + exit + ;; + c) + docker exec frappe bash -c "bench $OPTARG" + ;; + s) + a=$(cd frappe-bench && ls sites/*/site_config.json | grep -o '/.\+/') + a="${a//$'\n'/ }" + a=$(echo $a | tr -d / ) + result="127.0.0.1 ${a}" + echo $result + docker exec -u root -i frappe bash -c "echo ${result} | tee --append /etc/hosts" + ;; + \?) + echo "Invalid option: -$OPTARG" >&2 + exit 1 + ;; + :) + echo "Option -$OPTARG requires an argument." >&2 + exit 1 + ;; + esac + done +fi diff --git a/frappe/frappe_docker-master/docker-compose.yml b/frappe/frappe_docker-master/docker-compose.yml new file mode 100644 index 0000000..0d9bc07 --- /dev/null +++ b/frappe/frappe_docker-master/docker-compose.yml @@ -0,0 +1,64 @@ +version: '2' +services: + mariadb: + image: "mariadb" + environment: + - MYSQL_ROOT_PASSWORD=123 + - MYSQL_USER=root + volumes: + - ./conf/mariadb-conf.d:/etc/mysql/conf.d + ports: + - "3307:3307" #mariadb-port + container_name: mariadb + + redis-cache: + image: redis:alpine + + volumes: + - ./redis-conf/redis_cache.conf:/etc/conf.d/redis.conf + + command: ["redis-server","/etc/conf.d/redis.conf"] + + container_name: redis-cache + + redis-queue: + image: redis:alpine + + volumes: + - ./redis-conf/redis_queue.conf:/etc/conf.d/redis.conf + + command: ["redis-server","/etc/conf.d/redis.conf"] + + container_name: redis-queue + + redis-socketio: + image: redis:alpine + + volumes: + - ./redis-conf/redis_socketio.conf:/etc/conf.d/redis.conf + + command: ["redis-server","/etc/conf.d/redis.conf"] + + container_name: redis-socketio + + frappe: + volumes: + - ./frappe-bench:/home/frappe/frappe-bench + build: . + ports: + - "8000:8000" #webserver_port + - "9000:9000" #socketio_port + - "6787:6787" #file_watcher_port + stdin_open: true + tty: true + links: + - redis-cache + - redis-queue + - redis-socketio + - mariadb + depends_on: + - mariadb + - redis-cache + - redis-queue + - redis-socketio + container_name: frappe diff --git a/frappe/frappe_docker-master/frappe-bench/Procfile_docker b/frappe/frappe_docker-master/frappe-bench/Procfile_docker new file mode 100644 index 0000000..e2a5bd9 --- /dev/null +++ b/frappe/frappe_docker-master/frappe-bench/Procfile_docker @@ -0,0 +1,8 @@ +web: bench serve --port 8000 + +socketio: /usr/bin/node apps/frappe/socketio.js +watch: bench watch +schedule: bench schedule +worker_short: bench worker --queue short +worker_long: bench worker --queue long +worker_default: bench worker --queue default diff --git a/frappe/frappe_docker-master/frappe-bench/sites/common_site_config_docker.json b/frappe/frappe_docker-master/frappe-bench/sites/common_site_config_docker.json new file mode 100644 index 0000000..65145f3 --- /dev/null +++ b/frappe/frappe_docker-master/frappe-bench/sites/common_site_config_docker.json @@ -0,0 +1,20 @@ +{ + "auto_update": false, + "background_workers": 1, + "db_host": "mariadb", + "file_watcher_port": 6787, + "frappe_user": "frappe", + "gunicorn_workers": 4, + "rebase_on_pull": false, + "redis_cache": "redis://redis-cache:13000", + "redis_queue": "redis://redis-queue:11000", + "redis_socketio": "redis://redis-socketio:12000", + "restart_supervisor_on_update": false, + "root_password": "123", + "serve_default_site": true, + "shallow_clone": true, + "socketio_port": 9000, + "update_bench_on_update": true, + "webserver_port": 8000, + "admin_password": "admin" +} diff --git a/frappe/frappe_docker-master/redis-conf/pids/redis_cache.pid b/frappe/frappe_docker-master/redis-conf/pids/redis_cache.pid new file mode 100644 index 0000000..209e3ef --- /dev/null +++ b/frappe/frappe_docker-master/redis-conf/pids/redis_cache.pid @@ -0,0 +1 @@ +20 diff --git a/frappe/frappe_docker-master/redis-conf/pids/redis_queue.pid b/frappe/frappe_docker-master/redis-conf/pids/redis_queue.pid new file mode 100644 index 0000000..a45fd52 --- /dev/null +++ b/frappe/frappe_docker-master/redis-conf/pids/redis_queue.pid @@ -0,0 +1 @@ +24 diff --git a/frappe/frappe_docker-master/redis-conf/pids/redis_socketio.pid b/frappe/frappe_docker-master/redis-conf/pids/redis_socketio.pid new file mode 100644 index 0000000..f04c001 --- /dev/null +++ b/frappe/frappe_docker-master/redis-conf/pids/redis_socketio.pid @@ -0,0 +1 @@ +29 diff --git a/frappe/frappe_docker-master/redis-conf/redis_cache.conf b/frappe/frappe_docker-master/redis-conf/redis_cache.conf new file mode 100644 index 0000000..7e1f926 --- /dev/null +++ b/frappe/frappe_docker-master/redis-conf/redis_cache.conf @@ -0,0 +1,8 @@ +dbfilename redis_cache.rdb +bind 0.0.0.0 +port 13000 +maxmemory 292mb +maxmemory-policy allkeys-lru +appendonly no + +save "" diff --git a/frappe/frappe_docker-master/redis-conf/redis_queue.conf b/frappe/frappe_docker-master/redis-conf/redis_queue.conf new file mode 100644 index 0000000..b4f96cb --- /dev/null +++ b/frappe/frappe_docker-master/redis-conf/redis_queue.conf @@ -0,0 +1,3 @@ +dbfilename redis_queue.rdb +bind 0.0.0.0 +port 11000 diff --git a/frappe/frappe_docker-master/redis-conf/redis_socketio.conf b/frappe/frappe_docker-master/redis-conf/redis_socketio.conf new file mode 100644 index 0000000..1fff87e --- /dev/null +++ b/frappe/frappe_docker-master/redis-conf/redis_socketio.conf @@ -0,0 +1,3 @@ +dbfilename redis_socketio.rdb +bind 0.0.0.0 +port 12000 diff --git a/frappe/frappe_docker-master/test.py b/frappe/frappe_docker-master/test.py new file mode 100644 index 0000000..e29fa85 --- /dev/null +++ b/frappe/frappe_docker-master/test.py @@ -0,0 +1,29 @@ +import subprocess, requests, datetime, _thread, time, os, signal +start_time = datetime.datetime.now().time() +bench_start = 'docker exec -i frappe bash -c "bench start"' +process = subprocess.Popen(bench_start, stdout=subprocess.PIPE , shell=True) + + +def print_out(val,delay): + while 1: + time.sleep(delay) + if val == 1: + result,error = process.communicate() + print(result) + elif val == 2: + try: + global r + r = requests.get("http://site1.local:8000") + print(r) + except requests.exceptions.ConnectionError as e: + print(e) + +_thread.start_new_thread(print_out, (1, 1)) +#result, error = process.communicate() +_thread.start_new_thread(print_out, (2, 1)) + +time.sleep(30) + +process.kill() + +assert ' Login ' in str(r.content) diff --git a/frappe/production.conf.erpnext7 b/frappe/production.conf.erpnext7 new file mode 100644 index 0000000..3cca118 --- /dev/null +++ b/frappe/production.conf.erpnext7 @@ -0,0 +1,26 @@ +[program:mysqld] +command=/usr/bin/pidproxy /var/mysqld/mysqld.pid /usr/bin/mysqld_safe --pid-file=/var/run/mysqld/mysqld.pid +autostart=true +autorestart=true +user=root + +[program:crond] +command=/usr/sbin/cron -f +process_name=cron +numprocs=1 +directory=/tmp +umask=022 +priority=999 +autostart=true +autorestart=true +startsecs=10 +startretries=3 +exitcodes=0,2 +stopsignal=TERM +stopwaitsecs=10 +user=root + +[program:nginx] +command=/usr/sbin/nginx -g "daemon off;" +stdout_events_enabled=true +stderr_events_enabled=true