原创文章,转载请注明出处
https://qiedd.com/

0.前言

Docker版的NextCloud中自带有SQLite,但是官方不推荐用在有同步客户端的环境,因此我选择了使用MariaDB。

这里我给每个容器都配了一个独立IP

1.准备工作

首先是将两个镜像Pull下来

#MariaDB
docker pull mariadb

#NextCloud
docker pull nextcloud

创建Macvlan

#ens18请换成你的网卡,开启网卡混杂模式
ip link set ens18 promisc on

#创建macvlan
docker network create -d macvlan --subnet=192.168.123.0/24 --gateway=192.168.123.1 -o parent=ens18 macvlan

2.部署NextCloud

这里我将一个盘挂载到了 /data,将NextCloud的数据全部存进去,可以按照自己的配置进行修改

docker run -d \
    -v /data/nextcloud/nextcloud:/var/www/html \
    -v /data/nextcloud/apps:/var/www/html/custom_apps \
    -v /data/nextcloud/config:/var/www/html/config \
    -v /data/nextcloud/data:/var/www/html/data \
    -v /data/nextcloud/theme:/var/www/html/themes/ \
    --network macvlan --ip 192.168.123.111 \
    --restart=unless-stopped \
    --name nextcloud \
    nextcloud

3.部署Mairadb

同样也是给这个容器分配了一个IP

docker run -d --name mariadb \
    -v /data/mysql:/var/lib/mysql \
    -v /data/mysql/conf.d:/etc/mysql/conf.d \
    -e MYSQL_ROOT_PASSWORD=你的密码 \
    -e MYSQL_PASSWORD=你的密码 \
    -e MYSQL_DATABASE=nextcloud \
    -e MYSQL_USER=nextcloud 
    --network macvlan --ip 192.168.123.112 \
    --restart=unless-stopped \
    mariadb

5.NextCloud配置

按下图填写,完成

只要没报错,等待其完成即可

6.配置SSL

进入容器

#进入容器
docker exec -it nextcloud /bin/bash

#更新源
apt update

#安装所需依赖
apt install sudo cron socat vim

配置SSL

我这里用cf做实例,更多api请查看 https://github.com/acmesh-official/acme.sh/wiki/dnsapi

#安装acme.sh
curl https://get.acme.sh | sh

#导入cf key
export CF_Key="你的key"
export CF_Email="你的邮箱"

#创建 一个 bash 的 alias, 方便你的使用
alias acme.sh=~/.acme.sh/acme.sh

#申请证书(默认使用zerossl)
#acme.sh --issue --dns dns_cf -d 你的域名

##新版acme.sh似乎默认使用了zerossl,你需要主动切换到let
acme.sh  --server letsencrypt --issue --dns dns_cf -d 你的域名

#创建一个目录放证书
mkdir /etc/apache2/ssl

#安装证书到这个目录
acme.sh --install-cert -d 你的域名 \
--key-file      /etc/apache2/ssl/key.pem  \
--fullchain-file /etc/apache2/ssl/cert.pem

#修改ssl配置文件
vim /etc/apache2/sites-available/default-ssl.conf

#这两行改成这样
                SSLCertificateFile      /etc/apache2/ssl/cert.pem
                SSLCertificateKeyFile /etc/apache2/ssl/key.pem

#应用配置
a2enmod ssl
a2ensite default-ssl
service apache2 reload

#自动更新
acme.sh   --upgrade  --auto-upgrade

踩坑

导入文件并扫描

直接使用 sudo -u www-data ./occ files:scan --all 可能会出现
Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 438272 bytes) in /var/www/html/3rdparty/composer/autoload_real.php on line 37

解决办法,在容器外使用

docker exec nextcloud su - www-data -s /bin/bash -c 'php -d memory_limit=-1 -f /var/www/html/occ files:scan --all'
分类: DockerLinux

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据