Docker-compos部署nextcloud私有网盘

系统版本:centos 7.9

docker 版本:20.10.7

docker-compose 版本:1.29.2

 

1、docker环境部署:

常规动作关闭selinux

sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config && setenforce 0

注意:有些文档还提示需要关闭防火墙,但是通过实验发现,并不需要,具体原因,将在后面说明

 

安装docker,设置开机自启

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum makecache fast

yum install docker-ce -y

systemctl restart docker

systemctl enable docker

查看docker信息

docker version

配置docker国内镜像加速

创建或修改 /etc/docker/daemon.json 文件,修改为如下形式

{

"registry-mirrors": [

"http://hub-mirror.c.163.com",

"https://docker.mirrors.ustc.edu.cn"

]

}

 

重启docker服务

systemctl daemon-reload

systemctl restart docker

 

查看是否成功

docker info

 

配置docker-compose环境

curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-x86_64 > /usr/local/bin/docker-compose #直接从github下载可能失败,可自行下载完成后,进行上传#

chmod +x /usr/local/bin/docker-compose

ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

 

 

2、nextcloud的部署

前面已经将环境部署完成,因为是通过docker-compose进行部署,所以接下来是配置yml文件

创建docker-compose.yml 文件,内容如下:

version: '3'

 

services:

mysql:

image: mysql

container_name: mysql

restart: always

volumes:

- ./db:/var/lib/mysql

environment:

- MYSQL_ROOT_PASSWORD=配置mysql Root账户密码

     - MYSQL_USER=配置mysql的新账户

- MYSQL_PASSWORD=配置mysql新账户的密码

- MYSQL_DATABASE=配置nextcloud数据库

 

networks:

- nextcloud-net

 

nextcloud:

image: nextcloud

container_name: nextcloud

restart: always

ports:

- 8888:80

links:

- mysql

     - redis

volumes:

- ./data:/var/www/html

networks:

- nextcloud-net

 

redis:

image: redis:5.0.8

container_name: redis

volumes:

- ./redis/redis.conf:/usr/local/etc/redis/redis.conf

- ./redis/data:/data

command:

redis-server /usr/local/etc/redis/redis.conf

networks:

- nextcloud-net

 

networks:

nextcloud-net:

driver: bridge

 

创建存储目录,与redis所需的conf文件,

mkdir -p /nextcloud/redis

vim /nextcloud/redis/redis.conf

daemonize no

timeout 0

requirepass 123456

bind 0.0.0.0

port 6379

appendonly yes

dir /data

 

通过docker-compose部署nextcloud、MySQL与redis

docker-compose up -d

 

部署完成,查看容器状态

docker ps -a

 

然后通过宿主机的外网ip和端口访问nextcloud,对nextcloud进行相应配置,数据库选择mysql,输入相对应的信息

等nextcloud配置完成后,将会自动进行系统。

3、简单优化

增加redis缓存

进入nextcloud容器存储目录,修改config.php文件,在'memcache.local' => '\\OC\\Memcache\\APCu', 条目后面增加以下内容:

'memcache.distributed' => '\OC\Memcache\Redis',

'memcache.locking' => '\OC\Memcache\Redis',

'redis' => array(

'host' => 'redis',

'port' => 6379,

     'password' => '123456',

),

 

配置完成后,在web页面对nextclolud进行操作后,可在redis容器目录下面,看到生成appendonly.aof文件,说明缓存已经生效。

 

上传速度优化

通过docker exec -u www-data -it nextcloud bash 进入nextcloud容器, -u www-data表示通过www-data用户进入容器,如果直接登录容器,执行命令将提示权限问题,执行php occ config:app:set files max_chunk_size --value 0命令,解除块大小限制。

 

配置自动清理回收站

进入nextcloud容器存储目录,修改config.php文件,增加 'trashbin_retention_obligation' => 'auto,3', 条目。

auto,3即为超过3天自动清理

保存后等待下一次Cron生效

 

容器的外网访问控制

前面有讲,防火墙没有关闭,但是为什么nextclou所使用的8888端口还是可以访问,查看firewall规则可看未放行8888端口,是什么原因呢

因为docker的访问规则都是通过iptables实现,查看iptables规则可以发现有一个docker的链,docker直接在iptables上进行网络地址转换与端口开放。

那如果对docker进行访问控制呢,增加以下iptables规则,实现特定主机的访问权限

iptables -I DOCKER -p tcp --dport 80 -j DROP

iptables -I DOCKER -s 192.168.70.250 -p tcp --dport 80 -j ACCEPT

注意:服务器重启后,因iptables服务时, docker服务还未启动,所以DOCKER规则链还未创建,所以需要通过systemctl restart iptables或者iptables-restore < /etc/sysconfig/iptables 加载配置文件,实现访问控制

posted @ 2021-07-22 16:01  运维小菜鸟  阅读(2057)  评论(0编辑  收藏  举报