From a37592379e0a94f31a474ff79c8212803852acd1 Mon Sep 17 00:00:00 2001 From: Aaron Wood Date: Fri, 20 Jan 2023 14:55:28 -0800 Subject: [PATCH] Ease development with Docker --- README.md | 96 ++-------------------------- docker-compose.yml | 103 +++++++++++++++++++++++++++++++ docker/Dockerfile-app | 14 +++++ docker/Dockerfile-worker | 2 + docs/browser-address.png | Bin 4021 -> 0 bytes docs/ip-a.png | Bin 51782 -> 0 bytes open_energy_view/celery.py | 2 +- open_energy_view/celery_tasks.py | 30 ++++----- open_energy_view/resources.py | 5 +- run-cpu-worker | 26 -------- run-io-worker | 4 -- run-wsgi-dev | 26 -------- test-gui | 25 -------- 13 files changed, 142 insertions(+), 191 deletions(-) create mode 100644 docker-compose.yml create mode 100644 docker/Dockerfile-app create mode 100644 docker/Dockerfile-worker delete mode 100644 docs/browser-address.png delete mode 100644 docs/ip-a.png delete mode 100755 run-cpu-worker delete mode 100755 run-io-worker delete mode 100755 run-wsgi-dev delete mode 100755 test-gui diff --git a/README.md b/README.md index c0781ea..cece320 100644 --- a/README.md +++ b/README.md @@ -18,103 +18,17 @@ If you are a PG&E customer you can link your account now! If you are not a PG&E # Development -## Environment Setup (Ubuntu 20.04) +## Environment Setup (Docker) -Process notes here: https://github.com/JPHutchins/open-energy-view/issues/31 +You can get an environment setup easily using Docker. Make sure you have Docker and Docker Compose installed. -The following notes are for setting up the environment with a Windows 10 host and Ubuntu 20.04 on WSL2. Please submit a PR if you find necessary adaptations on your environment. - -Personally I use VSCode from the Windows host utilizing the "Remote - SSH" and "Remote - WSL" extensions. - -### Clone this repository ``` git clone git@github.com:JPHutchins/open-energy-view.git cd open-energy-view +docker-compose up ``` -### Install backend dependencies -* **Install python requirements** - - Note: check your python3 version - ``` - sudo apt install python3.8-venv build-essential python3-dev - ``` -* **Create the virtual environment and install packages** - ``` - python3 -m venv venv - source venv/bin/activate - pip3 install -r requirements.txt - ``` -* **Install and configure rabbitmq** - * Install erlang: - ``` - sudo apt update - sudo apt install software-properties-common apt-transport-https - wget -O- https://packages.erlang-solutions.com/ubuntu/erlang_solutions.asc | sudo apt-key add - - echo "deb https://packages.erlang-solutions.com/ubuntu focal contrib" | sudo tee /etc/apt/sources.list.d/rabbitmq.list - sudo apt update - sudo apt install erlang - ``` - * Install rabbitmq - ``` - curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.deb.sh | sudo bash - sudo apt install rabbitmq-server - * Start rabbitmq-server - ``` - sudo service rabbitmq-server start - ``` - * Verify that rabbitmq-server is running - ``` - sudo service rabbitmq-server status - ``` - * Configure rabbitmq - ``` - sudo rabbitmqctl add_user jp admin - sudo rabbitmqctl set_user_tags jp administrator - sudo rabbitmqctl add_vhost myvhost - sudo rabbitmqctl set_permissions -p myvhost jp ".*" ".*" ".*" - ``` - -### Install frontend dependencies and build -* **Install nvm** (if you don't have it) - - notes: https://github.com/nvm-sh/nvm - ``` - curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash - ``` -* **Install npm** - ``` - nvm install 10.19.0 - ``` -* **Install frontend packages** - ``` - cd open_energy_view/frontend - nvm use 10 - npm install - ``` -* **Build frontend** - - Assumes you are at path: `*/open-energy-view/open_energy_view/frontend` - ``` - nvm use 10 - npm run build - ``` - -### Run the development server and workers -* **Start the server and workers** - * Open four terminals (example from VSCode) - - ![Four-Terminals](/docs/four-terminals.png) - * First terminal: `./run-wsgi-dev` - * Second terminal: `./run-io-worker` - * Third terminal: `./run-cpu-worker` -* **Open the development site in a browser** - * Fourth terminal: `ip a` - * Note the IP address of your WSL2 instance, in this case `172.31.30.203` - - ![ip-a](/docs/ip-a.png) - * On your host OS, open a Chrome or Firefox web browser and navigate to `http://:5000` - - ![browser-address](/docs/browser-address.png) + +On your host OS, open a Chrome or Firefox web browser and navigate to `http://localhost:5000` ### Example account setup For first time setup you must register a user to your local database. Use something easily memorable and keep in mind that you can register as many users as you need while testing. diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..59562b9 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,103 @@ +version: "3.9" +services: + rabbitmq: + container_name: oev-rabbit + image: rabbitmq:3.11-alpine + ports: + - "5672:5672" + - "15672:15672" + hostname: "rabbitmq" # Important for how persistence works. + volumes: + - oev-rabbit:/var/lib/rabbitmq + rabbitmqsetup: + image: rabbitmq:3.11-alpine + restart: "no" + entrypoint: ["bash", "-c", "sleep 10 && rabbitmqctl -n rabbit@rabbitmq add_user jp admin && rabbitmqctl -n rabbit@rabbitmq set_user_tags jp administrator && rabbitmqctl -n rabbit@rabbitmq add_vhost myvhost && rabbitmqctl -n rabbit@rabbitmq set_permissions -p myvhost jp \".*\" \".*\" \".*\""] + volumes: + - oev-rabbit:/var/lib/rabbitmq + depends_on: + - rabbitmq # Make use of the cookie in the main container so we can run rabbitmqctl commands. + app: + container_name: oev + build: + context: ./ + dockerfile: ./docker/Dockerfile-app + ports: + - "5000:5000" + environment: + - FLASK_CONFIG=config.DevConfig + - FLASK_APP=open_energy_view + - FLASK_ENV=production + - SECRET_KEY=dev + - JWT_SECRET_KEY=dev + - JWT_BLACKLIST_ENABLED=True + - JWT_TOKEN_LOCATION=cookies + - JWT_ACCESS_COOKIE_PATH=/ + - JWT_REFRESH_COOKIE_PATH=/api/web/token/refresh + - JWT_COOKIE_CSRF_PROTECT=True + - PROD_JWT_COOKIE_SECURE=True + - DEV_JWT_COOKIE_SECURE=False + - PROD_DATABASE_URI=sqlite:///../test/data/energy_history_test.db + - DEV_DATABASE_URI=sqlite:///../test/data/energy_history_test.db + - PGE_CLIENT_ID=client_id + - PGE_CLIENT_SECRET=client_secret + - GOOGLE_CLIENT_ID=GOOGLE_CLIENT_ID + - GOOGLE_CLIENT_SECRET=GOOGLE_CLIENT_SECRET + - OAUTHLIB_INSECURE_TRANSPORT=True + - CERT_PATH=test/cert/cert.crt + - KEY_PATH=test/cert/private.key + - API_RESPONSE_KEY=xS5MqJ6N9CyH-hvqAGrmBVAxFMOyauMpdrdqCZa1eqo= + - PORT=5000 + depends_on: + - rabbitmqsetup + cpu-worker: + restart: unless-stopped + container_name: oev-cpu-worker + build: + context: ./ + dockerfile: ./docker/Dockerfile-worker + environment: + - HOSTNAME=celery.cpus@%h + - QUEUES=cpu + - CONCURRENCY=1 + - POOL=prefork + - FLASK_CONFIG=config.DevConfig + - FLASK_APP=open_energy_view + - FLASK_ENV=production + - SECRET_KEY=dev + - JWT_SECRET_KEY=dev + - JWT_BLACKLIST_ENABLED=True + - JWT_TOKEN_LOCATION=cookies + - JWT_ACCESS_COOKIE_PATH=/ + - JWT_REFRESH_COOKIE_PATH=/api/web/token/refresh + - JWT_COOKIE_CSRF_PROTECT=True + - PROD_JWT_COOKIE_SECURE=True + - DEV_JWT_COOKIE_SECURE=False + - PROD_DATABASE_URI=sqlite:///../test/data/energy_history_test.db + - DEV_DATABASE_URI=sqlite:///../test/data/energy_history_test.db + - PGE_CLIENT_ID=client_id + - PGE_CLIENT_SECRET=client_secret + - GOOGLE_CLIENT_ID=GOOGLE_CLIENT_ID + - GOOGLE_CLIENT_SECRET=GOOGLE_CLIENT_SECRET + - OAUTHLIB_INSECURE_TRANSPORT=True + - CERT_PATH=test/cert/cert.crt + - KEY_PATH=test/cert/private.key + - API_RESPONSE_KEY=xS5MqJ6N9CyH-hvqAGrmBVAxFMOyauMpdrdqCZa1eqo= + - PORT=5000 + depends_on: + - app + io-worker: + restart: unless-stopped + container_name: oev-io-worker + build: + context: ./ + dockerfile: ./docker/Dockerfile-worker + environment: + - HOSTNAME=celery.io@%h + - QUEUES=io + - CONCURRENCY=500 + - POOL=gevent + depends_on: + - app +volumes: + oev-rabbit: diff --git a/docker/Dockerfile-app b/docker/Dockerfile-app new file mode 100644 index 0000000..80daf0e --- /dev/null +++ b/docker/Dockerfile-app @@ -0,0 +1,14 @@ +FROM node:10.19.0-slim AS ui +ADD open_energy_view/frontend /frontend +WORKDIR /frontend +RUN npm ci && npm run build + +FROM python:3.8-slim +ADD . /app +WORKDIR /app +RUN apt update && apt install -y build-essential +RUN pip3 install -r ./requirements.txt +RUN apt purge -y build-essential +COPY --from=ui /frontend/dist /app/open_energy_view/frontend/dist +COPY --from=ui /frontend/node_modules /app/open_energy_view/frontend/node_modules +ENTRYPOINT uwsgi --http 0.0.0.0:5000 --gevent 100 --wsgi-file wsgi.py --callable app diff --git a/docker/Dockerfile-worker b/docker/Dockerfile-worker new file mode 100644 index 0000000..d9adb89 --- /dev/null +++ b/docker/Dockerfile-worker @@ -0,0 +1,2 @@ +FROM open-energy-view_app +ENTRYPOINT celery worker --app open_energy_view.celery_tasks --hostname="$HOSTNAME" --queues="$QUEUES" --loglevel=info --pool="$POOL" --concurrency="$CONCURRENCY" diff --git a/docs/browser-address.png b/docs/browser-address.png deleted file mode 100644 index ea0f8b76203d220c55ad70e6ea845e621b05fe51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4021 zcmV;m4@&TfP) zeNl?P}z_c=}VHQa2th_&gOuiX>~1YJak zbsr{h#9RX7p2aGY(NtGK?H2`H{r-rr-4X}{J%A`M_ECcLzan7NJghPqwO_u;cOPU3 zp%&cLWM?n(wF^E)MAm(fK;3K<(T~#7aGC0Ti)l2M_}V3bK+wYovF>B|4@@L*%nMj= zUg!LtUvcBoNng7p5D0n!kp}5Y$O8x-zYMF)5A(rSgis3v_YmD0Su2%F3RdO=@Zy53 z?lkQ+(^98`)yknmM`&tl>XlQrcIlvudfGS$#V1^?*x#YCT8)-rQBe%iY5}OJuBOUlqS{>DX@3L)LGRIRVr>^{ zU5t)1<>lRFwo|B7Y9>!k>J`CGOEa(_YXPC5p)T#Z7#+G89W&Bquy)N_^znKOX@;(e zb@VI%E`R-&*JFYLgP5M4jy@rg>y3?=t0i&PCnN%3EI!7*-MeYL-q>ls1Oh?N(=B3s zyHGD#yretKc8Wtqhnbv`+$(~emS!MtX&wN3_v~fchua)Csu-P)jLZxSPJOz9fA~mb zLH%ho|C6RVlUHMc0)zO)v(KVdN3iRot(24$15%Xz+=~kVNwhUuE$?jH*a5-TFme7| zhJW$jY&qeJ*K%r@IDaPL+uvsQC55B4NyG zk1@`T)pPI3NM07htSu!JPV8rEwNUb^n#cbV)2hGe`FE*(Wju~INSAFUI_)*L{Vcz{ z%EsttctfRVwZD~5mLgUUckY|TTH|62N@?rHk^gc!A7@&DW)2HdLfaVO zJyrS?l3U6!UUa^$8sp<8*3M6Sm$CD4vG-wABfr+A( zZ&Fyen!>`>PC~6=;{0h0{dxn1g{xWq?g{)23rQa!1x!`?IlL5q$uahWD-(EXcC1%p z?{&H))_0mv+vyF#&dAIlG&GdGd-k$t&tA8EmMqO9K0dx%j^`I12SDSc6JGV#YP9GR z64?3CR!3f1tI=}*gOgCHBU<&>CnTU&sk_D3o@R3FP|p8jk5e=T4cf7cvVO(EZ$hv~ zi4pI~c)P-rwJi1+B00BviYDa$)e;F^_+$`M;+94`$I?2oIcGmFmiE9K58e!XB$xos!l)Uq_<2dV&USmk&CJ%OC z!IrQ2A@+XTji!A&?fcLgx#cp|ezI2W4cf7c2&>@BPp<$FT)m&7st6)SOP{&Pu|sJ% zc7S7YX>92cBNw7Zlh|zaIQCwr(_($63bmb{7VJq$lK|NE;WoGXmn_Z0kY?z%k z2jJ#a?+Sv$qJ{%->Qt#qdzHyVmC3~Q#?~p15pknC=+y)s$$6RV>_uc}|GOgsip01wWo`07) z(WM+nUhimIo*L^mEz&+KnLn|~A*!Z=c*a>uIQWNK{=K>XTPG22hqwWRTWUBRq3EC; zS0AK^H{0=4ba7Aw{o8m_2pbi}eWsHRF$OqP_B~2nJcF%z#ty5c@?@=JUvTv|oW2sx zNc}YrW7|K~dx1{ptn*jpqti(@4H`?n_<5f|s!cfGL@ zwK}XrK51sea;l(^U2++bnK}II(Ww|W9H#QaH+XC6d~(!9xAMm)3aQS_A^qYy+at3A z21Bzdkp;THv7+#OKoa_=W}98|&dw;NPGF3wh+T5$s7{X|;U<-vY9+f~V~eVHMe&Bp zy|B;PGM#ajuUP$uNNDwObIJi*idfx0lQ*JoPrG=>vi)Ve5DieuZrNzEqCMYe+DAIK z8zt-8$UAq9Kh3XcC)GgYkU|jex_RhQ#457`LCqS(K~vBN=1*oE4Wk z_T*%GehLq^6tQukJ0ZqaXslwlY;GGOyoLq(H8xxCQhV7%rmaZXQI@C1vK)Yw?698W zRGURaZ?N4&E^H>c12)?B!OYS1g&ei@8)m;QfW6qfG-H<#>>j4mV!dSX67pB&6Qk2n zex{tf+}=%t9N7P<$36;$g2|JUP^r{du2?u!6e{g?pG=1-}e@%7k2wbI(AmyQH{Hv~xl9FPI4&M47W+4yv zcnN39%hAQ?C|H?~QmOPju$OQr)ZICS@AD&{15%;U6IlyiBsnPwtwz)N175EKz%OWk zSKX^jXWQJTQir>2$HylCaJtm@D+9<= zq!~zSr;wPIW^fc5H~pn^Q8hrbMS8>x8Z_3c{?+DcjJHL~#^PcQfA%SrPPuHYMoVh? zOpL|F)LH5}?O$hURwXiJ>{Z*AhKC**N58M7*#fQwMyar9pDAD`Y*dt^e@8GqKZOa( zb6j|Buxop}1;;Gb8p}AfX)ch(pZ0Ae$726nt;9Gxk{jRb^FsWb?ZC4AyPb-BS?pOf zp764-$cpYq)Ve2lzaozG)4z8dXa2-~oICckZEP78dwvbT+PUKiIr3Mxk+5ewZToP0 zfl)Das#DQdx@Pv9=rCguhyCv7(J4}2>1Jv#Dw=u!%X4UEJn0x8m!x+T726*x=yJ~5 zF4+02@`D3EYRtafAEVJ~(b$%lA20qVm6f;Vvc<6e_ynMroG)v>Ul^oWs^x%0?Qv{1Tv9d9G$tiOx<53*-80}xQTixrMJ zySI??(#5wG7Ns0^<@Syi7LjI3lpS*ah_6av(Pa}ZFXSxSOmtd}Q^Oig%ND!zYkRRu z`<$$~j~A@xa9o+&7S}9KT}6~}F%@T@0&XqdaYsPX>r|Y5-KEXmzdbvid~jtrDY@fF zv28URTkkZ_+RV}Q2N;m^9NCFhz(VP!b&kbL!;J6qR{#0Dl>0I%KtSbAr(AdYWAAlj z6CRkNsV$%EZ zg1dq2>_rq7uJ*MXKBL=agE&Xn`1p&{TS5(RI6Uj{5p~%FD|s zDKR?IC0(YuiKfb(D0Fie^k5#}?|jayVU5=t*|~iyhd(>Oh`7;?7de%cmU6oEq)$>G z9mT%jW$!m3tqP0h|FMztGO-+4aQD+~k+q=bktzBSI(-w?fKV>~{r6Z-barajoq>pq z1s&mDkF14Q_c0WM?kD)c-(s~|xv+B{4K+s3g9HLWpGW-oKp&&2<}0qBcpLoWXlA@Y zVE>W6c1a)*^a4Vx`ykiLw{oLmJAT3a8T`|YgbbbJYnKE9K@TGzGUP|EdhRB;(`Yt- z2`!B%G!LMRnMpwZk+fW`@%lwi0)e1!A;h{5(_DL!mMazbMT{YE;8;ROK2BK7!}y12 zky)ETrht|kSX*xT+Esx-&_zUn@h(9TnNC3TEc{eDU%Mg@2zme^)^{0xf#Jxt6OpT8 z@e7Sa9vTUO-oHv#AQ0S{2(cCj1cE+*m<=Kj2n2lqA=UzcK+p#eVl5B|1bqM@)&hY* b&#MHKte^bWy_WW;y16$Z`ran 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�L?m_x$iyV`|hDl&p@_BjOT)B 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 LxEfmJY1sb&Nq