赞
踩
我的nextcloud原来是部署在物理机上的,并且是通过宝塔直接安装的,那么他的很多依赖软件的安装就不那么好管控,比如nextcloud本身依赖的软件还有:mysql、redis、nginx等,它们的文件路径都不好找,并且宝塔部署的nextcloud现在使用不了了,问题排查过程十分复杂,所以我决定不修复了,直接将nextcloud进行迁移,使用容器的方式重新部署安装,并将原来的数据恢复过来。
经过之前gitlab的迁移,我发现服务的迁移过程大致可以分为一下几个步骤:
新起的容器都放在172.16.10.130这台服务器上
我是通过docker-compose的方式启动一个新的nextcloud的容器的,yml文件如下
vim docker-compose.yaml cat docker-compose.yaml version: '3' services: nextcloud: image: nextcloud container_name: "nextcloud" restart: always environment: - VERDACCIO_PORT=80 ports: - "8080:80" volumes: - "/home/docker/nextcloud/nextcloud:/var/www/html/" docker-compose up -d
在服务器上起一个mysql的容器,并且通过mysqldump命令将原来物理机上安装的mysql数据备份到容器里
起mysql的容器,由于原来物理机上使用的mysql是mariadb10.4的版本,所以新的容器上我们使用相同的版本
vim docker-compose.yaml
cat docker-compose.yaml
version: '3'
services:
mysql:
image: mariadb:10.4
container_name: "mysql"
restart: "always"
environment:
- VERDACCIO_PORT=3306
- MYSQL_ROOT_PASSWORD=123456
ports:
- "3306:3306"
docker-compose up -d
在原来物理机上打包原始nextcloud的用户信息数据(存放在mysql表里)
# nextcloud的数据存放在原来物理机上mysql的cloud_easy数据库中,将它打包放到一个文件夹中
sudo mysqldump -ucloud_easy -p123456 -h127.0.0.1 --databases cloud_easy >/home/xieshan/nextcloud.sql
# 将打包好的文件复制到要起容器所在的服务器上
sudo scp nextcloud.sql docker@172.16.10.130:/home/docker/mysql
在新起的mysql容器上恢复mysqldump打包的数据
# 执行恢复数据之前,需要先吧mysqldump的备份包复制到mysql容器中,并且到mysql数据库中去创建原来物理机上相应的用户跟相应的表 docker cp nextcloud.sql mysql:/tmp #将nextcloud.sql复制到容器中的/tmp目录下 docker exec -it mysql /bin/bash #进入到mysql容器内部 mysql -uroot -p123456 #进入到mysql数据库内部 MariaDB [(none)]> create user 'cloud_easy'@'localhost' identified by '123456'; #创建用户 Query OK, 0 rows affected (0.002 sec) MariaDB [(none)]> create database cloud_easy; #创建数据库 Query OK, 1 row affected (0.001 sec) MariaDB [(none)]> grant all on cloud_easy.* to 'cloud_easy'@'%' identified by '123456' with grant option; #授权 Query OK, 0 rows affected (0.003 sec) FLUSH PRIVILEGES; MariaDB [(none)]> exit #退出数据库,回到mysql容器内部 Bye cd /tmp mysql -ucloud_easy -p123456 cloud_easy < nextcloud.sql #恢复数据 exit #退出容器,回到130服务器上
在拷贝data数据之前,先去到web界面上访问172.16.10.130:8080,然后配置一个root用户,然后配置登录进去就OK了
mysql是一个关系型数据库,里面没有存到具体的文件,而是一个键值映射,原来物理机上真正存放具体文件的目录是/data/www/cloud.easycomputation.com/data,将这个文件夹拷贝到130上nextcloud容器的/var/www/html/data下面
原来物理机上
sudo scp -r ./data root@172.16.10.130:/home/docker/nextcloud/nextcloud/
然后迁移就差不多完成了,去到web界面上访问192.168.0.130:8080,配置登录进去就算成功了
由于nextcloud使用起来很慢,经常卡顿,所以决定增加一个redis缓存,同样使用docker容器来部署Redis,docker部署的Redis本身是没有redis.conf文件的,所以需要自己在网上找一个redis的配置文件,然后映射进去(记得配置log的文件地址)
vim docker-compose.yaml cat docker-comppose.yaml version: '3' services: redis: image: redis container_name: "redis" restart: "always" environment: - VERDACCIO_PORT=6379 ports: - "6379:6379" volumes: - ./redis.conf:/etc/redis.conf - ./redis.log:/var/log/redis.log - ./data:/data docker-compose up -d
启动了redis之后再使redis和nextcloud联动起来,需要修改nextcloud的配置文件config.php
vim config.php
'memcache.local' => '\\OC\\Memcache\\APCu', #找到文件中的这一行,然后增加下面几行
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => '172.16.10.130',
'port' => 6379,
),
docker restart nextcloud #重启nextcloud
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。