Skip to content

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Docker compose not starting local server for development #113

Closed
amifunny opened this issue Mar 26, 2021 · 26 comments
Closed

Docker compose not starting local server for development #113

amifunny opened this issue Mar 26, 2021 · 26 comments

Comments

@amifunny
Copy link

I wanted to setup a development environment on my local system. I followed all steps as mentioned in https://github.com/mediacms-io/mediacms#docker-compose-installation.

OS : Windows 10
Docker Engine: Docker version 19.03.1, build 74b1e89e8a
Docker Compose: docker-compose version 1.24.1, build 4667896b

On running docker-compose up all steps were marked done but at the end, there is no log for server starting. http://localhost/ gives no result, Site can't be reached.

Am I missing something here? @mgogoulos

Log for docker-compose up -

WARNING: Some services (celery_worker, web) use the 'deploy' key, which will be
ignored. Compose does not support 'deploy' configuration - use docker stack dep loy to deploy to a swarm.
Creating network "mediacms_default" with the default driver
Creating mediacms_redis_1 ... done
Creating mediacms_db_1 ... done
Creating mediacms_celery_beat_1 ... done
Creating mediacms_migrations_1 ... done
Creating mediacms_celery_worker_1 ... done
Creating mediacms_web_1 ... done
Attaching to mediacms_db_1, mediacms_redis_1, mediacms_migrations_1, mediacms_ce
lery_beat_1, mediacms_web_1, mediacms_celery_worker_1
db_1 |
db_1 | PostgreSQL Database directory appears to contain a database;
Skipping initialization
db_1 |
db_1 | 2021-03-26 15:54:38.643 UTC [1] LOG: starting PostgreSQL 13.
2 (Debian 13.2-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.
0-6) 8.3.0, 64-bit
db_1 | 2021-03-26 15:54:38.660 UTC [1] LOG: listening on IPv4 addre
ss "0.0.0.0", port 5432
db_1 | 2021-03-26 15:54:38.662 UTC [1] LOG: listening on IPv6 addre
ss "::", port 5432
db_1 | 2021-03-26 15:54:38.674 UTC [1] LOG: listening on Unix socke
t "/var/run/postgresql/.s.PGSQL.5432"
db_1 | 2021-03-26 15:54:38.728 UTC [23] LOG: database system was sh
ut down at 2021-03-26 15:53:29 UTC
redis_1 | 1:C 26 Mar 2021 15:54:36.196 # oO0OoO0OoO0Oo Redis is startin
g oO0OoO0OoO0Oo
redis_1 | 1:C 26 Mar 2021 15:54:36.197 # Redis version=6.2.1, bits=64,
commit=00000000, modified=0, pid=1, just started
redis_1 | 1:C 26 Mar 2021 15:54:36.198 # Warning: no config file specif
ied, using the default config. In order to specify a config file use redis-serve
r /path/to/redis.conf
redis_1 | 1:M 26 Mar 2021 15:54:36.279 * monotonic clock: POSIX clock_g
ettime
celery_worker_1 | Checking for script in deploy/docker/prestart.sh
migrations_1 | Checking for script in deploy/docker/prestart.sh
celery_beat_1 | Checking for script in deploy/docker/prestart.sh
web_1 | Checking for script in deploy/docker/prestart.sh
celery_beat_1 | Running script deploy/docker/prestart.sh
celery_worker_1 | Running script deploy/docker/prestart.sh
web_1 | Running script deploy/docker/prestart.sh
web_1 | Enabling uwsgi app server
celery_beat_1 | Enabling celery-beat scheduling server
celery_worker_1 | Enabling celery-short task worker
celery_worker_1 | Enabling celery-long task worker
web_1 | Enabling nginx as uwsgi app proxy and media server
celery_worker_1 | Starting server using supervisord...
celery_beat_1 | Starting server using supervisord...
web_1 | Starting server using supervisord...
web_1 | /usr/lib/python2.7/dist-packages/supervisor/options.py:461: U
serWarning: Supervisord is running as root and it is searching for its configura
tion file in default locations (including its current working directory); you pr
obably want to specify a "-c" argument specifying an absolute path to a configur
ation file for improved security.
web_1 | 'Supervisord is running as root and it is searching '
celery_beat_1 | /usr/lib/python2.7/dist-packages/supervisor/options.py:461: U
serWarning: Supervisord is running as root and it is searching for its configura
tion file in default locations (including its current working directory); you pr
obably want to specify a "-c" argument specifying an absolute path to a configur
ation file for improved security.
celery_beat_1 | 'Supervisord is running as root and it is searching '
celery_beat_1 | 2021-03-26 15:55:08,584 CRIT Supervisor is running as root.
Privileges were not dropped because no user is specified in the config file. If
you intend to run as root, you can set user=root in the config file to avoid th
is message.
celery_beat_1 | 2021-03-26 15:55:08,590 INFO Included extra file "/etc/superv
isor/conf.d/supervisord-celery_beat.conf" during parsing
web_1 | 2021-03-26 15:55:08,583 CRIT Supervisor is running as root.
Privileges were not dropped because no user is specified in the config file. If
you intend to run as root, you can set user=root in the config file to avoid th
is message.
web_1 | 2021-03-26 15:55:08,585 INFO Included extra file "/etc/superv
isor/conf.d/supervisord-debian.conf" during parsing
celery_worker_1 | /usr/lib/python2.7/dist-packages/supervisor/options.py:461: U
serWarning: Supervisord is running as root and it is searching for its configura
tion file in default locations (including its current working directory); you pr
obably want to specify a "-c" argument specifying an absolute path to a configur
ation file for improved security.
celery_worker_1 | 'Supervisord is running as root and it is searching '
web_1 | 2021-03-26 15:55:08,600 INFO Included extra file "/etc/superv
isor/conf.d/supervisord-nginx.conf" during parsing
celery_worker_1 | 2021-03-26 15:55:08,596 CRIT Supervisor is running as root.
Privileges were not dropped because no user is specified in the config file. If
you intend to run as root, you can set user=root in the config file to avoid th
is message.
celery_worker_1 | 2021-03-26 15:55:08,605 INFO Included extra file "/etc/superv
isor/conf.d/supervisord-celery_long.conf" during parsing
celery_worker_1 | 2021-03-26 15:55:08,611 INFO Included extra file "/etc/superv
isor/conf.d/supervisord-celery_short.conf" during parsing
celery_beat_1 | 2021-03-26 15:55:08,593 INFO Included extra file "/etc/superv
isor/conf.d/supervisord-debian.conf" during parsing
celery_beat_1 | 2021-03-26 15:55:08,833 INFO RPC interface 'supervisor' initi
alized
celery_beat_1 | 2021-03-26 15:55:08,845 CRIT Server 'unix_http_server' runnin
g without any HTTP authentication checking
web_1 | 2021-03-26 15:55:08,606 INFO Included extra file "/etc/superv
isor/conf.d/supervisord-uwsgi.conf" during parsing
web_1 | 2021-03-26 15:55:08,863 INFO RPC interface 'supervisor' initi
alized
celery_worker_1 | 2021-03-26 15:55:08,614 INFO Included extra file "/etc/superv
isor/conf.d/supervisord-debian.conf" during parsing
celery_worker_1 | 2021-03-26 15:55:08,876 INFO RPC interface 'supervisor' initi
alized
web_1 | 2021-03-26 15:55:08,868 CRIT Server 'unix_http_server' runnin
g without any HTTP authentication checking
celery_worker_1 | 2021-03-26 15:55:08,884 CRIT Server 'unix_http_server' runnin
g without any HTTP authentication checking
celery_beat_1 | 2021-03-26 15:55:08,848 INFO supervisord started with pid 1
web_1 | 2021-03-26 15:55:08,890 INFO supervisord started with pid 1
celery_worker_1 | 2021-03-26 15:55:08,890 INFO supervisord started with pid 1
web_1 | 2021-03-26 15:55:09,908 INFO spawned: 'uwsgi' with pid 40
celery_worker_1 | 2021-03-26 15:55:09,927 INFO spawned: 'celery_short' with pid
40
web_1 | 2021-03-26 15:55:09,992 INFO spawned: 'nginx' with pid 41
web_1 | [uWSGI] getting INI configuration from /home/mediacms.io/medi
acms/deploy/docker/uwsgi.ini
web_1 | 2021-03-26 15:55:10,417 INFO success: uwsgi entered RUNNING s
tate, process has stayed up for > than 0 seconds (startsecs)
web_1 | 2021-03-26 15:55:10,424 INFO success: nginx entered RUNNING s
tate, process has stayed up for > than 0 seconds (startsecs)
web_1 | *** Starting uWSGI 2.0.19.1 (64bit) on [Fri Mar 26 15:55:10 2
021] ***
web_1 | compiled with version: 8.3.0 on 23 March 2021 17:16:50
web_1 | os: Linux-4.19.130-boot2docker #1 SMP Mon Jun 29 23:52:55 UTC
2020
web_1 | nodename: 02210370cf72
web_1 | machine: x86_64
web_1 | clock source: unix
web_1 | pcre jit disabled
web_1 | detected number of CPU cores: 1
web_1 | current working directory: /home/mediacms.io/mediacms
web_1 | detected binary path: /home/mediacms.io/bin/uwsgi
web_1 | setgid() to 33
web_1 | setuid() to 33
web_1 | chdir() to /home/mediacms.io/mediacms/
web_1 | your memory page size is 4096 bytes
web_1 | detected max file descriptor number: 1048576
web_1 | lock engine: pthread robust mutexes
web_1 | thunder lock: disabled (you can enable it with --thunder-lock
)
web_1 | uwsgi socket 0 bound to TCP address 127.0.0.1:9000 fd 3
web_1 | Python version: 3.8.8 (default, Mar 12 2021, 19:44:18) [GCC
8.3.0]
celery_beat_1 | 2021-03-26 15:55:09,863 INFO spawned: 'celery_beat' with pid
39
celery_worker_1 | 2021-03-26 15:55:09,998 INFO spawned: 'celery_long' with pid
41
celery_worker_1 | 2021-03-26 15:55:11,028 INFO success: celery_short entered RU
NNING state, process has stayed up for > than 0 seconds (startsecs)
web_1 | PEP 405 virtualenv detected: /home/mediacms.io
web_1 | Set PythonHome to /home/mediacms.io
web_1 | Python main interpreter initialized at 0x55c8204dd030
web_1 | python threads support enabled
web_1 | your server socket listen backlog is limited to 100 connectio
ns
web_1 | your mercy for graceful operations on workers is 60 seconds
web_1 | mapped 250128 bytes (244 KB) for 4 cores
celery_beat_1 | 2021-03-26 15:55:10,890 INFO success: celery_beat entered RUN
NING state, process has stayed up for > than 0 seconds (startsecs)
web_1 | *** Operational MODE: preforking+threaded ***
web_1 | WSGI app 0 (mountpoint='') ready in 32 seconds on interpreter
0x55c8204dd030 pid: 40 (default app)
web_1 | *** uWSGI is running in multiple interpreter mode ***
web_1 | spawned uWSGI master process (pid: 40)
web_1 | spawned uWSGI worker 1 (pid: 44, cores: 2)
web_1 | spawned uWSGI worker 2 (pid: 45, cores: 2)
celery_worker_1 | 2021-03-26 15:55:11,032 INFO success: celery_long entered RUN
NING state, process has stayed up for > than 0 seconds (startsecs)
celery_worker_1 | celery multi v4.4.7 (cliffs)
celery_worker_1 | > Starting nodes...
celery_worker_1 | > short1@f535879cfa5c: celery multi v4.4.7 (cliffs)
celery_worker_1 | > Starting nodes...
migrations_1 | Running script deploy/docker/prestart.sh
migrations_1 | Operations to perform:
migrations_1 | Apply all migrations: account, actions, admin, auth, authto
ken, contenttypes, files, sessions, sites, socialaccount, users
migrations_1 | Running migrations:
celery_beat_1 | celery beat v4.4.7 (cliffs) is starting.
celery_beat_1 | __ - ... __ - _
celery_beat_1 | LocalTime -> 2021-03-26 15:55:49
celery_beat_1 | Configuration ->
celery_beat_1 | . broker -> redis://redis:6379/1
celery_beat_1 | . loader -> celery.loaders.app.AppLoader
celery_beat_1 | . scheduler -> celery.beat.PersistentScheduler
celery_beat_1 | . db -> celerybeat-schedule
celery_beat_1 | . logfile -> /home/mediacms.io/mediacms/logs/celery_beat.
log@%INFO
celery_worker_1 | > long1@f535879cfa5c: OK
celery_worker_1 | 2021-03-26 15:56:04,315 INFO reaped unknown pid 48
celery_worker_1 | OK
celery_worker_1 | > short2@f535879cfa5c: 2021-03-26 15:56:04,545 INFO reap
ed unknown pid 50
migrations_1 | No migrations to apply.
migrations_1 | Installed 22 object(s) from 1 fixture(s)
celery_worker_1 | 2021-03-26 15:56:05,721 INFO exited: celery_long (exit status
0; expected)
celery_worker_1 | OK
celery_worker_1 | 2021-03-26 15:56:31,840 INFO reaped unknown pid 54
migrations_1 | Installed 6 object(s) from 1 fixture(s)
migrations_1 |
migrations_1 | 0 static files copied to '/home/mediacms.io/mediacms/static',
1327 unmodified.
migrations_1 | Admin Password: mediacms
migrations_1 | CommandError: Error: That username is already taken.
migrations_1 | Starting server using supervisord...
migrations_1 | /usr/lib/python2.7/dist-packages/supervisor/options.py:461: U
serWarning: Supervisord is running as root and it is searching for its configura
tion file in default locations (including its current working directory); you pr
obably want to specify a "-c" argument specifying an absolute path to a configur
ation file for improved security.
migrations_1 | 'Supervisord is running as root and it is searching '
migrations_1 | 2021-03-26 15:57:14,418 CRIT Supervisor is running as root.
Privileges were not dropped because no user is specified in the config file. If
you intend to run as root, you can set user=root in the config file to avoid th
is message.
migrations_1 | 2021-03-26 15:57:14,420 INFO Included extra file "/etc/superv
isor/conf.d/supervisord-debian.conf" during parsing
migrations_1 | 2021-03-26 15:57:14,511 INFO RPC interface 'supervisor' initi
alized
migrations_1 | 2021-03-26 15:57:14,515 CRIT Server 'unix_http_server' runnin
g without any HTTP authentication checking

@swiftugandan
Copy link
Contributor

Not sure what's going on here, running fine for me. Only difference am using macOS

@amifunny
Copy link
Author

@swiftugandan do you have similar docker specs? Is the warning at the top i.e
WARNING: Some services (celery_worker, web) use the 'deploy' key, which will be ignored. Compose does not support 'deploy' configuration - use docker stack dep loy to deploy to a swarm. also appearing for you cammand run?

@amifunny
Copy link
Author

@swiftugandan can you post your logs for docker-compose up?

@swiftugandan
Copy link
Contributor

$ docker --version
Docker version 20.10.2, build 2291f61
$ docker-compose --version
docker-compose version 1.27.4, build 40524192

@amifunny
Copy link
Author

I don't think it is due docker version. I have similar specs as mentioned in https://github.com/mediacms-io/mediacms/blob/main/docs/Docker_deployment.md. @swiftugandan Thanks for responding. Can you paste your logs to help me understand better?

@swiftugandan
Copy link
Contributor

$ docker-compose up
Starting mediacms_redis_1 ... done
Starting mediacms_db_1          ... done
Starting mediacms_celery_beat_1 ... done
Starting mediacms_migrations_1  ... done
Starting mediacms_celery_worker_1 ... done
Starting mediacms_web_1           ... done
Attaching to mediacms_redis_1, mediacms_db_1, mediacms_celery_beat_1, mediacms_migrations_1, mediacms_celery_worker_1, mediacms_web_1
celery_beat_1    | Checking for script in deploy/docker/prestart.sh
celery_beat_1    | Running script deploy/docker/prestart.sh
db_1             | 
db_1             | PostgreSQL Database directory appears to contain a database; Skipping initialization
db_1             | 
db_1             | 2021-03-26 17:15:41.309 UTC [1] LOG:  starting PostgreSQL 13.1 (Debian 13.1-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
db_1             | 2021-03-26 17:15:41.312 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
db_1             | 2021-03-26 17:15:41.312 UTC [1] LOG:  listening on IPv6 address "::", port 5432
db_1             | 2021-03-26 17:15:41.316 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db_1             | 2021-03-26 17:15:41.330 UTC [27] LOG:  database system was shut down at 2021-03-26 08:37:23 UTC
db_1             | 2021-03-26 17:15:41.372 UTC [1] LOG:  database system is ready to accept connections
migrations_1     | Checking for script in deploy/docker/prestart.sh
migrations_1     | Running script deploy/docker/prestart.sh
celery_beat_1    | Enabling celery-beat scheduling server
celery_beat_1    | Starting server using supervisord...
celery_beat_1    | /usr/lib/python2.7/dist-packages/supervisor/options.py:461: UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security.
celery_beat_1    |   'Supervisord is running as root and it is searching '
celery_beat_1    | 2021-03-26 17:15:46,381 CRIT Supervisor is running as root.  Privileges were not dropped because no user is specified in the config file.  If you intend to run as root, you can set user=root in the config file to avoid this message.
celery_beat_1    | 2021-03-26 17:15:46,382 INFO Included extra file "/etc/supervisor/conf.d/supervisord-celery_beat.conf" during parsing
celery_beat_1    | 2021-03-26 17:15:46,382 INFO Included extra file "/etc/supervisor/conf.d/supervisord-debian.conf" during parsing
celery_beat_1    | Unlinking stale socket /var/run/supervisor.sock
celery_beat_1    | 2021-03-26 17:15:46,703 INFO RPC interface 'supervisor' initialized
celery_beat_1    | 2021-03-26 17:15:46,703 CRIT Server 'unix_http_server' running without any HTTP authentication checking
celery_beat_1    | 2021-03-26 17:15:46,704 INFO supervisord started with pid 1
celery_beat_1    | 2021-03-26 17:15:47,707 INFO spawned: 'celery_beat' with pid 38
celery_beat_1    | 2021-03-26 17:15:48,708 INFO success: celery_beat entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
redis_1          | 1:C 26 Mar 2021 17:15:40.925 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1          | 1:C 26 Mar 2021 17:15:40.925 # Redis version=6.0.10, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1          | 1:C 26 Mar 2021 17:15:40.925 # 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 26 Mar 2021 17:15:40.944 * Running mode=standalone, port=6379.
redis_1          | 1:M 26 Mar 2021 17:15:40.944 # 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 26 Mar 2021 17:15:40.944 # Server initialized
redis_1          | 1:M 26 Mar 2021 17:15:40.950 * Loading RDB produced by version 6.0.10
redis_1          | 1:M 26 Mar 2021 17:15:40.950 * RDB age 31097 seconds
redis_1          | 1:M 26 Mar 2021 17:15:40.950 * RDB memory usage when created 0.79 Mb
redis_1          | 1:M 26 Mar 2021 17:15:40.953 * DB loaded from disk: 0.005 seconds
redis_1          | 1:M 26 Mar 2021 17:15:40.953 * Ready to accept connections
celery_beat_1    | celery beat v4.4.7 (cliffs) is starting.
celery_beat_1    | __    -    ... __   -        _
celery_beat_1    | LocalTime -> 2021-03-26 17:15:50
celery_beat_1    | Configuration ->
celery_beat_1    |     . broker -> redis://redis:6379/1
celery_beat_1    |     . loader -> celery.loaders.app.AppLoader
celery_beat_1    |     . scheduler -> celery.beat.PersistentScheduler
celery_beat_1    |     . db -> celerybeat-schedule
celery_beat_1    |     . logfile -> /home/mediacms.io/mediacms/logs/celery_beat.log@%INFO
celery_beat_1    |     . maxinterval -> 5.00 minutes (300s)
celery_worker_1  | Checking for script in deploy/docker/prestart.sh
celery_worker_1  | Running script deploy/docker/prestart.sh
web_1            | Checking for script in deploy/docker/prestart.sh
web_1            | Running script deploy/docker/prestart.sh
celery_worker_1  | Enabling celery-short task worker
celery_worker_1  | Enabling celery-long task worker
celery_worker_1  | Starting server using supervisord...
web_1            | Enabling uwsgi app server
web_1            | Enabling nginx as uwsgi app proxy and media server
web_1            | Starting server using supervisord...
celery_worker_1  | /usr/lib/python2.7/dist-packages/supervisor/options.py:461: UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security.
celery_worker_1  |   'Supervisord is running as root and it is searching '
celery_worker_1  | 2021-03-26 17:16:13,280 CRIT Supervisor is running as root.  Privileges were not dropped because no user is specified in the config file.  If you intend to run as root, you can set user=root in the config file to avoid this message.
celery_worker_1  | 2021-03-26 17:16:13,281 INFO Included extra file "/etc/supervisor/conf.d/supervisord-celery_long.conf" during parsing
celery_worker_1  | 2021-03-26 17:16:13,281 INFO Included extra file "/etc/supervisor/conf.d/supervisord-celery_short.conf" during parsing
celery_worker_1  | 2021-03-26 17:16:13,281 INFO Included extra file "/etc/supervisor/conf.d/supervisord-debian.conf" during parsing
celery_worker_1  | 2021-03-26 17:16:13,292 INFO RPC interface 'supervisor' initialized
celery_worker_1  | 2021-03-26 17:16:13,292 CRIT Server 'unix_http_server' running without any HTTP authentication checking
celery_worker_1  | 2021-03-26 17:16:13,293 INFO supervisord started with pid 1
web_1            | /usr/lib/python2.7/dist-packages/supervisor/options.py:461: UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security.
web_1            |   'Supervisord is running as root and it is searching '
web_1            | 2021-03-26 17:16:13,367 CRIT Supervisor is running as root.  Privileges were not dropped because no user is specified in the config file.  If you intend to run as root, you can set user=root in the config file to avoid this message.
web_1            | 2021-03-26 17:16:13,368 INFO Included extra file "/etc/supervisor/conf.d/supervisord-debian.conf" during parsing
web_1            | 2021-03-26 17:16:13,369 INFO Included extra file "/etc/supervisor/conf.d/supervisord-nginx.conf" during parsing
web_1            | 2021-03-26 17:16:13,369 INFO Included extra file "/etc/supervisor/conf.d/supervisord-uwsgi.conf" during parsing
web_1            | Unlinking stale socket /var/run/supervisor.sock
web_1            | 2021-03-26 17:16:13,681 INFO RPC interface 'supervisor' initialized
web_1            | 2021-03-26 17:16:13,681 CRIT Server 'unix_http_server' running without any HTTP authentication checking
web_1            | 2021-03-26 17:16:13,682 INFO supervisord started with pid 1
celery_worker_1  | 2021-03-26 17:16:14,296 INFO spawned: 'celery_short' with pid 40
celery_worker_1  | 2021-03-26 17:16:14,298 INFO spawned: 'celery_long' with pid 41
migrations_1     | Operations to perform:
migrations_1     |   Apply all migrations: account, actions, admin, auth, authtoken, contenttypes, files, sessions, sites, socialaccount, users
migrations_1     | Running migrations:
migrations_1     |   No migrations to apply.
web_1            | 2021-03-26 17:16:14,684 INFO spawned: 'uwsgi' with pid 39
web_1            | 2021-03-26 17:16:14,686 INFO spawned: 'nginx' with pid 40
web_1            | [uWSGI] getting INI configuration from /home/mediacms.io/mediacms/deploy/docker/uwsgi.ini
web_1            | 2021-03-26 17:16:14,780 INFO success: uwsgi entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
web_1            | 2021-03-26 17:16:14,780 INFO success: nginx entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
web_1            | *** Starting uWSGI 2.0.19.1 (64bit) on [Fri Mar 26 17:16:14 2021] ***
web_1            | compiled with version: 8.3.0 on 22 March 2021 19:28:20
web_1            | os: Linux-4.19.121-linuxkit #1 SMP Tue Dec 1 17:50:32 UTC 2020
web_1            | nodename: efd06e4ec659
web_1            | machine: x86_64
web_1            | clock source: unix
web_1            | pcre jit disabled
web_1            | detected number of CPU cores: 6
web_1            | current working directory: /home/mediacms.io/mediacms
web_1            | detected binary path: /home/mediacms.io/bin/uwsgi
web_1            | setgid() to 33
web_1            | setuid() to 33
web_1            | chdir() to /home/mediacms.io/mediacms/
web_1            | your memory page size is 4096 bytes
web_1            | detected max file descriptor number: 1048576
web_1            | lock engine: pthread robust mutexes
web_1            | thunder lock: disabled (you can enable it with --thunder-lock)
web_1            | uwsgi socket 0 bound to TCP address 127.0.0.1:9000 fd 3
web_1            | Python version: 3.8.7 (default, Jan 12 2021, 17:16:32)  [GCC 8.3.0]
web_1            | PEP 405 virtualenv detected: /home/mediacms.io
web_1            | Set PythonHome to /home/mediacms.io
web_1            | Python main interpreter initialized at 0x56399a2ed030
web_1            | python threads support enabled
web_1            | your server socket listen backlog is limited to 100 connections
web_1            | your mercy for graceful operations on workers is 60 seconds
web_1            | mapped 250128 bytes (244 KB) for 4 cores
web_1            | *** Operational MODE: preforking+threaded ***
celery_worker_1  | celery multi v4.4.7 (cliffs)
celery_worker_1  | 2021-03-26 17:16:14,969 INFO success: celery_short entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
celery_worker_1  | 2021-03-26 17:16:14,970 INFO success: celery_long entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
celery_worker_1  | > Starting nodes...
celery_worker_1  |      > short1@fb9689d0eed8: celery multi v4.4.7 (cliffs)
celery_worker_1  | > Starting nodes...
celery_worker_1  |      > long1@fb9689d0eed8: OK
celery_worker_1  |      > short2@fb9689d0eed8: 2021-03-26 17:16:15,671 INFO reaped unknown pid 48
celery_worker_1  | OK
celery_worker_1  | 2021-03-26 17:16:15,737 INFO reaped unknown pid 51
celery_worker_1  | 2021-03-26 17:16:15,796 INFO exited: celery_long (exit status 0; expected)
web_1            | WSGI app 0 (mountpoint='') ready in 2 seconds on interpreter 0x56399a2ed030 pid: 39 (default app)
web_1            | *** uWSGI is running in multiple interpreter mode ***
web_1            | spawned uWSGI master process (pid: 39)
web_1            | spawned uWSGI worker 1 (pid: 48, cores: 2)
web_1            | spawned uWSGI worker 2 (pid: 50, cores: 2)
web_1            | running "unix_signal:15 gracefully_kill_them_all" (master-start)...
celery_worker_1  | OK
celery_worker_1  | 2021-03-26 17:16:16,670 INFO reaped unknown pid 54
celery_worker_1  | 2021-03-26 17:16:16,725 INFO exited: celery_short (exit status 0; expected)
migrations_1     | Installed 22 object(s) from 1 fixture(s)
migrations_1     | Installed 6 object(s) from 1 fixture(s)
migrations_1     | 
migrations_1     | 1327 static files copied to '/home/mediacms.io/mediacms/static'.
migrations_1     | Admin Password: mediacms
migrations_1     | CommandError: Error: That username is already taken.
migrations_1     | Starting server using supervisord...
migrations_1     | /usr/lib/python2.7/dist-packages/supervisor/options.py:461: UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security.
migrations_1     |   'Supervisord is running as root and it is searching '
migrations_1     | 2021-03-26 17:16:50,959 CRIT Supervisor is running as root.  Privileges were not dropped because no user is specified in the config file.  If you intend to run as root, you can set user=root in the config file to avoid this message.
migrations_1     | 2021-03-26 17:16:50,960 INFO Included extra file "/etc/supervisor/conf.d/supervisord-debian.conf" during parsing
migrations_1     | 2021-03-26 17:16:50,971 INFO RPC interface 'supervisor' initialized
migrations_1     | 2021-03-26 17:16:50,972 CRIT Server 'unix_http_server' running without any HTTP authentication checking
migrations_1     | 2021-03-26 17:16:50,972 INFO supervisord started with pid 1
web_1            | 192.168.192.1 - - [26/Mar/2021:17:17:24 +0000] "GET / HTTP/1.1" 200 2736 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:86.0) Gecko/20100101 Firefox/86.0"
web_1            | [pid: 50|app: 0|req: 1/1] 192.168.192.1 () {42 vars in 956 bytes} [Fri Mar 26 17:17:24 2021] GET / => generated 7862 bytes in 535 msecs (HTTP/1.1 200) 6 headers in 185 bytes (1 switches on core 0)
web_1            | 192.168.192.1 - - [26/Mar/2021:17:17:24 +0000] "GET /static/lib/material-icons/material-icons.css HTTP/1.1" 200 311 "http://localhost/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:86.0) Gecko/20100101 Firefox/86.0"
web_1            | 192.168.192.1 - - [26/Mar/2021:17:17:24 +0000] "GET /static/css/_extra.css HTTP/1.1" 200 0 "http://localhost/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:86.0) Gecko/20100101 Firefox/86.0"
web_1            | 192.168.192.1 - - [26/Mar/2021:17:17:24 +0000] "GET /static/js/index.js HTTP/1.1" 200 6369 "http://localhost/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:86.0) Gecko/20100101 Firefox/86.0"
web_1            | 192.168.192.1 - - [26/Mar/2021:17:17:24 +0000] "GET /static/lib/gfonts/gfonts.css HTTP/1.1" 200 711 "http://localhost/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:86.0) Gecko/20100101 Firefox/86.0"
web_1            | 192.168.192.1 - - [26/Mar/2021:17:17:24 +0000] "GET /static/css/_commons.css HTTP/1.1" 200 49754 "http://localhost/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:86.0) Gecko/20100101 Firefox/86.0"
web_1            | 192.168.192.1 - - [26/Mar/2021:17:17:24 +0000] "GET /static/js/_commons.js HTTP/1.1" 200 197451 "http://localhost/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:86.0) Gecko/20100101 Firefox/86.0"
web_1            | 192.168.192.1 - - [26/Mar/2021:17:17:24 +0000] "GET /static/lib/video-js/7.7.5/video.min.js HTTP/1.1" 200 155713 "http://localhost/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:86.0) Gecko/20100101 Firefox/86.0"
web_1            | 192.168.192.1 - - [26/Mar/2021:17:17:25 +0000] "GET /static/images/logo_dark.svg HTTP/1.1" 200 5060 "http://localhost/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:86.0) Gecko/20100101 Firefox/86.0"
web_1            | 192.168.192.1 - - [26/Mar/2021:17:17:25 +0000] "GET /static/lib/gfonts/roboto/latin/300_400_500_700/roboto-v20-latin-regular.woff2 HTTP/1.1" 200 15736 "http://localhost/static/lib/gfonts/gfonts.css" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:86.0) Gecko/20100101 Firefox/86.0"
web_1            | 192.168.192.1 - - [26/Mar/2021:17:17:25 +0000] "GET /static/lib/material-icons/v77/icons.woff2 HTTP/1.1" 200 99896 "http://localhost/static/lib/material-icons/material-icons.css" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:86.0) Gecko/20100101 Firefox/86.0"
web_1            | 192.168.192.1 - - [26/Mar/2021:17:17:25 +0000] "GET /static/lib/gfonts/roboto/latin/300_400_500_700/roboto-v20-latin-500.woff2 HTTP/1.1" 200 15872 "http://localhost/static/lib/gfonts/gfonts.css" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:86.0) Gecko/20100101 Firefox/86.0"
web_1            | 192.168.192.1 - - [26/Mar/2021:17:17:25 +0000] "GET /api/v1/media?show=featured HTTP/1.1" 200 74 "http://localhost/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:86.0) Gecko/20100101 Firefox/86.0"
web_1            | [pid: 50|app: 0|req: 2/2] 192.168.192.1 () {42 vars in 964 bytes} [Fri Mar 26 17:17:25 2021] GET /api/v1/media?show=featured => generated 52 bytes in 79 msecs (HTTP/1.1 200) 7 headers in 216 bytes (1 switches on core 1)
web_1            | 192.168.192.1 - - [26/Mar/2021:17:17:25 +0000] "GET /static/favicons/apple-touch-icon.png HTTP/1.1" 200 8362 "http://localhost/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:86.0) Gecko/20100101 Firefox/86.0"
web_1            | 192.168.192.1 - - [26/Mar/2021:17:17:25 +0000] "GET /static/favicons/favicon-32x32.png HTTP/1.1" 200 1550 "http://localhost/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:86.0) Gecko/20100101 Firefox/86.0"
web_1            | [pid: 48|app: 0|req: 2/3] 192.168.192.1 () {42 vars in 970 bytes} [Fri Mar 26 17:17:25 2021] GET /api/v1/media?show=recommended => generated 42 bytes in 391 msecs (HTTP/1.1 200) 7 headers in 216 bytes (1 switches on core 1)
web_1            | 192.168.192.1 - - [26/Mar/2021:17:17:25 +0000] "GET /api/v1/media?show=recommended HTTP/1.1" 200 65 "http://localhost/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:86.0) Gecko/20100101 Firefox/86.0"
web_1            | [pid: 48|app: 0|req: 2/4] 192.168.192.1 () {42 vars in 937 bytes} [Fri Mar 26 17:17:25 2021] GET /api/v1/media => generated 52 bytes in 391 msecs (HTTP/1.1 200) 7 headers in 216 bytes (1 switches on core 0)
web_1            | 192.168.192.1 - - [26/Mar/2021:17:17:25 +0000] "GET /api/v1/media HTTP/1.1" 200 74 "http://localhost/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:86.0) Gecko/20100101 Firefox/86.0"

@swiftugandan
Copy link
Contributor

can also try: docker/compose#6539 (comment)

@amifunny
Copy link
Author

@swiftugandan Yes, I tried --compatibility it removed the warning. My logs are exactly like what you are getting. Just the last 10-15 lines where web server is starting, is the difference. Is there any changes you have made to .yaml?

@swiftugandan
Copy link
Contributor

swiftugandan commented Mar 26, 2021

@swiftugandan Yes, I tried --compatibility it removed the warning. My logs are exactly like what you are getting. Just the last 10-15 lines where web server is starting, is the difference. Is there any changes you have made to .yaml?

No I have not changed it ...
Try to look inside the container:

  • docker exec -it mediacms_web_1 bash
  • cat logs/debug.log are there any errors?
  • ps -aef
root@d75e944581d2:/home/mediacms.io/mediacms# ps -aef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 20:06 ?        00:00:00 /usr/bin/python2 /usr/bin/supervisord
www-data    42     1  0 20:06 ?        00:00:01 /home/mediacms.io/bin/uwsgi --ini /home/mediacms.io/mediacms/deploy/docker/uwsgi.ini
root        43     1  0 20:06 ?        00:00:00 nginx: master process /usr/sbin/nginx -g daemon off;
www-data    44    43  0 20:06 ?        00:00:00 nginx: worker process
www-data    45    43  0 20:06 ?        00:00:00 nginx: worker process
www-data    46    43  0 20:06 ?        00:00:00 nginx: worker process
www-data    47    43  0 20:06 ?        00:00:00 nginx: worker process
www-data    48    43  0 20:06 ?        00:00:00 nginx: worker process
www-data    49    43  0 20:06 ?        00:00:00 nginx: worker process
www-data    51    42  0 20:06 ?        00:00:00 /home/mediacms.io/bin/uwsgi --ini /home/mediacms.io/mediacms/deploy/docker/uwsgi.ini
www-data    52    42  0 20:06 ?        00:00:00 /home/mediacms.io/bin/uwsgi --ini /home/mediacms.io/mediacms/deploy/docker/uwsgi.ini
root        55     0  0 20:10 pts/0    00:00:00 bash
root        62    55  0 20:10 pts/0    00:00:00 ps -aef

My web container outputs the above, without any logs in debug. If your output is similar, then I think the problem may be with the host failing to access the running service, I am not a keen windows user, but things like the firewall, AV, etc have messed up with network services for me on windows in the past!

@amifunny
Copy link
Author

@swiftugandan It's working now. I used the docker-compose-named-volume.yaml and it started the server after few minutes. Also I installed Docker desktop 3.0.0 that installed Docker version 20.10.0, build 7287ab3 and docker-compose version 1.27.4, build 40524192. Should I edit Readme.md to add these points for windows?

@swiftugandan
Copy link
Contributor

swiftugandan commented Mar 27, 2021 via email

@amifunny
Copy link
Author

No, it gives volume error

@amifunny
Copy link
Author

I have successfully deployed MediaCMS locally but my changes are not reflected in localhost. It is due to docker-compose fetching image from DockerHub which have this source repository. So how to test changes locally? Do I need to create my own copy of this image on DockerHub? @swiftugandan @mgogoulos

@swiftugandan
Copy link
Contributor

swiftugandan commented Mar 27, 2021 via email

@amifunny
Copy link
Author

@swiftugandan Silly of me, of course, I can build a local image. Can you give me steps for development setup? I don't think, I would have to build an image and then run docker-compose, after every change.

@swiftugandan
Copy link
Contributor

Mount the host files into the container (default docker-compose.yaml) ... but the fact that this is not working in your case, I don't know how else you can make it easier.

Have you tried using a linux distro (eg. Ubuntu) instead?

@amifunny
Copy link
Author

I don't have a Linux system at my disposal. Using docker-compose.yaml is giving me this error - FATAL: data directory "/var/lib/postgresql/data" has invalid permissions. Why are there different docker-compose- files and what is purpose of each?

@swiftugandan
Copy link
Contributor

swiftugandan commented Mar 27, 2021 via email

@swiftugandan
Copy link
Contributor

Try this config, which uses a named volume for the postgres database, and host mount for the application source, media and static files

version: "3"

services:
  migrations:
    image: mediacms/mediacms:latest
    volumes:
      - ./:/home/mediacms.io/mediacms/
    environment:
      ENABLE_UWSGI: 'no'
      ENABLE_NGINX: 'no'
      ENABLE_CELERY_SHORT: 'no'
      ENABLE_CELERY_LONG: 'no'
      ENABLE_CELERY_BEAT: 'no'
    depends_on:
      redis:
        condition: service_healthy
      db:
        condition: service_healthy
  web:
    image: mediacms/mediacms:latest
    ports:
      - "80:80"
    volumes:
      - ./:/home/mediacms.io/mediacms/
    environment:
      ENABLE_CELERY_BEAT: 'no'
      ENABLE_CELERY_SHORT: 'no'
      ENABLE_CELERY_LONG: 'no'
      ENABLE_MIGRATIONS: 'no'
    depends_on:
      - migrations
  celery_beat:
    image: mediacms/mediacms:latest
    volumes:
      - ./:/home/mediacms.io/mediacms/
    environment:
      ENABLE_UWSGI: 'no'
      ENABLE_NGINX: 'no'
      ENABLE_CELERY_SHORT: 'no'
      ENABLE_CELERY_LONG: 'no'
      ENABLE_MIGRATIONS: 'no'
    depends_on:
      - redis
  celery_worker:
    image: mediacms/mediacms:latest
    volumes:
      - ./:/home/mediacms.io/mediacms/
    environment:
      ENABLE_UWSGI: 'no'
      ENABLE_NGINX: 'no'
      ENABLE_CELERY_BEAT: 'no'
      ENABLE_MIGRATIONS: 'no'
    depends_on:
      - migrations
  db:
    image: postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    restart: always
    environment:
      POSTGRES_USER: mediacms
      POSTGRES_PASSWORD: mediacms
      POSTGRES_DB: mediacms
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U mediacms"]
      interval: 30s
      timeout: 10s
      retries: 5
  redis:
    image: "redis:alpine"
    restart: always
    healthcheck:
      test: ["CMD", "redis-cli","ping"]
      interval: 30s
      timeout: 10s
      retries: 3
volumes:
  postgres_data:

@swiftugandan
Copy link
Contributor

This is a more minimal deployment for local development, let me know if it works so I can add it as a developer example:

version: "3"

services:
  web:
    image: mediacms/mediacms:latest
    ports:
      - "80:80"
    volumes:
      - ./:/home/mediacms.io/mediacms/
    depends_on:
      redis:
        condition: service_healthy
      db:
        condition: service_healthy
  db:
    image: postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    restart: always
    environment:
      POSTGRES_USER: mediacms
      POSTGRES_PASSWORD: mediacms
      POSTGRES_DB: mediacms
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U mediacms"]
      interval: 30s
      timeout: 10s
      retries: 5
  redis:
    image: "redis:alpine"
    restart: always
    healthcheck:
      test: ["CMD", "redis-cli","ping"]
      interval: 30s
      timeout: 10s
      retries: 3
volumes:
  postgres_data:

@amifunny
Copy link
Author

@swiftugandan I have tried both these before. The problem seems to be this line -
volumes: - ./:/home/mediacms.io/mediacms/
when added with either web or celery it gives error message - standard_init_linux.go:219: exec user process caused: no such file or directory. I think there is a different way to mount windows folder to linux directory. If I replace ./:/home/mediacms.io/mediacms/ with named volume, it works perfectly but then the changes will not be reflected for development.

@swiftugandan
Copy link
Contributor

swiftugandan commented Mar 28, 2021 via email

@amifunny
Copy link
Author

When using /c/Users/amifunny/Desktop/mediacms/ for voume mounting, all contianers are running -

9acca0ed1456 mediacms/mediacms:latest "./deploy/docker/ent…" 4 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp, 9000/tcp mediacms_web_1
bf809e99c4a8 mediacms/mediacms:latest "./deploy/docker/ent…" 4 minutes ago Up 4 minutes 80/tcp, 9000/tcp mediacms_celery_worker_1
79723eb8e57c mediacms/mediacms:latest "./deploy/docker/ent…" 4 minutes ago Up 4 minutes 80/tcp, 9000/tcp mediacms_migrations_1
7e496db1ecfa mediacms/mediacms:latest "./deploy/docker/ent…" 4 minutes ago Up 4 minutes 80/tcp, 9000/tcp mediacms_celery_beat_1
3c2d7f3bcce0 redis:alpine "docker-entrypoint.s…" About an hour ago Up 6 minutes (healthy) 6379/tcp mediacms_redis_1
2f8ac46ecdaa postgres "docker-entrypoint.s…" About an hour ago Up 7 minutes (healthy) 5432/tcp mediacms_db_1

But log of mediacms_web_1 is -

UID PID PPID C STIME TTY TIME CMD
root 1 0 0 11:14 ? 00:00:00 /bin/bash ./deploy/docker/entrypoint.sh ./deploy/docker/start.sh
root 27 1 0 11:14 ? 00:00:00 find /home/mediacms.io/ ! ( -user www-data -group 0 ) -exec chown www-daroot 32 27 0 11:35 ? 00:00:00 chown www-data:0 /home/mediacms.io/lib/python3.8/site-packages/django/coroot 33 0 0 11:36 pts/0 00:00:00 bash
root 40 33 1 11:36 pts/0 00:00:00 ps -aef

No Nginx server is started. Log of docker compose -

Attaching to mediacms_db_1, mediacms_redis_1, mediacms_migrations_1, mediacms_celery_beat_1, mediacms_web_1, mediacms_celery_worker_1
db_1 |
db_1 | PostgreSQL Database directory appears to contain a database; Skipping initialization
db_1 |
db_1 | 2021-03-28 12:03:18.250 UTC [1] LOG: starting PostgreSQL 13.2 (Debian 13.2-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
db_1 | 2021-03-28 12:03:18.251 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
db_1 | 2021-03-28 12:03:18.252 UTC [1] LOG: listening on IPv6 address "::", port 5432
db_1 | 2021-03-28 12:03:18.526 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db_1 | 2021-03-28 12:03:18.713 UTC [26] LOG: database system was shut down at 2021-03-28 11:58:53 UTC
db_1 | 2021-03-28 12:03:18.803 UTC [1] LOG: database system is ready to accept connections
redis_1 | 1:C 28 Mar 2021 12:03:18.138 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1 | 1:C 28 Mar 2021 12:03:18.138 # Redis version=6.2.1, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1 | 1:C 28 Mar 2021 12:03:18.138 # 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 28 Mar 2021 12:03:18.140 * monotonic clock: POSIX clock_gettime
redis_1 | 1:M 28 Mar 2021 12:03:18.149 * Running mode=standalone, port=6379.
redis_1 | 1:M 28 Mar 2021 12:03:18.149 # 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 28 Mar 2021 12:03:18.149 # Server initialized
redis_1 | 1:M 28 Mar 2021 12:03:18.150 * Ready to accept connections

@amifunny
Copy link
Author

So earlier web_1 was exiting. But now it's not exiting but the server is not running.

@swiftugandan
Copy link
Contributor

swiftugandan commented Mar 28, 2021 via email

@swiftugandan
Copy link
Contributor

swiftugandan commented Mar 29, 2021

I think this should be moved to discussions @mgogoulos

@mediacms-io mediacms-io locked and limited conversation to collaborators Apr 28, 2021

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants