记录用docker部署nextcloud及配套mariadb、redis和持久化存储

使用docker compose便捷的部署nextcloud及其配套的mariadb和redis并实现数据持久存储在本地的办法

安装docker的教程在apt等各种源列表(持续更新),docker hub被禁,处理的办法在国内docker hub无法使用的解决办法

新的docker已经自带docker compose命令了,所以不需要再安装docker-compose,且需注意是docker空格compose而不是以前的-

docker compose基础命令如下:

1
2
3
4
5
# 指定配置文件并后台启动
docker compose -f 指定配置文件.yaml up -d

# 停止容器并删除容器
docker compose -f 指定配置文件.yaml down

nextcloud.yaml配置文件如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
services:
db:
image: mariadb:latest
container_name: nextcloud-db
restart: always
environment:
MYSQL_ROOT_PASSWORD: 设置你的数据库root密码
MYSQL_DATABASE: 设置你的数据库名
MYSQL_USER: 设置你的数据库用户名
MYSQL_PASSWORD: 设置你的数据库用户密码
volumes:
- /mnt/nextcloud/db:/var/lib/mysql
- 你的物理机路径:/var/lib/mysql # 这条是示例,该配置的作用是让数据库的所有文件持久存储到本地的该目录

redis:
image: redis:alpine
container_name: nextcloud-redis
restart: always

app:
image: nextcloud:latest
container_name: nextcloud-app
restart: always
ports:
- 80:80
environment:
MYSQL_HOST: db
MYSQL_DATABASE: 你的数据库名
MYSQL_USER: 你的数据库用户名
MYSQL_PASSWORD: 你的数据库用户密码
REDIS_HOST: redis
volumes:
- /mnt/nextcloud/data:/var/www/html
- 你的服务器路径:/var/www/html # 这条是示例,该配置的作用是让nextcloud的所有文件持久存储到本地的该目录
depends_on:
- db
- redis

crontab自动执行

1
2
3
4
5
# 每5分钟执行一次cron
*/5 * * * * docker exec -u www-data nextcloud-app php -f /var/www/html/cron.php

# 每天0点down掉容器然后拉取nextcloud的更新,再启动,然后执行命令行更新
0 0 * * * docker compose -f /mnt/docker-compose.yaml down && docker pull nextcloud && docker compose -f /mnt/docker-compose.yaml up -d && docker exec -it -u 33 nextcloud-app php occ upgrade