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 加載配置文件,實現訪問控制


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM