owncloud 容器复杂配置

前言

由于 ownCloud 官方的 owncloud 镜像已经于 2018.12 停止维护,转而发布了 owncloud/server 镜像。但是 owncloud/server 镜像创建运行的容器默认数据库为 SQLite ,不知怎么的,我无论是指定本地还是远程数据库 OCC 都换不到 MariaDB 上去。只能退而求其次,使用 deb 软件包的方法安装。

创建 mariadb 容器

  • 拉取镜像:

    sudo docker pull jsurf/rpi-mariadb
    
  • 创建网络:

    sudo docker network create -d bridge --subnet=172.20.0.0/24 --gateway 172.20.0.1 amber-net
    
  • 创建运行容器:

    sudo docker run -i -t --name rpi-mariadb -p 10200:3306 --net amber-net --ip 172.20.0.20 -v /mnt/USB64G/rpi-mariadb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=rasyogile -d jsurf/rpi-mariadb:latest
    
  • owncloud 数据库及帐户配置:

    CREATE DATABASE IF NOT EXISTS owncloud;
    GRANT ALL PRIVILEGES ON owncloud.*
      TO 'owncloud'@'172.20.0.10'
      IDENTIFIED BY 'xxxxxxxxx';
    

创建 debian 容器

  • 拉取 debian 镜像命令:

    sudo docker pull debian:latest
    
  • 创建运行容器:

    sudo docker run -i -t --name owncloud -p 10100:80 --net amber-net --ip 172.20.0.10 --link rpi-mariadb:mariadb -v /mnt/USB64G/owncloud:/usr/local/src/owncloud -d debian:latest
    

搭建 owncloud

  • 在以 debian 容器为基础的名字为 owncloud 容器中执行:
    • 可更新软件列表更新:
    • 下载文本编辑软件 vim 、 nano 。
    • 换源。

安装 apache2

  • 命令:

    apt install apache2
    service apache2 start
    
  • 测试:

安装 PHP

  • 命令:

    apt install php
    
  • 安装依赖:

    apt-get install php7.3-intl php7.3-zip php7.3-xml php7.3-dom php7.3-curl php7.3-mbstring php7.3-mb php7.3-gd php7.3-mysqli libmariadb-dev libapache2-mod-php
    
  • 重启 apache2

    service apache2 restart
    
  • 测试:

    • /var/www/html 中,删除之前的 apache2 的 index.html ,重新编写 index.php :

      <?php
      phpinfo();
      ?>
      

安装 owncloud

安全及设置警告

  • 如图。

事务文件锁定

  • 事务文件配置为使用基于内存的锁定。

  • 安装组件。

     apt install redis-server php7.3-redis
    
  • 安装完后,修改 config/config.conf 配置。

    'memcache.locking' => '\OC\Memcache\Redis',
    
  • 启动 redis-server 。

    • 每次容器启动都要启动。
    /etc/init.d/redis-server start
    
  • 重启 apache2 。

启用系统 cron

  • 计划任务选择 Cron 。

完整性检查

  • 一些文件没有通过完整性检查,点击 “无效文件列表” ,可查看无效文件。

    Results
    =======
    - core
    	- FILE_MISSING
    		- .htaccess
    		- .user.ini
    

    可以看到 .htaccess.user.ini 无效。

  • 重新解压一个 owncloud 文件夹,并将新目录下的 .htaccess.user.ini 复制到 /var/www/html/owncloud 目录下。

  • 重启 apache2 。

使数据目录不再可访问

  • 修改 /etc/apache2/apache2.conf 文件。

    <Directory /var/www/>
            Options Indexes FollowSymLinks
            AllowOverride None
            Require all granted
    </Directory>
    

    修改为:

    <Directory /var/www/>
            Options Indexes FollowSymLinks
            AllowOverride all
            Require all granted
    </Directory>
    
  • 重启 apache2 。

内存缓存配置

  • 非分布式服务器使用下述即可:

    apt install php7.3-apcu
    
  • 安装完后,修改 config/config.conf 配置。

    'memcache.local' => '\OC\Memcache\APCu',
    
  • 重启 apache2 。

配置 HTTPS

  • 可以通过 Nginx 容器代理。
  • 也可以单独为 owncloud 容器配置 SSL 。

配置 HSTS

  • Nginx :

    • /etc/nginx/conf.d/default.confserver{} 中添加:

      add_header Strict-Transport-Security "max-age=15552000; includeSubdomains; preload";
      
    • 如果不起作用,则加到 location{} 中。

  • Apache2 :

    • 无 httpd.conf 文件时,修改 /etc/apache2/sites-enabled/000-default.conf 文件:

      # 在第一行添加(所有 <VirtualHost *:*> 之前)
      LoadModule headers_module  /usr/lib/apache2/modules/mod_headers.so
      
      # 在要实施 HSTS 的端口 <VirtualHost> 中(这里是 80 端口,SSL 由 Nginx 代理)
      Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"
      
    • 有 httpd.conf 文件时,末尾新增:

      Header always set Strict-Transport-Security "max-age=15552000"
      RewriteEngine on
      RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]
      

安装中错误处理

PHP 不编译。

  • 安装 libapache2-mod-php 组件。

    apt install apt install libapache2-mod-php
    
  • 重启 apache2 。

宿主机、容器重启后访问无反应

  • 启动 apache2 。

    service apache2 restart
    

模块未安装

  • 在安装途中如果少安装了依赖可能出现众多错误提示:

    没有安装数据库驱动 (SQLite、MySQL 或 PostgreSQL)。
    PHP zip 模块未安装。
    请联系服务器管理员安装模块。
    
    PHP dom 模块未安装。
    请联系服务器管理员安装模块。
    
    PHP XMLWriter 模块未安装。
    请联系服务器管理员安装模块。
    
    PHP XMLReader 模块未安装。
    请联系服务器管理员安装模块。
    
    PHP intl 模块未安装。
    请联系服务器管理员安装模块。
    
    PHP libxml 模块未安装。
    请联系服务器管理员安装模块。
    
    PHP mb multibyte 模块未安装。
    请联系服务器管理员安装模块。
    
    PHP GD 模块未安装。
    请联系服务器管理员安装模块。
    
    PHP SimpleXML 模块未安装。
    请联系服务器管理员安装模块。
    
    PHP cURL 模块未安装。
    请联系服务器管理员安装模块。
    
    PHP 模块已经安装,但仍然显示未安装?
    请联系服务器管理员重启网页服务器。
    
  • 每个错误提示都与之前安装 PHP 时安装的依赖对应。

posted @ 2020-07-19 23:20  Yogile  阅读(836)  评论(0编辑  收藏  举报