Skip to content
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

fix: ERROR: Invalid interpolation format [...] when installing using the script #12

Closed
almosnow opened this issue Dec 25, 2022 · 34 comments
Assignees
Labels
help wanted Extra attention is needed question Further information is requested

Comments

@almosnow
Copy link
Contributor

Describe the bug
Whenever I try to install APITable using the provided script, it fails with the following error:

ERROR: Invalid interpolation format for "web-server" option in service "services": "${IMAGE_POLL_POLICY:-missing}"

To Reproduce
Try to run curl https://apitable.github.io/install.sh | bash on an Ubuntu box.

Expected behavior
Start using APITable

Desktop (please complete the following information):

  • Ubuntu 20.04
@RobSeder
Copy link

@almosnow, if it helps, I saw this error with Ubuntu 18.04, then 20.04, but when I tried with 22.04, I get past that error. I don't know what caused it. I just assumed it might be related to me using too-new or too-old of an OS, since that is often a problem.

With that said, it still doesn't work. Using Ubuntu 22.04, there are several docker-compose errors like:

ERROR: for init-data-mysql  Container "ddefd2f2391e" is unhealthy.
ERROR: for init-db  Container "ddefd2f2391e" is unhealthy.
ERROR: for init-db  Container "ddefd2f2391e" is unhealthy.
ERROR: for init-data-mysql  Container "ddefd2f2391e" is unhealthy.
ERROR: for init-data-mysql  Container "ddefd2f2391e" is unhealthy.
ERROR: for init-db  Container "ddefd2f2391e" is unhealthy.
ERROR: Encountered errors while bringing up the project.

Even if you can get it to come up, for example using the gitpod example project, the default username/password do NOT appear to be admin@apitable.com/Apitable2022 as described in the main documentations, and you can't "reset" the password unless you own admin@apitable.com email address. So, it DOES come up in the gitpod environment, but you are stuck at a login screen with no way to login.

Bottom line, I'm fresh off the street with this project - I just learned about it. Unfortunately this seems to be a non-starter in every way one might try to evaluate it. Unless I'm missing something? Maybe I just caught this project on a bad day?

@almosnow
Copy link
Contributor Author

this seems to be a non-starter in every way one might try to evaluate it

My experience as well and I really really really really wanted this to work.

That's not to discourage AT's team, this seems like a great product, just work on polishing the rough edges!

@mr-kelly mr-kelly changed the title ERROR: Invalid interpolation format [...] when installing using the script fix: ERROR: Invalid interpolation format [...] when installing using the script Dec 26, 2022
@mr-kelly mr-kelly added bug Something isn't working help wanted Extra attention is needed labels Dec 26, 2022
@networkhermit
Copy link
Collaborator

@almosnow hi, please make sure you use docker compose v2 and have another try.

$ docker-compose version
Docker Compose version v2.10.0-gitpod.0

@mr-kelly mr-kelly removed the help wanted Extra attention is needed label Dec 26, 2022
@almosnow
Copy link
Contributor Author

I've found a fix, is the install.sh script hosted somewhere in the repo?

@networkhermit
Copy link
Collaborator

networkhermit commented Dec 26, 2022

@almosnow, if it helps, I saw this error with Ubuntu 18.04, then 20.04, but when I tried with 22.04, I get past that error. I don't know what caused it. I just assumed it might be related to me using too-new or too-old of an OS, since that is often a problem.

With that said, it still doesn't work. Using Ubuntu 22.04, there are several docker-compose errors like:

ERROR: for init-data-mysql  Container "ddefd2f2391e" is unhealthy.
ERROR: for init-db  Container "ddefd2f2391e" is unhealthy.
ERROR: for init-db  Container "ddefd2f2391e" is unhealthy.
ERROR: for init-data-mysql  Container "ddefd2f2391e" is unhealthy.
ERROR: for init-data-mysql  Container "ddefd2f2391e" is unhealthy.
ERROR: for init-db  Container "ddefd2f2391e" is unhealthy.
ERROR: Encountered errors while bringing up the project.

Even if you can get it to come up, for example using the gitpod example project, the default username/password do NOT appear to be admin@apitable.com/Apitable2022 as described in the main documentations, and you can't "reset" the password unless you own admin@apitable.com email address. So, it DOES come up in the gitpod environment, but you are stuck at a login screen with no way to login.

Bottom line, I'm fresh off the street with this project - I just learned about it. Unfortunately this seems to be a non-starter in every way one might try to evaluate it. Unless I'm missing something? Maybe I just caught this project on a bad day?

Thank you very much for your feedback. I've updated the gitpod compose file to make sure the db initialization complete before you can access the site. The default username/password are indeed admin@apitable.com/Apitable2022 as described. Also, make sure you access port 80 from gitpod.

As for the local docker-compose setup, please make sure you use docker compose v2 and have another try:

$ docker-compose version
Docker Compose version v2.10.0-gitpod.0

P.S. I haven't encountered the container unhealthy errors. Does the cpu/memory in high load? Maybe you can tear down and recreate the service using docker-compose down -v and docker-compose up -d, or simply docker-compose up -d to retry.

@networkhermit
Copy link
Collaborator

I've found a fix, is the install.sh script hosted somewhere in the repo?

@almosnow

The install script is in https://github.com/apitable/apitable.github.io/blob/main/install.sh.

But I still think the root issue lies in incompatible version of docker-compose.

@networkhermit networkhermit added question Further information is requested and removed bug Something isn't working labels Dec 26, 2022
@almosnow
Copy link
Contributor Author

almosnow commented Dec 26, 2022

Please see the submitted PR,

I have no idea how you can get a docker-compose using v2, mine stays in v1 no matter how much I try to update,

But, I've found that the new preferred syntax is docker compose and that one works well and is the one that's future-proof,

The PR just changes this bits.

@networkhermit
Copy link
Collaborator

@almosnow

Generally we don't use the docker-compose package in the official ubuntu repo, as it is too outdated. I recommend you use the following instructions to install docker-compose v2 (the package is called docker-compose-plugin):

https://docs.docker.com/engine/install/ubuntu/

$ apt list docker-compose docker-compose-plugin
Listing... Done
docker-compose/bionic 1.17.1-2 all
docker-compose-plugin/bionic 2.14.1~ubuntu-bionic amd64 [upgradable from: 2.12.2~ubuntu-bionic]

Actually I think you are right that we shoud embrace the new docker compose syntax, but the docker-compose is so ubiquitous that you can still use the shortcut even if you use docker compose v2:

https://github.com/docker/compose

$ which docker-compose 
/usr/local/bin/docker-compose

Let's merge your pr and see if the cure is worse than the disease ;-)

@almosnow
Copy link
Contributor Author

it works perfectly BUT I tried it on an Ubuntu 22.04 box and it doesn't work with the docker coming from apt (but it may work with docker compose). After you upgrade to the latest docker/docker-compose combo it runs with no issues!

However, I think the most robust solution would be to add a check at the top of the script, if there's docker-compose v2 use that one, if there's docker compose then use it.

I will submit a PR for this later on 😄.

@networkhermit
Copy link
Collaborator

I think it won't be a problem if we stick with the docker compose syntax. I understand your solution, but let's just live with the current install script and gather more evidence before we move. The version check is fairly trivial but maintaining the mac/linux dual compatible bash script is not. Just keep it simple.

@RobSeder
Copy link

This is great, thanks all! Good to see this project is under active development and maintenance. With the help of the comments above, I made a bunch of progress.

Specs

First, on specs. I typically spin up a new VM and give it 2 vCPU's, 2GB of RAM, and 120GB disk to start. I did see this setup was struggling with that, so I gave it 4 vCPU's and 8GB of RAM. With that, RAM consumption seemed to be around 4 or 5GB.

Setting up v2 of Docker Compose

Next, by-default Ubuntu 22.04 is using docker-compose 1.29.2. For getting v2 of docker-compose, I followed the Ubuntu instructions here to point to their repository. Then, did an apt update and apt install docker-compose-plugin and found I had 2.14.1.

@almosnow, this is what you mentioned about the default Ubuntu repositories lagging behind. This is how you could get the newer version.

Fixing the path

However, if I just did docker-compose, it was pointing to the version in the /usr/bin/docker-compose. So, to have the new version be the default, I modified /etc/bash.bashrc and added export PATH="/usr/libexec/docker/cli-plugins:$PATH" towards the top. After a reboot (or source-ing the file) I now am using the v2 of docker-compose.

It would seem I'm off the races. Thanks all!

@networkhermit
Copy link
Collaborator

This is great, thanks all! Good to see this project is under active development and maintenance. With the help of the comments above, I made a bunch of progress.

Specs

First, on specs. I typically spin up a new VM and give it 2 vCPU's, 2GB of RAM, and 120GB disk to start. I did see this setup was struggling with that, so I gave it 4 vCPU's and 8GB of RAM. With that, RAM consumption seemed to be around 4 or 5GB.

Setting up v2 of Docker Compose

Next, by-default Ubuntu 22.04 is using docker-compose 1.29.2. For getting v2 of docker-compose, I followed the Ubuntu instructions here to point to their repository. Then, did an apt update and apt install docker-compose-plugin and found I had 2.14.1.

@almosnow, this is what you mentioned about the default Ubuntu repositories lagging behind. This is how you could get the newer version.

Fixing the path

However, if I just did docker-compose, it was pointing to the version in the /usr/bin/docker-compose. So, to have the new version be the default, I modified /etc/bash.bashrc and added export PATH="/usr/libexec/docker/cli-plugins:$PATH" towards the top. After a reboot (or source-ing the file) I now am using the v2 of docker-compose.

It would seem I'm off the races. Thanks all!

Thanks. @almosnow submited a pr changed the docker-compose syntax to the v2 docker compose, I also think it is more natural to use that. Currently the install script uses docker compose, so it's ok if you don't have docker-compose in your PATH, and you can use docker compose version to check.

@RobSeder
Copy link

If I can ask one more question. Both docker-compose up -d and docker compose up -d mostly work, but I get the same, single error on both:

container for service "mysql" is unhealthy

This is a fresh Ubuntu 22.04 machine and all I've done was install docker-compose and run the install script. Any ideas?

@networkhermit
Copy link
Collaborator

If I can ask one more question. Both docker-compose up -d and docker compose up -d mostly work, but I get the same, single error on both:

container for service "mysql" is unhealthy

This is a fresh Ubuntu 22.04 machine and all I've done was install docker-compose and run the install script. Any ideas?

Is it possible for the vm to use more cpu or memory? It's weird that mysql can't pass the health-check. And please tell us how long would the mysql become unhealthy.

@RobSeder
Copy link

RobSeder commented Dec 26, 2022

Is it possible for the vm to use more cpu or memory? It's weird that mysql can't pass the health-check. And please tell us how long would the mysql become unhealthy.

I didn't time it exactly, but it runs for probably :10 minutes. I did give the VM 16GB of RAM. It still only seems to use 5-7GB. For disk space, it's only using 13GB, so this doesn't seem to be resource-bound. It it helps, here is the output of docker compose up before it fails (again, after probably :10 minutes):

apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5a6cc8dd05bc47e0b6e5948df61d684c` -> `minio/assets/space/2021/05/29/5a6cc8dd05bc47e0b6e5948df61d684c`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5a7b782d21464e93b6e0ffd95a949cb9` -> `minio/assets/space/2021/05/29/5a7b782d21464e93b6e0ffd95a949cb9`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5a840ed8661644f785fa4c2cc1ba50b6` -> `minio/assets/space/2021/05/29/5a840ed8661644f785fa4c2cc1ba50b6`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5a93e60e2bf841259ae005254e70894e` -> `minio/assets/space/2021/05/29/5a93e60e2bf841259ae005254e70894e`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5b59183cac164ee1a6ca36686c47b8ef` -> `minio/assets/space/2021/05/29/5b59183cac164ee1a6ca36686c47b8ef`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5b674427ed054e9b9392899ba13a051e` -> `minio/assets/space/2021/05/29/5b674427ed054e9b9392899ba13a051e`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5b92a135ed704557a30aaac41be85f8a` -> `minio/assets/space/2021/05/29/5b92a135ed704557a30aaac41be85f8a`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5b9baf7297cc498f9830c7f684f37572` -> `minio/assets/space/2021/05/29/5b9baf7297cc498f9830c7f684f37572`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5bc18d829f9347c5964366ed41746701` -> `minio/assets/space/2021/05/29/5bc18d829f9347c5964366ed41746701`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5be78b999c0d467a8ac43a456ff499cd` -> `minio/assets/space/2021/05/29/5be78b999c0d467a8ac43a456ff499cd`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5bf19df93f5048bb90e57ad49fd616e7` -> `minio/assets/space/2021/05/29/5bf19df93f5048bb90e57ad49fd616e7`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5c04cb28373d497ab17cfd2f22b6354a` -> `minio/assets/space/2021/05/29/5c04cb28373d497ab17cfd2f22b6354a`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5c254d0b0bee4878a069ff4367721277` -> `minio/assets/space/2021/05/29/5c254d0b0bee4878a069ff4367721277`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5c42327988f4491ab98b5d683fd84f2d` -> `minio/assets/space/2021/05/29/5c42327988f4491ab98b5d683fd84f2d`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5c49a3e7f2664613915df3e50a173ee2` -> `minio/assets/space/2021/05/29/5c49a3e7f2664613915df3e50a173ee2`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5c588367b6a8477bbc1e37de58cafed5` -> `minio/assets/space/2021/05/29/5c588367b6a8477bbc1e37de58cafed5`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5cf127340073469eae8d94dc56d83b6d` -> `minio/assets/space/2021/05/29/5cf127340073469eae8d94dc56d83b6d`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5d2f46ebc791418ea41d89efb5d70357` -> `minio/assets/space/2021/05/29/5d2f46ebc791418ea41d89efb5d70357`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5d346d9513524ea79553281a67513ab4` -> `minio/assets/space/2021/05/29/5d346d9513524ea79553281a67513ab4`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5d4208b5d86f4ef0bfcb825c7cca4a88` -> `minio/assets/space/2021/05/29/5d4208b5d86f4ef0bfcb825c7cca4a88`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5d5a14255a644821a79c91d0ffa19423` -> `minio/assets/space/2021/05/29/5d5a14255a644821a79c91d0ffa19423`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5d8b5480e12e41798603548970fff2bf` -> `minio/assets/space/2021/05/29/5d8b5480e12e41798603548970fff2bf`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5db6f97313d944d4afd63b6b1a58d7b4` -> `minio/assets/space/2021/05/29/5db6f97313d944d4afd63b6b1a58d7b4`
apitable-socket-server-1      | {"context":"ClientProxy","level":"info","message":"Available IP Pools:None","timestamp":"2022-12-26 16:45:05.001"}
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5e533934f50e497dbef367b33a538164` -> `minio/assets/space/2021/05/29/5e533934f50e497dbef367b33a538164`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5e5c9d10fe284c5cbf552201fcf70132` -> `minio/assets/space/2021/05/29/5e5c9d10fe284c5cbf552201fcf70132`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5e659b95bb30496ba047b8c5606f0009` -> `minio/assets/space/2021/05/29/5e659b95bb30496ba047b8c5606f0009`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5eac04d7d1c746dba72f7c9c31a21ebe` -> `minio/assets/space/2021/05/29/5eac04d7d1c746dba72f7c9c31a21ebe`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5eb354749335479993fe7cda57768e75` -> `minio/assets/space/2021/05/29/5eb354749335479993fe7cda57768e75`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/5ebe3ca1f49549cabecd41e9446ee4ff` -> `minio/assets/space/2021/05/29/5ebe3ca1f49549cabecd41e9446ee4ff`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/6007f97dc8634f3f8e0da631be7fcfe3` -> `minio/assets/space/2021/05/29/6007f97dc8634f3f8e0da631be7fcfe3`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/601526d7d4534f8f980520355e2a5a4e` -> `minio/assets/space/2021/05/29/601526d7d4534f8f980520355e2a5a4e`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/6027ca19805f44da8fdf2afd52235e08` -> `minio/assets/space/2021/05/29/6027ca19805f44da8fdf2afd52235e08`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/60393d27458c497dab296f88837128bd` -> `minio/assets/space/2021/05/29/60393d27458c497dab296f88837128bd`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/60502266c7da465a9de1fd96b43f42c3` -> `minio/assets/space/2021/05/29/60502266c7da465a9de1fd96b43f42c3`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/605062e7ea134dd181287ff33b49eb0d` -> `minio/assets/space/2021/05/29/605062e7ea134dd181287ff33b49eb0d`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/60c9dad5c82248ea955ce0897231c8a2` -> `minio/assets/space/2021/05/29/60c9dad5c82248ea955ce0897231c8a2`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/60fb057554ba4e5faf8ebaea4d37d224` -> `minio/assets/space/2021/05/29/60fb057554ba4e5faf8ebaea4d37d224`
apitable-init-data-minio-1    | `/minio/data/space/2021/05/29/60fe5d72d99143f8866b7614c4fc3086` -> `minio/assets/space/2021/05/29/60fe5d72d99143f8866b7614c4fc3086`
container for service "mysql" is unhealthy
root@apitable:/opt/apitable$

If I run docker compose up AGAIN, it just takes about 2 minutes and then I see this error:

apitable-web-server-1         | Cannot find string key: report_reason_2
apitable-web-server-1         | Cannot find string key: report_reason_4
apitable-room-server-1        | 2022-12-26 16:53:45: [Nest] 54  - 12/26/2022, 4:53:45 PM   ERROR [TypeOrmModule] Unable to connect to the database. Message: Host '172.18.0.4' is not allowed to connect to this MySQL server. Retrying (9)...
apitable-room-server-1        | 2022-12-26 16:53:45: Error: Host '172.18.0.4' is not allowed to connect to this MySQL server
apitable-room-server-1        |     at Packet.asError (/app/node_modules/mysql2/lib/packets/packet.js:728:17)
apitable-room-server-1        |     at ClientHandshake.execute (/app/node_modules/mysql2/lib/commands/command.js:29:26)
apitable-room-server-1        |     at PoolConnection.handlePacket (/app/node_modules/mysql2/lib/connection.js:456:32)
apitable-room-server-1        |     at PacketParser.onPacket (/app/node_modules/mysql2/lib/connection.js:85:12)
apitable-room-server-1        |     at PacketParser.executeStart (/app/node_modules/mysql2/lib/packet_parser.js:75:16)
apitable-room-server-1        |     at Socket.<anonymous> (/app/node_modules/mysql2/lib/connection.js:92:25)
apitable-room-server-1        |     at Socket.emit (node:events:527:28)
apitable-room-server-1        |     at Socket.emit (node:domain:475:12)
apitable-room-server-1        |     at addChunk (node:internal/streams/readable:315:12)
apitable-room-server-1        |     at readableAddChunk (node:internal/streams/readable:289:9)
apitable-room-server-1        |     at Socket.Readable.push (node:internal/streams/readable:228:10)
apitable-room-server-1        |     at TCP.onStreamRead [as _originalOnread] (node:internal/stream_base_commons:190:23)
apitable-room-server-1        |     at TCP.<anonymous> (/app/node_modules/async-listener/glue.js:188:31)
apitable-room-server-1        | 2022-12-26 16:53:45: [Nest] 54  - 12/26/2022, 4:53:45 PM   ERROR [ExceptionHandler] Host '172.18.0.4' is not allowed to connect to this MySQL server
apitable-room-server-1        | 2022-12-26 16:53:45: Error: Host '172.18.0.4' is not allowed to connect to this MySQL server
apitable-room-server-1        |     at Packet.asError (/app/node_modules/mysql2/lib/packets/packet.js:728:17)
apitable-room-server-1        |     at ClientHandshake.execute (/app/node_modules/mysql2/lib/commands/command.js:29:26)
apitable-room-server-1        |     at PoolConnection.handlePacket (/app/node_modules/mysql2/lib/connection.js:456:32)
apitable-room-server-1        |     at PacketParser.onPacket (/app/node_modules/mysql2/lib/connection.js:85:12)
apitable-room-server-1        |     at PacketParser.executeStart (/app/node_modules/mysql2/lib/packet_parser.js:75:16)
apitable-room-server-1        |     at Socket.<anonymous> (/app/node_modules/mysql2/lib/connection.js:92:25)
apitable-room-server-1        |     at Socket.emit (node:events:527:28)
apitable-room-server-1        |     at Socket.emit (node:domain:475:12)
apitable-room-server-1        |     at addChunk (node:internal/streams/readable:315:12)
apitable-room-server-1        |     at readableAddChunk (node:internal/streams/readable:289:9)
apitable-room-server-1        |     at Socket.Readable.push (node:internal/streams/readable:228:10)
apitable-room-server-1        |     at TCP.onStreamRead [as _originalOnread] (node:internal/stream_base_commons:190:23)
apitable-room-server-1        |     at TCP.<anonymous> (/app/node_modules/async-listener/glue.js:188:31)
apitable-room-server-1        | 2022-12-26T16:53:45: PM2 log: App name:nest id:3 disconnected
apitable-room-server-1        | 2022-12-26T16:53:45: PM2 log: App [nest:3] exited with code [1] via signal [SIGINT]
apitable-room-server-1        | 2022-12-26T16:53:45: PM2 log: App [nest:3] will restart in 100ms
apitable-room-server-1        | 2022-12-26T16:53:45: PM2 log: App [nest:3] starting in -cluster mode-
apitable-room-server-1        | 2022-12-26T16:53:45: PM2 log: App [nest:3] online
apitable-init-data-minio-1    | `/minio/data/public/2021/08/25/2820cef9a6bb42ed92afaea3af5ce7e0` -> `minio/assets/public/2021/08/25/2820cef9a6bb42ed92afaea3af5ce7e0`
apitable-init-data-minio-1    | `/minio/data/public/2021/08/25/313be0678f624065b57a73adb09ef054` -> `minio/assets/public/2021/08/25/313be0678f624065b57a73adb09ef054`
apitable-init-data-minio-1    | `/minio/data/public/2021/12/03/05f64261f4e045e1bb6596f09b184fad` -> `minio/assets/public/2021/12/03/05f64261f4e045e1bb6596f09b184fad`
apitable-init-data-minio-1    | `/minio/data/public/2021/12/03/000365252fb048a6a0c60027e674fdd2` -> `minio/assets/public/2021/12/03/000365252fb048a6a0c60027e674fdd2`
apitable-init-data-minio-1    | `/minio/data/public/2021/12/03/32e7654a89714fc98cc0f255c4f1c6ef` -> `minio/assets/public/2021/12/03/32e7654a89714fc98cc0f255c4f1c6ef`
apitable-init-data-minio-1    | `/minio/data/public/2021/12/03/4d693321291342f281c996f5754de996` -> `minio/assets/public/2021/12/03/4d693321291342f281c996f5754de996`
apitable-init-data-minio-1    | `/minio/data/public/2021/12/03/4d1fc8b82bc147bd9d8a94401b8643d0` -> `minio/assets/public/2021/12/03/4d1fc8b82bc147bd9d8a94401b8643d0`
container for service "mysql" is unhealthy

@networkhermit
Copy link
Collaborator

@RobSeder

Could you help us check the log of the mysql container by running docker compose logs mysql? And do you know if there are firewall service or another mysql instance managed by systemd?

@RobSeder
Copy link

No firewall or anything peculiar. This is a pretty barebone Ubuntu 22.04 "cloud image" running in a ProxMox hypervisor. That error message seems to be a regular MySQL error where only certain IP addresses can connect. Perhaps the NAT network in my Docker instance isn't as expected? If it helps, here is a docker network inspect ... of the apitable network:

[
    {
        "Name": "apitable_apitable",
        "Id": "231dfcae55b5562e93873dae00238486998c102a3002d59bfcb181bf484d20a2",
        "Created": "2022-12-26T15:42:33.485665942Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "0e50224ed5faa0c10d735ca8fde8351fea70f34c85e79df2100e078bb8e6bd71": {
                "Name": "apitable-minio-1",
                "EndpointID": "760b051f46c1d0c6aa12a40874d48385cf0c86544d80a3c6ea07b6f1d7133b38",
                "MacAddress": "02:42:ac:12:00:08",
                "IPv4Address": "172.18.0.8/16",
                "IPv6Address": ""
            },
            "117f22ecce6470e420ed65f6b1ed8ef76b895b950e257a8acc99d523573b6150": {
                "Name": "apitable-web-server-1",
                "EndpointID": "e466f2347639370d9d60f286c7dd77869e73e6bcdf6a2933cb1d2c0d111747cd",
                "MacAddress": "02:42:ac:12:00:0b",
                "IPv4Address": "172.18.0.11/16",
                "IPv6Address": ""
            },
            "8c57fffa73224a2beaab1443057099bbf9acc5107a26841430b4853eb7406577": {
                "Name": "apitable-redis-1",
                "EndpointID": "2bf4aac5640c48142ae9eb3ef655ee7476d36980570680877c208cf7772979c5",
                "MacAddress": "02:42:ac:12:00:05",
                "IPv4Address": "172.18.0.5/16",
                "IPv6Address": ""
            },
            "ad1c7693b64bafc97e4f31c2c37f4f068d2a313850a29e19bfa170de5bb5fb38": {
                "Name": "apitable-backend-server-1",
                "EndpointID": "a2de8f75ee5f0c0fbba8972fe2996e3e75d2c28c9c3452808467ba4d8591d54c",
                "MacAddress": "02:42:ac:12:00:06",
                "IPv4Address": "172.18.0.6/16",
                "IPv6Address": ""
            },
            "c0d903e4924a27fb48316e9b695f5c77c2e843df840ab27d4e1ac3d3f00a5608": {
                "Name": "apitable-room-server-1",
                "EndpointID": "78dd62581b3295845da92c9cc167a0dc5908de8dd7c03d5fa81025a93f184393",
                "MacAddress": "02:42:ac:12:00:04",
                "IPv4Address": "172.18.0.4/16",
                "IPv6Address": ""
            },
            "c4e4e588e42fc528e2c4118080b0275645cfa2afc2e81300e4ce9abaddae924e": {
                "Name": "apitable-imageproxy-server-1",
                "EndpointID": "a39b0a6d1cd8e6e48080e8b1bcdf469491fdf486467bd703b0bc7e8f2426258f",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            },
            "cb8e995896933c0aaf4e367d9cbf8a32faab8066db071456cc1074ee65017df7": {
                "Name": "apitable-gateway-1",
                "EndpointID": "4d572fdc4fe06931352b11aeb7c658b479bda60778dce06ca2e6968dae3d2b3c",
                "MacAddress": "02:42:ac:12:00:0d",
                "IPv4Address": "172.18.0.13/16",
                "IPv6Address": ""
            },
            "ed2c3f703da8dad3fdf517a62b86ec6067807d88a9baa54614b6040027d2a3b1": {
                "Name": "apitable-rabbitmq-1",
                "EndpointID": "c292dd523ef2ea6fbe43d4a43232361d92e0e01705544e9738cb2402745e7fc5",
                "MacAddress": "02:42:ac:12:00:0a",
                "IPv4Address": "172.18.0.10/16",
                "IPv6Address": ""
            },
            "f4d292a1dd934f0959106e943b0bf8c1d63d7fac8a11abdb1318bc3457bfd880": {
                "Name": "apitable-mysql-1",
                "EndpointID": "21e32d63c246e51cf465780a78f4ea2e644c5a263deb37c7f1e7ab739d4e82c1",
                "MacAddress": "02:42:ac:12:00:09",
                "IPv4Address": "172.18.0.9/16",
                "IPv6Address": ""
            },
            "fe4e455087f7a79a711bd165211d1e03c1d6128497fcc0bfb76d6fc0e4103ba5": {
                "Name": "apitable-socket-server-1",
                "EndpointID": "23dda5e8e0ad394fe9f9d24c5898b0519af49801d58b600144c9a0d8d175befb",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "apitable",
            "com.docker.compose.project": "apitable",
            "com.docker.compose.version": "2.14.1"
        }
    }
]

And then, here is the result of that docker compose logs mysql command, in-whole:

WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
apitable-mysql-1  | 2022-12-26 23:43:10+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.29-1.el8 started.
apitable-mysql-1  | 2022-12-26 23:43:10+08:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
apitable-mysql-1  | 2022-12-26 23:43:10+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.29-1.el8 started.
apitable-mysql-1  | 2022-12-26 23:43:10+08:00 [Note] [Entrypoint]: Initializing database files
apitable-mysql-1  | 2022-12-26T15:43:10.880851Z 0 [Warning] [MY-010918] [Server] 'default_authentication_plugin' is deprecated and will be removed in a future release. Please use authentication_policy instead.
apitable-mysql-1  | 2022-12-26T15:43:10.880871Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.29) initializing of server in progress as process 43
apitable-mysql-1  | 2022-12-26T15:43:10.882594Z 0 [Warning] [MY-010160] [Server] lower_case_table_names was set to 2, even though your the file system '/var/lib/mysql/' is case sensitive.  Now setting lower_case_table_names to 0 to avoid future problems.
apitable-mysql-1  | 2022-12-26T15:43:11.068796Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
apitable-mysql-1  | 2022-12-26T15:45:39.656889Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
apitable-mysql-1  | 2022-12-26T15:59:02.245074Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
apitable-mysql-1  | 2022-12-27 00:24:23+08:00 [Note] [Entrypoint]: Database files initialized
apitable-mysql-1  | 2022-12-27 00:24:23+08:00 [Note] [Entrypoint]: Starting temporary server
apitable-mysql-1  | 2022-12-26T16:24:31.896537Z 0 [Warning] [MY-010918] [Server] 'default_authentication_plugin' is deprecated and will be removed in a future release. Please use authentication_policy instead.
apitable-mysql-1  | 2022-12-26T16:24:31.896564Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.29) starting as process 487
apitable-mysql-1  | 2022-12-26T16:24:32.364705Z 0 [Warning] [MY-010160] [Server] lower_case_table_names was set to 2, even though your the file system '/var/lib/mysql/' is case sensitive.  Now setting lower_case_table_names to 0 to avoid future problems.
apitable-mysql-1  | 2022-12-26T16:24:36.966599Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
apitable-mysql-1  | 2022-12-26T16:25:55.196264Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
apitable-mysql-1  | 2022-12-26T16:27:16.606780Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
apitable-mysql-1  | 2022-12-26T16:27:16.606821Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
apitable-mysql-1  | 2022-12-26T16:27:26.341207Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
apitable-mysql-1  | 2022-12-26T16:27:33.311618Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: /var/run/mysqld/mysqlx.sock
apitable-mysql-1  | 2022-12-26T16:27:33.313063Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.29'  socket: '/var/run/mysqld/mysqld.sock'  port: 0  MySQL Community Server - GPL.
apitable-mysql-1  | 2022-12-27 00:27:33+08:00 [Note] [Entrypoint]: Temporary server started.
apitable-mysql-1  | '/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
apitable-mysql-1  | 2022-12-27 00:34:25+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.29-1.el8 started.
apitable-mysql-1  | 2022-12-27 00:34:33+08:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
apitable-mysql-1  | 2022-12-27 00:34:33+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.29-1.el8 started.
apitable-mysql-1  | '/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
apitable-mysql-1  | 2022-12-26T16:34:34.231544Z 0 [Warning] [MY-010918] [Server] 'default_authentication_plugin' is deprecated and will be removed in a future release. Please use authentication_policy instead.
apitable-mysql-1  | 2022-12-26T16:34:34.231565Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.29) starting as process 1
apitable-mysql-1  | 2022-12-26T16:34:34.233095Z 0 [Warning] [MY-010160] [Server] lower_case_table_names was set to 2, even though your the file system '/var/lib/mysql/' is case sensitive.  Now setting lower_case_table_names to 0 to avoid future problems.
apitable-mysql-1  | 2022-12-26T16:34:34.621200Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
apitable-mysql-1  | 2022-12-26T16:34:40.330393Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
apitable-mysql-1  | 2022-12-26T16:34:42.052627Z 0 [System] [MY-010229] [Server] Starting XA crash recovery...
apitable-mysql-1  | 2022-12-26T16:34:42.064910Z 0 [System] [MY-010232] [Server] XA crash recovery finished.
apitable-mysql-1  | 2022-12-26T16:34:42.564638Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
apitable-mysql-1  | 2022-12-26T16:34:42.564682Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
apitable-mysql-1  | 2022-12-26T16:34:42.620121Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
apitable-mysql-1  | 2022-12-26T16:34:42.664337Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.29'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.
apitable-mysql-1  | 2022-12-26T16:34:42.664296Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock

@networkhermit
Copy link
Collaborator

@RobSeder What's the output of the following command?

$ docker compose exec -it mysql mysql -u root -h mysql -papitable@com mysql -e 'select host from user where user="root";'
WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
mysql: [Warning] Using a password on the command line interface can be insecure.
+-----------+
| host      |
+-----------+
| %         |
| localhost |
+-----------+

@RobSeder
Copy link

Result is this:

WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1130 (HY000): Host '172.18.0.9' is not allowed to connect to this MySQL server

@networkhermit
Copy link
Collaborator

How about docker compose exec -it mysql mysql -u root -h localhost -papitable@com mysql -e 'select host from user where user="root";'?

@RobSeder
Copy link

For that, I see this:

WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

@RobSeder
Copy link

If it helps, if I start a bash shell in the apitable-mysql-1 container, I cannot use the username and password. However, if I just run mysql and do a show databases;, it shows this:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.04 sec)

I assume there should be an apitable database maybe? So maybe the database didn't initialize correctly?

@networkhermit
Copy link
Collaborator

Do you have .env along side the docker-compose.yaml? Please check the output of docker compose config.

@RobSeder
Copy link

Yes, the .env is populated and in the same folder as the YAML. Running docker compose config from that folder:

WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
name: apitable
services:
  backend-server:
    depends_on:
      minio:
        condition: service_started
      mysql:
        condition: service_started
      rabbitmq:
        condition: service_started
      redis:
        condition: service_started
      socket-server:
        condition: service_started
    environment:
      API_PROXY: http://backend-server:8081
      AUTH0_ENABLED: "false"
      AWS_ACCESS_KEY: apitable
      AWS_ACCESS_SECRET: apitable@com
      AWS_ENDPOINT: http://minio:9000
      AWS_REGION: us-east-1
      BACKEND_BASE_URL: http://backend-server:8081/api/v1/
      BACKEND_INFO_URL: http://backend-server:8081/api/v1/client/info
      CALLBACK_DOMAIN: ""
      CORS_ORIGINS: '*'
      DATA_PATH: .
      DATABASE_TABLE_PREFIX: apitable_
      DECORATOR_ENABLED: "false"
      ENV: apitable
      IMAGE_BACKEND_SERVER: apitable/backend-server:latest
      IMAGE_GATEWAY: openresty/openresty:1.21.4.1-3-buster-fat
      IMAGE_IMAGEPROXY_SERVER: apitable/imageproxy-server:latest
      IMAGE_INIT_DATA_MINIO: apitable/init-template-minio:latest
      IMAGE_INIT_DATA_MYSQL: apitable/init-template-mysql:latest
      IMAGE_INIT_DB: apitable/init-db:latest
      IMAGE_MINIO: minio/minio:RELEASE.2021-03-17T02-33-02Z
      IMAGE_MYSQL: mysql:8.0.29
      IMAGE_POLL_POLICY: always
      IMAGE_RABBITMQ: rabbitmq:3-management
      IMAGE_REDIS: redis:5
      IMAGE_REGISTRY: docker.io
      IMAGE_ROOM_SERVER: apitable/room-server:latest
      IMAGE_SOCKET_SERVER: apitable/socket-server:latest
      IMAGE_WEB_SERVER: apitable/web-server:latest
      MAIL_ENABLED: "false"
      MINIO_ACCESS_KEY: apitable
      MINIO_BUCKET: assets
      MINIO_ENDPOINT: http://minio:9000
      MINIO_SECRET_KEY: apitable@com
      MYSQL_DATABASE: apitable
      MYSQL_HOST: mysql
      MYSQL_PASSWORD: apitable@com
      MYSQL_PORT: "3306"
      MYSQL_ROOT_PASSWORD: apitable@com
      MYSQL_USERNAME: root
      NEST_GRPC_ADDRESS: static://room-server:3334
      NEST_GRPC_URL: room-server:3334
      OSS_CACHE_TYPE: minio
      OSS_ENABLED: "true"
      OSS_HOST: /assets
      OSS_TYPE: aws
      PUBLIC_URL: ""
      RABBITMQ_DEFAULT_PASS: fkJifev64y^sbxRl
      RABBITMQ_DEFAULT_USER: apitable-user
      RABBITMQ_HOST: rabbitmq
      RABBITMQ_PASSWORD: fkJifev64y^sbxRl
      RABBITMQ_PORT: "5672"
      RABBITMQ_USERNAME: apitable-user
      RABBITMQ_VHOST: /
      REDIS_DB: "0"
      REDIS_HOST: redis
      REDIS_PASSWORD: apitable@com
      REDIS_PORT: "6379"
      SERVER_DOMAIN: ""
      SMS_ENABLED: "false"
      SOCKET_DOMAIN: http://socket-server:3001/socket
      SOCKET_GRPC_URL: socket-server:3007
      SOCKET_RECONNECTION_ATTEMPTS: "10"
      SOCKET_RECONNECTION_DELAY: "500"
      SOCKET_TIMEOUT: "5000"
      SOCKET_URL: http://socket-server:3002
      SPRINGFOX_ENABLED: "false"
      TEMPLATE_PATH: ./static/web_build/index.html
      TEMPLATE_SPACE: spcNTxlv8Drra
      TIMEZONE: Asia/Singapore
      TZ: Asia/Singapore
      USE_CUSTOM_PUBLIC_FILES: "true"
      VK_ASSETS_LTD_URL: assets
    expose:
    - "8081"
    healthcheck:
      test:
      - CMD-SHELL
      - curl -sS 'http://localhost:8081' || exit 1
      timeout: 10s
      interval: 30s
      retries: 10
    image: docker.io/apitable/backend-server:latest
    networks:
      apitable: null
    ports:
    - mode: ingress
      target: 8081
      published: "8081"
      protocol: tcp
    pull_policy: always
    restart: always
  gateway:
    depends_on:
      backend-server:
        condition: service_started
      imageproxy-server:
        condition: service_started
      minio:
        condition: service_started
      mysql:
        condition: service_started
      room-server:
        condition: service_started
      socket-server:
        condition: service_started
      web-server:
        condition: service_started
    environment:
      TZ: Asia/Singapore
    image: openresty/openresty:1.21.4.1-3-buster-fat
    networks:
      apitable: null
    ports:
    - mode: ingress
      target: 80
      published: "80"
      protocol: tcp
    - mode: ingress
      target: 443
      published: "443"
      protocol: tcp
    pull_policy: always
    restart: always
    volumes:
    - type: bind
      source: /opt/apitable/gateway/conf.d
      target: /etc/nginx/conf.d
      bind:
        create_host_path: true
  imageproxy-server:
    environment:
      BASEURL: http://minio:9000
      TZ: Asia/Singapore
    expose:
    - "8080"
    image: docker.io/apitable/imageproxy-server:latest
    networks:
      apitable: null
    pull_policy: always
    restart: always
  init-data-minio:
    depends_on:
      minio:
        condition: service_healthy
    environment:
      API_PROXY: http://backend-server:8081
      AUTH0_ENABLED: "false"
      AWS_ACCESS_KEY: apitable
      AWS_ACCESS_SECRET: apitable@com
      AWS_ENDPOINT: http://minio:9000
      AWS_REGION: us-east-1
      BACKEND_BASE_URL: http://backend-server:8081/api/v1/
      BACKEND_INFO_URL: http://backend-server:8081/api/v1/client/info
      CALLBACK_DOMAIN: ""
      CORS_ORIGINS: '*'
      DATA_PATH: .
      DATABASE_TABLE_PREFIX: apitable_
      DECORATOR_ENABLED: "false"
      ENV: apitable
      IMAGE_BACKEND_SERVER: apitable/backend-server:latest
      IMAGE_GATEWAY: openresty/openresty:1.21.4.1-3-buster-fat
      IMAGE_IMAGEPROXY_SERVER: apitable/imageproxy-server:latest
      IMAGE_INIT_DATA_MINIO: apitable/init-template-minio:latest
      IMAGE_INIT_DATA_MYSQL: apitable/init-template-mysql:latest
      IMAGE_INIT_DB: apitable/init-db:latest
      IMAGE_MINIO: minio/minio:RELEASE.2021-03-17T02-33-02Z
      IMAGE_MYSQL: mysql:8.0.29
      IMAGE_POLL_POLICY: always
      IMAGE_RABBITMQ: rabbitmq:3-management
      IMAGE_REDIS: redis:5
      IMAGE_REGISTRY: docker.io
      IMAGE_ROOM_SERVER: apitable/room-server:latest
      IMAGE_SOCKET_SERVER: apitable/socket-server:latest
      IMAGE_WEB_SERVER: apitable/web-server:latest
      MAIL_ENABLED: "false"
      MINIO_ACCESS_KEY: apitable
      MINIO_BUCKET: assets
      MINIO_ENDPOINT: http://minio:9000
      MINIO_SECRET_KEY: apitable@com
      MYSQL_DATABASE: apitable
      MYSQL_HOST: mysql
      MYSQL_PASSWORD: apitable@com
      MYSQL_PORT: "3306"
      MYSQL_ROOT_PASSWORD: apitable@com
      MYSQL_USERNAME: root
      NEST_GRPC_ADDRESS: static://room-server:3334
      NEST_GRPC_URL: room-server:3334
      OSS_CACHE_TYPE: minio
      OSS_ENABLED: "true"
      OSS_HOST: /assets
      OSS_TYPE: QNY1
      PUBLIC_URL: ""
      RABBITMQ_DEFAULT_PASS: fkJifev64y^sbxRl
      RABBITMQ_DEFAULT_USER: apitable-user
      RABBITMQ_HOST: rabbitmq
      RABBITMQ_PASSWORD: fkJifev64y^sbxRl
      RABBITMQ_PORT: "5672"
      RABBITMQ_USERNAME: apitable-user
      RABBITMQ_VHOST: /
      REDIS_DB: "0"
      REDIS_HOST: redis
      REDIS_PASSWORD: apitable@com
      REDIS_PORT: "6379"
      SERVER_DOMAIN: ""
      SMS_ENABLED: "false"
      SOCKET_DOMAIN: http://socket-server:3001/socket
      SOCKET_GRPC_URL: socket-server:3007
      SOCKET_RECONNECTION_ATTEMPTS: "10"
      SOCKET_RECONNECTION_DELAY: "500"
      SOCKET_TIMEOUT: "5000"
      SOCKET_URL: http://socket-server:3002
      SPRINGFOX_ENABLED: "false"
      TEMPLATE_PATH: ./static/web_build/index.html
      TEMPLATE_SPACE: spcNTxlv8Drra
      TIMEZONE: Asia/Singapore
      TZ: Asia/Singapore
      USE_CUSTOM_PUBLIC_FILES: "true"
      VK_ASSETS_LTD_URL: assets
    image: docker.io/apitable/init-template-minio:latest
    networks:
      apitable: null
    pull_policy: always
  init-data-mysql:
    command:
    - /bin/bash
    - -c
    - |
      sh run.sh
    depends_on:
      init-db:
        condition: service_completed_successfully
      mysql:
        condition: service_healthy
    environment:
      API_PROXY: http://backend-server:8081
      AUTH0_ENABLED: "false"
      AWS_ACCESS_KEY: apitable
      AWS_ACCESS_SECRET: apitable@com
      AWS_ENDPOINT: http://minio:9000
      AWS_REGION: us-east-1
      BACKEND_BASE_URL: http://backend-server:8081/api/v1/
      BACKEND_INFO_URL: http://backend-server:8081/api/v1/client/info
      CALLBACK_DOMAIN: ""
      CORS_ORIGINS: '*'
      DATA_PATH: .
      DATABASE_TABLE_PREFIX: apitable_
      DECORATOR_ENABLED: "false"
      ENV: apitable
      IMAGE_BACKEND_SERVER: apitable/backend-server:latest
      IMAGE_GATEWAY: openresty/openresty:1.21.4.1-3-buster-fat
      IMAGE_IMAGEPROXY_SERVER: apitable/imageproxy-server:latest
      IMAGE_INIT_DATA_MINIO: apitable/init-template-minio:latest
      IMAGE_INIT_DATA_MYSQL: apitable/init-template-mysql:latest
      IMAGE_INIT_DB: apitable/init-db:latest
      IMAGE_MINIO: minio/minio:RELEASE.2021-03-17T02-33-02Z
      IMAGE_MYSQL: mysql:8.0.29
      IMAGE_POLL_POLICY: always
      IMAGE_RABBITMQ: rabbitmq:3-management
      IMAGE_REDIS: redis:5
      IMAGE_REGISTRY: docker.io
      IMAGE_ROOM_SERVER: apitable/room-server:latest
      IMAGE_SOCKET_SERVER: apitable/socket-server:latest
      IMAGE_WEB_SERVER: apitable/web-server:latest
      MAIL_ENABLED: "false"
      MINIO_ACCESS_KEY: apitable
      MINIO_BUCKET: assets
      MINIO_ENDPOINT: http://minio:9000
      MINIO_SECRET_KEY: apitable@com
      MYSQL_DATABASE: apitable
      MYSQL_HOST: mysql
      MYSQL_PASSWORD: apitable@com
      MYSQL_PORT: "3306"
      MYSQL_ROOT_PASSWORD: apitable@com
      MYSQL_USERNAME: root
      NEST_GRPC_ADDRESS: static://room-server:3334
      NEST_GRPC_URL: room-server:3334
      OSS_CACHE_TYPE: minio
      OSS_ENABLED: "true"
      OSS_HOST: /assets
      OSS_TYPE: QNY1
      PUBLIC_URL: ""
      RABBITMQ_DEFAULT_PASS: fkJifev64y^sbxRl
      RABBITMQ_DEFAULT_USER: apitable-user
      RABBITMQ_HOST: rabbitmq
      RABBITMQ_PASSWORD: fkJifev64y^sbxRl
      RABBITMQ_PORT: "5672"
      RABBITMQ_USERNAME: apitable-user
      RABBITMQ_VHOST: /
      REDIS_DB: "0"
      REDIS_HOST: redis
      REDIS_PASSWORD: apitable@com
      REDIS_PORT: "6379"
      SERVER_DOMAIN: ""
      SMS_ENABLED: "false"
      SOCKET_DOMAIN: http://socket-server:3001/socket
      SOCKET_GRPC_URL: socket-server:3007
      SOCKET_RECONNECTION_ATTEMPTS: "10"
      SOCKET_RECONNECTION_DELAY: "500"
      SOCKET_TIMEOUT: "5000"
      SOCKET_URL: http://socket-server:3002
      SPRINGFOX_ENABLED: "false"
      TEMPLATE_PATH: ./static/web_build/index.html
      TEMPLATE_SPACE: spcNTxlv8Drra
      TIMEZONE: Asia/Singapore
      TZ: Asia/Singapore
      USE_CUSTOM_PUBLIC_FILES: "true"
      VK_ASSETS_LTD_URL: assets
    image: docker.io/apitable/init-template-mysql:latest
    networks:
      apitable: null
    pull_policy: always
  init-db:
    depends_on:
      mysql:
        condition: service_healthy
    environment:
      ACTION: update
      DATABASE_TABLE_PREFIX: apitable_
      DB_HOST: mysql
      DB_NAME: apitable
      DB_PASSWORD: apitable@com
      DB_PORT: "3306"
      DB_USERNAME: root
      TZ: Asia/Singapore
    image: docker.io/apitable/init-db:latest
    networks:
      apitable: null
    pull_policy: always
  minio:
    command:
    - server
    - /data
    environment:
      MINIO_ACCESS_KEY: apitable
      MINIO_SECRET_KEY: apitable@com
      TZ: Asia/Singapore
    expose:
    - "9000"
    healthcheck:
      test:
      - CMD-SHELL
      - curl -sS 'http://localhost:9000' || exit 1
      timeout: 10s
      interval: 30s
      retries: 5
    image: minio/minio:RELEASE.2021-03-17T02-33-02Z
    networks:
      apitable: null
    ports:
    - mode: ingress
      target: 9000
      published: "9000"
      protocol: tcp
    pull_policy: always
    restart: always
    user: ':'
    volumes:
    - type: bind
      source: /opt/apitable/.data/minio/data
      target: /data
      bind:
        create_host_path: true
    - type: bind
      source: /opt/apitable/.data/minio/config
      target: /root/.minio
      bind:
        create_host_path: true
  mysql:
    command:
    - --default-authentication-plugin=mysql_native_password
    - --character-set-server=utf8mb4
    - --collation-server=utf8mb4_general_ci
    - --sql_mode=IGNORE_SPACE,NO_ENGINE_SUBSTITUTION
    - --lower_case_table_names=2
    environment:
      MYSQL_DATABASE: apitable
      MYSQL_ROOT_PASSWORD: apitable@com
      TZ: Asia/Singapore
    expose:
    - "3306"
    healthcheck:
      test:
      - CMD-SHELL
      - mysql apitable -uroot -papitable@com -e 'SELECT 1;'
      timeout: 10s
      interval: 30s
      retries: 10
    image: mysql:8.0.29
    networks:
      apitable: null
    ports:
    - mode: ingress
      target: 3306
      published: "3306"
      protocol: tcp
    pull_policy: always
    restart: always
    user: ':'
    volumes:
    - type: bind
      source: /opt/apitable/.data/mysql
      target: /var/lib/mysql
      bind:
        create_host_path: true
  rabbitmq:
    environment:
      RABBITMQ_DEFAULT_PASS: fkJifev64y^sbxRl
      RABBITMQ_DEFAULT_USER: apitable-user
      RABBITMQ_PASSWORD: fkJifev64y^sbxRl
      RABBITMQ_USERNAME: apitable-user
    expose:
    - "5671"
    - "5672"
    - "15672"
    image: rabbitmq:3-management
    networks:
      apitable: null
    ports:
    - mode: ingress
      target: 5671
      published: "5671"
      protocol: tcp
    - mode: ingress
      target: 5672
      published: "5672"
      protocol: tcp
    - mode: ingress
      target: 15672
      published: "15672"
      protocol: tcp
    pull_policy: always
    restart: always
    user: ':'
    volumes:
    - type: bind
      source: /opt/apitable/.data/rabbitmq
      target: /var/lib/rabbitmq
      bind:
        create_host_path: true
  redis:
    command:
    - redis-server
    - --appendonly
    - "yes"
    - --requirepass
    - apitable@com
    environment:
      TZ: Asia/Singapore
    expose:
    - "6379"
    image: redis:5
    networks:
      apitable: null
    ports:
    - mode: ingress
      target: 6379
      published: "6379"
      protocol: tcp
    pull_policy: always
    restart: always
    user: ':'
    volumes:
    - type: bind
      source: /opt/apitable/.data/redis
      target: /data
      bind:
        create_host_path: true
  room-server:
    depends_on:
      mysql:
        condition: service_started
      redis:
        condition: service_started
    environment:
      API_MAX_MODIFY_RECORD_COUNTS: "30"
      API_PROXY: http://backend-server:8081
      AUTH0_ENABLED: "false"
      AWS_ACCESS_KEY: apitable
      AWS_ACCESS_SECRET: apitable@com
      AWS_ENDPOINT: http://minio:9000
      AWS_REGION: us-east-1
      BACKEND_BASE_URL: http://backend-server:8081/api/v1/
      BACKEND_INFO_URL: http://backend-server:8081/api/v1/client/info
      CALLBACK_DOMAIN: ""
      CORS_ORIGINS: '*'
      DATA_PATH: .
      DATABASE_TABLE_PREFIX: apitable_
      DECORATOR_ENABLED: "false"
      ENV: apitable
      IMAGE_BACKEND_SERVER: apitable/backend-server:latest
      IMAGE_GATEWAY: openresty/openresty:1.21.4.1-3-buster-fat
      IMAGE_IMAGEPROXY_SERVER: apitable/imageproxy-server:latest
      IMAGE_INIT_DATA_MINIO: apitable/init-template-minio:latest
      IMAGE_INIT_DATA_MYSQL: apitable/init-template-mysql:latest
      IMAGE_INIT_DB: apitable/init-db:latest
      IMAGE_MINIO: minio/minio:RELEASE.2021-03-17T02-33-02Z
      IMAGE_MYSQL: mysql:8.0.29
      IMAGE_POLL_POLICY: always
      IMAGE_RABBITMQ: rabbitmq:3-management
      IMAGE_REDIS: redis:5
      IMAGE_REGISTRY: docker.io
      IMAGE_ROOM_SERVER: apitable/room-server:latest
      IMAGE_SOCKET_SERVER: apitable/socket-server:latest
      IMAGE_WEB_SERVER: apitable/web-server:latest
      INSTANCE_MAX_MEMORY: 4096M
      MAIL_ENABLED: "false"
      MINIO_ACCESS_KEY: apitable
      MINIO_BUCKET: assets
      MINIO_ENDPOINT: http://minio:9000
      MINIO_SECRET_KEY: apitable@com
      MYSQL_DATABASE: apitable
      MYSQL_HOST: mysql
      MYSQL_PASSWORD: apitable@com
      MYSQL_PORT: "3306"
      MYSQL_ROOT_PASSWORD: apitable@com
      MYSQL_USERNAME: root
      NEST_GRPC_ADDRESS: static://room-server:3334
      NEST_GRPC_URL: room-server:3334
      NODE_ENV: apitable
      NODE_OPTIONS: --max-old-space-size=2048 --max-http-header-size=80000
      OSS_CACHE_TYPE: minio
      OSS_ENABLED: "true"
      OSS_HOST: /assets
      OSS_TYPE: QNY1
      PUBLIC_URL: ""
      RABBITMQ_DEFAULT_PASS: fkJifev64y^sbxRl
      RABBITMQ_DEFAULT_USER: apitable-user
      RABBITMQ_HOST: rabbitmq
      RABBITMQ_PASSWORD: fkJifev64y^sbxRl
      RABBITMQ_PORT: "5672"
      RABBITMQ_USERNAME: apitable-user
      RABBITMQ_VHOST: /
      REDIS_DB: "0"
      REDIS_HOST: redis
      REDIS_PASSWORD: apitable@com
      REDIS_PORT: "6379"
      SERVER_DOMAIN: ""
      SMS_ENABLED: "false"
      SOCKET_DOMAIN: http://socket-server:3001/socket
      SOCKET_GRPC_URL: socket-server:3007
      SOCKET_RECONNECTION_ATTEMPTS: "10"
      SOCKET_RECONNECTION_DELAY: "500"
      SOCKET_TIMEOUT: "5000"
      SOCKET_URL: http://socket-server:3002
      SPRINGFOX_ENABLED: "false"
      TEMPLATE_PATH: ./static/web_build/index.html
      TEMPLATE_SPACE: spcNTxlv8Drra
      TIMEZONE: Asia/Singapore
      USE_CUSTOM_PUBLIC_FILES: "true"
      VK_ASSETS_LTD_URL: assets
    expose:
    - "3333"
    - "3334"
    image: docker.io/apitable/room-server:latest
    networks:
      apitable: null
    pull_policy: always
    restart: always
  scheduler-server:
    depends_on:
      mysql:
        condition: service_started
      redis:
        condition: service_started
    environment:
      API_MAX_MODIFY_RECORD_COUNTS: "30"
      API_PROXY: http://backend-server:8081
      APPLICATION_NAME: SCHEDULE_SERVER
      AUTH0_ENABLED: "false"
      AWS_ACCESS_KEY: apitable
      AWS_ACCESS_SECRET: apitable@com
      AWS_ENDPOINT: http://minio:9000
      AWS_REGION: us-east-1
      BACKEND_BASE_URL: http://backend-server:8081/api/v1/
      BACKEND_INFO_URL: http://backend-server:8081/api/v1/client/info
      CALLBACK_DOMAIN: ""
      CORS_ORIGINS: '*'
      DATA_PATH: .
      DATABASE_TABLE_PREFIX: apitable_
      DECORATOR_ENABLED: "false"
      ENABLE_SCHED: "true"
      ENV: apitable
      IMAGE_BACKEND_SERVER: apitable/backend-server:latest
      IMAGE_GATEWAY: openresty/openresty:1.21.4.1-3-buster-fat
      IMAGE_IMAGEPROXY_SERVER: apitable/imageproxy-server:latest
      IMAGE_INIT_DATA_MINIO: apitable/init-template-minio:latest
      IMAGE_INIT_DATA_MYSQL: apitable/init-template-mysql:latest
      IMAGE_INIT_DB: apitable/init-db:latest
      IMAGE_MINIO: minio/minio:RELEASE.2021-03-17T02-33-02Z
      IMAGE_MYSQL: mysql:8.0.29
      IMAGE_POLL_POLICY: always
      IMAGE_RABBITMQ: rabbitmq:3-management
      IMAGE_REDIS: redis:5
      IMAGE_REGISTRY: docker.io
      IMAGE_ROOM_SERVER: apitable/room-server:latest
      IMAGE_SOCKET_SERVER: apitable/socket-server:latest
      IMAGE_WEB_SERVER: apitable/web-server:latest
      INSTANCE_MAX_MEMORY: 4096M
      MAIL_ENABLED: "false"
      MINIO_ACCESS_KEY: apitable
      MINIO_BUCKET: assets
      MINIO_ENDPOINT: http://minio:9000
      MINIO_SECRET_KEY: apitable@com
      MYSQL_DATABASE: apitable
      MYSQL_HOST: mysql
      MYSQL_PASSWORD: apitable@com
      MYSQL_PORT: "3306"
      MYSQL_ROOT_PASSWORD: apitable@com
      MYSQL_USERNAME: root
      NEST_GRPC_ADDRESS: static://room-server:3334
      NEST_GRPC_URL: room-server:3334
      NODE_ENV: apitable
      NODE_OPTIONS: --max-old-space-size=2048 --max-http-header-size=80000
      OSS_CACHE_TYPE: minio
      OSS_ENABLED: "true"
      OSS_HOST: /assets
      OSS_TYPE: QNY1
      PUBLIC_URL: ""
      RABBITMQ_DEFAULT_PASS: fkJifev64y^sbxRl
      RABBITMQ_DEFAULT_USER: apitable-user
      RABBITMQ_HOST: rabbitmq
      RABBITMQ_PASSWORD: fkJifev64y^sbxRl
      RABBITMQ_PORT: "5672"
      RABBITMQ_USERNAME: apitable-user
      RABBITMQ_VHOST: /
      REDIS_DB: "0"
      REDIS_HOST: redis
      REDIS_PASSWORD: apitable@com
      REDIS_PORT: "6379"
      SERVER_DOMAIN: ""
      SMS_ENABLED: "false"
      SOCKET_DOMAIN: http://socket-server:3001/socket
      SOCKET_GRPC_URL: socket-server:3007
      SOCKET_RECONNECTION_ATTEMPTS: "10"
      SOCKET_RECONNECTION_DELAY: "500"
      SOCKET_TIMEOUT: "5000"
      SOCKET_URL: http://socket-server:3002
      SPRINGFOX_ENABLED: "false"
      TEMPLATE_PATH: ./static/web_build/index.html
      TEMPLATE_SPACE: spcNTxlv8Drra
      TIMEZONE: Asia/Singapore
      USE_CUSTOM_PUBLIC_FILES: "true"
      VK_ASSETS_LTD_URL: assets
    expose:
    - "3333"
    - "3334"
    image: docker.io/apitable/room-server:latest
    networks:
      apitable: null
    pull_policy: always
    restart: always
  socket-server:
    depends_on:
      rabbitmq:
        condition: service_started
      redis:
        condition: service_started
    environment:
      API_PROXY: http://backend-server:8081
      AUTH0_ENABLED: "false"
      AWS_ACCESS_KEY: apitable
      AWS_ACCESS_SECRET: apitable@com
      AWS_ENDPOINT: http://minio:9000
      AWS_REGION: us-east-1
      BACKEND_BASE_URL: http://backend-server:8081/api/v1/
      BACKEND_INFO_URL: http://backend-server:8081/api/v1/client/info
      CALLBACK_DOMAIN: ""
      CORS_ORIGINS: '*'
      DATA_PATH: .
      DATABASE_TABLE_PREFIX: apitable_
      DECORATOR_ENABLED: "false"
      ENV: apitable
      IMAGE_BACKEND_SERVER: apitable/backend-server:latest
      IMAGE_GATEWAY: openresty/openresty:1.21.4.1-3-buster-fat
      IMAGE_IMAGEPROXY_SERVER: apitable/imageproxy-server:latest
      IMAGE_INIT_DATA_MINIO: apitable/init-template-minio:latest
      IMAGE_INIT_DATA_MYSQL: apitable/init-template-mysql:latest
      IMAGE_INIT_DB: apitable/init-db:latest
      IMAGE_MINIO: minio/minio:RELEASE.2021-03-17T02-33-02Z
      IMAGE_MYSQL: mysql:8.0.29
      IMAGE_POLL_POLICY: always
      IMAGE_RABBITMQ: rabbitmq:3-management
      IMAGE_REDIS: redis:5
      IMAGE_REGISTRY: docker.io
      IMAGE_ROOM_SERVER: apitable/room-server:latest
      IMAGE_SOCKET_SERVER: apitable/socket-server:latest
      IMAGE_WEB_SERVER: apitable/web-server:latest
      MAIL_ENABLED: "false"
      MINIO_ACCESS_KEY: apitable
      MINIO_BUCKET: assets
      MINIO_ENDPOINT: http://minio:9000
      MINIO_SECRET_KEY: apitable@com
      MYSQL_DATABASE: apitable
      MYSQL_HOST: mysql
      MYSQL_PASSWORD: apitable@com
      MYSQL_PORT: "3306"
      MYSQL_ROOT_PASSWORD: apitable@com
      MYSQL_USERNAME: root
      NEST_GRPC_ADDRESS: static://room-server:3334
      NEST_GRPC_URL: room-server:3334
      NODE_MEMORY_RATIO: "80"
      NOTIFICATION_PORT: "3002"
      OSS_CACHE_TYPE: minio
      OSS_ENABLED: "true"
      OSS_HOST: /assets
      OSS_TYPE: QNY1
      PORT: "3001"
      PUBLIC_URL: ""
      RABBITMQ_DEFAULT_PASS: fkJifev64y^sbxRl
      RABBITMQ_DEFAULT_USER: apitable-user
      RABBITMQ_HOST: rabbitmq
      RABBITMQ_PASSWORD: fkJifev64y^sbxRl
      RABBITMQ_PORT: "5672"
      RABBITMQ_USERNAME: apitable-user
      RABBITMQ_VHOST: /
      REDIS_DB: "0"
      REDIS_HOST: redis
      REDIS_PASSWORD: apitable@com
      REDIS_PORT: "6379"
      SERVER_DOMAIN: ""
      SMS_ENABLED: "false"
      SOCKET_DOMAIN: http://socket-server:3001/socket
      SOCKET_GRPC_URL: socket-server:3007
      SOCKET_RECONNECTION_ATTEMPTS: "10"
      SOCKET_RECONNECTION_DELAY: "500"
      SOCKET_TIMEOUT: "5000"
      SOCKET_URL: http://socket-server:3002
      SPRINGFOX_ENABLED: "false"
      SYS_MEMORY_RATIO: "100"
      TEMPLATE_PATH: ./static/web_build/index.html
      TEMPLATE_SPACE: spcNTxlv8Drra
      TIMEZONE: Asia/Singapore
      USE_CUSTOM_PUBLIC_FILES: "true"
      VK_ASSETS_LTD_URL: assets
    expose:
    - "3001"
    - "3002"
    - "3005"
    - "3007"
    image: docker.io/apitable/socket-server:latest
    networks:
      apitable: null
    pull_policy: always
    restart: always
  web-server:
    depends_on:
      backend-server:
        condition: service_healthy
    environment:
      API_PROXY: http://backend-server:8081
      AUTH0_ENABLED: "false"
      AWS_ACCESS_KEY: apitable
      AWS_ACCESS_SECRET: apitable@com
      AWS_ENDPOINT: http://minio:9000
      AWS_REGION: us-east-1
      BACKEND_BASE_URL: http://backend-server:8081/api/v1/
      BACKEND_INFO_URL: http://backend-server:8081/api/v1/client/info
      CALLBACK_DOMAIN: ""
      CORS_ORIGINS: '*'
      DATA_PATH: .
      DATABASE_TABLE_PREFIX: apitable_
      DECORATOR_ENABLED: "false"
      ENV: apitable
      IMAGE_BACKEND_SERVER: apitable/backend-server:latest
      IMAGE_GATEWAY: openresty/openresty:1.21.4.1-3-buster-fat
      IMAGE_IMAGEPROXY_SERVER: apitable/imageproxy-server:latest
      IMAGE_INIT_DATA_MINIO: apitable/init-template-minio:latest
      IMAGE_INIT_DATA_MYSQL: apitable/init-template-mysql:latest
      IMAGE_INIT_DB: apitable/init-db:latest
      IMAGE_MINIO: minio/minio:RELEASE.2021-03-17T02-33-02Z
      IMAGE_MYSQL: mysql:8.0.29
      IMAGE_POLL_POLICY: always
      IMAGE_RABBITMQ: rabbitmq:3-management
      IMAGE_REDIS: redis:5
      IMAGE_REGISTRY: docker.io
      IMAGE_ROOM_SERVER: apitable/room-server:latest
      IMAGE_SOCKET_SERVER: apitable/socket-server:latest
      IMAGE_WEB_SERVER: apitable/web-server:latest
      MAIL_ENABLED: "false"
      MINIO_ACCESS_KEY: apitable
      MINIO_BUCKET: assets
      MINIO_ENDPOINT: http://minio:9000
      MINIO_SECRET_KEY: apitable@com
      MYSQL_DATABASE: apitable
      MYSQL_HOST: mysql
      MYSQL_PASSWORD: apitable@com
      MYSQL_PORT: "3306"
      MYSQL_ROOT_PASSWORD: apitable@com
      MYSQL_USERNAME: root
      NEST_GRPC_ADDRESS: static://room-server:3334
      NEST_GRPC_URL: room-server:3334
      OSS_CACHE_TYPE: minio
      OSS_ENABLED: "true"
      OSS_HOST: /assets
      OSS_TYPE: QNY1
      PUBLIC_URL: ""
      RABBITMQ_DEFAULT_PASS: fkJifev64y^sbxRl
      RABBITMQ_DEFAULT_USER: apitable-user
      RABBITMQ_HOST: rabbitmq
      RABBITMQ_PASSWORD: fkJifev64y^sbxRl
      RABBITMQ_PORT: "5672"
      RABBITMQ_USERNAME: apitable-user
      RABBITMQ_VHOST: /
      REDIS_DB: "0"
      REDIS_HOST: redis
      REDIS_PASSWORD: apitable@com
      REDIS_PORT: "6379"
      SERVER_DOMAIN: ""
      SMS_ENABLED: "false"
      SOCKET_DOMAIN: http://socket-server:3001/socket
      SOCKET_GRPC_URL: socket-server:3007
      SOCKET_RECONNECTION_ATTEMPTS: "10"
      SOCKET_RECONNECTION_DELAY: "500"
      SOCKET_TIMEOUT: "5000"
      SOCKET_URL: http://socket-server:3002
      SPRINGFOX_ENABLED: "false"
      TEMPLATE_PATH: ./static/web_build/index.html
      TEMPLATE_SPACE: spcNTxlv8Drra
      TIMEZONE: Asia/Singapore
      USE_CUSTOM_PUBLIC_FILES: "true"
      VK_ASSETS_LTD_URL: assets
    expose:
    - "8080"
    image: docker.io/apitable/web-server:latest
    networks:
      apitable: null
    pull_policy: always
    restart: always
networks:
  apitable:
    name: apitable_apitable
    driver: bridge

@networkhermit
Copy link
Collaborator

If it helps, if I start a bash shell in the apitable-mysql-1 container, I cannot use the username and password. However, if I just run mysql and do a show databases;, it shows this:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.04 sec)

I assume there should be an apitable database maybe? So maybe the database didn't initialize correctly?

What if you execute the following sql? It's peculiar that mysql don't initialize the root password.

use mysql;
select host from user where user='root';

@RobSeder
Copy link

I get this:

ERROR 1046 (3D000): No database selected

@networkhermit
Copy link
Collaborator

I think maybe you forget the use mysql; line.

@RobSeder
Copy link

Sorry, yes - my bad!

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select host from user where user='root';
+-----------+
| host      |
+-----------+
| localhost |
+-----------+
1 row in set (0.00 sec)

mysql>

@networkhermit
Copy link
Collaborator

I suspect there is something wrong during the first start of mysql, as in my clean setup the mysql will indeed create a database called apitable:

apitable-mysql-1  | 2022-12-27 11:09:37+08:00 [Note] [Entrypoint]: Creating database apitable

Please do the following command to re-initialize the mysql:

sudo rm -fr .data/mysql/
docker compose up -d mysql

# wait for the mysql to start, retry if ERROR 2003 (HY000): Can't connect to MySQL server on 'mysql:3306' (111)
docker compose exec -it mysql mysql -u root -h mysql -papitable@com mysql -e 'select host from user where user="root";'

@RobSeder
Copy link

Still same result. For that command, it says access denied for that IP address.

I've rebuilt a VM a few times now and it's been the same every time, starting from that install.sh file. I'm not doing anything out of the ordinary. How do other people on Ubuntu run this? I'm on 22.04 - is that OK? If not, what is a known-good version?

@networkhermit
Copy link
Collaborator

Still same result. For that command, it says access denied for that IP address.

I've rebuilt a VM a few times now and it's been the same every time, starting from that install.sh file. I'm not doing anything out of the ordinary. How do other people on Ubuntu run this? I'm on 22.04 - is that OK? If not, what is a known-good version?

As we use containers to run all the service, it is highly unlikely that it is os related. Let's do a clean setup one more time:

# tear down all running service
docker compose down -v

# make sure no container running
docker ps

# make sure to remove the mysql data directory
sudo rm -fr .data/mysql/

# re-initialize the mysql
docker compose up -d mysql

# wait for the mysql to start, retry if ERROR 2003 (HY000): Can't connect to MySQL server on 'mysql:3306' (111)
docker compose exec -it mysql mysql -u root -h mysql -papitable@com mysql -e 'select host from user where user="root";'

@networkhermit
Copy link
Collaborator

@RobSeder

hi, I just successfully setup the apitable using ubuntu 22.04. Feel free to join our https://discord.gg/TwNb9nfdBU for direct message.

$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.1 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
$ apt list docker-ce docker-compose-plugin
Listing... Done
docker-ce/jammy 5:20.10.22~3-0~ubuntu-jammy amd64 [upgradable from: 5:20.10.21~3-0~ubuntu-jammy]
docker-compose-plugin/jammy 2.14.1~ubuntu-jammy amd64 [upgradable from: 2.12.2~ubuntu-jammy]
$ docker compose exec -it mysql mysql -u root -h mysql -papitable@com mysql -e 'show databases; select host from user where user="root";'
WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
WARN[0000] The "UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "GID" variable is not set. Defaulting to a blank string.
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| apitable           |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
+-----------+
| host      |
+-----------+
| %         |
| localhost |
+-----------+

@mr-kelly mr-kelly added the help wanted Extra attention is needed label Dec 27, 2022
@RobSeder
Copy link

@networkhermit I did clean everything one more time. This time, one thing I did different was to do a docker compose pull first, then docker compose up. Now, everything works! I can log into the website, and I get no mySQL errors. Thanks for the assist

@networkhermit
Copy link
Collaborator

I'm glad you can login now. Feel free to create new bug report if you encounter something wrong.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Extra attention is needed question Further information is requested
Projects
Archived in project
Development

Successfully merging a pull request may close this issue.

5 participants