devinsolutions / docker-taiga Goto Github PK
View Code? Open in Web Editor NEWTaiga-back + taiga-front, served with uWSGI, based on the official Python-Alpine image.
Home Page: https://hub.docker.com/r/devinsolutions/taiga
License: MIT License
Taiga-back + taiga-front, served with uWSGI, based on the official Python-Alpine image.
Home Page: https://hub.docker.com/r/devinsolutions/taiga
License: MIT License
In Taiga 5.5, psycopg2
was upgraded to version 2.8.5, which was AFAIK the only blocker in upgrading to Python 3.8.
Hi!
Is the image deprecated? It says so on dockerhub, but is the best maintained taiga image by far. (I also like, that it uses less privileges. Thank you for building it)
Cheers
Hi,
I used your docker-compose in advanced mode to bring up the taiga, everything worked out of the box for a test env I set up for it, however default taiga admin user password i.e 123123 did not work. I tried to look for it in all the files config settings there are no place I could find it. Can you state where in the code you set it and how to find it please?
Thanks
Hi,
I have an issue starting the latest taiga build on docker with Ubuntu Server 18.04.
The taiga_server shuts permanently down with the following error message:
bind(): Permission denied [core/socket.c line 230]
You linked to the USWGI documentation page, so I copied your ini and tried to set the socket manually, but the problem still exists. Some posts suggest to move the socket to /tmp but yet the same issue.
My USWGI environmental variables are set according to the compose file you provide:
UWSGI_HTTP = ~
UWSGI_HTTP_SOCKET = 8080
UWSGI_OFFLOAD_THREADS = 4
UWSGI_UWSGI_SOCKET = 3031
It's a permission problem for sure, but the container shuts down before I'm able to login to check some permissions.
Do you have any ideas?
Best,
Sandro
P.S. The full log is here
Post-processed 'img/emojis/page_facing_up.png' as 'img/emojis/page_facing_up.badfd4374777.png',
Post-processed 'img/emojis/last_quarter_moon.png' as 'img/emojis/last_quarter_moon.113eee6c339a.png',
Post-processed 'img/emojis/cry.png' as 'img/emojis/cry.066f0a8e8007.png',
Post-processed 'img/emojis/bride_with_veil.png' as 'img/emojis/bride_with_veil.479589c75ef7.png',
Post-processed 'img/emojis/+1.png' as 'img/emojis/+1.1265e19214d7.png',
Post-processed 'img/emojis/bow.png' as 'img/emojis/bow.359171114114.png',
Post-processed 'img/emojis/repeat_one.png' as 'img/emojis/repeat_one.f90e83153756.png',
Post-processed 'img/emojis/suspect.png' as 'img/emojis/suspect.a358405d03a8.png',
Post-processed 'img/emojis/flags.png' as 'img/emojis/flags.4035d7f64a33.png',
Post-processed 'img/emojis/full_moon.png' as 'img/emojis/full_moon.28d128a7ecf0.png',
Post-processed 'img/emojis/grapes.png' as 'img/emojis/grapes.ae15bf11a8e5.png',
Post-processed 'img/emojis/squirrel.png' as 'img/emojis/squirrel.953181108406.png',
Post-processed 'img/emojis/person_with_blond_hair.png' as 'img/emojis/person_with_blond_hair.6311643e3030.png',
Post-processed 'img/emojis/hibiscus.png' as 'img/emojis/hibiscus.6f8b58bbdda6.png',
Post-processed 'img/emojis/japan.png' as 'img/emojis/japan.2c12e9d07818.png',
Post-processed 'img/emojis/kr.png' as 'img/emojis/kr.a7ce8fbc4938.png',
Post-processed 'img/emojis/earth_africa.png' as 'img/emojis/earth_africa.b9fbdb7424c9.png',
Post-processed 'img/emojis/umbrella.png' as 'img/emojis/umbrella.4c1ce20c95a6.png',
Post-processed 'img/emojis/rocket.png' as 'img/emojis/rocket.95e468d6ef70.png',
Post-processed 'img/emojis/maple_leaf.png' as 'img/emojis/maple_leaf.b02a511bb0d9.png',
Post-processed 'img/emojis/no_mobile_phones.png' as 'img/emojis/no_mobile_phones.e96a32aa5ed2.png',
Post-processed 'emails/logo-web.png' as 'emails/logo-web.5589906ac9dc.png',
Post-processed 'emails/logo-twitter.png' as 'emails/logo-twitter.36870cca84d9.png',
Post-processed 'emails/top-bg-update.png' as 'emails/top-bg-update.ecc2bd74400e.png',
Post-processed 'emails/logo.png' as 'emails/logo.4db5dc4e03fb.png',
Post-processed 'emails/logo-color.png' as 'emails/logo-color.7dd421a9b797.png',
Post-processed 'emails/top-bg-hero.png' as 'emails/top-bg-hero.62b5908dae16.png',
Post-processed 'emails/logo-github.png' as 'emails/logo-github.d1f4495235c7.png',
Post-processed 'img/user-noimage.png' as 'img/user-noimage.5ce8fcc7f0e7.png',
Post-processed 'admin/css/base.css' as 'admin/css/base.6b517d0d5813.css',
Post-processed 'admin/css/dashboard.css' as 'admin/css/dashboard.7ac78187c567.css',
Post-processed 'admin/css/forms.css' as 'admin/css/forms.2003a066ae02.css',
Post-processed 'admin/css/rtl.css' as 'admin/css/rtl.4c867197b256.css',
Post-processed 'admin/css/login.css' as 'admin/css/login.a846c0e2ef65.css',
Post-processed 'admin/css/changelists.css' as 'admin/css/changelists.f6dc691f8d62.css',
Post-processed 'admin/css/fonts.css' as 'admin/css/fonts.494e4ec545c9.css',
Post-processed 'admin/css/widgets.css' as 'admin/css/widgets.5e372b41c483.css',
Post-processed 'admin/css/base.css' as 'admin/css/base.6b517d0d5813.css',
Post-processed 'admin/css/dashboard.css' as 'admin/css/dashboard.7ac78187c567.css',
Post-processed 'admin/css/forms.css' as 'admin/css/forms.2003a066ae02.css',
Post-processed 'admin/css/rtl.css' as 'admin/css/rtl.4c867197b256.css',
Post-processed 'admin/css/login.css' as 'admin/css/login.a846c0e2ef65.css',
Post-processed 'admin/css/changelists.css' as 'admin/css/changelists.f6dc691f8d62.css',
Post-processed 'admin/css/fonts.css' as 'admin/css/fonts.494e4ec545c9.css',
Post-processed 'admin/css/widgets.css' as 'admin/css/widgets.5e372b41c483.css',
,
941 static files copied to '/srv/taiga-back/static', 957 post-processed.,
[uWSGI] getting INI configuration from /usr/local/etc/uwsgi/uwsgi.ini,
*** Starting uWSGI 2.0.18 (64bit) on [Fri Apr 17 12:30:42 2020] ***,
compiled with version: 9.2.0 on 24 March 2020 11:05:59,
os: Linux-4.15.0-96-generic #97-Ubuntu SMP Wed Apr 1 03:25:46 UTC 2020,
nodename: 3740ddf5b593,
machine: x86_64,
clock source: unix,
pcre jit disabled,
detected number of CPU cores: 12,
current working directory: /opt/taiga-back,
detected binary path: /usr/local/bin/uwsgi,
*** dumping internal routing table ***,
[rule: 0] subject: path_info regexp: ^/favicon.ico$ action: goto:404,
[rule: 1] action: addheader:X-Content-Type-Options: nosniff,
[rule: 2] subject: path_info regexp: ^/((images|v-\d+)(/|$)|(conf.json|humans.txt|robots.txt)$) action: goto:front,
[rule: 3] subject: path_info regexp: ^/media(/|$) action: goto:media,
[rule: 4] subject: path_info regexp: ^/static(/|$) action: goto:static,
[rule: 5] action: addheader:X-Frame-Options: DENY,
[rule: 6] action: addheader:X-XSS-Protection: 1; mode=block,
[rule: 7] subject: path_info regexp: ^/(?!(admin|api)(/|$)) action: addheader:Cache-Control: no-cache, must-revalidate,
[rule: 8] subject: path_info regexp: ^/(?!(admin|api)(/|$)) action: static:/opt/taiga-front/index.html,
[rule: 9] action: last:,
[rule: 10] label: front,
[rule: 11] subject: path_info regexp: ^/(.*) action: rewrite:$1,
[rule: 12] subject: /opt/taiga-front/${PATH_INFO} func: isfile action: goto:front-file,
[rule: 13] action: goto:404,
[rule: 14] label: front-file,
[rule: 15] subject: path_info regexp: ^v-\d+/ action: addheader:Cache-Control: public, max-age=31536000,
[rule: 16] subject: path_info regexp: ^(?!v-\d+/) action: addheader:Cache-Control: no-cache, must-revalidate,
[rule: 17] action: static:/opt/taiga-front/${PATH_INFO},
[rule: 18] label: media,
[rule: 19] subject: path_info regexp: ^/media/(.*) action: rewrite:$1,
[rule: 20] subject: /srv/taiga-back/media/${PATH_INFO} func: isfile action: static:/srv/taiga-back/media/${PATH_INFO},
[rule: 21] action: goto:404,
[rule: 22] label: static,
[rule: 23] subject: path_info regexp: ^/static/(.*) action: rewrite:$1,
[rule: 24] subject: /srv/taiga-back/static/${PATH_INFO} func: isfile action: goto:static-file,
[rule: 25] action: goto:404,
[rule: 26] label: static-file,
[rule: 27] action: addheader:Cache-Control: public, max-age=31536000,
[rule: 28] action: static:/srv/taiga-back/static/${PATH_INFO},
[rule: 29] label: 404,
[rule: 30] action: addheader:Cache-Control: no-cache, must-revalidate,
[rule: 31] action: break:404 Not Found,
*** end of the internal routing table ***,
dir() to /opt/taiga-back,
your memory page size is 4096 bytes,
detected max file descriptor number: 1048576,
building mime-types dictionary from file /etc/mime.types...1183 entry found,
lock engine: pthread robust mutexes,
thunder lock: disabled (you can enable it with --thunder-lock),
bind(): Permission denied [core/socket.c line 230],```
After fresh install on vps with ubuntu 18.04 lts - login screen shows - but can not login with default admin 123123 (not sure this works on your version) and can not sign up. Getting the error message.
Hi,
thank you for maintaining the docker image. The installation process was a breeze =)
However, I ran lately into an issue:
I can change the logo in project details but the logo won't show up. Instead, I get the typical 'missing images icon'. I double checked this issue on taiga.io, where it doesn't happen for the same image.
The inspect tool tells me on my site the following:
log:
WebSocket connection to 'ws://127.0.0.1:8080/events' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
t.setupConnection @ app.js:3247
r @ lodash.js:4935
image:
<img tg-project-logo-big-src="project._attrs" alt="logo" class="image" src="http://localhost:8080/media/project/2/a/f/2/fde42416853450ee23d74f43685ee45e61f5cdfc074b66c924b57eb3f4b0/phd_180.png.300x300_q85_crop.png" style="">
I use a reverse proxy, which forwards the traffic to a dedicated URL.
My docker compose file:
version: "3.7"
x-taiga-common: &taiga-common
image: devinsolutions/taiga:latest
volumes:
- type: bind
source: /share/cloud_services/taiga/media
target: /srv/taiga-back/media
- /share/Containers/config_templates/taiga/front.json:/etc/opt/taiga-front/conf.json:ro
- /share/Containers/config_templates/taiga/settings.py:/etc/opt/taiga-back/settings.py:ro
services:
broker:
image: rabbitmq:3.7
environment:
RABBITMQ_DEFAULT_VHOST: taiga
RABBITMQ_NODENAME: rabbit@localhost
volumes:
- broker:/var/lib/rabbitmq
networks:
- backend
database:
image: postgres:11
environment:
POSTGRES_DB: taiga
POSTGRES_PASSWORD: MY_SUPER_SECRET_PASSWORD
POSTGRES_USER: taiga
stop_signal: SIGINT
volumes:
- type: bind
source: /share/cloud_services/taiga/db
target: /var/lib/postgresql/data
networks:
- backend
events:
image: devinsolutions/taiga-events:latest
deploy:
replicas: 1
update_config:
order: start-first
healthcheck:
interval: 5s
# Taiga-events seems unable to reconnect to message broker when connection cannot be
# established or is closed. There also does not seem to be another way to tell if the server
# is actually able to communicate with the broker.
test: "wget -q -t 1 http://localhost:8080 2>&1 | grep -q '426 Upgrade Required' &&
! egrep -m 1 -q '^Unhandled rejection ' /var/log/taiga-events.log"
volumes:
- /share/Containers/config_templates/taiga/events.json:/etc/opt/taiga-events/config.json:ro
networks:
- backend
migrations:
<<: *taiga-common
command:
- migrate
# Make sure this command is run only during the initial setup as it will
# overwrite existing data.
# - populate-db
deploy:
restart_policy:
condition: on-failure
delay: 5s
networks:
- backend
reverse-proxy:
image: nginx:1.17
#ports:
# - "9187:80"
stop_signal: SIGQUIT
volumes:
- /share/Containers/config_templates/taiga/default.conf:/etc/nginx/conf.d/default.conf:ro
networks:
- backend
- reverse_proxy
environment:
- VIRTUAL_HOST=MY_URL
- LETSENCRYPT_HOST=MY_URL
server:
<<: *taiga-common
command: run-server
deploy:
replicas: 1
update_config:
order: start-first
environment:
UWSGI_HTTP: ~
UWSGI_HTTP_SOCKET: :8080
UWSGI_OFFLOAD_THREADS: 4
UWSGI_UWSGI_SOCKET: :3031
healthcheck:
test: wget -q -t 1 --spider http://localhost:8080/api/v1/
stop_signal: SIGHUP
networks:
- backend
volumes:
broker:
networks:
backend:
name: taiga_backend
reverse_proxy:
external: true
My default.conf:
server {
listen 80 default_server;
server_name _;
charset utf-8;
client_max_body_size 50M;
large_client_header_buffers 4 32k;
resolver 127.0.0.11 valid=0s;
location / {
set $upstream_server server;
uwsgi_pass $upstream_server:3031;
include uwsgi_params;
}
location /events {
set $upstream_events events;
proxy_pass http://$upstream_events:8080/events;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 7d;
proxy_read_timeout 7d;
proxy_send_timeout 7d;
}
}
My front.json (i assume the culprit will be somewhere here...):
{
"api": "/api/v1/",
"eventsUrl": "ws://127.0.0.1:8080/events",
"eventsMaxMissedHeartbeats": 5,
"eventsHeartbeatIntervalTime": 60000,
"eventsReconnectTryInterval": 10000,
"debug": true,
"debugInfo": false,
"defaultLanguage": "en",
"themes": ["taiga"],
"defaultTheme": "taiga",
"publicRegisterEnabled": true,
"feedbackEnabled": true,
"supportUrl": "https://tree.taiga.io/support/",
"privacyPolicyUrl": null,
"termsOfServiceUrl": null,
"GDPRUrl": null,
"maxUploadFileSize": null,
"contribPlugins": [],
"tribeHost": null,
"importers": [],
"gravatar": true,
"rtlLanguages": ["fa"]
}
My events.json:
{
"url": "amqp://guest:guest@broker/taiga",
"secret": "<secret key>",
"webSocketServer": {
"port": 8080
}
}
My settings.py:
SECRET_KEY = '<secret key>'
PUBLIC_REGISTER_ENABLED = False
ALLOWED_HOSTS = [
'127.0.0.1',
'localhost',
'MY_URL'
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'taiga',
'USER': 'taiga',
'PASSWORD': 'MY_SUPER_SECRET_PASSWORD',
'HOST': 'database',
'PORT': '5432',
}
}
EVENTS_PUSH_BACKEND = "taiga.events.backends.rabbitmq.EventsPushBackend"
EVENTS_PUSH_BACKEND_OPTIONS = {"url": "amqp://guest:guest@broker/taiga"}
Do you have any idea what's wrong here?
Thank you in advance!
Cheers,
Sandro
Hi, i am trying your container. I use a slightly altered version of your docker-compose.yml .
Anyway setup went fine. I want to add regular users. Therefor i go to the /admin django admin page. But there the static content (css, js) is unavailable.
This post is about the same issue and there is a reply marked as a solution:
https://stackoverflow.com/questions/7241688/django-admin-css-missing/11299269
I added
STATIC_ROOT = 'static'
to my settings.py file, but i cannot go on
jaco@myserver~/projects/private-repo/taiga $ sudo docker exec -it taiga_app_1 sh
/opt/taiga-back $ python manage.py collectstatic
Trying import local.py settings...
Copying '/usr/local/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/timeparse.js'
Traceback (most recent call last):
...
PermissionError: [Errno 13] Permission denied: '/opt/taiga-back/static'
Isn't this something that should be done in the dockerfile ?
Thank you for the beautiful repository.
I tried it immediately, but could not log in with "admin: 123123".
Is this procedure something wrong?
git clone https://github.com/devinsolutions/docker-taiga.git taiga
cd taiga
vi docker-compose.advanced.yml
- # - populate-db
+ - populate-db
docker-compose -f ./docker-compose.advanced.yml up -d
I get that error almost everytime I create or edit something within a project doesn't matter if it's a User Story, a Task or an EPIC.
Interestingly all the changes I execute get saved even though I get that error notification.
Any idea why this happens?
error.log is empty
docker-compose:
version: "3.2"
services:
database:
image: postgres:alpine
container_name: taiga-db
stop_signal: SIGINT
volumes:
- ./data/db:/var/lib/postgresql/data
expose:
- "5432"
server:
image: devinsolutions/taiga:latest
container_name: taiga
depends_on:
- database
command:
- run-server
healthcheck:
test: wget -q -t 1 --spider http://localhost:8080/api/v1/
expose:
- "8080"
stop_signal: SIGHUP
volumes:
- ./data/media:/srv/taiga-back/media
- ./conf/settings.py:/etc/opt/taiga-back/settings.py:ro
labels:
- "traefik.enable=true"
- "traefik.port=8080"
- "traefik.docker.network=reverse-proxy"
# Entrypoint and TLS
- "traefik.http.routers.taiga.entrypoints=https"
- "traefik.http.routers.taiga.rule=Host(`taiga.domain.org`)"
- "traefik.http.routers.taiga.tls.options=myTLSOptions@file"
- "traefik.http.routers.taiga.tls.certresolver=le"
# Middlewares:
- "traefik.http.routers.taiga.middlewares=taiga@docker"
# Middleware taiga adds additional headers:
- "traefik.http.middlewares.taiga.headers.customFrameOptionsValue=SAMEORIGIN"
- "traefik.http.middlewares.taiga.headers.framedeny=true"
- "traefik.http.middlewares.taiga.headers.sslredirect=true"
- "traefik.http.middlewares.taiga.headers.stsIncludeSubdomains=true"
- "traefik.http.middlewares.taiga.headers.stsPreload=true"
- "traefik.http.middlewares.taiga.headers.stsSeconds=15552000"
networks:
default:
external:
name: reverse-proxy
SECRET_KEY = '<secret>'
ALLOWED_HOSTS = [
'127.0.0.1',
'localhost',
'taiga.domain.org',
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': '<dbname>',
'USER': '<dbuser>',
'PASSWORD': '<dbuserpass>',
'HOST': 'database',
'PORT': '5432',
}
}
EVENTS_PUSH_BACKEND = "taiga.events.backends.rabbitmq.EventsPushBackend"
EVENTS_PUSH_BACKEND_OPTIONS = {"url": "amqp://guest:guest@broker/taiga"}
Is there a documented way for installing in this image the taiga-contrib-ldap-auth-ext
python package (or any other taiga extension) and configure the local.py as documented in the extension page?
I tried to manually install using docker exec on a running instance, but it fails:
docker exec -it abs-taiga_server pip install taiga-contrib-ldap-auth-ext
With this error log:
ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/home/taiga' Check the permissions.
Thank you for the help, bye,
gabriele
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.