windows server 2012r2 用docker搭建nextcloud,解决文件共享0770问题、https访问

本文只叙述在此环境下有坑的地方,其他细节或其他搭建环境网上资料胜多,可移步搜索。

  1. windows server 2012r2如何安装docker

不可直接安装,只有win10才可以。只能安装docker toolbox来实现同样的功能。docker toolbox也需要cpu支持虚拟化。该工具相当于在系统中安装了virtualbox虚拟机,然后在虚拟机中装的docker。所以安装完后会有三个软件,一个是虚拟机,一个管理docker的kitematic,一个docker的命令行工具。

安装完毕后,点docker quickstart,即可自动配置好虚拟机和docker。配置好的虚拟机可在vm virtualbox里管理。

2.docker如何安装nextcloud

可在docker quickstart那个命令工具里执行,但是不能粘贴不好用,一般用powershell或ssh连接,要长期管理还得外网ssh。

第一步:在这些终端中执行docker pull nextcloud。要搜索不同的版本可用docker search nextcloud。这样就把nextcloud的镜像下载下来了,可使用docker images命令查看。

第二步:启动容器。镜像启动了就叫容器了,有人比作类实例化。启动命令:docker run -d --restart=always --name next -p 86:80 -p 443:443 -v /root/nextcloud:/data next

这里要注意这些参数,很多文章光是写了不说清楚,会导致后续出问题。restart always就是失败了一直重启,不是关键。--name是镜像的名字,就是上一步pull下来的。-p很重要,是容器对外暴露的端口,这里有两个,容器的80和443都暴露,因为要用https。 -v 是指定容器和宿主机的文件夹,经过实践主要是用于nextcloud的数据存放位置的设置。相当于把容器里的文件夹和宿主机的对应起来。/root/nextcloud说明在宿主机中用此文件夹来存nextcloud的数据,:后面的/data是把宿主机文件夹映射到容器的/data文件夹。这样数据就好管理了。

第三步:设置端口转发。如果是linux直接装就不存在了,本文是windows server装,有虚拟机,所以要端口转发,和vm的差不多。打开virtualbox,在虚拟机的设置里。

第四步:访问nextcloud,进行安装。安装要注意存储数据的路径和数据库。如果用mysql可以直接用物理机的mysql。

3.如何共享windows中的文件夹。这样nextcloud的文件就可以直接在win里访问了。

第一步:虚拟机设置文件共享。打开virtualbox,在虚拟机的设置里。

注意权限,这步相当于把物理机的文件夹映射到虚拟机的/win目录了。

第二步:在之前启动容器的参数中,要将-v参数设置为/win:/data,这样就把虚拟机/win也就是物理机E盘的文件夹映射进了容器。

第三步:访问nextcloud执行安装。不过安装完毕后会报错:请将文件权限设为0770。这是因为文件系统导致的,不用尝试在容器里设置权限,没有任何作用。最终还是在国外网站上找到了办法,就是改nextcloud的判断逻辑。文件在nextcloud网站目录的:lib/private/legacy/util.php文件中,找到 checkDataDirectoryPermissions函数,将返回值改为return []。这样校验就通过了。

4.docker的简单管理

上述说到要改文件,那么容器的文件怎么改呢。

第一步:进入容器。可用docker ps -a查看运行中的容器,状态是running才能进。docker exec -it name bash,name可用是容器名称,也可以是容器id。

第二步:安装vim或什么的,改就行了。

注意,要是容器因为配置错误导致无法启动,首先用docker logs name查看错误,然后用搜索的办法找到容器的配置文件,改正确再启动。你需要进入/var/run/docker目录,执行sudo find ./ -name 配置文件名称。因为docker实际上就存放在这个目录下。搜出来如果有多个,说明你有多个容器有这个配置文件,注意区分。

第三步:重启容器 docker restart name,停止 docker stop name,启动 docker start

注意,这里启动就没有参数了,因为第一次启动就写进配置了。

第四步:容器配置好了,想要快照,那就docker commit name 镜像名,以后就用这个镜像启动容器。

5.运行的容器追加端口

两种办法,一个简单粗暴,把当前的容器提交镜像,重新启动一个。另外一个办法,更改容器配置文件,比较麻烦,有时要改两三个。

6.ssl配置,先找到apache2配置ssl的文章。去阿里云申请好证书,弄到容器的目录里去。如果你已经共享了windows文件到容器里,那就好弄进去了。按照配置文章,一般是将apache2下的available文件下的ssl模块软连接或硬链接到enabled下。

注意:ssl模块要依赖于socache_shmcb。也要连接过去,不然容器就启动不了了。这时候查看容器日志,可以发现错误就是那个模块没开启。

然后访问虚拟机的443看看可以了不,可以就再映射端口到物理机。

好了,文简纰漏多,有问题可留言。我的网盘地址:assdd.cn:88

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: