文章目录
  1. 1. ownCloud / Nextcloud
    1. 1.1. U盘或移动硬盘
    2. 1.2. 建立SSH连接
    3. 1.3. 安装Entware-NG并安装环境
    4. 1.4. 配置PostgreSQL
    5. 1.5. 安装ownCloud / Nextcloud
    6. 1.6. Web服务器二选一
      1. 1.6.1. Option 1: 安装apache(推荐,500错误较少)
      2. 1.6.2. Option 2: 安装lighttpd(我在使用过程中经常遇到500错误)
    7. 1.7. 配置ownCloud / Nextcloud
    8. 1.8. 大功告成
  2. 2. 进阶配置
    1. 2.1. 修改上传文件大小限制
    2. 2.2. lighttpd修改ownCloud URL
  3. 3. 在折腾的过程中非写不可的巨坑
  4. 4. 参考文献(部分)

引言: 没东西玩了,玩玩路由器吧。于是我从1月24日一直搞到1月27日终于把这该死的东西搞好了。但最后由于路由器性能不是很好而放弃使用。


ownCloud / Nextcloud


U盘或移动硬盘

  1. 将U盘格式化为ext4格式(可在Ubuntu上完成,Windows没试过),在路由器上插入U盘

建立SSH连接

  1. 进入梅林后台,在系统管理 - 系统设置 - Enable SSH 选择LAN only,应用保存。
  2. 使用SSH连接工具(我使用的是Ubuntu的Terminal,也可以使用windows下git自带的shell)。假设你路由器的账号为admin,密码为123456,网关为192.168.50.1,则输入ssh admin@192.168.50.1,回车,键入密码,回车

安装Entware-NG并安装环境

  1. SSH客户端输入命令

    1
    entware-setup.sh

    选择U盘的序号,回车,等待安装完成(如果输入opkg显示命令不存在,则用gpart给u盘分配新UUID再试)

  2. 更换软件源(不需要更换了,想尝试php5的可以更换一波)

    1
    vi /opt/etc/opkg.conf

    将官方软件源换为src/gz packages http://qnapware.zyxmon.org/binaries-armv7

  3. 更新

    1
    opkg update
  4. 安装环境

    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
    opkg install \
    sudo \
    bzip2 \
    php7-cli \
    php7-cgi \
    php7-mod-ctype \
    php7-mod-curl \
    php7-mod-dom \
    php7-mod-fileinfo \
    php7-mod-gd \
    php7-mod-hash \
    php7-mod-iconv \
    php7-mod-json \
    php7-mod-mbstring \
    php7-mod-pdo \
    php7-mod-session \
    php7-mod-simplexml \
    php7-mod-xml \
    php7-mod-xmlwriter \
    php7-mod-xmlreader \
    php7-mod-zip \
    php7-fpm \
    php7-mod-pgsql \
    php7-mod-pdo-pgsql \
    php7-mod-intl \
    php7-mod-openssl \
    pgsql-server \
    pgsql-cli-extra

配置PostgreSQL

使用PostgreSQL是因为之前尝试Mysql和MariaDB都失败了。

  1. 为了保证内存充足,请先在软件中心使用虚拟内存划分512M虚拟内存。

  2. 配置sudoers

    root无法启动pgsql,故在/etc/passwd发现有用户tor,借壳。

    给admin加入superusers

    1
    vi /opt/etc/sudoers

    root ALL=(ALL) ALL行下添加一行admin ALL=(ALL) ALL ,保存

  3. 建立存储点并更改所有权

    1
    2
    mkdir /opt/usr/pgdata
    chown tor /opt/usr/pgdata
  4. 初始化数据库

    1
    sudo -u tor initdb -D /opt/usr/pgdata
  5. 启动PostgreSQL服务

    如1.2步骤新建一个SSH连接,因为启动PostgreSQL服务将挂起线程!(不要关闭之前的SSH连接)

    在新的SSH命令行中输入下列命令

    1
    sudo -u tor postgres -D /opt/usr/pgdata/

    服务正常启动后,可以关闭窗口不管它了,也可以不关看看日志。

  6. 设置用户密码

    • 使用tor用户(推荐)

      回到之前的SSH连接,输入以下命令创建tor同名数据库

      1
      sudo -u tor createdb tor

      进入PostgreSQL-Client

      1
      psql -U tor

      在SQL命令行下输入以下命令设置密码并退出

      1
      2
      ALTER USER "tor" WITH PASSWORD '123456';
      \q
    • 你也可以创建一个新用户(貌似有点问题)

      回到之前的SSH连接,输入以下命令创建一个名为ownCloud的用户

      1
      sudo -u tor createuser --interactive

      ownCloud

      y

      创建同名数据库

      1
      sudo -u tor createdb ownCloud

      进入PostgreSQL-Client

      1
      psql -U ownCloud

      在SQL命令行下输入以下命令设置密码并退出

      1
      2
      ALTER USER "ownCloud" WITH PASSWORD '123456';
      \q

安装ownCloud / Nextcloud

  1. 下载ownCloud包

    1
    wget -O - https://download.owncloud.org/community/owncloud-10.0.4.tar.bz2 | bzip2 -cd | tar -xvC /opt/share/www/

    or NextCloud

    1
    wget -O - https://download.nextcloud.com/server/releases/nextcloud-12.0.5.tar.bz2 | bzip2 -cd | tar -xvC /opt/share/www/

    其中的版本号请根据官网版本进行修改,下文以ownCloud为例,但本文同样适用于Nextcloud

  2. 修改php相关配置

    1
    2
    3
    sed -i "/upload_max_filesize =*/cupload_max_filesize = 100M" "/opt/etc/php.ini"
    sed -i "/post_max_size =*/cpost_max_size = 100M" "/opt/etc/php.aini"
    sed -i "/memory_limit =*/cmemory_limit = 32M" "/opt/etc/php.ini"

Web服务器二选一

Option 1: 安装apache(推荐,500错误较少)
  1. SSH客户端输入命令

    1
    opkg install apache
  2. 修改apache配置文件

    1
    vi /opt/etc/apache/httpd.conf
    • DocumentRoot的值改为/opt/share/www

    • DirectoryIndex index.html改为DirectoryIndex index.php index.html

    • Listen 80改为Listen 81(为了不与路由管理端冲突)

    • 更改服务启动用户:

      User nobody改为User tor

      Group nogroup改为#Group nogroup

    • <Directory />...</Directory>修改如下

      1
      2
      3
      4
      5
      6
      <Directory />
      Options FollowSymLinks
      AllowOverride None
      Order deny,allow
      Allow from all
      </Directory>
    • 修改DocumentRoot "/opt/share/htdocs"DocumentRoot "/opt/share/www/owncloud"

      修改<Directory "/opt/share/htdocs"><Directory "/opt/share/www/owncloud">

    • 增加虚拟路径映射

      <IfModule alias_module>下增加

      1
      ScriptAlias /php/ "/opt/bin/"
    • 添加php解析

      <IfModule mime_module>下增加

      1
      2
      AddType application/x-httpd-php .php
      Action application/x-httpd-php "/php/php-cgi"

    最后保存即可

  3. 修改防火墙规则,使外网可以访问81端口

    在SSH命令行输入

    1
    iptables -I INPUT -p tcp --destination-port 81 -j ACCEPT
  4. 重启apache服务

    1
    /opt/etc/init.d/S80apache restart
Option 2: 安装lighttpd(我在使用过程中经常遇到500错误)
  1. SSH客户端输入命令
1
opkg install lighttpd
  1. 安装支持模块

    1
    2
    3
    4
    opkg install \
    lighttpd-mod-fastcgi \
    lighttpd-mod-access \
    lighttpd-mod-rewrite
  2. 选择81端口作为lighttpd服务器端口并修复uploads目录,输入命令(中间的空格也要复制)

    1
    sed -i 's/#server.port                 = 81/server.port                 = 81/g' "/opt/etc/lighttpd/lighttpd.conf"
    1
    sed -i "/server.upload-dirs*/cserver.upload-dirs          = ( \"/opt/tmp\" )" "/opt/etc/lighttpd/lighttpd.conf"
  3. 修改防火墙规则,使其通过81端口

    1
    iptables -I INPUT -p tcp --destination-port 81 -j ACCEPT
  4. 更改lighttpd配置文件,启用PHP及SSL证书

    SSH客户端输入命令vi /opt/etc/lighttpd/lighttpd.conf,在文件末尾加入下列内容:

    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
    server.modules += ( "mod_fastcgi",
    "mod_access",
    "mod_rewrite"
    )

    fastcgi.server = (
    ".php" =>
    ( "localhost" =>
    ( "socket" => "/opt/tmp/php-fcgi.sock",
    "bin-path" => "/opt/bin/php-fcgi",
    "max-procs" => 10,
    "min-procs" => 10,
    "bin-environment" =>
    ( "PHP_FCGI_CHILDREN" => "2",
    "PHP_FCGI_MAX_REQUESTS" => "1000"
    )
    )
    )
    )

    $HTTP["url"] =~ "^/owncloud/data/" {
    url.access-deny = ("")
    }

    $HTTP["url"] =~ "^/owncloud($|/)" {
    dir-listing.activate = "disable"
    }
    $SERVER["socket"] == ":443" {
    ssl.engine = "enable"
    ssl.pemfile = "/opt/etc/lighttpd/certs/lighttpd.pem"
    ssl.use-sslv2 = "disable"
    ssl.cipher-list = "TLSv1+HIGH !SSLv2 RC4+MEDIUM !aNULL !eNULL !3DES @STRENGTH"
    }
    $HTTP["scheme"] == "http" {
    $HTTP["host"] == "OwnCloud" {url.redirect = (".*" => "https://%0$0")}
    }
  5. 创建SSL证书(下面的方法不好使。需要的请自己解决SSL证书问题 - 参考文献

    1
    2
    3
    4
    5
    6
    mkdir -p /opt/etc/lighttpd/certs
    cd /opt/etc/lighttpd/certs

    openssl req -new -x509 -days 1095 -nodes \
    -subj "/C=CN/ST=xxxxxx/L=xxxxxx/O=xxxxxx/CN=xxx.xxxxxx.com" \
    -keyout lighttpd.pem -out lighttpd.pem

    把xxxxxx换成你的公司名,后面的一串换成你的域名

  6. 重启lighttpd服务

    1
    /opt/etc/init.d/S80lighttpd restart

配置ownCloud / Nextcloud

  1. 访问网盘

    假设你的路由器网关为192.168.50.1

    • apache:
      • ownCloud登入http://192.168.50.1:81
      • Nextcloud登入http://192.168.50.1:81
    • lighttpd
      • ownCloud登入http://192.168.50.1:81/owncloud
      • Nextcloud登入http://192.168.50.1:81/nextcloud
  2. 创建你的管理员账号。配置数据库为PostgresSQL,用户名输入tor(或ownCloud),密码输入123456,数据库名称为ownCloud

  3. 点击创建,经过极其漫长的等待,网盘至此配置完毕。(我认为是要添加数据库服务开机自启的,但我暂时还没重启过路由器就暂时不折腾了)

大功告成

  • 你可以使用梅林的各种DDNS服务插件来将你的IP动态解析到你的域名,如我就将公网IP动态解析到了m.mzz.pub,于是就可以通过http://m.mzz.pub:81访问了。对了,记得参考着/opt/share/www/owncloud/config/config.sample.php/opt/share/www/owncloud/config/config.php 进行修改添加域名信任。
  • 本文作为一篇随笔,难免会有纰漏之处,敬请指正!谢谢!

进阶配置


修改上传文件大小限制

  1. 打开配置文件

    1
    vi /opt/share/www/owncloud/.htaccess
  2. 找到这两行代码

    1
    2
    php_value upload_max_filesize 513M
    php_value post_max_size 513M
  3. 改成你需要的大小,如10240M**(配置文件分为php5和php7,需要将两处都修改,总共是4个地方)**

lighttpd修改ownCloud URL

This admin manual assumes that the ownCloud server is already accessible under the route /owncloud (which is the default, e.g. https://example.com/owncloud). If you like, you can change this in your web server configuration, for example by changing it from https://example.com/owncloud/ to https://example.com/.

登录页面默认位于/owncloud,比如https://example.com/owncloud,如果你想更改你的web服务配置,比如从https://example.com/owncloud改为https://example.com/,你需要更改这些文件:

  • /opt/etc/lighttpd/lighttpd.conf
  • /opt/share/www/owncloud/config/config.php
  • /opt/etc/php.ini

官方文档只列了前两个,我改了半天都不奏效!!为了解决这个问题我脑浆都炸出来了!!!最后还是谷歌好使啊。。。(当然,也是因为我经验不足)

  1. 修改lighttpd.conf

    1
    vi /opt/etc/lighttpd/lighttpd.conf

    将其中的server.document-root = "/opt/share/www/"改为server.document-root = "/opt/share/www/owncloud/"(最后的/不能漏)

  2. 修改php.ini

    1
    vi /opt/etc/php.ini

    将其中的doc_root = "/opt/share/www"改为doc_root = "/opt/share/www/owncloud" (最后不能加/)

  3. 修改config.php

    1
    vi /opt/share/www/owncloud/config/config.php

    假设你的路由器管理地址为192.168.50.1,则将'overwrite.cli.url' => 'http://192.168.xx.x:81/owncloud/',改为'overwrite.cli.url' => 'http://192.168.xx.x:81/',(最后的/不能漏)

  4. 重启lighttpd

    1
    /opt/etc/init.d/S80lighttpd restart

在折腾的过程中非写不可的巨坑


  1. 使用官方源的话没有网上各种教程中的php5系列,但我发现有php7,可以使用SQLite数据库成功安装

  2. 想把SQLite换成MySQL,结果官方源里面mysql-server其实是MariaDB,我按照mysql的方式初始化数据库之后设置密码失败

  3. 换了个源,这个源有php5,想换MySQL,最终总出现

    内部服务器错误

    服务器发送一个内部错误并且无法完成你的请求。

    请联系服务器管理员,如果多次出现这个错误,请把下面的技术细节包含在您的报告里。

    更多细节能在服务器日志中找到。

    哔了个狗,查询ownCloud日志发现下列语句出现了错误

    CREATE TABLE oc_addressbooks (id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, principaluri VARCHAR(255) DEFAULT NULL, displayname VARCHAR(255) DEFAULT NULL, uri VARCHAR(255) DEFAULT NULL, description VARCHAR(255) DEFAULT NULL, synctoken INT UNSIGNED DEFAULT 1 NOT NULL, UNIQUE INDEX addressbook_index (principaluri, uri), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_bin ENGINE = InnoDB;

    机智的我在mysql里面跑了一下,出现Specified key was too long; max key length is 1000 bytes,按网上教程加入innodb_large_prefix=on来使上限扩展到3000 bytes,但总是不奏效,最后发现这个源的mysql版本是5.1,而这个参数要在5.6以上。

    于是怒杀回官方源继续折腾MariaDB!

  4. 在mysql_install_db的时候总是提示chown: unknown user mysql简直要人命,网上的回答都不能解决问题,折腾了我好几个小时,终于找到救命答案了

    hey guys, seems it works now, im not sure if this is right but i think it’s wot I did.

    I changed the permissions of the var/lib/mysql/mysql directory so user ‘dan’ was the owner.

    Then I ran mysql_install_db

    Then I ran mysqld as dan

    It worked!

    So I can only assume that mysql_install_db doesn’t really work if root is the owner of the folder or something.

    这个叫dancudds的外国佬真的好亲切……

    然鹅并没有什么卵用,这个问题解决之后又会出现/opt/bin/mysql_secure_installation: line 437: stty: not found的问题。你让我一个Merlin上哪给你找centos的stty去?这不是分明为难我Merlin吗?所以说在梅林条件下是无法安装MariaDB了。

  5. 找了一下别的源,找不到armv7的源了,下一步考虑使用别的数据库或者改源代码使适应mysql5.1?

  6. 还是考虑使用PostgregSQL吧!

    ​ 出奇顺利!(一个半小时后留)

  7. 修改ownCloud URL后突然会经常出现500 - Internal Server Error,一会儿好一会儿不好,看了一下console,感觉应该是ownCloud的问题,于是换Nextcloud再试,依然500,换回ownCloud莫名其妙又好了?后来发现多重启几次lighttpd就会好(黑人问号???)。

  8. 考虑可能是lighttp不稳定,决定换apache试试。

    ​ 大获成功!(最后留)

参考文献(部分)


comments powered by HyperComments
文章目录
  1. 1. ownCloud / Nextcloud
    1. 1.1. U盘或移动硬盘
    2. 1.2. 建立SSH连接
    3. 1.3. 安装Entware-NG并安装环境
    4. 1.4. 配置PostgreSQL
    5. 1.5. 安装ownCloud / Nextcloud
    6. 1.6. Web服务器二选一
      1. 1.6.1. Option 1: 安装apache(推荐,500错误较少)
      2. 1.6.2. Option 2: 安装lighttpd(我在使用过程中经常遇到500错误)
    7. 1.7. 配置ownCloud / Nextcloud
    8. 1.8. 大功告成
  2. 2. 进阶配置
    1. 2.1. 修改上传文件大小限制
    2. 2.2. lighttpd修改ownCloud URL
  3. 3. 在折腾的过程中非写不可的巨坑
  4. 4. 参考文献(部分)