Setup:
- Hardware or environment you use: Google Cloud VM (2 vCPU, 4GB RAM)
- OS: Debian GNU/Linux 12 (bookworm) amd64 built on 20250415
- SeaTable Edition: Enterprise
- SeaTable Version (only necessary for self-hosted): Tried
seatable/seatable-enterprise:5.2.7
andseatable/seatable-enterprise:latest
- Installation Method: Manual Docker Compose (Single Node guide)
- Docker Version:
27.0.1
(Client & Server) - Docker Compose Version:
v2.25.1
Describe the Problem/Error/Question:
Hello SeaTable Community,
I am trying to install SeaTable Enterprise Edition following the official manual Docker Compose guide on a Google Cloud VM running Debian 12.
The installation process seems to complete the sudo docker compose up -d
command without errors related to port conflicts or initial configuration parsing. However, shortly after startup, the seatable-server
container becomes unhealthy
.
When trying to access the SeaTable web interface via the configured SEATABLE_SERVER_HOSTNAME
(https://seatabl******.online
in my case), the browser displays a 502 Bad Gateway
error.
The core issue appears to be the seatable-server
container failing its internal health checks.
Error Messages:
- Followed the manual installation guide: Created
/opt/seatable-compose
, downloaded files, generated passwords, configured.env
, placedseatable-license.txt
. - Corrected initial
.env
formatting error (#
missing on line 1). - Resolved port 80 conflict by removing previously installed Easypanel/Traefik Docker Swarm services (
sudo docker service rm ...
). - Verified system time using
date
- it is correct. - Verified the license file content using
cat /opt/seatable-compose/seatable-license.txt
- it shows valid details, includingExpiration = "2028-04-29"
. The license is definitely NOT expired. - Verified directory (
/opt/seatable-compose
) permissions aredrwxr-xr-x
(owned by root) and license file permissions are-rw-r--r--
. - Tried both
seatable/seatable-enterprise:5.2.7
andseatable/seatable-enterprise:latest
image tags. The problem persists with both versions. - Checked internal logs (
/opt/seatable/logs/init.log
viadocker exec
) - Found errors indicatingConnection refused
when trying to connect tohttp://127.0.0.1:8000/api2/ping/
. - Checked for other log files (
dtable-web.log
,controller.log
) inside/opt/seatable/logs/
viadocker exec
, but they are not being created, suggesting a very early startup failure.
EXAMPLE Error Messages:
Example of a code block for error messages
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
caddy lucaslorentz/caddy-docker-proxy:2.9.1-alpine "/bin/caddy docker-p…" caddy X minutes ago Up X minutes (healthy) ...
mariadb mariadb:11.4.3-noble "docker-entrypoint.s…" mariadb X minutes ago Up X minutes (healthy) ...
redis redis:7.2.7-bookworm "docker-entrypoint.s…" redis X minutes ago Up X minutes (healthy) ...
seatable-server seatable/seatable-enterprise:latest "/sbin/my_init -- /t…" seatable-server X minutes ago Up X minutes (unhealthy)
Relevant messages from sudo docker compose logs seatable-server
: (The log consistently ends like this after attempting startup, even with :latest
image)
seatable-server | *** Running /templates/enterpoint.sh...
seatable-server | 2025-05-05 XX:XX:XX Conf exists
seatable-server | 2025-05-05 XX:XX:XX Nginx ready
seatable-server | 2025-05-05 XX:XX:XX Updating CA certificates...
seatable-server | 2025-05-05 XX:XX:XX Start server
seatable-server |
seatable-server | SeaTable License Expired!
seatable-server |
seatable-server | 2025-05-05 XX:XX:XX For more startup information, please check the /opt/seatable/logs/init.log
seatable-server | 2025-05-05 XX:XX:XX This is an idle script (infinite loop) to keep the container running.
Error snippet from /opt/seatable/logs/init.log
(via docker exec
):
requests.exceptions.ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=8000): Max retries exceeded with url: /api2/ping/ (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x...>: Failed to establish a new connection: [Errno 111] Connection refused'))
.env
File Content:
# components to be used; IMPORTANT: there should be no space between the files names !
COMPOSE_FILE='caddy.yml,seatable-server.yml'
COMPOSE_PATH_SEPARATOR=','
# system settings
TIME_ZONE="America/Monterrey"
# seatable server url
SEATABLE_SERVER_HOSTNAME="seatable2.******.online" # DNS A record points correctly to server IP
SEATABLE_SERVER_PROTOCOL="https"
# initial web admin
SEATABLE_ADMIN_EMAIL="m@****" # Actual admin email # Masked
SEATABLE_ADMIN_PASSWORD="*****" # Masked
# database
SEATABLE_MYSQL_ROOT_PASSWORD="*****" # Masked
Despite the license file content showing Expiration = "2028-04-29"
, the server consistently fails to start with the misleading “License Expired!” message, apparently after failing to connect to its internal backend on port 8000. Other specific log files aren’t created.
Any ideas on what could be causing this or how to further diagnose why the internal backend isn’t starting?
Thank you again for your attention and kind help!