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

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

环境:Ubuntu 18.04

安装docker

直接根据官方的教程

1
2
3
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

拉取镜像

1
docker pull nextcloud

配置docker-compose

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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支持

1
2
3
location / {
proxy_pass http://127.0.0.1:8080;
}

连接宿主机数据库

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

查看docker0虚拟网卡的ip

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

1
2
3
4
5
6
7
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的向导页面用前面查到的地址以及新建的用户名即可成功连接

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

https://jktu.cc/使用docker部署nextcloud并连接到宿主机的mysql数据库/

作者

udp_bbr

发布于

2019-02-08

更新于

2020-03-25

许可协议