NextCloud – Docker 安裝教學

Next Cloud 私有雲

今天自行架設了一台 NextCloud,使用的是 docker 方式來搭建,過程很快大概一個小時就建立好了,將架設的過程記錄一下,大家可以參考看看。

NextCloud 主機環境

  • OS:CentOS
  • CPU:雙核
  • RAM:8G
  • HDD:800G

NextCloud 介紹

一、CentOS主機安裝

使用 Docker 快速安裝

  • 先進行 yum -y update 進行套件更新
  • 安裝常用工具 yum -y install git vim
[root@localhost ~]$ yum -y update
Loaded plugins: fastestmirror
Determining fastest mirrors
 * base: mirror01.idc.hinet.net
 * extras: mirror01.idc.hinet.net
 * updates: mirror01.idc.hinet.net
base                                                   | 3.6 kB  00:00:00
extras                                                 | 2.9 kB  00:00:00
updates                                                | 2.9 kB  00:00:00
(1/4): base/7/x86_64/group_gz                          | 153 kB  00:00:00
(2/4): extras/7/x86_64/primary_db                      | 243 kB  00:00:00
(3/4): base/7/x86_64/primary_db                        | 6.1 MB  00:00:01
(4/4): updates/7/x86_64/primary_db                     |  11 MB  00:00:01
Resolving Dependencies
//-------------(略)-------------//
  util-linux.x86_64 0:2.23.2-65.el7_9.1                                                       
  vim-minimal.x86_64 2:7.4.629-8.el7_9                                                        
  virt-what.x86_64 0:1.18-4.el7_9.1                                                           
  wpa_supplicant.x86_64 1:2.6-12.el7_9.2                                                      
  zlib.x86_64 0:1.2.7-19.el7_9                                                                

Complete!

[root@localhost ~]$yum -y install git vim
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror01.idc.hinet.net
 * extras: mirror01.idc.hinet.net
 * updates: mirror01.idc.hinet.net
Resolving Dependencies
--> Running transaction check
//-------------(略)-------------//
  perl-TermReadKey.x86_64 0:2.30-20.el7                                          
  perl-Text-ParseWords.noarch 0:3.29-4.el7                                       
  perl-Time-HiRes.x86_64 4:1.9725-3.el7                                          
  perl-Time-Local.noarch 0:1.2300-2.el7                                          
  perl-constant.noarch 0:1.27-2.el7                                              
  perl-libs.x86_64 4:5.16.3-299.el7_9                                            
  perl-macros.x86_64 4:5.16.3-299.el7_9                                          
  perl-parent.noarch 1:0.225-244.el7                                             
  perl-podlators.noarch 0:2.5.1-3.el7                                            
  perl-threads.x86_64 0:1.87-4.el7                                               
  perl-threads-shared.x86_64 0:1.43-6.el7                                        
  rsync.x86_64 0:3.1.2-10.el7                                                    
  vim-common.x86_64 2:7.4.629-8.el7_9                                            
  vim-filesystem.x86_64 2:7.4.629-8.el7_9                                        

Complete!

安裝 docker & docker-compose

  • 安裝 curl -fsSL https://get.docker.com/ | sh
  • 安裝 sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  • 加入執行權限:chmod +x /usr/local/bin/docker-compose
[root@localhost ~]$ curl -fsSL https://get.docker.com/ | sh
# Executing docker install script, commit: 93d2499759296ac1f9c510605fef85052a2c32be
+ sh -c 'yum install -y -q yum-utils'
+ sh -c 'yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo'
Loaded plugins: fastestmirror
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
+ '[' stable '!=' stable ']'
+ sh -c 'yum makecache'
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror01.idc.hinet.net
 * extras: mirror01.idc.hinet.net
 * updates: mirror01.idc.hinet.net
base                                                      | 3.6 kB  00:00:00     
docker-ce-stable                                          | 3.5 kB  00:00:00     
extras                                                    | 2.9 kB  00:00:00     
updates                                                   | 2.9 kB  00:00:00     
(1/10): docker-ce-stable/7/x86_64/filelists_db            |  27 kB  00:00:00     
(2/10): docker-ce-stable/7/x86_64/primary_db              |  63 kB  00:00:00     
(3/10): docker-ce-stable/7/x86_64/other_db                | 120 kB  00:00:00     
(4/10): extras/7/x86_64/filelists_db                      | 259 kB  00:00:00     
(5/10): extras/7/x86_64/other_db                          | 145 kB  00:00:00     
(6/10): updates/7/x86_64/other_db                         | 765 kB  00:00:00     
(7/10): docker-ce-stable/7/x86_64/updateinfo              |   55 B  00:00:00     
(8/10): base/7/x86_64/other_db                            | 2.6 MB  00:00:00     
(9/10): updates/7/x86_64/filelists_db                     | 6.1 MB  00:00:01     
(10/10): base/7/x86_64/filelists_db                       | 7.2 MB  00:00:01     
Metadata Cache Created
+ '[' -n '' ']'
+ sh -c 'yum install -y -q docker-ce'
warning: /var/cache/yum/x86_64/7/docker-ce-stable/packages/docker-ce-20.10.8-3.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 621e9f35: NOKEY
Public key for docker-ce-20.10.8-3.el7.x86_64.rpm is not installed
Importing GPG key 0x621E9F35:
 Userid     : "Docker Release (CE rpm) <docker@docker.com>"
 Fingerprint: 060a 61c5 1b55 8a7f 742b 77aa c52f eb6b 621e 9f35
 From       : https://download.docker.com/linux/centos/gpg
+ version_gte 20.10
+ '[' -z '' ']'
+ return 0
+ sh -c 'yum install -y -q docker-ce-rootless-extras'
Package docker-ce-rootless-extras-20.10.8-3.el7.x86_64 already installed and latest version

================================================================================

To run Docker as a non-privileged user, consider setting up the
Docker daemon in rootless mode for your user:

    dockerd-rootless-setuptool.sh install

Visit https://docs.docker.com/go/rootless/ to learn about rootless mode.


To run the Docker daemon as a fully privileged service, but granting non-root
users access, refer to https://docs.docker.com/go/daemon-access/

WARNING: Access to the remote API on a privileged Docker daemon is equivalent
         to root access on the host. Refer to the 'Docker daemon attack surface'
         documentation for details: https://docs.docker.com/go/attack-surface/

================================================================================

[root@localhost ~]$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   633  100   633    0     0   1368      0 --:--:-- --:--:-- --:--:--  1370
100 12.1M  100 12.1M    0     0  5721k      0  0:00:02  0:00:02 --:--:--  9.8M

[root@localhost ~]$ chmod +x /usr/local/bin/docker-compose

[root@localhost ~]$ docker-compose -v
docker-compose version 1.29.2, build 5becea4c

啟動 Docker 服務及設定

  • 啟動 Docker: service docker start
  • 將 Docker 加入至開機服務: chkconfig docker on
[root@localhost ~]$ service docker start
Redirecting to /bin/systemctl start docker.service

[root@localhost ~]$ service docker status
Redirecting to /bin/systemctl status docker.service
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since 六 2021-09-11 12:25:36 CST; 13s ago
     Docs: https://docs.docker.com
 Main PID: 56863 (dockerd)
    Tasks: 8
   Memory: 31.9M
   CGroup: /system.slice/docker.service
           └─56863 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/cont...

 9月 11 12:25:36 82-nextcloud dockerd[56863]: time="2021-09-11T12:25:36.3401...c
 9月 11 12:25:36 82-nextcloud dockerd[56863]: time="2021-09-11T12:25:36.3401...c
 9月 11 12:25:36 82-nextcloud dockerd[56863]: time="2021-09-11T12:25:36.3639..."
 9月 11 12:25:36 82-nextcloud dockerd[56863]: time="2021-09-11T12:25:36.6230..."
 9月 11 12:25:36 82-nextcloud dockerd[56863]: time="2021-09-11T12:25:36.7032..."
 9月 11 12:25:36 82-nextcloud dockerd[56863]: time="2021-09-11T12:25:36.7500..."
 9月 11 12:25:36 82-nextcloud dockerd[56863]: time="2021-09-11T12:25:36.7643...8
 9月 11 12:25:36 82-nextcloud dockerd[56863]: time="2021-09-11T12:25:36.7644..."
 9月 11 12:25:36 82-nextcloud systemd[1]: Started Docker Application Contain....
 9月 11 12:25:36 82-nextcloud dockerd[56863]: time="2021-09-11T12:25:36.7765..."
Hint: Some lines were ellipsized, use -l to show in full.

[root@localhost ~]$ chkconfig docker on
注意:正在轉送請求至「systemctl enable docker.service」。
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

[root@localhost ~]$ docker -v
Docker version 20.10.8, build 3967b7d

關閉 selinux

  • 手動執行關閉 selinux:setenforce 0
  • 修改 selinux config 檔:vim /etc/selinux/config
[root@localhost ~]$ setenforce 0
[root@localhost ~]$ vim /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled

:wq

使用 docker pull 下載 mysql & nextcloud

  • 進行 images 下載
  • 執行 docker pull mysql:latest
  • 執行 docker pull nextcloud
[root@localhost ~]$ docker pull mysql:latest
latest: Pulling from library/mysql
a330b6cecb98: Pull complete 
9c8f656c32b8: Pull complete 
88e473c3f553: Pull complete 
062463ea5d2f: Pull complete 
daf7e3bdf4b6: Pull complete 
1839c0b7aac9: Pull complete 
cf0a0cfee6d0: Pull complete 
1b42041bb11e: Pull complete 
10459d86c7e6: Pull complete 
b7199599d5f9: Pull complete 
1d6f51e17d45: Pull complete 
50e0789bacad: Pull complete 
Digest: sha256:99e0989e7e3797cfbdb8d51a19d32c8d286dd8862794d01a547651a896bcf00c
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

[root@localhost ~]$ docker pull nextcloud
Using default tag: latest
latest: Pulling from library/nextcloud
99046ad9247f: Pull complete 
3875fa64ab1e: Pull complete 
e9329a8f553a: Pull complete 
9bb327f9b0a4: Pull complete 
051b56f0e6a3: Pull complete 
da02d3111b48: Pull complete 
98ca514d99e4: Pull complete 
a4ff74d025cd: Pull complete 
d094ddd610df: Pull complete 
8adafae068ec: Pull complete 
70fd73853886: Pull complete 
23a25cfceae7: Pull complete 
df2efaa2c941: Pull complete 
a3057a184756: Pull complete 
3d71491f2ea2: Pull complete 
6164fe9a1ff1: Pull complete 
5025772d3c9a: Pull complete 
4e5ba9e839cf: Pull complete 
d6cfd3085738: Pull complete 
4689d3b9389b: Pull complete 
Digest: sha256:99d94124b2024c9f7f38dc12144a92bc0d68d110bcfd374169ebb7e8df0adf8e
Status: Downloaded newer image for nextcloud:latest
docker.io/library/nextcloud:latest

使用 docker run 啟用 mysql

  • 安裝 MySQL:
    docker run -p 3306:3306 --name mysql --restart="always" -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/logs:/logs -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -d mysql
  • 建立 root 權限:
    grant all PRIVILEGES on . to root@'%' WITH GRANT OPTION;
    ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
    FLUSH PRIVILEGES;

  • 建立 nextcloud 資料庫:Create database nextcloud;

自行定議密碼:password

[root@localhost ~]$ docker run -p 3306:3306 --name mysql --restart="always" -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/logs:/logs -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -d mysql

[root@localhost ~]$ docker exec -it mysql bash
root@c7dac2091985:/# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.26 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> grant all PRIVILEGES on *.* to root@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

mysql> ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected (0.01 sec)

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> Create database nextcloud;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| nextcloud          |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> exit
Bye
root@c7dac2091985:/# exit
exit

使用 docker run 啟用 nextcloud

  • 安裝 NextCloud:
    docker run -d -v /root/nextcloud/html:/var/www/html -v /root/nextcloud/apps:/var/www/html/custom_apps -v /root/nextcloud/config:/var/www/html/config -v /root/nextcloud/nextcloud/data:/var/www/html/data -v /root/nextcloud/themes:/var/www/html/themes -p 80:80 --name nextcloud --restart="always" nextcloud
[root@localhost ~]$ docker run -d -v /root/nextcloud/html:/var/www/html -v /root/nextcloud/apps:/var/www/html/custom_apps -v /root/nextcloud/config:/var/www/html/config -v /root/nextcloud/nextcloud/data:/var/www/html/data -v /root/nextcloud/themes:/var/www/html/themes  -p 80:80   --name nextcloud --restart="always" nextcloud
9b08026c104a2529001bc33e6d5dbd6a82c186ddf8fed465beb47215bc8c2cba

[root@localhost ~]$ docker ps -a
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
9b08026c104a   nextcloud   "/entrypoint.sh apac…"   21 seconds ago   Up 21 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp                      nextcloud
c7dac2091985   mysql       "docker-entrypoint.s…"   3 minutes ago    Up 3 minutes    0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql

二、進行頁面 NextCloud install 流程

透過瀏覽器進入至安裝頁面:http://192.168.50.82 (你主機的 IP 或 Domain Name)

首次起用安裝頁面

進行管理者資料輸入,建立管理者帳號

輸入完成後,點擊「完成設定」

系統進行工具安裝

完成畫面

三、Domain Name 設定

/root/nextcloud/config/config.php 裡有個設定,需要將你的域名加入,不然會跳出不可接受的請求來源

[root@localhost ~]$ vim /root/nextcloud/config/config.php
'trusted_domains' =>
  array (
    0 => '192.168.50.80',
    1 => 'nextcloud.demo.cc',
  ),

一則迴響

迴響目前關閉。