Setup SeaTicket Server¶
Prerequisites¶
Install Docker and Docker Compose by following the official Docker installation guide. SeaTicket stores persistent application, database, SeaDB, SeaSearch, and Caddy data under /opt by default.
Prepare an S3-compatible storage service before deployment. Create the following buckets and obtain credentials with read and write access to all of them:
- A bucket for uploaded files (
S3_FILE_BUCKET). - A bucket for web crawl data (
S3_WEB_CRAWL_BUCKET). - A bucket for SeaSearch data (
S3_SEASEARCH_BUCKET).
You will configure the S3 endpoint, access key ID, secret access key, and bucket names in .env.
Download Deployment Files¶
SeaTicket uses .env and Docker Compose files from the same directory. Download the standard deployment files:
mkdir -p /opt/seaticket/seaticket-data/conf
cd /opt/seaticket
wget -O .env https://manual.seaticket.ai/0.9/repo/docker/env
wget https://manual.seaticket.ai/0.9/repo/docker/caddy.yml
wget https://manual.seaticket.ai/0.9/repo/docker/seadb.yml
wget https://manual.seaticket.ai/0.9/repo/docker/seaqa-web.yml
wget https://manual.seaticket.ai/0.9/repo/docker/seaqa-ai.yml
wget https://manual.seaticket.ai/0.9/repo/docker/seaqa-events.yml
wget https://manual.seaticket.ai/0.9/repo/docker/seaqa-indexer.yml
wget https://manual.seaticket.ai/0.9/repo/docker/seasearch.yml
wget -O seaticket-data/conf/seaticket_config.yaml https://manual.seaticket.ai/0.9/repo/docker/seaticket_config.yaml
Configure .env¶
Edit /opt/seaticket/.env. For a standard deployment, change only the required settings below and leave the remaining template values at their defaults.
Required Settings¶
| Variable | Description | Value |
|---|---|---|
SEATICKET_SERVER_HOSTNAME |
Public hostname or domain of the SeaTicket server. | Required |
JWT_PRIVATE_KEY |
Random string of at least 32 characters. Generate with pwgen -s 40 1. |
Required |
SECRET_KEY |
Random string of at least 32 characters. Back it up and do not change it after deployment. | Required |
MYSQL_DB_PASSWORD |
Password for the SeaTicket MariaDB user. | Required |
INIT_SEATICKET_MYSQL_ROOT_PASSWORD |
Password for the bundled MariaDB root user. |
Required on first deployment only |
INIT_SEATICKET_TEAM_ADMIN_EMAIL |
Email address for the first SeaTicket team administrator. | Required on first deployment only |
INIT_SEATICKET_TEAM_ADMIN_PASSWORD |
Password for the first SeaTicket team administrator. | Required on first deployment only |
SEADB_USERNAME |
SeaDB API username. When empty, the first team administrator email is used. | Optional |
SEADB_PASSWORD |
SeaDB API password. When empty, the first team administrator password is used. | Optional |
S3_HOST |
S3-compatible storage endpoint. | Required |
S3_KEY_ID |
S3 access key ID. | Required |
S3_SECRET_KEY |
S3 secret access key. | Required |
S3_FILE_BUCKET |
S3 bucket for uploaded files. | Required |
S3_WEB_CRAWL_BUCKET |
S3 bucket for web crawl data. | Required |
S3_SEASEARCH_BUCKET |
S3 bucket for SeaSearch data. | Required |
SEASEARCH_TOKEN |
Base64 authorization token for the SeaSearch account. | Required |
By default, the first SeaSearch account uses the first team administrator credentials. Generate the token after setting INIT_SEATICKET_TEAM_ADMIN_EMAIL and INIT_SEATICKET_TEAM_ADMIN_PASSWORD:
echo -n 'INIT_SEATICKET_TEAM_ADMIN_EMAIL:INIT_SEATICKET_TEAM_ADMIN_PASSWORD' | base64
Replace the placeholders in the command with their actual values and assign the result to SEASEARCH_TOKEN.
Common Optional Settings¶
| Variable | Description | Default |
|---|---|---|
SEATICKET_SERVER_PROTOCOL |
Public server protocol: http or https. |
http |
TIME_ZONE |
Time zone used by containers. | UTC |
INIT_SEATICKET_TEAM_NAME |
Name of the first SeaTicket team. | SeaTicket |
ENABLE_NOTIFICATION_SERVER |
Enable the WebSocket notification service. | false |
LOG_TO_STDOUT |
Write component logs to container standard output. | false |
Database Settings¶
The standard Compose deployment includes MariaDB and initializes it automatically. Do not create the database, database user, or tables manually.
| Variable | Description | Default |
|---|---|---|
MYSQL_DB_HOST |
Bundled MariaDB service hostname. | db |
MYSQL_DB_PORT |
MariaDB port. | 3306 |
MYSQL_DB_USER |
SeaTicket database user. | seaticket |
MYSQL_DB_NAME |
SeaTicket database name. | seaticket_db |
On first startup, SeaTicket creates the database and user, then imports the schema. With the default persistent SEATICKET_MYSQL_VOLUME, later restarts and image upgrades do not re-import the schema. Keep both database passwords backed up.
SeaDB Settings¶
On first startup, SeaDB creates its first administrator from SEADB_USERNAME and SEADB_PASSWORD. When either variable is empty, the standard Compose deployment uses INIT_SEATICKET_TEAM_ADMIN_EMAIL and INIT_SEATICKET_TEAM_ADMIN_PASSWORD instead. SeaTicket services use these credentials with HTTP Basic authentication to access SeaDB.
JWT_PRIVATE_KEY is required by the SeaDB service but is not an API access token. For production deployments, set a dedicated SEADB_USERNAME and SEADB_PASSWORD rather than reusing the first team administrator credentials.
Cache Settings¶
The standard deployment includes Redis. No changes are required for normal use.
| Variable | Description | Default |
|---|---|---|
REDIS_HOST |
Bundled Redis service hostname. | redis |
REDIS_PORT |
Redis port. | 6379 |
REDIS_PASSWORD |
Redis password. | (none) |
S3 Storage Settings¶
seaqa-web, the indexer, and SeaSearch share the S3 credentials and endpoint configured above. Keep S3_AWS_REGION, S3_USE_V4_SIGNATURE, and S3_PATH_STYLE_REQUEST at their defaults unless required by the storage provider.
SeaSearch Settings¶
| Variable | Description | Default |
|---|---|---|
SEASEARCH_URL |
SeaSearch URL reachable from SeaTicket services. | http://seasearch:4080 |
SEASEARCH_TOKEN |
Base64 authorization token for the SeaSearch API. | Required |
INIT_SS_ADMIN_USER |
Optional separate initial SeaSearch account. | First team administrator email |
INIT_SS_ADMIN_PASSWORD |
Optional separate initial SeaSearch account password. | First team administrator password |
When both INIT_SS_ADMIN_USER and INIT_SS_ADMIN_PASSWORD are set, SeaSearch uses that separate account. In this case, generate SEASEARCH_TOKEN from those values instead.
Optional Extensions¶
The template includes the notification service but does not enable it by default. See Setup Notification Server to enable it.
Configure seaticket_config.yaml¶
Configure LLM models and other application settings in /opt/seaticket/seaticket-data/conf/seaticket_config.yaml. See SeaTicket YAML Configuration for details.
Start SeaTicket¶
Run Docker Compose from /opt/seaticket:
docker compose up -d
On the first deployment, follow initialization progress:
docker compose logs -f seaqa-web
SeaTicket waits for MariaDB and SeaDB, initializes MariaDB, initializes SeaDB template tables, then creates the first team, its administrator, and that administrator's initial workspace. It does not create a system administrator. Sign in with INIT_SEATICKET_TEAM_ADMIN_EMAIL and INIT_SEATICKET_TEAM_ADMIN_PASSWORD to use SeaTicket.
System administrators are optional maintenance accounts. See Account Management when you need to create one.
Directory Structure¶
/opt/seadb-data¶
/opt/seadb-data stores SeaDB data and logs.
/opt/seaticket/seaticket-data¶
/opt/seaticket/seaticket-data stores SeaTicket configuration, logs, and persistent application data.
conf: SeaTicket configuration files.logs: SeaTicket logs, includingseaqa-web.log.seaqa-web-data: Avatar files and custom media.
Find Logs¶
To monitor service logs from the deployment directory:
docker compose logs --follow
docker compose logs --follow seaqa-web
SeaTicket logs are stored under /shared/logs in the container and /opt/seaticket/seaticket-data/logs on the host by default.
To monitor all SeaTicket log files on the host:
sudo tail -f $(find /opt/seaticket/seaticket-data/logs/ -type f -name '*.log' 2>/dev/null)