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