本指南详细介绍了使用 Docker Compose 部署 MoonTV 电影网站的全过程。该过程涉及设置两个主要服务:用于应用程序本身的 moontv-core 和用于数据库的 moontv-kvrocks ,并通过 Docker 网络将它们连接起来 。
步骤一:创建 docker-compose.yml 文件
本次部署的基础是 docker-compose.yml 文件 。该文件定义了运行 MoonTV 所需的服务、网络和卷。
配置包含两个主要服务 :
moontv-core:这是主应用程序服务,使用ghcr.io/moontechlab/lunatv:latest镜像 。它将主机的8095端口映射到容器内的3000端口 。moontv-kvrocks:这是数据库服务,使用apache/kvrocks镜像来存储数据 。它通过一个卷将数据持久化存储在主机上 。
以下是完整的 docker-compose.yml 配置内容:(2025-10-14 跟新,原 ghcr.io/moontechlab/lunatv:latest 不更新,后面更新的可用 ghcr.io/szemeng76/lunatv:latest 代替,或者自行查找其它源)
services:
moontv-core:
image: ghcr.io/moontechlab/lunatv:latest
container_name: moontv-core
restart: on-failure
ports:
- '8095:3000'
environment:
- USERNAME=用户名(管理员)
- PASSWORD=管理密码,不能太i暗淡
- NEXT_PUBLIC_STORAGE_TYPE=kvrocks
- KVROCKS_URL=redis://moontv-kvrocks:6666
- AUTH_TOKEN=ccd4edddc0789b370bda2abdadde3e06
networks:
- moontv-network
depends_on:
- moontv-kvrocks
moontv-kvrocks:
image: apache/kvrocks
container_name: moontv-kvrocks
restart: unless-stopped
volumes:
- /www/wwwroot/kvrocks-data:/var/lib/kvrocks
networks:
- moontv-network
networks:
moontv-network:
driver: bridge
volumes:
kvrocks-data:
关于环境变量的说明: 在部署之前,您必须将 USERNAME 和 PASSWORD 修改为您期望的管理员凭据,并确保密码足够强壮。
步骤二:准备主机环境
在启动容器之前,您需要在主机上为 kvrocks 的持久化数据创建一个目录,并在其中放置一个配置文件。
- 创建数据目录并设置权限:您必须在主机上创建
/www/wwwroot/kvrocks-data目录,并确保它具有读写权限 。 - 创建
kvrocks.conf文件:在/www/wwwroot/kvrocks-data目录内,创建一个名为kvrocks.conf的文件 。这个文件对kvrocks数据库的正常运行至关重要。
请将以下全部内容复制到您的 kvrocks.conf 文件中 [cite: 37-975]:
################################ GENERAL #####################################
bind 127.0.0.1
socket-fd -1
port 6666
timeout 0
workers 8
daemonize no
cluster-enabled no
repl-namespace-enabled no
persist-cluster-nodes-enabled yes
maxclients 10000
db-name change.me.db
dir /tmp/kvrocks
log-level info
log-retention-days -1
slave-read-only yes
slave-priority 100
replication-connect-timeout-ms 3100
replication-recv-timeout-ms 3200
tcp-backlog 511
master-use-repl-port no
use-rsid-psync no
slave-serve-stale-data yes
slave-empty-db-before-fullsync no
purge-backup-on-fullsync no
max-replication-mb 0
max-io-mb 0
enable-blob-cache no
max-db-size 0
max-backup-to-keep 1
max-backup-keep-hours 24
max-bitmap-to-string-mb 16
redis-cursor-compatible yes
json-max-nesting-depth 1024
json-storage-format json
txn-context-enabled no
################################# TLS ###################################
################################## SLOW LOG ###################################
slowlog-log-slower-than 100000
slowlog-max-len 128
slowlog-dump-logfile-level off
supervised no
################################# PERF LOG ###################################
profiling-sample-ratio 0
profiling-sample-record-max-len 256
profiling-sample-record-threshold-ms 100
################################# CRON ###################################
compaction-checker-cron * 0-7 * * *
################################ MIGRATE #####################################
migrate-type raw-key-value
migrate-speed 4096
migrate-pipeline-size 16
migrate-sequence-gap 10000
migrate-batch-size-kb 16
migrate-batch-rate-limit-mb 16
################################ ROCKSDB #####################################
rocksdb.block_cache_size 4096
rocksdb.block_cache_type lru
rocksdb.max_open_files 8096
rocksdb.write_buffer_size 64
rocksdb.target_file_size_base 128
rocksdb.max_write_buffer_number 4
rocksdb.min_write_buffer_number_to_merge 1
rocksdb.max_background_jobs 4
rocksdb.max_background_compactions -1
rocksdb.max_background_flushes -1
rocksdb.max_subcompactions 2
rocksdb.wal_compression no
rocksdb.max_total_wal_size 512
rocksdb.dump_malloc_stats yes
rocksdb.wal_ttl_seconds 10800
rocksdb.wal_size_limit_mb 16384
rocksdb.block_size 16384
rocksdb.cache_index_and_filter_blocks yes
rocksdb.compression snappy
rocksdb.compression_level 32767
rocksdb.compaction_readahead_size 2097152
rocksdb.compression_start_level 2
rocksdb.delayed_write_rate 0
rocksdb.enable_pipelined_write no
rocksdb.level0_slowdown_writes_trigger 20
rocksdb.level0_stop_writes_trigger 40
rocksdb.level0_file_num_compaction_trigger 4
rocksdb.stats_dump_period_sec 0
rocksdb.disable_auto_compactions no
rocksdb.enable_blob_files no
rocksdb.min_blob_size 4096
rocksdb.blob_file_size 268435456
rocksdb.enable_blob_garbage_collection yes
rocksdb.blob_garbage_collection_age_cutoff 25
rocksdb.level_compaction_dynamic_level_bytes yes
rocksdb.max_bytes_for_level_base 268435456
rocksdb.max_bytes_for_level_multiplier 10
rocksdb.read_options.async_io yes
rocksdb.write_options.sync no
rocksdb.write_options.disable_wal no
rocksdb.write_options.no_slowdown no
rocksdb.write_options.low_pri no
rocksdb.write_options.memtable_insert_hint_per_batch no
rocksdb.rate_limiter_auto_tuned yes
rocksdb.partition_filters yes
rocksdb.max_compaction_bytes 0
rocksdb.sst_file_delete_rate_bytes_per_sec 0
################################ NAMESPACE #####################################
namespace.test change.me
步骤三:启动 MoonTV 应用
当所有配置文件都准备就绪后,您就可以启动应用程序了。
-
拉取 Docker 镜像:进入包含
docker-compose.yml文件的目录,然后运行以下命令来下载所需的镜像 。docker-compose pull
-
启动服务:镜像拉取完成后,以分离模式(detached mode)启动服务 。
docker-compose up -d
运行此命令后,Docker 将会创建并启动 moontv-core 和 moontv-kvrocks 容器。现在,您可以通过在浏览器中访问 http://<您的服务器IP>:8095 来打开您的 MoonTV 实例了。
Comments