知识关系

所属体系: 数据中心与基础设施 / 容器与镜像体系 主题节点: 记录用docker部署nextcloud及配套mariadb、redis和持久化存储 推荐前置: 国内docker hub无法使用的解决办法 相关主题: apt等各种源列表(持续更新) 原始来源: source/_posts/记录用docker部署nextcloud及配套mariadb、redis和持久化存储.md 从旧博客迁移;已按知识图谱结构重新归档。


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

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

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

docker compose基础命令如下:

# 指定配置文件并后台启动
docker compose -f 指定配置文件.yaml up -d
 
# 停止容器并删除容器
docker compose -f 指定配置文件.yaml down

nextcloud.yaml配置文件如下

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自动执行

# 每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