樂橙SN1 ubuntu docker Nextcloud-mysql-redis-nginx yml 部署記錄

刷機(jī)步驟

1.從build-imou-sn1下載喜歡的linux發(fā)現(xiàn)版本,用balenaetcher寫盤工具寫入U(xiǎn)盤(特定U盤才有效(我的是EAGET16G))
2.接上網(wǎng)線,插上U盤USB2.0口后上電啟動(dòng)佃迄,
3.通過ssh or TTL 連接登錄到alpine恢復(fù)系統(tǒng)桑滩。
ssh root@imou-sn1
4.在alpine系統(tǒng)中執(zhí)行emmc-install.sh,寫入固件
等燈變?yōu)榘咨赐瓿伞?/p>

imou-sn1:~# emmc-install.sh 
flash emmc mbr...
1+0 records in
1+0 records out
512 bytes copied, 0.00471775 s, 109 kB/s
flash emmc ext4 fs...
 848MiB 0:00:39 [21.5MiB/s] [==========================>] 100%            
0+6782 records in
0+6782 records out
889192448 bytes (889 MB, 848 MiB) copied, 62.0352 s, 14.3 MB/s
flash done, please poweroff now then unplug USB drive!

5.寫入完成后邮丰,根據(jù)提示執(zhí)行poweroff命令關(guān)機(jī)摸柄,斷電后拔出U盤颤练,再拔掉電源上電開機(jī),刷機(jī)完成驱负。

掛在以及格式化硬盤

因?yàn)闄C(jī)器自帶硬盤只有4G大小,能力有限患雇,不知道有沒有方法可以擴(kuò)展root目錄跃脊,只有掛在硬盤只會(huì)mount,
1.使用fdisk -l查看目前磁盤情況苛吱,根據(jù)情況操作對(duì)應(yīng)磁盤酪术。

root@imou-sn1:~# fdisk -l
Disk /dev/mmcblk1: 3.7 GiB, 3959422976 bytes, 7733248 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xf6a78990

Device         Boot Start     End Sectors  Size Id Type
/dev/mmcblk1p1       8192 7733247 7725056  3.7G 83 Linux


Disk /dev/sda: 74.54 GiB, 80026361856 bytes, 156301488 sectors
Disk model: Hitachi HTS54328
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

這里我用了一款80G的垃圾盤做測(cè)試,可以看到是/dev/sda
2.分區(qū)格式化
輸入命令fdisk /dev/sda


root@imou-sn1:~# fdisk /dev/sda

Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

The old ext4 signature will be removed by a write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xc67aca5b.

Command (m for help): m

Help:

  DOS (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag

  Generic
   d   delete a partition
   F   list free unpartitioned space
   l   list known partition types
   n   add a new partition
   p   print the partition table
   t   change a partition type
   v   verify the partition table
   i   print information about a partition

  Misc
   m   print this menu
   u   change display/entry units
   x   extra functionality (experts only)

  Script
   I   load disk layout from sfdisk script file
   O   dump disk layout to sfdisk script file

  Save & Exit
   w   write table to disk and exit
   q   quit without saving changes

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table


Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p):

Using default response p.
Partition number (1-4, default 1):
First sector (2048-156301487, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-156301487, default 156301487):

Created a new partition 1 of type 'Linux' and of size 74.5 GiB.


Command (m for help):

Command (m for help): w

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

此處磁盤數(shù)據(jù)沒什么用直接全新操作翠储。一頓輸入 m n 回車回車回車
最后w保存操作即完成绘雁。
接下來格式化為ext4文件系統(tǒng)
mkfs -t ext4 /dev/sda
操作步驟:y 然后一頓回車等待完成即可

root@imou-sn1:~# mkfs -t ext4 /dev/sda
mke2fs 1.45.5 (07-Jan-2020)
Found a dos partition table in /dev/sda
Proceed anyway? (y,N) y
Creating filesystem with 19537686 4k blocks and 4890624 inodes
Filesystem UUID: 3ad32c9e-60a7-4ab6-b54c-ed507cdeb546
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424

Allocating group tables: done
Writing inode tables: done
Creating journal (131072 blocks):
done
Writing superblocks and filesystem accounting information: done

最終查看檢查一下ll /dev/sda

root@imou-sn1:~# ll /dev/sda
brw-rw---- 1 root disk 8, 0 Dec  4 22:20 /dev/sda

信息看出來sda為一個(gè)塊設(shè)備文件。8表示主設(shè)備號(hào)
3.掛在磁盤(因?yàn)槭莾?nèi)置硬盤援所,使用永久掛載)
創(chuàng)建一個(gè)掛載目錄庐舟,即空文件夾,我這里使用/www目錄
使用永久掛載住拭,就意味著它開機(jī)會(huì)自動(dòng)掛載(編輯 /etc/fstab 文件)
命令:blkid:查看對(duì)應(yīng)分區(qū)的UUID(編號(hào))挪略。UUID唯一標(biāo)識(shí)每一個(gè)分區(qū)历帚,防止錯(cuò)誤的掛載。除此之外杠娱,還會(huì)顯示分區(qū)的類型挽牢。(建議先復(fù)制一下sdb1的UUID,一會(huì)兒會(huì)用到)
使用vim編輯 /etc/fstab  在命令行直接輸入vim /etc/fstab 就可以編輯摊求,實(shí)現(xiàn)開機(jī)自動(dòng)掛載禽拔。
因?yàn)槭切孪到y(tǒng),沒有安裝vim就apt-get install vim -y還是不行無法安裝室叉,更新一下apt-get update后睹栖,再次運(yùn)行apt-get install vim -y即可。

# UNCONFIGURED FSTAB FOR BASE SYSTEM
/dev/root / ext4 defaults,noatime,nodiratime,errors=remount-ro 0 1
UUID="3ad32c9e-60a7-4ab6-b54c-ed507cdeb546"  /www ext4 defaults 0 0

重啟后lsblk檢查即可看到

root@imou-sn1:/www# lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda            8:0    1 74.5G  0 disk /www
mmcblk1      179:0    0  3.7G  0 disk
└─mmcblk1p1  179:1    0  3.7G  0 part /
mmcblk1boot0 179:32   0    2M  1 disk
mmcblk1boot1 179:64   0    2M  1 disk

當(dāng)你的目錄被掛載后太惠,該目錄下會(huì)多出一個(gè)目錄lost+found磨淌。
lost+found:顧名思義,丟失然后找到凿渊。它是一個(gè)特殊的目錄梁只,用來存放文件系統(tǒng)錯(cuò)誤導(dǎo)致文件丟失的目錄,因此我們的一些數(shù)據(jù)是可以通過它來找到的埃脏。這個(gè)目錄是在分區(qū)的根目錄上搪锣,就是我們掛載的分區(qū)。但這不是每個(gè)文件系統(tǒng)都有的目錄彩掐,ext2/3/4就有這個(gè)目錄构舟,有些就沒有這個(gè)目錄。

安裝docker并修改docker文件路徑

# 官方腳本 使用阿里云源
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 或國(guó)內(nèi)daocloud源
curl -sSL https://get.daocloud.io/docker | sh

安裝docker-compose

# 先安裝pip
apt install pip -y
# 使用 pip 安裝 docker-compose
sudo pip install docker-compose
# 測(cè)試是否安裝成功
docker-compose --version

修改docker路徑

# 查看docker 配置信息
docker info
# 修改docker配置文件路徑(沒有就新建)
vim /etc/docker/daemon.json 
# 注入路徑地址代碼
{
  "registry-mirrors": ["http://hub-mirror.c.163.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://9cpn8tt6.mirror.aliyuncs.com"],
  "data-root": "/www/docker"
}
# 重啟再次查看是否生效
systemctl restart docker
docker info

配置nextcloud完整docker

配置教程
https://hexo.chensmallx.top/2021/04/08/nextcloud-on-docker/#%E4%BE%9D%E8%B5%96%E5%85%B3%E7%B3%BB

  1. fpm——fastCgi作為呈現(xiàn)層——版本的nextcloud
  2. nginx作為前置反向代理服務(wù)器提供https安全
  3. mysql/mariadb作為數(shù)據(jù)庫(kù)堵幽,提高數(shù)據(jù)可靠性以及讀寫性能
  4. redis作為熱點(diǎn)數(shù)據(jù)緩存服務(wù)器以及文件鎖管理器

依賴關(guān)系

  • mariadb(目前mysql都過渡到mariadb了)
  • redis
  • nextcloud:fpm
  • nginx

先安裝一個(gè)可視化管理面板

https://www.dockernb.com/
docker run --restart always --name fast -p 8081:8081 -d -v /var/run/docker.sock:/var/run/docker.sock wangbinxingkong/fast
但是面板依然不能拉取鏡像狗超,不知道是什么問題
用原作者一行代碼拉去也無效
一個(gè)一個(gè)拉取把!

docker pull mariadb
docker pull redis
docker pull nextcloud:fpm
docker pull nginx

其中需要明確一下每個(gè)容器在這一套系統(tǒng)中扮演的角色朴下。

nextcloud作為此次的主角努咐,也就是主體業(yè)務(wù)(app),它在存取數(shù)據(jù)的時(shí)候是會(huì)用到數(shù)據(jù)庫(kù)(db)和緩存(cache)系統(tǒng)的殴胧,那么可以得出nextcloud依賴于mysql和redis渗稍。
而mysql和redis之間各司其職,其中一個(gè)掛了不會(huì)影響到另一個(gè)团滥,所以優(yōu)先級(jí)相同竿屹,之間沒有依賴關(guān)系。
nginx作為代理業(yè)務(wù)和用戶之間溝通的主體灸姊,首先是需要業(yè)務(wù)(app)正常運(yùn)行才能夠正常提供它自己本身的服務(wù)拱燃,所以nginx依賴于nextcloud。

# 依賴關(guān)系如下
                     /-> mysql
nginx -> nextcloud -|
                     \-> redis

# 啟動(dòng)順序則需要反過來
redix&mysql -> nextcloud -> nginx

docker-compose配置文件

docker-compose是一個(gè)代理用戶去管理docker的一個(gè)工具厨钻,使用docker-compose.yml配置文件就可以系統(tǒng)扼雏、方便地部署多容器項(xiàng)目坚嗜,因?yàn)槲覀冞@次搭建的nextcloud也是基于多容器的,所以使用docker-compose進(jìn)行部署和調(diào)試以及重建最為方便诗充。

完整的docker-compose配置參數(shù)文檔可以參考下面的這個(gè)文檔苍蔬,講的還是比較細(xì)致,推薦給要深入docker-compose的同學(xué)學(xué)習(xí)蝴蜓。

Docker Compose 配置文件詳解 - 簡(jiǎn)書

以下就是本文輸出的docker-compose配置文件碟绑。

注:參數(shù)的解釋會(huì)通過備注的形式寫在配置中

yml

version: '3.4'
services:

  db: # 這里只是給每個(gè)容器單獨(dú)配置一個(gè)名稱
    image: mariadb # 具體的鏡像名稱,可以使用“:”指定鏡像的版本
    restart: unless-stopped # 重啟的選項(xiàng)茎匠,分為no格仲、on-failure、on-failure:x诵冒、always凯肋、unless-stopped,具體可以自行搜索查看區(qū)別
    expose: 
    # expose僅將指定的端口暴露給links的容器汽馋,而不對(duì)宿主機(jī)開放侮东。
    # 和ports的區(qū)別在于,ports可以映射宿主機(jī)別的端口到容器中豹芯。
     - "3306"
    volumes:
    # volumes指的是將宿主機(jī)的路徑映射到容器中的指定位置
     - ./db:/var/lib/mysql
    environment:
    # environment可以對(duì)容器創(chuàng)建指定多個(gè)環(huán)境變量
     - MYSQL_ROOT_PASSWORD=root_password # 這里配置root密碼
     - MYSQL_DATABASE=nextcloud
     - MYSQL_USER=user_name # 這里配置一個(gè)非root賬戶給nextcloud使用
     - MYSQL_PASSWORD=user_password # 這里配置上面那個(gè)賬號(hào)的密碼

  cache:
    image: redis
    restart: unless-stopped
    expose:
     - "6379"
    volumes:
     - ./cache:/data
    command: redis-server --requirepass 'redis_password' # 這里的redis_password換成你要配置的redis密碼
    # command指的是啟動(dòng)容器后代替默認(rèn)啟動(dòng)指令來啟動(dòng)服務(wù)的指令

  app:
    image: nextcloud:fpm
    restart: unless-stopped
    expose:
     - "9000"
    volumes:
     - ./app/html:/var/www/html
     - ./app/data:/var/www/html/data
     - ./app/config:/var/www/html/config
     - ./app/custom_apps:/var/www/html/custom_apps
    links:
    # links將容器與當(dāng)前容器鏈接起來悄雅,以使得當(dāng)前容器可以訪問目標(biāo)容器expose的端口
    # 格式為 容器的原名:映射到當(dāng)前容器中的名稱
     - db:db
     - cache:cache
    depends_on:
    # 依賴的容器列表,只有這些容器都成功啟動(dòng)了铁蹈,才會(huì)啟動(dòng)當(dāng)前容器
     - db
     - cache

  proxy: # 叫做proxy是因?yàn)槭亲鳛榇韥硖峁┓?wù)
    image: nginx
    restart: unless-stopped
    expose:
      - "80"
    ports:
    # ports可將容器內(nèi)的端口映射到宿主機(jī)上
    # 這里是將容器的443端口映射到宿主機(jī)的7788端口
     - 7788:443
    volumes:
     - ./app/html:/var/www/html
     - ./proxy/conf.d:/etc/nginx/conf.d:ro
     - ./proxy/ssl_certs:/etc/nginx/ssl_certs:ro
    links:
     - app:app
    depends_on:
     - app

把這些內(nèi)容保存到docker-compose.yml文件中宽闲,然后將其放置在某個(gè)文件夾中,例如~/super_nextcloud/握牧,我們之后就在這個(gè)路徑下做后續(xù)的操作容诬。

Nginx配置文件

接著我們要準(zhǔn)備一下nginx的配置。需要?jiǎng)?chuàng)建兩個(gè)文件夾沿腰,一個(gè)是./proxy/conf.d放案,一個(gè)是./proxy/ssl_certs。
其中conf.d放置nginx的配置文件矫俺,可以起名叫做nextcloud.conf,ssl_certs放置域名對(duì)應(yīng)的SSL證書的pem和key文件掸冤。
mkdir -p ./proxy/conf.d ./proxy/ssl_certs
具體可以參考以下的配置來寫nextcloud.conf厘托,其中域名和SSL證書文件的名字需要替換成你自己的。
nginx

upstream php-handler {
    server app:9000;
}

server {
    listen 80;
    listen [::]:80;
    server_name 這里填寫自己的域名;
    # enforce https
    return 301 https://$server_name:443$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name 這里填寫自己的域名;

    # Use Mozilla's guidelines for SSL/TLS settings
    # https://mozilla.github.io/server-side-tls/ssl-config-generator/
    # NOTE: some settings below might be redundant
    ssl_certificate /etc/nginx/ssl_certs/這里填寫SSL證書的名字.pem;
    ssl_certificate_key /etc/nginx/ssl_certs/這里填寫SSL證書的名字.key;

    # Add headers to serve security related headers
    # Before enabling Strict-Transport-Security headers please read into this
    # topic first.
    #add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
    #
    # WARNING: Only add the preload option once you read about
    # the consequences in https://hstspreload.org/. This option
    # will add the domain to a hardcoded list that is shipped
    # in all major browsers and getting removed from this list
    # could take several months.
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;
    add_header Referrer-Policy no-referrer;
    add_header Strict-Transport-Security  15552000;
    #add_header X-Frame-Options SAMEORIGIN;


    # Remove X-Powered-By, which is an information leak
    fastcgi_hide_header X-Powered-By;

    # Path to the root of your installation
    root /var/www/html;



    # The following 2 rules are only needed for the user_webfinger app.
    # Uncomment it if you're planning to use this app.
    #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
    #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;

    # The following rule is only needed for the Social app.
    # Uncomment it if you're planning to use this app.
    #rewrite ^/.well-known/webfinger /public.php?service=webfinger last;

    location = /.well-known/carddav {
      return 301 $scheme://$host:$server_port/remote.php/dav;
    }
    location = /.well-known/caldav {
      return 301 $scheme://$host:$server_port/remote.php/dav;
    }

    # set max upload size
    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

    # Enable gzip but do not remove ETag headers
    gzip on;
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

    # Uncomment if your server is build with the ngx_pagespeed module
    # This module is currently not supported.
    #pagespeed off;

    location / {
        rewrite ^ /index.php$request_uri;
    }

    location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
        deny all;
    }
    location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
        deny all;
    }

    location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) {
        fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS on;
        # Avoid sending the security headers twice
        fastcgi_param modHeadersAvailable true;
        # Enable pretty urls
        fastcgi_param front_controller_active true;
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }

    location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
        try_files $uri/ =404;
        index index.php;
    }

    # Adding the cache control header for js, css and map files
    # Make sure it is BELOW the PHP block
    location ~ \.(?:css|js|woff2?|svg|gif|map)$ {
        try_files $uri /index.php$request_uri;
        add_header Cache-Control "public, max-age=15778463";
        # Add headers to serve security related headers (It is intended to
        # have those duplicated to the ones above)
        # Before enabling Strict-Transport-Security headers please read into
        # this topic first.
        #add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
        #
        # WARNING: Only add the preload option once you read about
        # the consequences in https://hstspreload.org/. This option
        # will add the domain to a hardcoded list that is shipped
        # in all major browsers and getting removed from this list
        # could take several months.
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        add_header Referrer-Policy no-referrer;

        # Optional: Don't log access to assets
        access_log off;
    }

    location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap)$ {
        try_files $uri /index.php$request_uri;
        # Optional: Don't log access to other assets
        access_log off;
    }
}

準(zhǔn)備文件中需要證書文件稿湿,證書我是freessl申請(qǐng)的铅匹,因此需要轉(zhuǎn)換為pem+key,上傳到對(duì)應(yīng)位置饺藤。


文件都準(zhǔn)備好之后包斑,文件結(jié)構(gòu)如下:

super_nextcloud
├── docker-compose.yml
└── proxy
    ├── conf.d
    │   └── nextcloud.conf
    └── ssl_certs
        ├── SSL證書.key
        └── SSL證書.pem

創(chuàng)建&啟動(dòng)容器

此時(shí)準(zhǔn)備工作已經(jīng)完成流礁。使用docker-compose代理對(duì)docker的容器進(jìn)行操作可以使用下面的命令:

docker-compose up -d    # 創(chuàng)建所有容器并按順序啟動(dòng)
docker-compose down     # 停止所有容器并刪除
docker-compose stop     # 停止所有容器
docker-compose start    # 按順序啟動(dòng)所有容器
docker-compose restart  # 停止所有容器并按順序啟動(dòng)所有容器

所以這里我們使用docker-compose up -d啟動(dòng)我們的服務(wù)。在docker-compose輸出的提示中罗丰,所有目標(biāo)都顯示為done后神帅,我們可以使用netstat查看nginx容器是否在監(jiān)聽7788端口:

? netstat -tnlp | grep 7788
tcp6    0     0     :::7788     :::*    LISTEN    5155/docker-proxy

如果沒有輸出,那就是創(chuàng)建容器有問題萌抵≌矣可以通過docker ps -a查看哪些容器在瘋狂重啟,然后通過docker logs [容器名or容器ID]進(jìn)到這個(gè)容器中查看容器服務(wù)日志绍填,自行排障霎桅。

如果有輸出,并且和上面的內(nèi)容大致相同讨永,那么恭喜你滔驶,構(gòu)建已經(jīng)成功大半了。


所有服務(wù)都啟動(dòng)起來開始嘗試連接nextcloud時(shí)發(fā)現(xiàn)錯(cuò)誤卿闹。數(shù)據(jù)庫(kù)問題
注冊(cè)錯(cuò)誤提示:nextcloud install Error while trying to initialise the database: An exception occurred while executing a query: SQLSTATE[HY000]: General error: 4047 InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.

解決方法:

這個(gè)解決辦法有個(gè)巨坑揭糕,每次重啟后都要重新執(zhí)行一個(gè)這個(gè)命令。
不然nextcloud就會(huì)出現(xiàn)內(nèi)部錯(cuò)誤比原,技術(shù)細(xì)節(jié)提示插佛。真的很惡心!
但是我也不知道怎么把這個(gè)命令寫入docker mariadb中量窘。雇寇。。蚌铜。

1.進(jìn)入mariadb控制臺(tái)锨侯,鍵入以下命令并回車;
mysql -u root -p
2.輸入mariadb的root密碼冬殃,回車登錄囚痴;
3.輸入以下命令并回車;
SET GLOBAL innodb_read_only_compressed=OFF;
4.這時(shí)候再次注冊(cè)nextcloud审葬,發(fā)現(xiàn)成功解決深滚。

配置項(xiàng)目

配置站點(diǎn)

從地址和端口進(jìn)入站點(diǎn),通常是https+域名+端口涣觉,如果是內(nèi)網(wǎng)搭建并且不在意域名以及https的小鎖頭的話痴荐,則可以直接通過ip來訪問,但是需要注意的是官册,在nginx中配置了特定域名后生兆,它會(huì)檢查訪問時(shí)是否是正確的域名,如果不是正確的域名膝宁,那么就會(huì)拒絕訪問網(wǎng)盤資源鸦难。

進(jìn)入后根吁,我們就需要進(jìn)行網(wǎng)盤首次配置的一些操作,包括管理員的配置合蔽、數(shù)據(jù)庫(kù)的配置击敌、應(yīng)用程序的配置等等。
其中需要注意的是辈末,在數(shù)據(jù)庫(kù)配置部分愚争,數(shù)據(jù)庫(kù)的地址需要填寫我們?cè)赿ocker的links中映射marindb的主機(jī)名稱,即db挤聘;而賬號(hào)密碼則是在配置數(shù)據(jù)庫(kù)時(shí)制定的數(shù)據(jù)庫(kù)用戶密碼以及數(shù)據(jù)庫(kù)名稱轰枝。

使用上一步配置好的管理員賬號(hào)和密碼登錄網(wǎng)盤,點(diǎn)擊頭像進(jìn)入設(shè)置组去,現(xiàn)將站點(diǎn)的參數(shù)配置好后再配置本賬號(hào)的參數(shù)鞍陨。

修改Nginx配置

由于在網(wǎng)站上線后,需要配置一系列安全參數(shù)从隆,所以需要我們?cè)俅稳バ薷囊幌翹ginx的配置文件诚撵。

proxy/conf.d/nextcloud.conf中找到這行(也就是上面那個(gè)nginx配置的41行),將前面的注釋解開键闺,然后重啟nginx容器即可(也可以直接使用docker-compose restart重啟整個(gè)項(xiàng)目)寿烟。

nginx


# 如果需要使用手機(jī)APP來訪問的話,還需要將54 54 59行解開注釋

#rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
#rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;

#rewrite ^/.well-known/webfinger /public.php?service=webfinger last;

配置緩存

由于nextcloud默認(rèn)使用的緩存機(jī)制是APCu辛燥,我們需要到配置中修改其使用Redis作為緩存筛武。

app/config/config.php中的內(nèi)容按照如下方法改動(dòng):

php

//'memcache.local' => '\\OC\\Memcache\\APCu' // 用本地式緩存使用APCu // 注釋這行 
'memcache.local' => '\\OC\\Memcache\\Redis',
'memcache.distributed' => '\\OC\\Memcache\\Redis', // 分布式緩存使用Redis
'memcache.locking' => '\\OC\\Memcache\\Redis', // 啟用Redis緩存的文件鎖
'redis' => array(
  'host' => 'cache', // 這里和mariadb的邏輯相同,填寫容器links時(shí)映射的主機(jī)名
  'port' => 6379,
  'password' => 'redis_password' // 這是之前在配置docker-compose時(shí)配置的redis密碼
),
'filelocking.enabled' => 'true',

使用以下命令進(jìn)入nextcloud的docker容器挎塌,并將文件歸屬確認(rèn)改為www-data:

bash

docker exec -it [nextcloud容器的容器ID] /bin/bash
# 進(jìn)入docker容器之后
ls -l /var/www/html/config/config.php
-rw-r----- 1 www-data www-data 1646 Mar 30 07:27 /var/www/html/config/config.php
# 如果提示所有權(quán)不是www-data徘六,那么就要改回www-data
chown www-data:www-data /var/www/html/config/config.php

這時(shí)候再去訪問nextcloud的頁(yè)面,就是在使用redis做緩存了榴都。

配置cron定時(shí)任務(wù)

由于nextcloud內(nèi)部的文件和配置會(huì)在用戶操作過程中產(chǎn)生變化待锈,所以需要啟用一個(gè)定時(shí)任務(wù)去定期整理和歸檔這些數(shù)據(jù)到數(shù)據(jù)庫(kù)或者應(yīng)用到配置中。

先確定自己的nextcloud容器的容器ID或者容器名字嘴高,可以使用docker ps -a查看竿音。

然后使用crontab -evim /etc/crontab打開crontab的配置進(jìn)行編輯,加入如下內(nèi)容:

plain

# run nextcloud cron task every 5 min
*/5 * * * * docker exec -u 33 [容器ID或容器名] php -f /var/www/html/cron.php 2>&1 /dev/null

建議兩個(gè)地方都加一次拴驮,避免配置不生效谍失。


至此,站點(diǎn)的基本內(nèi)容已經(jīng)配置完畢莹汤,可以滿足個(gè)人用于網(wǎng)盤、webdav等使用場(chǎng)景了颠印。

手動(dòng)安裝拓展

nextcloud另一個(gè)吸引人的地方就是可以安裝很多拓展纲岭,但是由于nextcloud是從github上安裝拓展抹竹,國(guó)內(nèi)的網(wǎng)絡(luò)連接github又有許許多多的困難,所以直接在頁(yè)面上點(diǎn)擊安裝按鈕是絕對(duì)會(huì)報(bào)cURL的錯(cuò)的止潮。

所以我想出了一個(gè)曲線救國(guó)的方法窃判,雖然比直接點(diǎn)擊安裝要多了幾步,但著實(shí)可行喇闸,實(shí)施起來也沒有什么阻礙袄琳。(反倒是之前為了實(shí)現(xiàn)直接點(diǎn)頁(yè)面安裝而各種配置代理浪費(fèi)了不少時(shí)間,而且還有搞不出來…)

手動(dòng)安裝拓展程序的步驟大致可以分為下面幾個(gè)步驟:

  1. 確保當(dāng)前客戶機(jī)環(huán)境可通過代理訪問github燃乍;
  2. 進(jìn)入nextcloud的應(yīng)用頁(yè)面唆樊,找到自己想裝的拓展應(yīng)用;
  3. 點(diǎn)擊想要安裝的應(yīng)用展開詳情刻蟹,進(jìn)入“訪問網(wǎng)站”鏈接逗旁,此時(shí)一般會(huì)去到插件的github頁(yè)面或者nextcloud官方發(fā)布插件頁(yè)面
  4. 進(jìn)入github項(xiàng)目的release頁(yè)面舆瘪,下載最新的插件更新版本到當(dāng)前本機(jī)片效。按照nextcloud的插件發(fā)布標(biāo)準(zhǔn)應(yīng)該是一個(gè)tar.gz文件;
  5. 將下載下來的文件從nextcloud個(gè)人文件頁(yè)面上傳到網(wǎng)盤中英古;
  6. 進(jìn)入nextcloud容器淀衣。docker exec -u 33 -it [container ID or container name] /bin/bash,其中[container ID or container name]要換成真實(shí)容器的ID或名字召调;
  7. 到路徑下找到自己上傳的拓展插件膨桥。例如/var/www/html/data/[username]/files/nextcloud_extension/metadata.tar.gz,其中[username]要換成用戶的名字某残。這里裝的是matadata插件国撵,用于查看圖片各種元數(shù)據(jù)的;
  8. 將其復(fù)制到/var/www/html/apps玻墅。cp /var/www/html/data/[username]/files/nextcloud_extension/metadata.tar.gz /var/www/html/apps介牙;
  9. 解壓后刪除源壓縮文件cd /var/www/html/apps && tar -xzf metadata.tar.gz && rm metadata.tar.gz
  10. 進(jìn)入nextcloud頁(yè)面的【應(yīng)用】-【已禁用的應(yīng)用】頁(yè)面澳厢,將其啟用环础。

按照以上步驟來操作就可以做到實(shí)現(xiàn)手動(dòng)安裝插件的目的了。

安裝jellyfin(主要應(yīng)用nextcloud的自動(dòng)同步功能將自動(dòng)下載的文件同步到服務(wù)器剩拢,然后服務(wù)器中的jellyfin調(diào)用)

運(yùn)行 jellyfin container

這里使用yml文件配置來實(shí)現(xiàn)jellyfin的docker线得,我的機(jī)器是arm所以拉取LinuxServer.io提供的鏡像,據(jù)說不僅小巧而且沒有那么多漏洞徐伐,和權(quán)限贯钩。hwa等問題。

建立工作目錄:

$ sudo mkdir -p /www/jellyfin/data/metadate #這里主要是為了方便管理,所有關(guān)于jellyfin的文件都會(huì)存放在jellyfin文件夾下
$ sudo chown -R 1000:1000 /www/jellyfin #修改權(quán)限角雷,查了一下祸穷,這塊主要是docker的系統(tǒng)機(jī)制,他并不是虛擬機(jī)勺三,如果采用root權(quán)限雷滚,即不設(shè)置權(quán)限的話,存在一下安全問題吗坚,就是docker容器的權(quán)限會(huì)提升到root權(quán)限有些風(fēng)險(xiǎn)祈远,所以按照這個(gè)權(quán)限配置uid為1000的用戶組和用戶。

定義container:

在jellyfin文件夾下創(chuàng)建一個(gè)yml文件:dc-jellyfin.yml

version: "3"

services:
  jellyfin:
    container_name: jellyfin
    image: linuxserver/jellyfin:latest
#    devices:
#      - /dev/vc-mem:/dev/vc-mem
#      - /dev/vchiq:/dev/vchiq
#    networks:
#      default:
#        ipv4_address: 192.168.0.201
network_mode: "host" #使用host方式商源,放棄vlan
    environment:
      PUID: 1000
      PGID: 1000
      TZ: Asia/Shanghai
#      HTTP_PROXY: "http://192.168.0.3:1081"
#      HTTPS_PROXY: "http://192.168.0.3:1081"
#      NO_PROXY: "127.0.0.1,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,139.198.0.0/16,localhost"
    volumes:
      - /srv/jellyfin:/config
      - /media:/media
      - /opt/vc/lib:/opt/vc/lib
    restart: unless-stopped

#networks:
#  default:
#    external:
 #     name: ipvlan

因?yàn)槲业臋C(jī)器gpu沒有驅(qū)動(dòng)车份,所以也就不想硬解了,其次代理問題也不用考慮炊汹,有路由跳墻躬充,至于網(wǎng)絡(luò)這塊,實(shí)在弄不懂怎么劃分vlan設(shè)置讨便,就也拋棄充甚。直接使用host。但是據(jù)說docker的bridge網(wǎng)絡(luò)nat性能很差霸褒,所以等以后研究研究可以嘗試配置一下伴找。

啟動(dòng)container:

$ docker-compose -f dc-jellyfin.yml up --no-start
$ docker container start jellyfin

總結(jié)

經(jīng)歷了這次搭建網(wǎng)盤,算是初級(jí)入門了docker容器的部署废菱,以及docker-compose的配置入門技矮。

只能說,在開始一個(gè)項(xiàng)目之前殊轴,還有許多東西需要實(shí)現(xiàn)考慮和準(zhǔn)備好衰倦,做好缺陷預(yù)防。這樣在真正上手做的時(shí)候旁理,才會(huì)盡可能的少出差錯(cuò)樊零,以及處變不驚。

后記:

在我配置的時(shí)候因?yàn)樾薷膎extcloud的config.php文件可能出現(xiàn)了操作失誤孽文,導(dǎo)致nextcloud出現(xiàn)內(nèi)部錯(cuò)誤驻襟,本來想全部重新來一遍的,想了想芋哭,既然只是nextcloud出了問題沉衣,直接刪除nextcloud容器,重新建立一個(gè)减牺,因?yàn)榛旧吓渲梦募荚谕獠客阆埃静挥绊懘婊眩恍枰匦略O(shè)置一下賬號(hào)密碼以及數(shù)據(jù)庫(kù)連接,(此處由于數(shù)據(jù)庫(kù)也有nextcloud的問題斑鸦,數(shù)據(jù)庫(kù)也重建過一次愕贡,當(dāng)然我們?cè)趧h除容器之后也要把對(duì)應(yīng)的數(shù)據(jù)文件夾,比如nextcloud對(duì)應(yīng)的數(shù)據(jù)文件夾為app巷屿,app文件夾也要做整體刪除才行。)

參考文獻(xiàn)

http://www.reibang.com/p/695fa3b0dab5

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載墩虹,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者嘱巾。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市诫钓,隨后出現(xiàn)的幾起案子旬昭,更是在濱河造成了極大的恐慌,老刑警劉巖菌湃,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件问拘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡惧所,警方通過查閱死者的電腦和手機(jī)骤坐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來下愈,“玉大人纽绍,你說我怎么就攤上這事∈扑疲” “怎么了拌夏?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)履因。 經(jīng)常有香客問我障簿,道長(zhǎng)雏门,這世上最難降的妖魔是什么坏挠? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮岭佳,結(jié)果婚禮上霞篡,老公的妹妹穿的比我還像新娘世蔗。我一直安慰自己,他們只是感情好朗兵,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布污淋。 她就那樣靜靜地躺著,像睡著了一般余掖。 火紅的嫁衣襯著肌膚如雪寸爆。 梳的紋絲不亂的頭發(fā)上礁鲁,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音赁豆,去河邊找鬼仅醇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛魔种,可吹牛的內(nèi)容都是我干的析二。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼节预,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼叶摄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起安拟,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤蛤吓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后糠赦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體会傲,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年拙泽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了淌山。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奔滑,死狀恐怖艾岂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情朋其,我是刑警寧澤王浴,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站梅猿,受9級(jí)特大地震影響氓辣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜袱蚓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一钞啸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喇潘,春花似錦体斩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至忱屑,卻和暖如春蹬敲,著一層夾襖步出監(jiān)牢的瞬間暇昂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工伴嗡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留急波,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓瘪校,卻偏偏與公主長(zhǎng)得像澄暮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子阱扬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容