Coder Social home page Coder Social logo

briancaffey / sec-filings-app Goto Github PK

View Code? Open in Web Editor NEW
49.0 6.0 21.0 3.18 MB

This repo contains code for a web application that allows users to view SEC Filing data.

Home Page: https://opensecdata.ga

License: MIT License

Python 52.70% HTML 1.03% Shell 0.58% Dockerfile 0.32% JavaScript 19.03% Vue 26.33% CSS 0.01%
linkedin-oauth2-application django-rest-framework quasar-framework vuejs docker swarm swagger-ui postgresql django python-social-auth

sec-filings-app's Introduction

SEC Data project

This repo contains code for a web application that allows users to view SEC Filing data. The application downloads public data from SEC.gov every quarter and builds these filings into a database (PostgreSQL). The backend web application that interacts with the database is made with the Django web framework an several additional Django packages including celery and Django REST Framework. Primarily serving as a REST API, the Django application data is consumed by a Vue.js application that users can access in their browser over the internet. Users can also signup for an account and request credentials to access the same public API that the Vue.js application requests data from.

This project is open source and anyone is welcome to contribute or create issues and merge requests.

Local development

To run this application on your local computer, you can use docker and docker-compose.

Before running the project, you must create a file in the root directory called .env. This file will provide values to docker-compose that you do not want to commit to source code, so .env is not committed to version control (git). The only sensitive data is a OAuth2 client keys for the Linkedin OAuth2 application that you may choose to setup if you wish to test social authentication in your local environment, but this is not required, so you can add placeholder values for these variables. See .env.template for more information about setting up OAuth2 keys with a Linkedin OAuth2 application.

Once you have created .env, run the following command:

docker-compose up

This will start the project locally. It may take some time build the docker images. When everything has finished, visit http://localhost in your browser and follow the instructions there for completing the setup of you local environment.

You can check the logs of docker-compose up, you should make sure that no service failed to start.

Create an admin user

Creating an admin user will give you a user email and password for logging into the Django admin and the main application. The Django admin can be used to download and process filings. To create the admin user, run the following command:

docker exec -it backend bash

This command will open a terminal in the backend container. In this terminal, run the following command:

python3 manage.py createsuperuser

Select an email and password for the admin user, then go to http://localhost/admin/ and login with the admin account credentials.

Adding data to the application

Once you have created an admin in the previous step, go to the filing list add page in the Django admin: http://localhost/admin/filing/filinglist/add/

Specify the quarter and year for the filings that you would like to download. This will download a file from:

https://www.sec.gov/Archives/edgar/full-index/{year}/QTR{quarter}/master.idx

For example:

https://www.sec.gov/Archives/edgar/full-index/2021/QTR1/master.idx

This file contains a list of filing files:

Description:           Master Index of EDGAR Dissemination Feed
Last Data Received:    March 31, 2020
Comments:              [email protected]
Anonymous FTP:         ftp://ftp.sec.gov/edgar/
Cloud HTTP:            https://www.sec.gov/Archives/




CIK|Company Name|Form Type|Date Filed|Filename
--------------------------------------------------------------------------------

1000045|NICHOLAS FINANCIAL INC|SC 13G|2020-02-12|edgar/data/1000045/0001037389-20-000051.txt
1000097|KINGDON CAPITAL MANAGEMENT, L.L.C.|13F-HR|2020-02-14|edgar/data/1000097/0001000097-20-000004.txt
1000097|KINGDON CAPITAL MANAGEMENT, L.L.C.|SC 13G/A|2020-02-10|edgar/data/1000097/0000919574-20-000877.txt
1000275|ROYAL BANK OF CANADA|10-D|2020-03-16|edgar/data/1000275/0001214659-20-002624.txt
1000275|ROYAL BANK OF CANADA|13F-HR|2020-02-14|edgar/data/1000275/0001567619-20-003889.txt

Each line has the following values:

CIK|Company Name|Form Type|Date Filed|Filename
  • CIK: Identification number of institutional investors
  • Company name: Name of the institutional investor
  • Form Type: This file contains a mix of filing types, but we are only interested in the 13F-HR files
  • Date field
  • Filename: file path (base URL is https://www.sec.gov/Archives/)

For example, a filing file link would be:

https://www.sec.gov/Archives/edgar/data/1000097/0001000097-20-000004.txt

When a filing list file is processed, it will create celery tasks for processing each of the 13F-HR files listed in the master.idx file.

When 13F filings are processed, the file's XML content is parsed and a list of Holding objects is created and the records are bulk created in the database.

At this point you should be able to see filings, holdings, investors, etc. in the UI.

Architecture overview

png

Application Entrypoints

The application can be accessed either through a web UI (A) or programmatically through a public API (B).

A. Requests coming from the web UI are authenticated using Django Session authentication (HttpOnly cookies).

B. API requests can be made with an API token (from Django Token Authentication).

Main Application Architecture

  1. The Traefik container exposes ports 443 and 80 for HTTPS and HTTP traffic. HTTP requests are redirected to HTTPS requests. Traefik uses Let's Encrypt to issue TLS certificates that allow connections to the application to use HTTPS.

  2. All traffic from Traefik is routed to NGINX which handles traffic based on the URL path. /api/* and /admin/* requests are handled by Django/gunicorn, /flower/* requests are handled by the flower service and all other requests will be served by the Vue/Quasar application.

  3. Quasar Framework SPA/PWA makes API requests using Axios.

  4. The main Django application handles both requests for the main API and the Django admin. The main API is built with Django REST Framework.

  5. The API pulls data from a PostgreSQL database that runs in a container.

  6. The main celery worker has the same image as the Django web application. It handles asynchronous background tasks such as pulling filing data from SEC.gov and adding database records from the processed filing data.

  7. Redis serves as both as a caching layer to cache large/expensive requests and it is also the broker for celery. New tasks are stored in Redis and celery (6) continually monitors redis for new tasks that it can work on.

  8. Celery beat is in charge of scheduling tasks to be executed by celery. For example, once per day celery may query SEC.gov for a new filing.

  9. Flower is a celery monitoring utility that can be used to view the currently executing tasks as well as completed and failed tasks.

  10. REX-Ray is a docker volume plugin that automatically provisions DigitalOcean block storage devices to be used in our application. There are four volumes provisioned in this application to persist data in various places: Let's Encrypt Certificates, Redis data, Django static/media files and Postgres data. The Django static/media volume is shared between the NGINX container, the Django container and the celery container.

  11. The main architecture runs on a single DigitalOcean droplet that uses a Docker machine image that runs in swarm mode.

  12. A DigitalOcean account is required for this architecture. The minimum cost of this architecture is between $5 and $6/month.

  13. The sample application that uses this architecture (linked below) access public data from SEC.gov.

CI/CD Pipeline with GitLab

X. A developer creates and pushes a git tag.

Y. Pushing this tag triggers a GitLab CI pipeline (defined in .gitlab-ci.yml) which builds the two main images used in our application (images for the frontend and backend) and then pushes these images to our private GitLab registry that is comes with all GitLab projects.

Z. The deployment command docker stack deploy references the stack.yml file which defines all of the services, networks and volumes used in the main architecture.

Links

sec-filings-app's People

Contributors

briancaffey avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

sec-filings-app's Issues

Multiple errors immediately after "docker-compose up"

Hi Brian, thanks for sharing this project. I'm trying to run it locally so I can play with it and maybe extend it(I'm a beginner dev, but I have a lot of conceptual ideas about possible new realistically helpful features) and I'm facing multiple issues with nginx, backend, frontend, celery parts when standing the app up.

  1. First of all, I had to change the mher/flower version to 0.9.4 as the 0.9 doesn't exist anymore
  2. I got issues with nginx' ports on my Windows machine, but after changing the default port 80 to 8087 or even stopping the exiting Windows Service that was using the port 80, it still doesn't seem to work.
  3. I couldn't find where the log is kept within the app, so I'm just dumping the terminal's log here and maybe you can helm me out.
Log ``` docker-compose up Starting redis ... Starting redis ... done Starting mailhog ... done Starting postgres ... done Starting frontend ... done Starting backend ... done Starting flower ... done Starting celery ... done Starting nginx ... done Attaching to redis-commander, postgres, redis, frontend, mailhog, flower, celery, backend, nginx flower | [I 211014 16:08:05 command:134] Visit me at http://localhost:5555 flower | [I 211014 16:08:05 command:141] Broker: redis://redis:6379/1 flower | [I 211014 16:08:05 command:142] Registered tasks: flower | ['celery.accumulate', flower | 'celery.backend_cleanup', flower | 'celery.chain', flower | 'celery.chord', flower | 'celery.chord_unlock', flower | 'celery.chunks', flower | 'celery.group', flower | 'celery.map', flower | 'celery.starmap'] flower | [I 211014 16:08:05 mixins:229] Connected to redis://redis:6379/1 frontend | /usr/local/bin/docker-entrypoint.sh: exec: line 8: /app/start_dev.sh: not found mailhog | 2021/10/14 16:08:04 Using in-memory storage mailhog | 2021/10/14 16:08:04 [SMTP] Binding to address: 0.0.0.0:1025 mailhog | [HTTP] Binding to address: 0.0.0.0:8025 mailhog | 2021/10/14 16:08:04 Serving under http://0.0.0.0:8025/ mailhog | Creating API v1 with WebPath: mailhog | Creating API v2 with WebPath: postgres | 2021-10-14 16:08:04.032 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432 postgres | 2021-10-14 16:08:04.032 UTC [1] LOG: listening on IPv6 address "::", port 5432 postgres | 2021-10-14 16:08:04.037 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" postgres | 2021-10-14 16:08:04.054 UTC [25] LOG: database system was shut down at 2021-10-14 00:33:05 UTC redis | 1:C 14 Oct 2021 16:08:03.869 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo redis | 1:C 14 Oct 2021 16:08:03.869 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=1, just started redis | 1:C 14 Oct 2021 16:08:03.869 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf redis | 1:M 14 Oct 2021 16:08:03.870 * monotonic clock: POSIX clock_gettime redis | 1:M 14 Oct 2021 16:08:03.872 * Running mode=standalone, port=6379. redis | 1:M 14 Oct 2021 16:08:03.872 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. redis | 1:M 14 Oct 2021 16:08:03.872 # Server initialized redis | 1:M 14 Oct 2021 16:08:03.872 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. redis | 1:M 14 Oct 2021 16:08:03.873 * Loading RDB produced by version 6.2.6 redis | 1:M 14 Oct 2021 16:08:03.873 * RDB age 56098 seconds redis | 1:M 14 Oct 2021 16:08:03.873 * RDB memory usage when created 0.77 Mb redis | 1:M 14 Oct 2021 16:08:03.873 # Done loading RDB, keys loaded: 1, keys expired: 0. redis | 1:M 14 Oct 2021 16:08:03.873 * DB loaded from disk: 0.001 seconds redis | 1:M 14 Oct 2021 16:08:03.873 * Ready to accept connections postgres | 2021-10-14 16:08:04.067 UTC [1] LOG: database system is ready to accept connections frontend exited with code 127 redis-commander | Creating custom redis-commander config '/redis-commander/config/local-production.json'. redis-commander | node ./bin/redis-commander --redis-host redis redis-commander | Using scan instead of keys redis-commander | No Save: false redis-commander | listening on 0.0.0.0:8081 redis-commander | access with browser at http://127.0.0.1:8081 redis-commander | Redis Connection redis:6379 using Redis DB #0 redis-commander | node ./bin/redis-commander --redis-host redis redis-commander | Using scan instead of keys redis-commander | No Save: false redis-commander | listening on 0.0.0.0:8081 redis-commander | access with browser at http://127.0.0.1:8081 redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | setUpConnection (R:redis:6379:0) Redis error Error: getaddrinfo EAI_AGAIN redis redis-commander | at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) redis-commander | Redis Connection redis:6379 using Redis DB #0 backend | Traceback (most recent call last): backend | File "manage.py", line 22, in backend | main() backend | File "manage.py", line 18, in main backend | execute_from_command_line(sys.argv) backend | File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line backend | utility.execute() backend | File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 345, in execute backend | settings.INSTALLED_APPS backend | File "/usr/local/lib/python3.8/site-packages/django/conf/__init__.py", line 83, in __getattr__ backend | self._setup(name) backend | File "/usr/local/lib/python3.8/site-packages/django/conf/__init__.py", line 70, in _setup backend | self._wrapped = Settings(settings_module) backend | File "/usr/local/lib/python3.8/site-packages/django/conf/__init__.py", line 177, in __init__ backend | mod = importlib.import_module(self.SETTINGS_MODULE) backend | File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module backend | return _bootstrap._gcd_import(name[level:], package, level) backend | File "", line 1014, in _gcd_import backend | File "", line 991, in _find_and_load backend | File "", line 975, in _find_and_load_unlocked backend | File "", line 671, in _load_unlocked backend | File "", line 843, in exec_module backend | File "", line 219, in _call_with_frames_removed backend | File "/code/backend/settings/development.py", line 1, in backend | from .base import * # noqa backend | File "/code/backend/settings/base.py", line 26, in backend | SECRET_KEY = os.environ["SECRET_KEY"] backend | File "/usr/local/lib/python3.8/os.py", line 675, in __getitem__ backend | raise KeyError(key) from None backend | KeyError: 'SECRET_KEY' celery | Traceback (most recent call last): celery | File "/usr/local/lib/python3.8/site-packages/kombu/utils/objects.py", line 41, in __get__ celery | return obj.__dict__[self.__name__] celery | KeyError: 'data' celery | celery | During handling of the above exception, another exception occurred: celery | celery | Traceback (most recent call last): celery | File "/usr/local/bin/celery", line 8, in celery | sys.exit(main()) celery | File "/usr/local/lib/python3.8/site-packages/celery/__main__.py", line 15, in main celery | sys.exit(_main()) celery | File "/usr/local/lib/python3.8/site-packages/celery/bin/celery.py", line 205, in main celery | return celery(auto_envvar_prefix="CELERY") celery | File "/usr/local/lib/python3.8/site-packages/click/core.py", line 1128, in __call__ celery | return self.main(*args, **kwargs) celery | File "/usr/local/lib/python3.8/site-packages/click/core.py", line 1053, in main celery | rv = self.invoke(ctx) celery | File "/usr/local/lib/python3.8/site-packages/click/core.py", line 1657, in invoke celery | sub_ctx = cmd.make_context(cmd_name, args, parent=ctx) celery | File "/usr/local/lib/python3.8/site-packages/click/core.py", line 914, in make_context celery | self.parse_args(ctx, args) celery | File "/usr/local/lib/python3.8/site-packages/click/core.py", line 1370, in parse_args celery | value, args = param.handle_parse_result(ctx, opts, args) celery | File "/usr/local/lib/python3.8/site-packages/click/core.py", line 2347, in handle_parse_result celery | value = self.process_value(ctx, value) celery | File "/usr/local/lib/python3.8/site-packages/click/core.py", line 2309, in process_value celery | value = self.callback(ctx, self, value) celery | File "/usr/local/lib/python3.8/site-packages/celery/bin/worker.py", line 136, in celery | callback=lambda ctx, _, value: value or ctx.obj.app.conf.worker_state_db, celery | File "/usr/local/lib/python3.8/site-packages/celery/utils/collections.py", line 112, in __getattr__ celery | return self[k] celery | File "/usr/local/lib/python3.8/site-packages/celery/utils/collections.py", line 420, in __getitem__ celery | return getitem(k) celery | File "/usr/local/lib/python3.8/site-packages/celery/utils/collections.py", line 264, in __getitem__ celery | return mapping[_key] celery | File "/usr/local/lib/python3.8/collections/__init__.py", line 1006, in __getitem__ celery | if key in self.data: celery | File "/usr/local/lib/python3.8/site-packages/kombu/utils/objects.py", line 43, in __get__ celery | value = obj.__dict__[self.__name__] = self.__get(obj) celery | File "/usr/local/lib/python3.8/site-packages/celery/app/base.py", line 136, in data celery | return self.callback() celery | File "/usr/local/lib/python3.8/site-packages/celery/app/base.py", line 897, in _finalize_pending_conf celery | conf = self._conf = self._load_config() celery | File "/usr/local/lib/python3.8/site-packages/celery/app/base.py", line 907, in _load_config celery | self.loader.config_from_object(self._config_source) celery | File "/usr/local/lib/python3.8/site-packages/celery/loaders/base.py", line 128, in config_from_object celery | self._conf = force_mapping(obj) celery | File "/usr/local/lib/python3.8/site-packages/celery/utils/collections.py", line 43, in force_mapping celery | if isinstance(m, (LazyObject, LazySettings)): celery | File "/usr/local/lib/python3.8/site-packages/django/utils/functional.py", line 240, in inner celery | self._setup() celery | File "/usr/local/lib/python3.8/site-packages/django/conf/__init__.py", line 64, in _setup celery | raise ImproperlyConfigured( celery | django.core.exceptions.ImproperlyConfigured: Requested settings, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings. nginx | 2021/10/14 16:08:05 [emerg] 1#1: host not found in upstream "frontend:8080" in /etc/nginx/nginx.conf:17 nginx | nginx: [emerg] host not found in upstream "frontend:8080" in /etc/nginx/nginx.conf:17 nginx exited with code 1 flower | [W 211014 16:08:50 control:43] 'stats' inspect method failed flower | [W 211014 16:08:50 control:43] 'active_queues' inspect method failed flower | [W 211014 16:08:50 control:43] 'registered' inspect method failed flower | [W 211014 16:08:50 control:43] 'scheduled' inspect method failed flower | [W 211014 16:08:50 control:43] 'active' inspect method failed flower | [W 211014 16:08:50 control:43] 'reserved' inspect method failed flower | [W 211014 16:08:50 control:43] 'revoked' inspect method failed flower | [W 211014 16:08:50 control:43] 'conf' inspect method failed mailhog | [APIv1] KEEPALIVE /api/v1/events mailhog | [APIv1] KEEPALIVE /api/v1/events ```
4. Docker (v20.10.7) screenshot of running containers ![image](https://user-images.githubusercontent.com/9093546/137368684-3742f5f4-b8f2-40ab-8971-44cc3416dc86.png)

Thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.