使用docker部署nextcloud并连接到宿主机的mysql数据库

请注意,本文编写于 106 天前,最后修改于 80 天前,其中某些信息可能已经过时。

nextcloud,很著名的网盘程序,由于完全配置好过于复杂(这里指不出现那一堆警告信息),所以用docker来部署显得十分方便

环境:Ubuntu 18.04

安装docker

直接根据官方的教程

apt-get install apt-transport-https ca-certificate curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

安装nextcloud

拉取镜像

docker pull nextcloud

配置docker-compose

用它可以方便的管理各个镜像和容器,执行apt install docker-compose进行安装
新建目录nextcloud,在里面新建配置文件docker-compose.yml
内容如下

version: '2'

volumes:
  nextcloud:

services:
  nextcloud:
    image: nextcloud
    container_name: nextcloud_web
    ports:
        - 8080:80 //这里将容器内部的80端口映射到外部的8080端口
    volumes:
      - nextcloud:/home/wwwroot/nextcloud //将/home/wwwroot/nextcloud挂载到了容器内
    restart: always

然后在目录内执行docker-compose up -d

配置nginx反向代理

这样就能用域名访问,并且开启https支持

location / {
            proxy_pass http://127.0.0.1:8080;
        }

连接宿主机数据库

因为容器内和外部是完全隔离的,所以要连接外部数据库要折腾一下,或者不想折腾就用sqlite,这里我也是查了很多资料才搞清楚

查看docker0虚拟网卡的ip

执行ifconfig,找到docker0网卡,大概像这样

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:60:a2:79:0b  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

其中的172.17.0.1就是容器内与外部通信的地址,记下它

配置mysql

  1. 修改mysql配置文件/etc/my.cnf,确保[mysqld]字段有配置bind-address = 0.0.0.0,这是为了让mysql监听机器绑定的所有ip,因为默认只会监听127.0.0.1,但这样做同时也意味着mysql服务可以从外网被访问,所以为了安全最好配置好防火墙
  2. 登录mysql,执行CREATE USER 'nextcloud'@'%' IDENTIFIED BY 'password';新建用户,用户名和密码都可自定义,但要与下文的配置保持一致,主机名用通配符%表示允许任意主机进行登录
  3. 新建数据库CREATE DATABASE nextcloud;
  4. 授予权限,GRANT ALL ON nextcloud.* TO 'nextcloud'@'%';,这里授予了用户nextcloud对数据库nextcloud的所有权限

最后在nextcloud的向导页面用前面查到的地址以及新建的用户名即可成功连接


Comments

添加新评论