跳转到内容

附录 C 默认端口与配置文件路径

安装位置因安装方式而异,这里给最常见的。Docker 列指官方镜像内的路径。“—“表示没有或不适用。

工具 默认端口 配置文件(Linux) 配置文件(Windows) 配置文件(Docker 镜像内) 数据与日志
VS Code — ~/.config/Code/User/settings.json %APPDATA%\Code\User\settings.json — 工作区 .vscode/settings.json
Git — ~/.gitconfig,仓库 .git/config %USERPROFILE%\.gitconfig — —
SSH 22 ~/.ssh/config,/etc/ssh/sshd_config;自己的改动放 /etc/ssh/sshd_config.d/ %USERPROFILE%\.ssh\config — ~/.ssh/known_hosts;服务端登录日志 /var/log/auth.log
Docker 2375/2376(远程 API,默认不开) /etc/docker/daemon.json;Docker Desktop:~/.docker/daemon.json Docker Desktop 设置,或 %USERPROFILE%\.docker\daemon.json — /var/lib/docker
Nginx 80、443 /etc/nginx/nginx.conf,/etc/nginx/conf.d/;Ubuntu 包另有 /etc/nginx/sites-enabled/ conf\nginx.conf /etc/nginx/conf.d/default.conf 日志 /var/log/nginx/;网站根目录,镜像:/usr/share/nginx/html;Ubuntu 包:/var/www/html
Caddy 80、443、2019(管理 API) /etc/caddy/Caddyfile 同目录 Caddyfile /etc/caddy/Caddyfile 镜像:/data,/config;Ubuntu 包:/var/lib/caddy/.local/share/caddy,/var/lib/caddy/.config/caddy
PostgreSQL 5432 /etc/postgresql/<版本>/main/postgresql.conf data\postgresql.conf /var/lib/postgresql/data/postgresql.conf Linux 包:/var/lib/postgresql/<版本>/main,日志 /var/log/postgresql/;Windows:data\,日志 data\log\;镜像:/var/lib/postgresql/data,日志到标准错误(docker compose logs postgres)
MySQL 3306 /etc/mysql/my.cnf my.ini /etc/my.cnf /var/lib/mysql
SQLite — 无服务,单文件;命令行读 ~/.sqliterc %USERPROFILE%\.sqliterc — 数据库就是那个文件,WAL 模式下旁边另有 -wal、-shm 两个文件
MongoDB 27017 /etc/mongod.conf bin\mongod.cfg 用启动参数 Linux 包:/var/lib/mongodb,日志 /var/log/mongodb/;镜像和直接运行 mongod:/data/db
Redis 6379 /etc/redis/redis.conf — 默认无配置文件,用启动参数 /data(RDB、AOF)
RabbitMQ 5672、15672(管理界面) /etc/rabbitmq/rabbitmq.conf %APPDATA%\RabbitMQ\ /etc/rabbitmq/conf.d/ /var/lib/rabbitmq(随书 compose:卷 rabbitmqdata)
Kafka 9092(容器之间 19092,随书 compose) config/server.properties 同 /etc/kafka/docker/ 默认 /tmp/kraft-combined-logs;随书 compose 改为 /var/lib/kafka/data(卷 kafkadata)
ufw — /etc/default/ufw(默认策略);/etc/ufw/(ufw allow 写进 user.rules,用命令改) — — 日志 /var/log/ufw.log(Ubuntu)
cron — /etc/crontab,/etc/cron.d/;用户的 /var/spool/cron/crontabs/<用户>(只用 crontab -e 改) — — journalctl -u cron
systemd — 自己写的 /etc/systemd/system/<服务>.service;包装的 /usr/lib/systemd/system/;覆盖 /etc/systemd/system/<服务>.service.d/override.conf — — 服务输出进 journald,见下一行
journald — /etc/systemd/journald.conf — — /var/log/journal/(Ubuntu 默认持久保存),用 journalctl 看

把下面四个文件按这个目录结构放进同一个文件夹,在 compose/ 目录下运行 docker compose --profile <组> up -d 即可,各组的用法见第 13 章。

compose/
├── compose.yaml
├── nginx/
│ └── default.conf
├── caddy/
│ └── Caddyfile
└── html/
└── index.html

compose/compose.yaml:

# 本书全部服务类工具。按组启动:
# docker compose --profile cache up -d 只起 Redis
# docker compose --profile db up -d PostgreSQL、MySQL、MongoDB
# docker compose --profile mq up -d RabbitMQ、Kafka
# docker compose --profile web up -d Nginx、Caddy
# docker compose --profile all up -d 全部
# PostgreSQL、MySQL 口令 dev,Redis、MongoDB、Kafka 不设口令,RabbitMQ 为 guest/guest,只在本机用。
# 数据在命名卷里,docker compose --profile all down -v 会删掉。
# 端口只绑定 127.0.0.1,局域网里的其他机器连不上;要开放就去掉前缀。
name: devtools
services:
postgres:
image: postgres:17
profiles: [db, all]
environment:
POSTGRES_PASSWORD: dev
ports: ["127.0.0.1:5432:5432"]
volumes: ["pgdata:/var/lib/postgresql/data"]
mysql:
image: mysql:8.4
profiles: [db, all]
environment:
MYSQL_ROOT_PASSWORD: dev
ports: ["127.0.0.1:3306:3306"]
volumes: ["mysqldata:/var/lib/mysql"]
mongo:
image: mongo:8
profiles: [db, all]
ports: ["127.0.0.1:27017:27017"]
volumes: ["mongodata:/data/db"]
redis:
image: redis:8
profiles: [cache, all]
command: ["redis-server", "--appendonly", "yes", "--maxmemory", "256mb", "--maxmemory-policy", "allkeys-lru"]
ports: ["127.0.0.1:6379:6379"]
volumes: ["redisdata:/data"]
rabbitmq:
image: rabbitmq:4-management
profiles: [mq, all]
hostname: rabbitmq # 数据目录按节点名区分,主机名固定,重建容器后才找得到原来的数据
ports: ["127.0.0.1:5672:5672", "127.0.0.1:15672:15672"] # 15672 是管理界面,guest/guest
volumes: ["rabbitmqdata:/var/lib/rabbitmq"]
kafka:
image: apache/kafka:4.0.0
profiles: [mq, all]
# 单节点 KRaft(同一进程既是 broker 又是 controller)。两个地址:
# 容器之间连 kafka:19092,宿主机连 localhost:9092
environment:
KAFKA_NODE_ID: 1
KAFKA_PROCESS_ROLES: broker,controller
KAFKA_LISTENERS: PLAINTEXT://:19092,HOST://:9092,CONTROLLER://:9093
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:19092,HOST://localhost:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@localhost:9093
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_LOG_DIRS: /var/lib/kafka/data
ports: ["127.0.0.1:9092:9092"]
volumes: ["kafkadata:/var/lib/kafka/data"]
nginx:
image: nginx:stable-alpine
profiles: [web, all]
ports: ["127.0.0.1:8080:80"]
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
- ./html:/usr/share/nginx/html:ro
caddy:
image: caddy:2
profiles: [web, all]
ports: ["127.0.0.1:8081:80"]
volumes:
- ./caddy/Caddyfile:/etc/caddy/Caddyfile:ro
- ./html:/srv:ro
volumes:
pgdata:
mysqldata:
mongodata:
redisdata:
rabbitmqdata:
kafkadata:

compose/nginx/default.conf:

server {
listen 80;
root /usr/share/nginx/html; # 静态文件目录
index index.html;
}

compose/caddy/Caddyfile:

:80 {
root * /srv
file_server
}

compose/html/index.html:

<!doctype html>
<meta charset="utf-8">
<title>常见开发工具速查 · 随书服务</title>
<p>看到这一页,说明 Web 服务器已经跑起来了。</p>