使用 Docker 搭建 Nextcloud
目录
- 说明
- 配置 Docker 仓库
- 安装 MySQL
- 安装 Redis
- 安装 nextcloud
- 初始化配置
- 优化
- 另外
说明
本文内容参考 GitHub官方文档 和 Docker Hub。
在安装 nextcloud 时选用 MySQL 和 Redis 作为数据库,没有使用默认的数据库。
配置 Docker 仓库
配置国内仓库地址提高下砸镜像速度,修改配置文件/etc/docker/daemon.json,没有就新建,添加如下配置(我这里配置了多个地址):
{
"registry-mirrors": [
"https://3laho3y3.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"https://mirror.ccs.tencentyun.com"
]
}
保存之后重启 docker
$ systemctl restart docker
安装 MySQL
拉取镜像
$ docker pull mysql
创建持久化数据目录,表示 mysql 运行数据放在这个目录下: /home/mysql/data
$ cd home
$ mkdir mysql
$ mkdir data
启动容器并指定持久化目录、指定root密码、端口映射
$ docker run --privileged=true --name mysql8 \
-v /home/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3306:3306 -d mysql
测试连接通过即可
安装 Redis
同样拉取镜像,创建持久化数据目录:/home/redis/data
如果需要 redis 配置文件可以通过以下命令获取:
$ wget -P /usr/local/redis http://download.redis.io/redis-stable/redis.conf
启动容器指定配置文件启动、持久化目录、密码
$ docker run -d --privileged=true -p 6379:6379 \
-v /home/redis/redis.conf:/etc/redis/redis.conf \
-v /home/redis/data:/data --name redis \
redis redis-server /etc/redis/redis.conf --appendonly yes --requirepass 'redis6379'
安装 nextcloud
$ docker run -d -p 8088:80 \
--name nextcloud \
--restart=always \
-v /home/nextcloud/html:/var/www/html \
-v /home/nextcloud/apps:/var/www/html/custom_apps \
-v /home/nextcloud/config:/var/www/html/config \
-v /home/nextcloud/data:/var/www/html/data \
-v /home/nextcloud/theme:/var/www/html/themes \
--link mysql8:mysql \
--link redis:redis \
nextcloud
参数 -v {映射到本地磁盘的目录}:{运行时数据的目录},这样重启容器数据不会丢失
参数 —link 连接到刚才安装的容器,可以将 mysql8 和 redis 作为主机名
初始化配置
通过 docker 启动后,在浏览器输入 http://ip:8088/ 进入初始设置界面
1、设置管理员账号和密码
2、配置数据库,选择 MySQL/MariaDB,分别输入:
- 用户名:我直接填的 root
- 密码:root 账号的密码
- 数据库名:nextcloud
- 主机:mysql8,因为我在 docker 启动命令中指定了 —link mysql8:mysql
3、点击完成即可
优化
在 config.php 配置文件中加入如下配置(对应安装时映射路径,文件在 /home/nextcloud/config 下)
'memcache.local' => '\OC\Memcache\Redis',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => 'redis',
'port' => 6379,
'password' => 'redis6379'
),
以上内容加在最后一行 ); 内容之前。
另外
使用 docker-compose 会更简洁方便些,在 docker-compose.yml 同级目录下执行
docker-compose up -d
docker-compose.yml 文件内容如下:
version: '2'
services:
db:
container_name: mysql
image: mysql
volumes:
- /home/mysql/data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: mysql数据库的密码
MYSQL_DATABASE: nextcloud
ports:
- "6379:6379"
restart: always
redis:
image: redis
container_name: redis
command: redis-server /etc/redis/redis.conf --appendonly yes --requirepass 'redis6379'
ports:
- "6379:6379"
volumes:
- /home/redis/data:/data
- /home/redis/redis.conf:/etc/redis/redis.conf
restart: always
app:
container_name: nextcloud_app
depends_on:
- redis
- db
image: nextcloud
volumes:
- /home/nextcloud/html:/var/www/html
- /home/nextcloud/apps:/var/www/html/custom_apps
- /home/nextcloud/config:/var/www/html/config
- /home/nextcloud/data:/var/www/html/data
links:
- redis
- db
ports:
- "8088:80"
restart: always
cron:
container_name: nextcloud_cron
image: nextcloud
links:
- redis
- db
volumes_from:
- app
user: www-data
entrypoint: |
bash -c 'bash -s <<EOF
trap "break;exit" SIGHUP SIGINT SIGTERM
while /bin/true; do
/usr/local/bin/php /var/www/html/cron.php
sleep 900
done
EOF'
restart: always
还没有评论,来说两句吧...