docker配置安装nextcloud

进入root用户进行操作

docker安装配置

  • centos7系统,先安装docker

    1
    yum install docker -y

  • 开启docker、开机自启

    1
    systemctl start docker && systemctl enable docker

  • 修改docker路径

    尽量把docker放置在其他目录,这样就不用修改nextcloud的目录了,这里使用软连接 如果你开启了docker,停止它

    1
    systemctl stop docker

    如果你准备把docker放在/home/data

    将默认路径的文件移动到这里

    1
    mv /var/lib/docker/ /home/data

    然后创建软链接

    1
    ln -s /home/data/docker /var/lib/docker

    开启

    1
    systemctl start docker

    查看

    1
    docker info

docker初步使用

  • 查看docker安装了那些软件

    1
    docker ps -a

  • 全部配置完成以后大概这样

    1
    2
    3
    4
    CONTAINER ID  IMAGE                COMMAND                 CREATED      STATUS       PORTS                               NAMES
    62f9f2f1d55a nextcloud "/entrypoint.sh ap..." 3 weeks ago Up 2 weeks 0.0.0.0:80->80/tcp nextcloud
    ec43a5255a01 mysql "docker-entrypoint..." 3 weeks ago Up 3 weeks 33060/tcp, 0.0.0.0:33306->3306/tcp nextcloud_db
    f65c0ab8e2ba portainer/portainer "/portainer" 3 weeks ago Up 3 weeks 0.0.0.0:9000->9000/tcp prtainer

  • 强制删除某个coker软件(即使它在运行)

    1
    docker rm -f 这里是CONTAINER ID 或者 NAMES

  • 开始某个coker软件

    1
    docker start 这里是CONTAINER ID 或者 NAMES

  • 停止某个docker软件

    1
    docker stop 这里是CONTAINER ID 或者 NAMES

可视化

其实都可以用 portainer 完成以上操作

目前数据 /data 连接到 /home/data/docker_apps/portainer

1
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /home/data/docker_apps/portainer:/data portainer/portainer-ce

更新

1
docker stop portainer && docker rm portainer && docker pull portainer/portainer-ce

然后运行上面的,重新创建

浏览器打开 localhost:9000

依赖

需要 mysql redis

docker安装mysql

mysql密码12345678,端口3306,这个只是在服务器上或者端口转发时可以访问,不要对外公开,外部文件夹 /home/data/docker_apps/mysql,防止重新创建时数据丢失

1
docker run -d --name mysql --restart always --security-opt seccomp=unconfined -p 33306:3306 -v /home/data/docker_apps/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=12345678 mysql

redis

可以加速

1
docker run -d  --restart always --privileged=true -p 6379:6379 -v /home/data/docker_apps/redis/redis.conf:/etc/redis/redis.conf -v /home/data/docker_apps/redis/data:/data --name redis redis:latest redis-server /etc/redis/redis.conf --appendonly yes --requirepass '12345678'

docker安装nextcloud

  • docker外部端口为81,主机为db,外部文件夹为/home/data/docker_apps/nextcloud,方便以后转移或者备份文件
1
docker run -d --name=nextcloud --link mysql:mysql --link redis:redis -p 81:80  --restart always -v /home/data/docker_apps/nextcloud:/var/www/html docker.io/nextcloud:latest

直接连接到 redismysql 了,不需要单独配置数据库

  • 初始化

    此时如果使用vscode的ssh插件远程到服务器上,在vscode的远程插件左下角端口转发80,点击会跳转浏览器,即在电脑浏览器打开了 http://localhost:81/ ,此时可以初始化,数据库选择mysql

  • 注意!

    最后一项主机名填写 db,密码12345678

配置

  • 进入docker命令行

    1
    docker exec -it nextcloud /bin/bash

  • 编辑nextcloud配置文件

    如果没有vim,请安装

    1
    apt update && apt upgrade -y && apt install vim

    1
    vim config/config.php

    找到 trusted_domains 这一行,下面应该有一行 0 => 'ip地址',在它下面添加域名即可

    1
    1 => '域名'

配置网址二级目录

因为主页一般都有用,所以设置二级目录即域名/nc

完整配置

注意把 你的域名 改为 真实域名,大部分都是自动生成的,把里面所有中文,都按照自己的改一下,有些自动生成的不用管

主要需要改的

  • trusted_domains: 信任的域名
  • overwrite.cli.url: 完整网址
  • overwritehost: 域名
  • overwritewebroot: 二级目录
  • mail_*:邮箱相关,发通知或普通用户找回密码
  • memcache* redis:加速
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
$CONFIG = array (
'apps_paths' =>
array (
0 =>
array (
'path' => '/var/www/html/apps',
'url' => '/apps',
'writable' => false,
),
1 =>
array (
'path' => '/var/www/html/custom_apps',
'url' => '/custom_apps',
'writable' => true,
),
),
'instanceid' => 'docker创建nextcloud时自动生成',
'passwordsalt' => 'docker创建nextcloud时自动生成',
'secret' => 'docker创建nextcloud时自动生成',
'trusted_domains' =>
array (
0 => '你的ip',
1 => '你的域名',
2 => 'localhost',
),
'datadirectory' => '/var/www/html/data',
'dbtype' => 'mysql',
'version' => '23.0.0.10',
'' => '',
'overwrite.cli.url' => 'https://改为你的域名/改为二级目录名字比如nc/',
'overwritehost' => '改为你的域名',
'overwritewebroot' => '/改为二级目录名字比如nc',
'overwriteprotocol' => 'https',
'dbname' => 'nextcloud,应该也可以在docker创建nextcloud时自动生成',
'dbhost' => '应该也可以在docker创建nextcloud时连接的数据库那个名字如:mysql',
'dbport' => '',
'dbtableprefix' => 'oc_',
'mysql.utf8mb4' => true,
'dbuser' => 'docker创建nextcloud时自动生成mysql账户',
'dbpassword' => 'docker创建nextcloud时自动生成mysql密码',
'installed' => true,
'maintenance' => false,
'mail_smtpmode' => 'smtp',
'mail_sendmailmode' => 'smtp',
'mail_from_address' => '改为你的邮箱账户不含后缀,用于其他用户找回密码如:test',
'mail_domain' => '改为你的邮箱后缀如:163.com',
'mail_smtpauthtype' => 'LOGIN',
'mail_smtpauth' => 1,
'mail_smtphost' => '改为你的邮箱后缀如:smtp.163.com',
'mail_smtpport' => '改为你的邮箱stmp端口如:465',
'mail_smtpname' => '改为你的邮箱含后缀如:test@163.com',
'mail_smtppassword' => '改为你的邮箱授权码',
'mail_smtpsecure' => 'ssl',
'loglevel' => 0,
'theme' => '',
'default_phone_region' => 'CN',
'default_locale' => 'zh_cn',
'app_install_overwrite' =>
array (
0 => 'richdocumentscode',
1 => 'files_mindmap',
2 => 'quota_warning',
),

'memcache.local' => '\OC\Memcache\Redis',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => 'redis',
'port' => 6379,
'password' => '创建redis时的密码如:12345678'
),

);
  • ssl

    可以在docker外的nginx配置如下,实现ssl,注意填写自己的文件夹/etc/letsencrypt/live/域名/

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    server {
    listen 315 ssl;
    server_name 你的域名;

    ssl_certificate /etc/letsencrypt/live/一般是你的域名/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/一般是你的域名/privkey.pem;

    location / {
    add_header Strict-Transport-Security "max-age=15768000;preload;";
    #一级目录这里是你其他的主页
    #proxy_pass http://localhost:81;

    }
    # 按照二级目录配置的nextcloud
    location = /.well-known/carddav {
    return 301 https://$server_name/nc/remote.php/dav;
    }
    location = /.well-known/caldav {
    return 301 https://$server_name/nc/remote.php/dav;
    }
    location = /.well-known/host-meta {
    return 301 https://$server_name/nc/public.php?service=host-meta;
    }
    location = /.well-known/host-meta.json {
    return 301 https://$server_name/nc/public.php?service=host-meta-json;
    }
    location = /.well-known/webfinger {
    return 301 https://$server_name/nc/index.php/.well-known/webfinger;
    }
    location = /.well-known/nodeinfo {
    return 301 https://$server_name/nc/index.php/.well-known/nodeinfo;
    }

    location /nc/ {
    add_header Strict-Transport-Security "max-age=15552000; includeSubDomains; preload;" always;
    proxy_pass http://localhost:81/;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }



    error_page 404 /404.html;
    location = /404.html {
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    }
    }

其他

定期刷新

1
crontab -e
1
2
# docker中nextcloud后台任务刷新
*/5 * * * * docker exec --user www-data nextcloud php -f cron.php

ssl

其中letsencrypt可以使用 certbot

3个月有效期,定时任务自动刷新 /home/data/www 是你的主页文件根目录

1
certbot certonly --webroot -w /home/data/www -d icpcs.lzu.edu.cn
1
crontab -e
1
2
3
4
# https自动更新证书
0 3 1 * * certbot renew --webroot -w /home/data/www/icpcs-home && nginx -s reload
# 复制到需要的目录
30 3 1 * * cp -L /etc/letsencrypt/live/一般为你的域名/* /home/data/docker/config/ssl/

本文作者:yuhldr
本文地址https://yuhldr.github.io/posts/26277.html
版权声明:转载请注明出处!