onmp 指的是 OpenWrt、Nginx、Mariadb、PHP,用于搭建网站应用的必备三件套,得益于 OpenWrt 的开放性,现在可以很方便的在路由器上搭建网站应用,以利用全年在线的路由器发挥更大价值。这里以搭建私有云盘 Nextcloud 为例,演示相关操作。
准备工作
- 确认路由器系统有足够的剩余空间,至少200MB
- 已连接可用的存储设备EXT4格式。(路由器格式化硬盘教程)
- 确认路由器是否已安装luci-i18n-ttyd-zh-cn(可选)
- 确认电脑上已有WinSCP、putty 软件(可选)。
- 路由器已正常联网。
开始操作
- 登录路由器管理页面,打开“服务”-“TTYD”即可进入命令行操作界面(需要谷歌浏览器)。
- 或者使用电脑端的 putty SSH登录路由器命令行操作界面。
#更新软件列表
opkg update
#安装Mariadb
opkg install luci-i18n-mariadb-zh-cn
#初始化数据库,自动生成数据库目录。默认路径/mnt/sdb/database(x86平台)其它默认为/mnt/sda/database
#如果你使用的存储路径不同,请先修改 Mariadb 的“服务器配置”,即 /etc/mysql/conf.d/50-server.cnf
#搜索 datadir 按需修改即可。
mysql_install_db
#启用并运行数据库服务器
uci set mysqld.general.enabled=1
uci commit mysqld
service mysqld start
#初始化安全设置,并设置 root 账号密码(此 root 账号为 Mariadb 专用,和操作系统的 root 账号无关。)
mysql_secure_installation
#出现提示先按回车,接着会提示是否设置 root 账号密码,输入 y 确认即可开始配置密码。
#注意:为 root 账号配置完密码后,会提示是否禁止 root 账号远程登录,如果你要使用 phpadmin 登录 root 用户,请选否。
#安装 PHP 套装
opkg install luci-i18n-php8-zh-cn
#启用并运行 PHP 平台
uci set php8-fpm.@base[0].enabled=1
uci commit php8-fpm
service php8-fpm start
#安装 Nginx 服务器
opkg install luci-i18n-nginx-zh-cn
#创建网站根目录
mkdir -p /mnt/sdb/www
#修改目录权限
chown ftp:ftp /mnt/sdb/www
#进入一个存储目录
cd /mnt/sdb
#下载 nextcloud 压缩包
wget https://download.nextcloud.com/server/releases/latest.zip
#解压 nextcloud 到网站目录
unzip -o latest.zip -d /mnt/sdb/www
#修改 nextcloud 目录权限
chown -R ftp:ftp /mnt/sdb/www/nextcloud
#使用 root 账号登录数据库控制台
mysql -u root -p
#创建数据库
CREATE DATABASE nextcloud CHARSET utf8mb4 COLLATE utf8mb4_bin;
#创建数据库用户和密码(仅允许本机登录)
CREATE USER nextcloud@localhost IDENTIFIED BY 'password';
#如果要允许从任何主机登录,则参照如下命令(可选)
CREATE USER 'nextcloud'@'%' IDENTIFIED BY 'password';
#赋予用户权限(为数据库关联账号)
GRANT ALL PRIVILEGES ON nextcloud.* TO nextcloud@localhost;
#如果要允许从任何主机连接数据库,则参照如下命令(可选)
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'%';
#刷新权限表
FLUSH PRIVILEGES;
#退出
EXIT
# nextcloud 也可直接使用数据库的 root 用户。( nextcloud 会自动创建新的数据库和用户)
# Nginx 配置文件目录为 /etc/nginx
#预设的常用 PHP 程序配置文件模板在 /etc/nginx/conf.d,按需进行简单修改后即可投入使用。
#当所需的 Nginx 配置文件修改完毕后,再启用并运行 Nginx
uci set nginx.@base[0].enabled=1
uci commit nginx
service nginx start
最后打开浏览器开始使用 Nextcloud,按照页面提示配置即可。
拓展阅读
1. 如果 nextcloud 提示需要修复数据库索引,执行下列命令即可。
# 进入 nextcloud 程序目录。
cd /mnt/sdb/www/nextcloud
# 执行 nextcloud 的数据库修复命令。
sudo -u ftp php-cli occ db:add-missing-indices
sudo -u ftp php-cli occ db:convert-filecache-bigint
2. 登录 nextcloud 管理员账户后,进入 “基本设置”-“后台任务” 改为 Cron,每15分钟执行 nextcloud 的默认维护脚本。
然后打开路由器管理界面 “系统”-“计划任务”,添加如下参数:
*/15 * * * * sudo -u ftp php-cli -f /mnt/sdb/www/nextcloud/cron.php
然后重新启动计划任务程序。
service cron restart
3. 禁止 nextcloud 新建用户生成默认文件,添加下列参数至 /mnt/sdb/www/nextcloud/config/config.php
'skeletondirectory' => '',
4. 设置 nextcloud 默认界面简体中文和默认区域为中国,以便新建用户首次登陆即为中文界面,添加下列参数至 /mnt/sdb/www/nextcloud/config/config.php
'default_language' => 'zh_CN',
'default_locale' => 'zh_Hans_CN',
5. 启用 Redis 缓存,需要先安装 redis-server。
opkg install luci-i18n-redis-zh-cn
echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
reboot
# 然后前往界面勾选启用即可,如果无法运行,请检查 /etc/redis.conf 内的数据库路径,
# 默认为: dir /mnt/sdb/www
# 请确认路径是否可用,权限是否正确,请根据实际情况自行调整。
再将下列参数添加至 /mnt/sdb/www/nextcloud/config/config.php,以便启用 PHP 缓存。
'filelocking.enabled' => true,
'memcache.local' => '\OC\Memcache\Redis',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' =>
array (
'host' => '/var/run/redis.sock',
'port' => 0,
'dbindex' => 0,
'timeout' => 3,
),
6. 如果通过 FTP 或其它方式上传文件至 nextcloud 用户文件目录内,想手动添加至数据库中,则执行刷新命令即可。
# 进入 nextcloud 程序目录。
cd /mnt/sdb/www/nextcloud
# 执行 nextcloud 的文件扫描命令。
sudo -u ftp php-cli occ files:scan --all
7. 默认情况下,上传文件过程中会被自动分片保存(10MB),待上传完毕后,再自动合成为完整的文件。
这种方式的优点是兼容性好,缺点是文件合成时需要消耗大量的 CPU 时间,以及需要进行额外的磁盘读写操作。
这种方式也会导致上传速度受限,即使在局域网中也无法满速上传。
如果你希望直接上传完整的文件,避免进行文件分片合成的步骤,请参照如下操作:
# 进入 nextcloud 程序目录。
cd /mnt/sdb/www/nextcloud
# 设置 nextcloud 不限制文件块大小。
sudo -u ftp php-cli occ config:app:set files max_chunk_size --value 0
然后修改 PHP “主要配置”,即 /etc/php.ini
# 修改 PHP 上传文件的临时目录。
# 原配置:
upload_tmp_dir = "/tmp"
# 修改为,例如:
upload_tmp_dir = "/mnt/sdb/www"
# 注意:请确认目录权限,必须保持与 PHP 进程用户权限一致,否则将导致无法写入文件。
8. 如果想修改上传文件的大小限制,需要修改 nextcloud 的配置文件,即 /etc/nginx/conf.d/nextcloud.conf
# 原配置:表示不限制客户端上传文件大小,即禁用对客户端请求主体大小的检查。
client_max_body_size 0;
# 例如:限制最大上传文件大小为 10G,则修改为:
client_max_body_size 10G;
# 重新启动 Nginx 以使修改生效。
service nginx restart