先安装Docker,参考 https://blog.csdn.net/flyhorstar/article/details/87599497

安装docker-compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

不要忘记,把版本号换成最新的版本。查看最新版本:https://github.com/docker/compose/releases

配置docker-compose.ymal文件

docker-compose.yml内容如下(配置文件格式要求很严,不能随便动每一行的空格不能少也不能多):

注意:我的nextcloud用的是外置数据库,不是用的容器的,下面这个配置文件中不包括数据库。

services:
  
  nginx:
    container_name: nginx
    hostname: nginx
    image: nginx:latest
    ports:
      - 80:80
      - 443:443
    networks:
      - cloud_net
    restart: always
    volumes:
      - /docker/nextcloud:/usr/share/nginx/html
      - /docker/nginx:/etc/nginx
      - /docker/certs:/etc/certs
      - /docker/nginx/log:/var/log/nginx

  nextcloud_web:
    image: nextcloud:apache
    container_name: nextcloud_web
    hostname: nextcloud_web
    depends_on:
      - redis
    environment:
      - UID=1000
      - GID=1000
      - UPLOAD_MAX_SIZE=10G
      - APC_SHM_SIZE=128M
      - OPCACHE_MEM_SIZE=128
      - CRON_PERIOD=15m
      - TZ=Aisa/Shanghai
      - DOMAIN=你的域名
      - DB_TYPE=mysql
      - DB_NAME=你的数据库名
      - DB_USER=你的数据库用户名
      - DB_PASSWORD=你的数据库密码
      - DB_HOST=nextcloud-db
    ports:
      - 9000:80/tcp
    networks:
      - cloud_net
    volumes:
      - /docker/nextcloud:/var/www/html

    restart: always



  redis:
    image: redis:alpine
    container_name: redis
    hostname: redis
    restart: always
    networks:
      - cloud_net

    expose:
      - 6379
    restart: always

  onlyoffice:
    image: onlyoffice/documentserver
    container_name: onlyoffice
    hostname: onlyoffice
    environment:
      - REDIS_SERVER_HOST=redis
      - REDIS_SERVER_PORT=6379
    volumes:
      - /docker/onlyoffice/data:/var/www/onlyoffice/Data
      - /docker/onlyoffice/logs:/var/log/onlyoffice
    restart: always
    ports:
      - 9001:80/tcp
    networks:
      - cloud_net

networks:
  cloud_net:

如果你打算数据库也要在容器中,请参考下面的配置文件:

version: '3'
services:
  nextcloud:
    image: nextcloud:apache
    container_name: nextcloud_web
    depends_on:
      - redis
    environment:
      - UID=1000
      - GID=1000
      - UPLOAD_MAX_SIZE=10G
      - APC_SHM_SIZE=128M
      - OPCACHE_MEM_SIZE=128
      - CRON_PERIOD=15m
      - TZ=Aisa/Shanghai
      - DOMAIN=你的域名
      - DB_TYPE=mysql
      - DB_NAME=你的数据库名
      - DB_USER=你的数据库用户名
      - DB_PASSWORD=你的数据库密码
      - DB_HOST=nextcloud-db
    volumes:
       - /docker/nextcloud:/var/www/html
    expose:
      - 7009
    ports:
      - 7009:80/tcp
    restart: always

  redis:
    image: redis:alpine
    container_name: redis
    restart: always
    expose:
      - 6379
    restart: always

  onlyoffice:
    image: onlyoffice/documentserver
    container_name: onlyoffice
    hostname: onlyoffice
    environment:
      - REDIS_SERVER_HOST=redis
      - REDIS_SERVER_PORT=6379
    volumes:
      - /docker/onlyoffice/data:/var/www/onlyoffice/Data
      - /docker/onlyoffice/logs:/var/log/onlyoffice
    restart: always
    expose:
      - 9000
      - 9001
    ports:
      - 9000:80
      - 9001:443
    links:
      - db


  db:
    image: mariadb
    restart: always
    ports:
      -3306:3306
    volumes:
      - /docker/mariadb/db:/var/lib/mysql
    environment:
      - MYSQL_DATABASE=你的数据库名
      - MYSQL_ROOT_PASSWORD=你的数据库root用户的密码
      - MYSQL_USER=你的数据库用户名
      - MYSQL_PASSWORD=你的数据库密码

注:

  1. volumes,作用是,将宿主机的目录挂载到docker容器中,这样操作文件时,不用登录docker容器了,直接在宿主机操作就可以了。
  2. 如果你使用的是windows版本的docker, 挂载目录格式为:
 volumes:
       - d:/docker/nextcloud:/var/www/html

其中d盘为共享的目录。

创建和启动容器:

在docker-compose.yml文件所在目录,运行以下命令:
docker-compose up -d
如果要启动具体的容器:docker-compose up -d 容器名

命令完成后,就可以用http://宿主机IP:7009来访问nextcloud了。

如果运行docker-compose,提示权限不够,解决方法:
chmod +x /usr/local/bin/docker-compose

配置数据库

我这里使用的是外置数据库。

  1. 进入mysql:
    mysql -u root -p
  2. 建立数据库
    create database nextcloud;
  3. 建立数据库用户
    create user '你的数据库用户名'@'%' identified by '你的数据库密码';
  4. 将数据库用户与数据库关联起来,并允许所有IP访问此数据库
    GRANT ALL PRIVILEGES ON 你的数据库用户名 TO '你的数据库用户名@'%' IDENTIFIED BY '你的数据库密码' WITH GRANT OPTION;
  5. 刷新权限信息
    flush privileges;

参数解释:

  1. nextcloud,代表对这个数据库有效,如果换成*.* ,代表对任意数据库任意表有效
  2. ‘%’ 允许任意IP访问数据库,如果换成’localhost’代表只允许本机访问

配置redis

如果doker-compose.yml添加了redis服务,需要编辑nextcloud的php配置文件来启用服务,配置文件路径是/docker/nextcloud/config/config.php

  'memcache.local' => '\OC\Memcache\Redis',
  'memcache.distributed' => '\OC\Memcache\Redis',
  'memcache.locking' => '\OC\Memcache\Redis',
  'redis' => array(
     'host' => 'redis',  #如果是在本机就是localhost,如果是docker,要和Redis的名一致
     'port' => 6379,
     ),
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐