feat(nextcloud): add local nextcloud docker compose setup

This commit is contained in:
m1ngsama 2025-11-18 16:47:11 +08:00
parent 33ade46a99
commit 35dcacdc7c
3 changed files with 127 additions and 0 deletions

16
nextcloud/.env.example Normal file
View file

@ -0,0 +1,16 @@
# 时区设置
TZ=Asia/Shanghai
# Nextcloud 管理员账号(首次启动用于初始化)
NEXTCLOUD_ADMIN_USER=admin
NEXTCLOUD_ADMIN_PASSWORD=ChangeMe123!
NEXTCLOUD_TRUSTED_DOMAINS=localhost
# MariaDB 数据库配置
MYSQL_ROOT_PASSWORD=ChangeRoot123!
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud
MYSQL_PASSWORD=ChangeDb123!
# Redis 密码
REDIS_PASSWORD=ChangeRedis123!

40
nextcloud/README.md Normal file
View file

@ -0,0 +1,40 @@
# Nextcloud 本地存储中心
该目录提供一个可快速启动的 Nextcloud 本地私有云(包含 Nextcloud、MariaDB、Redis
## 目录结构
```
nextcloud/
├── compose.yaml # Docker Compose 配置
├── .env.example # 环境变量示例,请复制为 .env 后修改
└── README.md # 当前说明文档
```
## 使用步骤
1. 复制环境变量文件并按需修改:
```bash
cp .env.example .env
```
2. 启动服务:
```bash
docker compose up -d
```
3. 首次启动后访问 `http://localhost:8080`,使用 `.env` 中配置的管理员账号登录并完成初始化。
## 默认组件
- Nextcloud `nextcloud:stable-apache`(暴露端口 `8080`
- MariaDB 11持久化在 `nextcloud_db` 卷)
- Redis 7启用密码提升缓存性能
## 数据持久化
所有关键数据均挂载到命名卷,位于本地 Docker 数据目录,可根据需要调整为绑定宿主机路径:
- `nextcloud_html` / `nextcloud_data` / `nextcloud_config` / `nextcloud_apps`
- `nextcloud_db`
- `nextcloud_redis`
## 常用命令
- 查看日志:`docker compose logs -f nextcloud`
- 停止服务:`docker compose down`
- 备份数据库:`docker exec nextcloud-db mariadb-dump -unextcloud -p<密码> nextcloud > backup.sql`
根据需要可进一步扩展(例如反向代理、对象存储适配等)。

71
nextcloud/compose.yaml Normal file
View file

@ -0,0 +1,71 @@
version: "3.9"
services:
nextcloud:
image: nextcloud:stable-apache
container_name: nextcloud
restart: unless-stopped
depends_on:
- db
- redis
ports:
- "8080:80"
environment:
- TZ=${TZ:-Asia/Shanghai}
- NEXTCLOUD_ADMIN_USER=${NEXTCLOUD_ADMIN_USER:-admin}
- NEXTCLOUD_ADMIN_PASSWORD=${NEXTCLOUD_ADMIN_PASSWORD:-ChangeMe123!}
- NEXTCLOUD_TRUSTED_DOMAINS=${NEXTCLOUD_TRUSTED_DOMAINS:-localhost}
- MYSQL_HOST=db
- MYSQL_DATABASE=${MYSQL_DATABASE:-nextcloud}
- MYSQL_USER=${MYSQL_USER:-nextcloud}
- MYSQL_PASSWORD=${MYSQL_PASSWORD:-ChangeDb123!}
- REDIS_HOST=redis
- REDIS_HOST_PASSWORD=${REDIS_PASSWORD:-ChangeRedis123!}
volumes:
- nextcloud_html:/var/www/html
- nextcloud_data:/var/www/html/data
- nextcloud_config:/var/www/html/config
- nextcloud_apps:/var/www/html/custom_apps
networks:
- nextcloud-network
db:
image: mariadb:11
container_name: nextcloud-db
restart: unless-stopped
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb_read_only_compressed=OFF
environment:
- TZ=${TZ:-Asia/Shanghai}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-ChangeRoot123!}
- MYSQL_DATABASE=${MYSQL_DATABASE:-nextcloud}
- MYSQL_USER=${MYSQL_USER:-nextcloud}
- MYSQL_PASSWORD=${MYSQL_PASSWORD:-ChangeDb123!}
volumes:
- nextcloud_db:/var/lib/mysql
networks:
- nextcloud-network
redis:
image: redis:7-alpine
container_name: nextcloud-redis
restart: unless-stopped
command: ["redis-server", "--requirepass", "${REDIS_PASSWORD:-ChangeRedis123!}"]
environment:
- TZ=${TZ:-Asia/Shanghai}
- REDIS_PASSWORD=${REDIS_PASSWORD:-ChangeRedis123!}
volumes:
- nextcloud_redis:/data
networks:
- nextcloud-network
volumes:
nextcloud_html:
nextcloud_data:
nextcloud_config:
nextcloud_apps:
nextcloud_db:
nextcloud_redis:
networks:
nextcloud-network:
driver: bridge