Coder Social home page Coder Social logo

docker-taiga's Introduction

Deploy your Taiga services with Docker

Taiga is a project management platform for agile developers & designers and project managers who want a beautiful tool that makes work truly enjoyable. http://taiga.io

Docker Taiga

Goodies

  • Python 3.6
  • Postgres 10
  • Alpine Linux images
  • Gevent worker for gunicorn
  • django-anymail integration

I've tried to containerize every module, so we have:

Bonus: I've added a config if you want to use mailgun.

Quickstart

I'm going to write some better instructions soon, but for now, if you want to try it, just type:

docker-compose up

PS: This will load the docker-compose.override.yml too (useful for local / dev envs)

PS: since the frontend port is mapped to 80, just go to your brower and http://localhost. The login credentials are admin with password 123123.

On production, just rename the file productionenv-template--rename-this-file.env to production.env

docker-compose -f docker-compose.yml -f docker-compose.production.yml up

Learn more about docker compose override / extends.

Tips, Tricks and Notes

  • Most of the configurations you will be able to do on docker-compose.yml and .env file.
  • Because of lxml and cryptography you would have to spin up a server with more RAM than you would want, but if you build locally, push to a registry and just pull on your server, you won't be compiling on deploy. =]
  • I plan to use Caddy instead of Nginx, but don't know when, you may want to look, it's nice.

Credits

https://taigaio.github.io/taiga-doc/dist/setup-production.html

Inspired by:

docker-taiga's People

Contributors

douglasmiranda avatar g0blin79 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  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

docker-taiga's Issues

keep calling localhost:8000 for api calls :(

No matter what I do, it still keeps calling localhost:8000 for api calls...

I have set my hostname in env file, in docker-compose yml files, everywhere where I can, but it still calls localhost:8000 for api :'(

image

I run ~# docker exec -it taiga_frontend_1 sh to check what env is showing (and I checked that in all the containers of taiga)
(I replaced with asterisks sensitive info)

/taiga_frontend # env
EVENTS_URL="wss://******/events"
VIRTUAL_HOST=******
HOSTNAME=97c9d91e367e
DEBUG=False
CELERY_ENABLED=True
SECRET_KEY='******'
EMAIL_PORT = 587
SHLVL=1
DEFAULT_FROM_EMAIL='******'
HOME=/root
TAIGA_VERSION=4.0.0-stable
SSL_ENABLED=True
CELERY_TIMEZONE='Europe/******'
RABBITMQ_ERLANG_COOKIE=******
RABBITMQ_PASSWORD=******
TERM=xterm
PUBLIC_REGISTER_ENABLED=false
RABBITMQ_HOST=rabbitmq
EMAIL_HOST_PASSWORD = '******'
RABBITMQ_USER=taiga
NGINX_VERSION=1.15.7
POSTGRES_PASSWORD=******
EMAIL_USE_SSL = True
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
EMAIL_HOST_USER = '******'
POSTGRES_USER=taiga
TAIGA_HOSTNAME=******
RABBITMQ_VHOST=taiga
TAIGA_SECRET='******'
ALLOWED_HOSTS=******
LETSENCRYPT_HOST=******
PWD=/taiga_frontend
POSTGRES_DB=taiga
API_URL="https://******/api/v1/"
LETSENCRYPT_EMAIL=******
EMAIL_HOST = 'smtp.gmail.com'
/taiga_frontend # ls
conf.example.json  conf.json          humans.txt         images             index.html         media              static-root        v-1543396862041
/taiga_frontend # cat conf.json
{
    "api": "https://******/api/v1/",
    "eventsUrl": "wss://******/events",
    "eventsMaxMissedHeartbeats": 5,
    "eventsHeartbeatIntervalTime": 60000,
    "debug": False,
    "debugInfo": False,
    "defaultLanguage": "en",
    "themes": ["taiga"],
    "defaultTheme": "taiga",
    "importers": null,
    "publicRegisterEnabled": false,
    "feedbackEnabled": true,
    "privacyPolicyUrl": null,
    "termsOfServiceUrl": null,
    "maxUploadFileSize": null,
    "contribPlugins": []
}
/taiga_frontend # exit

do anyone have any idea what might happening?

Thanks!

Update

Oh, I think I can see the issue, the False in conf.json files (with capital F) is invalid json format, I'll work on fixing it now and see if that was the source of the issue.

Update

I have modified the file frontend/scripts/entrypoint.sh and I added the following line:

TAIGA_DEBUG=$(echo ${DEBUG:-false} | awk '{print tolower($0)}')

and later on:

    "debug": $TAIGA_DEBUG,
    "debugInfo": $TAIGA_DEBUG,

problem solved.

cheers

celeryworker cannot connect

Hello,
thanks for your work !

I got this error when I try to deploy in dev environnment,

consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refused.

I tried to change user and use default user in celery but nothing worked.

regards,

Getting an error with iptables

Hello!
Trying to set up taiga on my Raspberry Pi. But I am facing this error:

pi@raspberrypi:~/docker-taiga$ docker-compose up
Creating network "dockertaiga_default" with the default driver
ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-ecc5613de563 -j RETURN: iptables: No chain/target/match by that name.
 (exit status 1))

Any thoughts?

celeryworker failed to build

Building celeryworker Step 1/24 : FROM python:3.6-alpine3.6 as BUILDER ERROR: Service 'celeryworker' failed to build: Error parsing reference: "python:3.6-alpine3.6 as BUILDER" is not a valid repository/tag: invalid reference format

module kombu.async not found

celeryworker_1  | Traceback (most recent call last):
celeryworker_1  |   File "/usr/local/bin/celery", line 11, in <module>
celeryworker_1  |     sys.exit(main())
celeryworker_1  |   File "/usr/local/lib/python3.6/site-packages/celery/__main__.py", line 12, in main
celeryworker_1  |     maybe_patch_concurrency()
celeryworker_1  |   File "/usr/local/lib/python3.6/site-packages/celery/__init__.py", line 146, in maybe_patch_concurrency
celeryworker_1  |     concurrency.get_implementation(pool)
celeryworker_1  |   File "/usr/local/lib/python3.6/site-packages/celery/concurrency/__init__.py", line 23, in get_implementation
celeryworker_1  |     return symbol_by_name(cls, ALIASES)
celeryworker_1  |   File "/usr/local/lib/python3.6/site-packages/kombu/utils/imports.py", line 56, in symbol_by_name
celeryworker_1  |     module = imp(module_name, package=package, **kwargs)
celeryworker_1  |   File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
celeryworker_1  |     return _bootstrap._gcd_import(name[level:], package, level)
celeryworker_1  |   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
celeryworker_1  |   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
celeryworker_1  |   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
celeryworker_1  |   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
celeryworker_1  |   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
celeryworker_1  |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
celeryworker_1  |   File "/usr/local/lib/python3.6/site-packages/celery/concurrency/gevent.py", line 4, in <module>
celeryworker_1  |     from kombu.async import timer as _timer
celeryworker_1  | ModuleNotFoundError: No module named 'kombu.async'

standard_init_linux.go:207: exec user process caused "no such file or directory"

Command:

docker-compose up

Result:

docker-taiga_postgresql_1 is up-to-date
docker-taiga_redis_1 is up-to-date
docker-taiga_rabbitmq_1 is up-to-dateStarting docker-taiga_backend_1 ...

Starting docker-taiga_backend_1 ... done
Starting docker-taiga_events_1  ... done
Starting docker-taiga_frontend_1 ... done
Attaching to docker-taiga_postgresql_1, docker-taiga_redis_1, docker-taiga_rabbitmq_1, docker-taiga_celeryworker_1, docker-taiga_backend_1, docker-taiga_events_1, docker-taiga_frontend_1
backend_1       | standard_init_linux.go:207: exec user process caused "no such file or directory"
events_1        | standard_init_linux.go:207: exec user process caused "no such file or directory"
frontend_1      | standard_init_linux.go:207: exec user process caused "no such file or directory"
docker-taiga_backend_1 exited with code 1
postgresql_1    | 2019-07-27 01:27:22.286 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
postgresql_1    | 2019-07-27 01:27:22.286 UTC [1] LOG:  listening on IPv6 address "::", port 5432
postgresql_1    | 2019-07-27 01:27:22.294 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgresql_1    | 2019-07-27 01:27:22.327 UTC [18] LOG:  database system was interrupted; last known up at 2019-07-27 01:06:39 UTC
postgresql_1    | 2019-07-27 01:27:23.376 UTC [18] LOG:  database system was not properly shut down; automatic recovery in progress
postgresql_1    | 2019-07-27 01:27:23.380 UTC [18] LOG:  redo starts at 0/163B8D8
postgresql_1    | 2019-07-27 01:27:23.380 UTC [18] LOG:  invalid record length at 0/163B910: wanted 24, got 0
postgresql_1    | 2019-07-27 01:27:23.380 UTC [18] LOG:  redo done at 0/163B8D8
postgresql_1    | 2019-07-27 01:27:23.408 UTC [1] LOG:  database system is ready to accept connections
docker-taiga_events_1 exited with code 1
rabbitmq_1      |
rabbitmq_1      |               RabbitMQ 3.6.16. Copyright (C) 2007-2018 Pivotal Software, Inc.
rabbitmq_1      |   ##  ##      Licensed under the MPL.  See http://www.rabbitmq.com/
rabbitmq_1      |   ##  ##
rabbitmq_1      |   ##########  Logs: tty
rabbitmq_1      |   ######  ##        tty
rabbitmq_1      |   ##########
rabbitmq_1      |               Starting broker...
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:31 ===
rabbitmq_1      | Starting RabbitMQ 3.6.16 on Erlang 20.3.4
rabbitmq_1      | Copyright (C) 2007-2018 Pivotal Software, Inc.
rabbitmq_1      | Licensed under the MPL.  See http://www.rabbitmq.com/
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:31 ===
rabbitmq_1      | node           : rabbit@taiga_rabbitmq
rabbitmq_1      | home dir       : /var/lib/rabbitmq
rabbitmq_1      | config file(s) : /etc/rabbitmq/rabbitmq.config
rabbitmq_1      | cookie hash    : 2Lx1Fp/Us4UnTAaS3sSVyw==
rabbitmq_1      | log            : tty
rabbitmq_1      | sasl log       : tty
rabbitmq_1      | database dir   : /var/lib/rabbitmq/mnesia/rabbit@taiga_rabbitmq
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | Memory high watermark set to 792 MiB (830613094 bytes) of 1980 MiB (2076532736 bytes) total
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | Enabling free disk space monitoring
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | Disk free limit set to 50MB
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | Limiting to approx 1048476 file handles (943626 sockets)
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | FHC read buffering:  OFF
rabbitmq_1      | FHC write buffering: ON
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | Database directory at /var/lib/rabbitmq/mnesia/rabbit@taiga_rabbitmq is empty. Initialising from scratch...
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      |     application: mnesia
rabbitmq_1      |     exited: stopped
rabbitmq_1      |     type: temporary
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | Waiting for Mnesia tables for 30000 ms, 9 retries left
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | Waiting for Mnesia tables for 30000 ms, 9 retries left
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | Waiting for Mnesia tables for 30000 ms, 9 retries left
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | Priority queues enabled, real BQ is rabbit_variable_queue
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | Starting rabbit_node_monitor
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | Management plugin: using rates mode 'basic'
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | msg_store_transient: using rabbit_msg_store_ets_index to provide index
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | msg_store_persistent: using rabbit_msg_store_ets_index to provide index
rabbitmq_1      |
rabbitmq_1      | =WARNING REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | msg_store_persistent: rebuilding indices from scratch
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | Adding vhost 'taiga'
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | Creating user 'taiga'
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | Setting user tags for user 'taiga' to [administrator]
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | Setting permissions for 'taiga' in 'taiga' to '.*', '.*', '.*'
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | started TCP Listener on [::]:5672
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | Management plugin started. Port: 15672
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | Statistics database started.
rabbitmq_1      |  completed with 6 plugins.
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:36 ===
rabbitmq_1      | Server startup complete; 6 plugins started.
rabbitmq_1      |  * rabbitmq_management
rabbitmq_1      |  * rabbitmq_web_dispatch
rabbitmq_1      |  * cowboy
rabbitmq_1      |  * rabbitmq_management_agent
rabbitmq_1      |  * amqp_client
rabbitmq_1      |  * cowlib
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:37 ===
rabbitmq_1      | accepting AMQP connection <0.550.0> (172.19.0.7:52120 -> 172.19.0.4:5672)
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:37 ===
rabbitmq_1      | connection <0.550.0> (172.19.0.7:52120 -> 172.19.0.4:5672): user 'taiga' authenticated and granted access to vhost 'taiga'
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:37 ===
rabbitmq_1      | accepting AMQP connection <0.559.0> (172.19.0.7:52122 -> 172.19.0.4:5672)
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:37 ===
rabbitmq_1      | connection <0.559.0> (172.19.0.7:52122 -> 172.19.0.4:5672): user 'taiga' authenticated and granted access to vhost 'taiga'
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:37 ===
rabbitmq_1      | accepting AMQP connection <0.580.0> (172.19.0.7:52124 -> 172.19.0.4:5672)
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:37 ===
rabbitmq_1      | connection <0.580.0> (172.19.0.7:52124 -> 172.19.0.4:5672): user 'taiga' authenticated and granted access to vhost 'taiga'
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:38 ===
rabbitmq_1      | accepting AMQP connection <0.610.0> (172.19.0.7:52134 -> 172.19.0.4:5672)
rabbitmq_1      |
rabbitmq_1      | =INFO REPORT==== 27-Jul-2019::01:27:38 ===
rabbitmq_1      | connection <0.610.0> (172.19.0.7:52134 -> 172.19.0.4:5672): user 'taiga' authenticated and granted access to vhost 'taiga'
celeryworker_1  | Trying import local.py settings...
celeryworker_1  | [2019-07-27 01:27:35,363: ERROR/MainProcess] consumer: Cannot connect to amqp://taiga:**@rabbitmq:5672/taiga: [Errno 111] Connection refused.
celeryworker_1  | Trying again in 2.00 seconds...
celeryworker_1  |
celeryworker_1  | [2019-07-27 01:27:37,382: INFO/MainProcess] Connected to amqp://taiga:**@rabbitmq:5672/taiga
celeryworker_1  | [2019-07-27 01:27:37,406: INFO/MainProcess] mingle: searching for neighbors
celeryworker_1  | [2019-07-27 01:27:38,440: INFO/MainProcess] mingle: all alone
celeryworker_1  | [2019-07-27 01:27:38,472: INFO/MainProcess] pidbox: Connected to amqp://taiga:**@rabbitmq:5672/taiga.
redis_1         | 1:C 27 Jul 01:27:21.999 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1         | 1:C 27 Jul 01:27:21.999 # Redis version=4.0.14, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1         | 1:C 27 Jul 01:27:21.999 # 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         | 1:M 27 Jul 01:27:22.003 * Running mode=standalone, port=6379.
redis_1         | 1:M 27 Jul 01:27:22.003 # 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         | 1:M 27 Jul 01:27:22.003 # Server initialized
redis_1         | 1:M 27 Jul 01:27:22.003 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
redis_1         | 1:M 27 Jul 01:27:22.003 * Ready to accept connections
docker-taiga_frontend_1 exited with code 1

v4.2.12

Any plans to support latest version 4.2.12 ?

Any tips how to update to latest?

Can't import a project

Hi!

celeryworker_1 seems to receive the task for import, but nothing happens, in the log I see this:

celeryworker_1 | [2018-04-14 00:40:23,736: INFO/MainProcess] Received task: taiga.timeline.service.push_to_timelines[8eda1150-955c-48db-b350-da186077c6fb]
celeryworker_1 | [2018-04-14 00:40:23,738: DEBUG/MainProcess] Task accepted: taiga.timeline.service.push_to_timelines[8eda1150-955c-48db-b350-da186077c6fb] pid:1

And nothing more.

Good job!

Alternative production-ready container

Hi, I see this project looks dead. I created a working, production-ready container, you may be interested.

Features:

  • Production-ready setup (using gunicorn instead of python's built-in development server)
  • Stable versioning (tagged Taiga releases + dated snapshots. Dated snapshots are immutable, as main tags can be updated in case of a hotfix)
  • Automatic building of each new Taiga release on Travis CI (using for-each-github-release toolkit from RiotKit CI Utils)
  • Automatic documentation in README.md generated from parsed ENV variables and comments placed in Dockerfile

Please take a look at:
https://github.com/riotkit-org/docker-taiga

Have a nice day :)

Improvements Config/Deployment

I'm thinking about providing configs for Docker Swarm. We can easily deploy with docker stack command simply using Docker Compose files, but there are some specific things like using Docker Secrets for storing sensitive data that would be best to keep in separate files probably.

I have a Python package that will help with this and could replace django-environ:

And if we need an "automatic Docker Secrets to Environment Variables":

And the easiest way to provide an HTTPS config would be with Caddy, I have something ready for this too:

Related: #2 #4

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.