deployment using elasticbeanstalk, docker, supervisor

This commit is contained in:
crflynn
2018-04-28 00:56:35 -04:00
parent 9cd1ebb436
commit ab99adce0d
14 changed files with 93 additions and 85 deletions

View File

@@ -3,11 +3,9 @@
.gitignore
.dockerignore
Dockerfile
Pipfile
Pipfile.lock
migrations/
README.rst
docs/
migrations/
tests/
# mac osx
@@ -26,3 +24,8 @@ celerybeat.pid
# redis
dump.rdb
# Elastic Beanstalk Files
.elasticbeanstalk
.git
.gitignore

30
.ebignore Normal file
View File

@@ -0,0 +1,30 @@
# project
.git
.gitignore
.dockerignore
README.rst
docs/
migrations/
tests/
# mac osx
.DS_Store
# python bytecode
*.py[cod]
__pycache__
# ignore
ignore/
# celery
celerybeat-schedule
celerybeat.pid
# redis
dump.rdb
# Elastic Beanstalk Files
.elasticbeanstalk
.git
.gitignore

7
.gitignore vendored
View File

@@ -1,6 +1,4 @@
# credentials
secret.*
env_vars*
*.env
# mac osx
@@ -19,3 +17,8 @@ celerybeat.pid
# redis
dump.rdb
# Elastic Beanstalk Files
.elasticbeanstalk
!.elasticbeanstalk/*.cfg.yml
!.elasticbeanstalk/*.global.yml

View File

@@ -1,10 +1,17 @@
FROM python:3.6-slim
RUN apt-get update && apt-get install -y supervisor redis-server
RUN pip install pipenv
ENV WORKON_HOME=/venv
RUN mkdir /var/log/pypistats
WORKDIR /app
ADD requirements.txt /app/requirements.txt
RUN pip install -r /app/requirements.txt
ADD Pipfile /app
ADD Pipfile.lock /app
RUN pipenv install --verbose
ADD . /app
@@ -12,4 +19,5 @@ EXPOSE 5000
ENV C_FORCE_ROOT=1
CMD /usr/bin/supervisord

11
Pipfile
View File

@@ -9,14 +9,15 @@ name = "pypi"
google-cloud-bigquery = "*"
"psycopg2" = "*"
Flask = "*"
GitHub-Flask = "*"
flask = "*"
github-flask = "*"
flask-sqlalchemy = "*"
Flask-Migrate = "*"
Flask-Login = "*"
Flask-WTF = "*"
flask-migrate = "*"
flask-login = "*"
flask-wtf = "*"
celery = "*"
redis = "*"
flask-sslify = "*"
[dev-packages]

20
Pipfile.lock generated
View File

@@ -1,7 +1,7 @@
{
"_meta": {
"hash": {
"sha256": "d75592aa3ae64c8aef81f5033cf78a5e9914d90ef8e35d876b1b2729f2ff9cc4"
"sha256": "2abcd9e93501a30aca9909ec9bca5c2478d21efcc2fde03db74701e6d10a02ca"
},
"host-environment-markers": {
"implementation_name": "cpython",
@@ -84,10 +84,10 @@
},
"flask": {
"hashes": [
"sha256:0749df235e3ff61ac108f69ac178c9770caeaccad2509cb762ce1f65570a8856",
"sha256:49f44461237b69ecd901cc7ce66feea0319b9158743dd27a2899962ab214dac1"
"sha256:b1883637bbee4dc7bc98d900792d0a304d609fce0f5bd9ca91d1b6457e5918dd",
"sha256:7fab1062d11dd0038434e790d18c5b9133fd9e6b7257d707c4578ccc1e38b67c"
],
"version": "==0.12.2"
"version": "==1.0"
},
"flask-login": {
"hashes": [
@@ -109,6 +109,12 @@
],
"version": "==2.3.2"
},
"flask-sslify": {
"hashes": [
"sha256:d33e1d3c09cd95154176aa8a7319418e52129fc482dd56d8a8ad7c24500d543e"
],
"version": "==0.1.5"
},
"flask-wtf": {
"hashes": [
"sha256:d9a9e366b32dcbb98ef17228e76be15702cd2600675668bca23f63a7947fd5ac",
@@ -391,10 +397,10 @@
},
"botocore": {
"hashes": [
"sha256:cacece8bda3dc6191f0b339d677987232a896af306fcf6fcc1ce2340c27a3365",
"sha256:db90e17685c53867b2a11b2b562d692257fd7388833ff38df5efa43b5d3065f5"
"sha256:3de8758600e692d5e31d74fb183c57409eb677b21e15608fcc1c059be47988e3",
"sha256:10d4880253210ad35cb1b3c3134d8698c2c2d10f15a2cf6a7be3f91b486866ff"
],
"version": "==1.10.6"
"version": "==1.10.10"
},
"cement": {
"hashes": [

View File

@@ -3,6 +3,7 @@ import os
from flask import g
from flask import session
from flask_sslify import SSLify
from pypistats.application import create_app
from pypistats.application import create_celery
@@ -14,6 +15,7 @@ from pypistats.settings import configs
env = os.environ.get("ENV", "dev")
app = create_app(configs[env])
sslify = SSLify(app)
celery = create_celery(app)
app.logger.info(f"Environment: {env}")

View File

@@ -374,7 +374,7 @@ def etl():
if __name__ == "__main__":
date = "2018-04-23"
date = "2018-04-27"
env = "prod"
print(date, env)
print(get_daily_download_stats(env, date))

View File

@@ -1,42 +0,0 @@
alembic==0.9.9 --hash=sha256:85bd3ea7633024e4930900bc64fb58f9742dedbc6ebb6ecf25be2ea9a3c1b32e
amqp==2.2.2 --hash=sha256:4e28d3ea61a64ae61830000c909662cb053642efddbe96503db0e7783a6ee85b --hash=sha256:cba1ace9d4ff6049b190d8b7991f9c1006b443a5238021aca96dd6ad2ac9da22
billiard==3.5.0.3 --hash=sha256:abd9ce008c9a71ccde2c816f8daa36246e92a21e6a799831b887d88277187ecd --hash=sha256:1d7b22bdc47aa52841120fcd22a74ae4fc8c13e9d3935643098184f5788c3ce6
cachetools==2.0.1 --hash=sha256:4319bbb78172e7bcf99423e1ecd6914b32336ccfe97d2058ffe62e641a7f3abe --hash=sha256:ede01f2d3cbd6ddc9e35e16c2b0ce011d8bb70ce0dbaf282f5b4df24b213bc5d
celery==4.1.0 --hash=sha256:81a67f0d53a688ec2bc8557bd5d6d7218f925a6f2e6df80e01560de9e28997ec --hash=sha256:77ff3730198d6a17b3c1f05579ebe570b579efb35f6d7e13dba3b1368d068b35
certifi==2018.4.16 --hash=sha256:9fa520c1bacfb634fa7af20a76bcbd3d5fb390481724c597da32c719a7dca4b0 --hash=sha256:13e698f54293db9f89122b0581843a782ad0934a4fe0172d2a980ba77fc61bb7
chardet==3.0.4 --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae
click==6.7 --hash=sha256:29f99fc6125fbc931b758dc053b3114e55c77a6e4c6c3a2674a2dc986016381d --hash=sha256:f15516df478d5a56180fbf80e68f206010e6d160fc39fa508b65e035fd75130b
flask==0.12.2 --hash=sha256:0749df235e3ff61ac108f69ac178c9770caeaccad2509cb762ce1f65570a8856 --hash=sha256:49f44461237b69ecd901cc7ce66feea0319b9158743dd27a2899962ab214dac1
flask-login==0.4.1 --hash=sha256:c815c1ac7b3e35e2081685e389a665f2c74d7e077cb93cecabaea352da4752ec
flask-migrate==2.1.1 --hash=sha256:493f9b3795985b9b4915bf3b7d16946697f027b73545384e7d9e3a79f989d2fe --hash=sha256:b709ca8642559c3c5a81a33ab10839fa052177accd5ba821047a99db635255ed
flask-sqlalchemy==2.3.2 --hash=sha256:3bc0fac969dd8c0ace01b32060f0c729565293302f0c4269beed154b46bec50b --hash=sha256:5971b9852b5888655f11db634e87725a9031e170f37c0ce7851cf83497f56e53
flask-wtf==0.14.2 --hash=sha256:d9a9e366b32dcbb98ef17228e76be15702cd2600675668bca23f63a7947fd5ac --hash=sha256:5d14d55cfd35f613d99ee7cba0fc3fbbe63ba02f544d349158c14ca15561cc36
github-flask==3.2.0 --hash=sha256:24600b720f698bac10667b76b136995ba7821d884e58b27e2a18ca0e4760c786
google-api-core==1.1.1 --hash=sha256:4885e5298e45aa587185c32bee54f95e79a05a926d69fcfd398c66b12b98b9a7 --hash=sha256:d23d5ae89e44ca1ddddec94e5f7c03f52402d192e66345d448b77ad5276b0fbe
google-auth==1.4.1 --hash=sha256:34088434cb2a2409360b8f3cbc04195a465df1fb2aafad71ebbded77cbf08803 --hash=sha256:9051802d3dae256036cca9e34633a32c0ed1427730d4ebc513dff91ec8b6dd45
google-cloud-bigquery==1.1.0 --hash=sha256:44d152e1de60cce8fe9d4f5c60ca4cebc88daab02b4d889bb0ebfcc19d54d7ec --hash=sha256:aed2b1d4db1e21d891522d6d6bb14476e6ba58c681cbb68eeb42c168a4e3fda9
google-cloud-core==0.28.1 --hash=sha256:0090df83dbc5cb2405fa90844366d13176d1c0b48181c1807ab15f53be403f73 --hash=sha256:89e8140a288acec20c5e56159461d3afa4073570c9758c05d4e6cb7f2f8cc440
google-resumable-media==0.3.1 --hash=sha256:116de90b9cd483b17c53618ee6a5a20f33e741c648140c8cc9c2141e07616ff1 --hash=sha256:97de518f8166d442cc0b61fab308bcd319dbb970981e667ec8ded44f5ce49836
googleapis-common-protos==1.5.3 --hash=sha256:c075eddaa2628ab519e01b7d75b76e66c40eaa50fc52758d8225f84708950ef2
idna==2.6 --hash=sha256:8c7309c718f94b3a625cb648ace320157ad16ff131ae0af362c9f21b80ef6ec4 --hash=sha256:2c6a5de3089009e3da7c5dde64a141dbc8551d5b7f6cf4ed7c2568d0cc520a8f
itsdangerous==0.24 --hash=sha256:cbb3fcf8d3e33df861709ecaf89d9e6629cff0a217bc2848f1b41cd30d360519
jinja2==2.10 --hash=sha256:74c935a1b8bb9a3947c50a54766a969d4846290e1e788ea44c1392163723c3bd --hash=sha256:f84be1bb0040caca4cea721fcbbbbd61f9be9464ca236387158b0feea01914a4
kombu==4.1.0 --hash=sha256:01f0da9fe222a2183345004243d1518c0fbe5875955f1b24842f2d9c65709ade --hash=sha256:4249d9dd9dbf1fcec471d1c2def20653c9310dd1a217272d77e4844f9d5273cb
mako==1.0.7 --hash=sha256:4e02fde57bd4abb5ec400181e4c314f56ac3e49ba4fb8b0d50bba18cb27d25ae
markupsafe==1.0 --hash=sha256:a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665
protobuf==3.5.2.post1 --hash=sha256:ac0067e3c60737865ed72bb7416e02297d229d960902802d874c0e167128c809 --hash=sha256:5c1c8f6a0a68a874e3beff89255959dd80fad45870e96c88944a1b81a22dd5f5 --hash=sha256:7c193e6964e752bd056735594826c5b03274ceb8f07349d3ae47d9766250ba96 --hash=sha256:bcfa99f5a82f5eaaf6e5cee5bfdca5a1670f5740aec1d93dae170645ed1a16b0 --hash=sha256:e269ab7a50bf0fa6fe6a88ea7dcc7a1079ae9450d9ab9b7730ac32916d55508b --hash=sha256:01ccd6d03449ae75b779fb5bf4ed62177d61afe3c5e6465ccf3f8b2e1a84afbe --hash=sha256:628a3bf0794a8b3cabb18db11eb67cc10e0cc6e5525d557ae7b682bb73fa2018 --hash=sha256:242e4c7ae565267a8bc8b92d707177f915607ea4bd73244bec6cbf4a49b96661 --hash=sha256:e7fd33a3474cbe18fd5b5620784a0fa21fcae3e402b1806e29c6b450c7f61706 --hash=sha256:cc94079ae6cbcea5ae194464a30f3223f075e06a0446f52bca9ddbeb6e9f412a --hash=sha256:7222d6616108b33ad6cbeff8117062a73c43cdc8fa8f64f6a322ebeb663e710e --hash=sha256:3f655e1f99c3e14d56ca900af1b9a4715b691319a295cc38939d7f77eabd5e7c --hash=sha256:76ef6ca3c50e4cfd044861586d5f1b352e0fe7f17f883df6c165bad5b4d0e10a --hash=sha256:560a38e692a69957a70ba0e5839aa67430efd63072bf91b0539dac19055694cd --hash=sha256:d5d9edfdc5a3a01d06062d677b121081629782edf0e05ca1be14f15bb947eeee --hash=sha256:869e12bcfb5759e683f53ec1dd6155b7be034065431da289f0cb4510040a0799 --hash=sha256:905414e5ea6cdb78d8730f66335755152b46685fcb9fc2f2134024e3ea9e8dcc --hash=sha256:adf716a89c9cc1891ead79a861c427071ef59172f0e11967b00565a9547b3bd0 --hash=sha256:1d92cc30b0b46cced33adde5853d920179eb5ea8eecdee9552502a7f29cc3f21 --hash=sha256:3b60685732bd0cbdc802dfcb6071efbcf5d927ce3127c13c33ea1a8efae3aa76
psycopg2==2.7.4 --hash=sha256:aeaba399254ca79c299d9fe6aa811d3c3eac61458dee10270de7f4e71c624998 --hash=sha256:1d90379d01d0dc50ae9b40c863933d87ff82d51dd7d52cea5d1cb7019afd72cd --hash=sha256:36030ca7f4b4519ee4f52a74edc4ec73c75abfb6ea1d80ac7480953d1c0aa3c3 --hash=sha256:7cbc3b21ce2f681ca9ad2d8c0901090b23a30c955e980ebf1006d41f37068a95 --hash=sha256:b178e0923c93393e16646155794521e063ec17b7cc9f943f15b7d4b39776ea2c --hash=sha256:fe6a7f87356116f5ea840c65b032af17deef0e1a5c34013a2962dd6f99b860dd --hash=sha256:6f302c486132f8dd11f143e919e236ea4467d53bf18c451cac577e6988ecbd05 --hash=sha256:888bba7841116e529f407f15c6d28fe3ef0760df8c45257442ec2f14f161c871 --hash=sha256:932a4c101af007cb3132b1f8a9ffef23386acc53dad46536dc5ba43a3235ae02 --hash=sha256:179c52eb870110a8c1b460c86d4f696d58510ea025602cd3f81453746fccb94f --hash=sha256:33f9e1032095e1436fa9ec424abcbd4c170da934fb70e391c5d78275d0307c75 --hash=sha256:092a80da1b052a181b6e6c765849c9b32d46c5dac3b81bf8c9b83e697f3cdbe8 --hash=sha256:f3d3a88128f0c219bdc5b2d9ccd496517199660cea021c560a3252116df91cbd --hash=sha256:19983b77ec1fc2a210092aa0333ee48811fd9fb5f194c6cd5b927ed409aea5f8 --hash=sha256:027ae518d0e3b8fff41990e598bc7774c3d08a3a20e9ecc0b59fb2aaaf152f7f --hash=sha256:363fbbf4189722fc46779be1fad2597e2c40b3f577dc618f353a46391cf5d235 --hash=sha256:d74cf9234ba76426add5e123449be08993a9b13ff434c6efa3a07caa305a619f --hash=sha256:32702e3bd8bfe12b36226ba9846ed9e22336fc4bd710039d594b36bd432ae255 --hash=sha256:8eb94c0625c529215b53c08fb4e461546e2f3fc96a49c13d5474b5ad7aeab6cf --hash=sha256:8ebba5314c609a05c6955e5773c7e0e57b8dd817e4f751f30de729be58fa5e78 --hash=sha256:27467fd5af1dcc0a82d72927113b8f92da8f44b2efbdb8906bd76face95b596d --hash=sha256:b68e89bb086a9476fa85298caab43f92d0a6af135a5f433d1f6b6d82cafa7b55 --hash=sha256:0b9851e798bae024ed1a2a6377a8dab4b8a128a56ed406f572f9f06194e4b275 --hash=sha256:733166464598c239323142c071fa4c9b91c14359176e5ae7e202db6bcc1d2eb5 --hash=sha256:ad75fe10bea19ad2188c5cb5fc4cdf53ee808d9b44578c94a3cd1e9fc2beb656 --hash=sha256:8966829cb0d21a08a3c5ac971a2eb67c3927ae27c247300a8476554cc0ce2ae8 --hash=sha256:8bf51191d60f6987482ef0cfe8511bbf4877a5aa7f313d7b488b53189cf26209
pyasn1==0.4.2 --hash=sha256:f81c96761fca60d64b1c9b79ec2e40cf9495a745cf570613079ef324aeb9672b --hash=sha256:7d626683e3d792cccc608da02498aff37ab4f3dafd8905d6bf755d11f9b26b43 --hash=sha256:e85895087905c65b5b594eb91f7522664c85545b147d5f4d4e7b1b07da8dcbdc --hash=sha256:5a0db897b311d265cde49615cf783f1c78613138605cdd0f907ecfa5b2aba3ee --hash=sha256:d5cd6ed995dba16fad0c521cfe31cd2d68400b53fcc2bce93326829be73ab6d1 --hash=sha256:a7efe807c4b83a859e2735c692b92ed7b567cfddc4163763412920041d876c2b --hash=sha256:b5a9ca48055b9a20f6d1b3d68e38692e5431c86a0f99ea602e61294e891fee5b --hash=sha256:c07d6e587b2f928366b1f67c09bda026a3e6fcc99e80a744dc67f8fca3895626 --hash=sha256:d84c2aea3cf43780e9e6a19f4e4dddee9f6976519020e64e47c57e5c7a8c3dd2 --hash=sha256:758cb50abddc03e4563fd9e7f03db56e3e87b58c0bd01247360326e5c0c7ffa5 --hash=sha256:0d7f6e959fe53f3960a23d73f35e1fce61348b30915b6664309ca756de7c1f89 --hash=sha256:d258b0a71994f7770599835249cece1caef3c70def868c4915e6e5ca49b67d15
pyasn1-modules==0.2.1 --hash=sha256:b1f395cae2d669e0830cb023aa86f9f283b7a9aa32317d7f80d8e78aa2745812 --hash=sha256:854700bbdd01394e2ada9c1bfbd0ed9f5d0c551350dbbd023e88b11d2771ae06 --hash=sha256:598a6004ec26a8ab40a39ea955068cf2a3949ad9c0030da970f2e1ca4c9f1cc9 --hash=sha256:f53fe5bcebdf318f51399b250fe8325ef3a26d927f012cc0c8e0f9e9af7f9deb --hash=sha256:47fb6757ab78fe966e7c58b2030b546854f78416d653163f0ce9290cf2278e8b --hash=sha256:041e9fbafac548d095f5b6c3b328b80792f006196e15a232b731a83c93d59493 --hash=sha256:0cea139045c38f84abaa803bcb4b5e8775ea12a42af10019d942f227acc426c3 --hash=sha256:0cdca76a68dcb701fff58c397de0ef9922b472b1cb3ea9695ca19d03f1869787 --hash=sha256:72fd8b0c11191da088147c6e4678ec53e573923ecf60b57eeac9e97433e09fc2 --hash=sha256:c6747146e95d2b14cc2a8399b2b0bde3f93778f8f9ec704690d2b589c376c137 --hash=sha256:0f2e50d20bc670be170966638fa0ae603f0bc9ed6ebe8e97a6d1d4cef30cc889 --hash=sha256:af00ea8f2022b6287dc375b2c70f31ab5af83989fc6fe9eacd4976ce26cd7ccc
python-dateutil==2.7.2 --hash=sha256:3220490fb9741e2342e1cf29a503394fdac874bc39568288717ee67047ff29df --hash=sha256:9d8074be4c993fbe4947878ce593052f71dac82932a677d49194d8ce9778002e
python-editor==1.0.3 --hash=sha256:a3c066acee22a1c94f63938341d4fb374e3fdd69366ed6603d7b24bed1efc565
pytz==2018.4 --hash=sha256:65ae0c8101309c45772196b21b74c46b2e5d11b6275c45d251b150d5da334555 --hash=sha256:c06425302f2cf668f1bba7a0a03f3c1d34d4ebeef2c72003da308b3947c7f749
redis==2.10.6 --hash=sha256:8a1900a9f2a0a44ecf6e8b5eb3e967a9909dfed219ad66df094f27f7d6f330fb --hash=sha256:a22ca993cea2962dbb588f9f30d0015ac4afcc45bee27d3978c0dbe9e97c6c0f
requests==2.18.4 --hash=sha256:6a1b267aa90cac58ac3a765d067950e7dbbf75b1da07e895d1f594193a40a38b --hash=sha256:9c443e7324ba5b85070c4a818ade28bfabedf16ea10206da1132edaa6dda237e
rsa==3.4.2 --hash=sha256:43f682fea81c452c98d09fc316aae12de6d30c4b5c84226642cf8f8fd1c93abd --hash=sha256:25df4e10c263fb88b5ace923dd84bf9aa7f5019687b5e55382ffcdb8bede9db5
six==1.11.0 --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9
sqlalchemy==1.2.7 --hash=sha256:d6cda03b0187d6ed796ff70e87c9a7dce2c2c9650a7bc3c022cd331416853c31
urllib3==1.22 --hash=sha256:06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b --hash=sha256:cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f
vine==1.1.4 --hash=sha256:6849544be74ec3638e84d90bc1cf2e1e9224cc10d96cd4383ec3f69e9bce077b --hash=sha256:52116d59bc45392af9fdd3b75ed98ae48a93e822cee21e5fda249105c59a7a72
werkzeug==0.14.1 --hash=sha256:d5da73735293558eb1651ee2fddc4d0dedcfa06538b8813a2e20011583c9e49b --hash=sha256:c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c
wtforms==2.1 --hash=sha256:ffdf10bd1fa565b8233380cb77a304cd36fd55c73023e91d4b803c96bc11d46f

View File

@@ -2,5 +2,4 @@ export ENV=prod
set -o allexport
source pypistats/secret/$ENV.env
set +o allexport
# python -m pypistats.tasks.pypi
flask run --host=0.0.0.0
pipenv run celery beat -A pypistats.run.celery -l info

5
scripts/run_celery.sh Executable file
View File

@@ -0,0 +1,5 @@
export ENV=prod
set -o allexport
source pypistats/secret/$ENV.env
set +o allexport
pipenv run celery -A pypistats.run.celery worker -l info

2
run_beat.sh → scripts/run_etl.sh Executable file → Normal file
View File

@@ -2,4 +2,4 @@ export ENV=prod
set -o allexport
source pypistats/secret/$ENV.env
set +o allexport
celery beat -A pypistats.run.celery -l info
pipenv run python -m pypistats.tasks.pypi

View File

@@ -2,4 +2,4 @@ export ENV=prod
set -o allexport
source pypistats/secret/$ENV.env
set +o allexport
celery -A pypistats.run.celery worker -l info
pipenv run flask run --host=0.0.0.0

View File

@@ -1,31 +1,24 @@
[supervisord]
nodaemon=true
logfile=/var/log/pypistats/supervisord.log
[program:redis]
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
stdout_logfile=/var/log/pypistats/redis.log
stderr_logfile=/var/log/pypistats/redis.err
command=redis-server
[program:pypistats]
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
command=bash -c "./run_flask.sh"
stdout_logfile=/var/log/pypistats/pypistats.log
stderr_logfile=/var/log/pypistats/pypistats.err
command=bash -c "scripts/run_flask.sh"
[program:celery-worker]
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
stdout_logfile=/var/log/pypistats/celery-worker.log
stderr_logfile=/var/log/pypistats/celery-worker.err
user=nobody
command=bash -c "./run_celery.sh"
command=bash -c "scripts/run_celery.sh"
[program:celery-beat]
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
command=bash -c "./run_beat.sh"
stdout_logfile=/var/log/pypistats/celery-beat.log
stderr_logfile=/var/log/pypistats/celery-beat.err
command=bash -c "scripts/run_beat.sh"