说明
本文内容参考 GitHub官方文档 和 Docker Hub。
在安装 nextcloud 时选用 MySQL 和 Redis 作为数据库,没有使用默认的数据库。
配置 Docker 仓库
配置国内仓库地址提高下砸镜像速度,修改配置文件/etc/docker/daemon.json,没有就新建,添加如下配置(我这里配置了多个地址):
1 2
| {"registry-mirrors": ["https://3laho3y3.mirror.aliyuncs.com","https://registry.docker-cn.com","https://mirror.ccs.tencentyun.com"] }
|
保存之后重启 docker
1
| $ systemctl restart docker
|
安装 MySQL
拉取镜像
创建持久化数据目录,表示 mysql 运行数据放在这个目录下: /home/mysql/data
1 2 3
| $ cd home $ mkdir mysql $ mkdir data
|
启动容器并指定持久化目录、指定root密码、端口映射
1 2 3 4 5 6 7 8 9 10 11
| $ docker run -d \ --name nextcloud_db \ --privileged=true \ --name mysql \ -v /home/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=10130331Nxl \ -e MYSQL_USER=nextcloud \ #新增用户名 -e MYSQL_PASSWORD=10130331Nxl \ #新增用户密码 -e MYSQL_DATABASE=nextcloud \ #新增数据库表 -p 3306:3306 \ mysql:tag
|
测试连接通过即可
安装 Redis
同样拉取镜像,创建持久化数据目录:/home/redis/data
如果需要 redis 配置文件可以通过以下命令获取:
1
| $ wget -P /usr/local/redis http://download.redis.io/redis-stable/redis.conf
|
启动容器指定配置文件启动、持久化目录、密码
1 2 3 4 5 6 7
| $ docker run -d \ --name nextcloud_redis \ --privileged=true \ -p 6379:6379 \ -v /home/redis/redis.conf:/etc/redis/redis.conf \ -v /home/redis/data:/data --name redis \ redis:latest redis-server --requirepass 123456 --appendonly yes #requirepass 123456设置密码
|
安装 nextcloud
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| $ docker run -d \ --name nextcloud \ --restart=always \ --privileged=true \ -v /home/nextcloud:/var/www/html \ -e PUID=1000 \ -e PGID=1000 \ -e MYSQL_PASSWORD=10130331Nxl \ -e MYSQL_DATABASE=nextcloud \ -e MYSQL_USER=nextcloud \ -e MYSQL_HOST=nextcloud_db \ -e TZ=Asia/Shanghai \ --link nextcloud_db \ --link nextcloud_redis \ -p 9000:80 \ nextcloud:tag
|
参数 -v {映射到本地磁盘的目录}:{运行时数据的目录},这样重启容器数据不会丢失
参数 –link 连接到刚才安装的容器,可以将 mysql8 和 redis 作为主机名
初始化配置
通过 docker 启动后,在浏览器输入 http://ip:9000/ 进入初始设置界面
1、设置管理员账号和密码
2、配置数据库,选择 MySQL/MariaDB,分别输入:
- 用户名:我直接填的 root
- 密码:root 账号的密码
- 数据库名:nextcloud
- 主机:mysql8,因为我在 docker 启动命令中指定了 –link mysql8:mysql
3、点击完成即可
优化
在 config.php 配置文件中加入如下配置(对应安装时映射路径,文件在 /home/nextcloud/config 下)
1 2 3 4 5 6
| 'memcache.local' => '\OC\Memcache\Redis', 'memcache.distributed' => '\OC\Memcache\Redis', 'memcache.locking' => '\OC\Memcache\Redis', 'redis' => array('host' => 'redis', 'port' => 6379, 'password' => '123456',
|
以上内容加在最后一行 ); 内容之前。
另外
使用 docker-compose 会更简洁方便些,在 docker-compose.yml 同级目录下执行
docker-compose.yml 文件内容如下:
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 38 39 40 41
| version: '2'
#volumes: #nextcloud: #db:
services: db: image: mariadb:10.5 restart: always command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW networks: - nextcloud_netbridge volumes: - /nextcloud/db:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=123456 - MYSQL_PASSWORD=nextcloud - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud
app: image: nextcloud restart: always ports: - 80:80 networks: - nextcloud_netbridge links: - db volumes: - /nextcloud/app:/var/www/html environment: - MYSQL_PASSWORD=nextcloud - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - MYSQL_HOST=db
networks: nextcloud_netbridge: driver: bridge
|
解决自检错误
解决:”Strict-Transport-Security” HTTP 头未设为至少 “15552000” 秒。为了提高安全性,建议启用 HSTS,参考步骤见 安全小贴士 ↗
1
| vim /etc/apache2/sites-available/000-default.conf
|
1 2 3
| <IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15552000; preload" </IfModule>
|
解决:您的网页服务器未正确设置以解析“/.well-known/caldav”。更多信息请参见文档↗。您的网页服务器未正确设置以解析“/.well-known/carddav”。更多信息请参见文档↗。
1 2
| RewriteRule ^\.well-known/carddav http: RewriteRule ^\.well-known/caldav http:
|
解决:反向代理头部配置错误,或者您正在通过可信的代理访问 Nextcloud。如果您不是通过可信代理访问 Nextcloud,那这是一个安全问题,它可能允许攻击者通过伪装其IP地址以访问 Nextcloud。更多信息请查看文档↗。
1
| 'trusted_proxies' => ['nginx-proxy_app_1','nginx-proxy_app_2'],
|
- 您正通过安全连接访问您的实例,然而您的实例正生成不安全的 URL。这很可能意味着您位于反向代理的后面,覆盖的配置变量没有正确设置。可以阅读有关此问题的文档页 ↗
1 2 3 4 5 6 7
| 'trusted_proxies' => array ( '192.168.2.1', '192.168.2.3', ), 'overwritehost' => 'sjkhsl.fun:9000', 'overwriteprotocol' => 'https',
|
解决:您的安装没有设置默认的电话区域。这对验证个人资料页面中缺少国家代码的电话号码而言是必需的。要允许没有国家代码的电话号码,请添加相应的“default_phone_region”到您的配置文件中。允许的国家和地区请参阅 ISO 3166-1 code ↗。
1
| 'default_phone_region' => 'CN',
|
解决:数据库被用于事务文件锁。为了增强性能,请设置memcache(如果可用)。获取更多信息请参见文档↗。
1
| 'memcache.locking' => '\\OC\\Memcache\\APCu',
|
解决超时60 秒
进入容器
vi lib/private/App/AppStore/Fetcher/Fetcher.php #找到 options = 找到’timeout’ => 60, 改成600 秒 10分钟 #保存退出
解决onlyoffice连接问题
1 2 3 4 5 6
| 'onlyoffice => array ( "jwt_secret" => "secret",#修改,如果跟你不一样 "jwt_header" => "AuthorizationJwt", 'verify_peer_off' => true, ),
|