文字版,记录和分享一下过程和经历的坑。
操作系统
硬件配置 i5-4200U 双核四线程 1.4GHz的弱鸡CPU,4G内存。
用bootcamp安装了最新版的win10,build 1809。
控制面板\程序\启用或关闭Window功能,打开“适用与Linux的Windows子系统”,以下简称“WSL”。
打开自带应用商店,搜索ubuntu,下载安装,当前版本为Ubuntu 18.04.
打开cmd命令行,输入bash即可进入WSL子系统(以下操作除非特殊说明,均在bash命令行下)。
安装依赖软件
PHP
主要安装php及其扩展
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install openssl php7.2-common php7.2-mcrypt php7.2-cli php7.2-xml php7.2-mysql php7.2-gd php7.2-imap php7.2-intl php7.2-json php7.2-ldap php7.2-imagick php-ssh2 php7.2-recode php7.2-tidy php7.2-xmlrpc php7.2-mbstring php7.2-curl php7.2-redis php7.2-zip php7.2-sqlite3
Apache
默认安装和配置就好,默认网站存放位置/var/www/html
sudo apt install apache2 libapache2-mod-php7.2
mariadb(mysql亦可)
数据库服务,默认配置
sudo apt install mariadb-server
配置root用户密码
mysql
UPDATE mysql.user SET password = PASSWORD('newpassword') WHERE USER = 'root';
FLUSH PRIVILEGES;
完成后重启数据库
sudo service mysql restart
Redis
缓存服务,默认配置
sudo apt install redis
nextcloud安装
安装nextcloud的方式有很多种,都是很简单的。
一键安装脚本
官网提供一键安装脚本:
https://download.nextcloud.com/server/installer/setup-nextcloud.php
创建文件夹
sudo mkdir /var/www/nextcloud
修改权限
sudo chown -R www-data:www-data /var/www/nextcloud
进入文件夹
cd /var/www/nextcloud
下载脚本
sudo -u www-data wget https://download.nextcloud.com/server/installer/setup-nextcloud.php
执行脚本
sudo -u www-data php setup-nextcloud.php
等待下载安装完成,过程中会选择安装路径 按.选择当前(/var/www/nextcloud)即可。
配置apache主页
sudo vim /etc/apache2/sites-enabled/000-default.conf
将其中的DocumentRoot的值改为/var/www/nextcloud
提醒:vim编辑器,非编辑状态hjkl控制上下左右,i进入编辑状态,esc推出编辑状态,非编辑状态下:wq保存退出,非编辑状态下:q!不保存退出,不了解的同学建议搜索vim相关快捷键和操作。
配置完成,重启apache
sudo service apache2 restart
即可打开localhost,观察结果并进行后续操作。
snap安装
该安装方式不需要手动安装依赖软件
sudo snap install nextcloud
等待安装结束即可打开localhost,观察结果并进行后续操作。
其他
手动安装和虚拟机安装以及docker方式在此不再赘述。
nextcloud配置
安装
如果软件包安装顺利,那么这时在win10下打开网页localhost,应该会出现首次运行的配置界面。
填入用户名密码,数据库选择mysql/mariadb,数据库地址localhost:3306,数据库名nextcloud。
选择数据存放位置,比如/home/lidemingzi/yunpan,在命令行创建目录并配置该目录权限
sudo mkdir /home/lidemingzi/yunpan
sudo chown -R www-data:www-data /home/lidemingzi/yunpan
sudo chmod -R 0770 /home/lidemingzi/yunpan
回到网页,确认安装,等待安装结束就会进入nextcloud云盘界面
优化
进入程序目录,编辑配置文件
cd /var/www/nextcloud
sudo vim config/config.php
在array格式的配置里,加入redis的配置
'memcache.local' => '\\OC\\Memcache\\Redis',
'redis' => array (
'host' => 'localhost',
'port' => 6379,
),
'memcache.locking' => '\\OC\\Memcache\\Redis',
配置apache,允许路由转发和设置header
sudo cp /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load
sudo cp /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
开发apache配置文件,在VirtualHost内添加配置
sudo vim /etc/apache2/sites-enabled/000-default.conf
<Directory /var/www/nextcloud>
AllowOverride All
</Directory>
编辑/var/www/nextcloud/.user.ini,修改值
sudo vim /var/www/nextcloud/.user.ini
upload_max_filesize=16G
post_max_size=16G
memory_limit=513M
并新增
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
upload_max_filesize和post_max_size是配置上传文件最大限制。
复制一份到php的配置目录
sudo cp .user.ini /etc/php/7.2/apache2/conf.d/user.ini
重启apache即可
配置外网访问
此处采用云服务器vps转发的方式
采用的是frps一款很方便的开源的局域网穿透工具
https://github.com/fatedier/frp/releases
VPS服务器端
下载对应系统的release包并解压,修改frps.ini
[common]
bind_port = 7000
vhost_http_port = 8080
配置成自启动,以ubuntu为例,新建配置文件
sudo vim /lib/systemd/system/frps.service
写入以下内容
[Unit]
Description=frps service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
#启动服务的命令(此处写你的abc的实际安装目录)
ExecStart=/your/path/frps -c /your/path/frps.ini
[Install]
WantedBy=multi-user.target
配置完成后,可通过 "你的vps域名:8080" 方式访问你本地的nextcloud,当然也可以配置80端口,或者通过配置nginx等的端口转发功能把子域名的80端口转发到8080上。
以nginx为例,在配置文件中http节点内添加配置
server {
listen 80;
server_name cloud.lideyuming.com;
location / {
proxy_pass http://cloud.lideyuming.com:8080;
}
}
本地电脑Win10
下载windows的release包,解压至合适的目录,修改配置文件frpc.ini,x.x.x.x为你的vps地址或者域名
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
[web]
type = http
local_port = 80
custom_domains = www.你要绑定的域名.com
配置在windows下自启动
https://github.com/kohsuke/winsw/releases 下载release包解压
拷贝winsw.exe(可能不叫这个名字)到frpc同目录,新建同名的winsw.xml文件,写入
<configuration>
<!-- ID of the service. It should be unique accross the Windows system-->
<id>FRPC</id>
<!-- Display name of the service -->
<name>frpc client (powered by WinSW)</name>
<!-- Service description -->
<description>内网穿透工具</description>
<!-- Path to the executable, which should be started -->
<executable>frpc.exe</executable>
<arguments>-c frpc.ini</arguments>
<logmode>reset</logmode>
</configuration>
打开windows的cmd,进入winsw的所在目录, 运行
winsw.exe install
安装完成后,在任务管理器的服务标签,找到FRPC服务,并启动。
打开防火墙的80和相关端口
本地电脑WSL
修改配置文件
sudo vim /var/www/nextcloud/config/config.php
在trusted_domains的配置项array中加入你绑定的域名(如果有的话),重启apache
数据迁移和备份
数据迁移
不推荐直接在系统层面对文件进行操作。
如需将旧文件迁移进来,将文件移动到数据存放位置,比如/home/lidemingzi/yunpan/lidemingzi/files,然后进入安装目录执行nextcloud自带的扫描程序,比如:
cd /var/www/nextcloud
sudo -u www-data php occ files:scan --all
备份
nextcloud商店有ftp支持插件,自身也支持webdav访问,在另一台电脑上使用GoodSync等程序定期备份即可。
一些坑
自启动
win10的WSL不能跟随系统启动,需要手动添加启动脚本
新建一个文本文件,改名为wslstartup.bat,里面写入如下内容
powershell.exe -WindowStyle Hidden -c "bash /init.sh "
打开运行,输入shell:startup回车,打开windows启动文件夹,将创建的批处理脚本移动进去
在WSL命令行下,创建init文件,写入以下内容,123456替换为你的密码
sudo vim /init.sh
#!/bin/bash
echo "123456" | sudo -S /usr/sbin/service mysql start
echo "123456" | sudo -S /usr/sbin/service apache2 start
echo "123456" | sudo -S /usr/sbin/service redis-server start
配置权限
sudo chmod 755 /init.sh
sudo chown lidemingzi:lidemingzi /init.sh
挂载的windows盘符的权限问题
在WSL中,win10的c盘d盘,自动挂载在了/mnt/c /mnt/d下,但是这些文件和文件夹的权限都是1001并且无法通过chown和chmod更改,因此需要使用drvfsf方法重新挂载
sudo umount /mnt/c
sudo mount -t drvfs C: /mnt/c -o metadata,uid=1000,gid=1000,umask=22,fmask=11
为了方便,把如下脚本加入到/init.sh中,WSL启动时就执行
echo "123456" | sudo -S /bin/umount /mnt/c
echo "123456" | sudo -S /bin/umount /mnt/d
echo "123456" | sudo -S /bin/mount -t drvfs C: /mnt/c -o metadata,uid=1000,gid=1000,umask=22,fmask=11
echo "123456" | sudo -S /bin/mount -t drvfs P: /mnt/d -o metadata,uid=1001,gid=1001,umask=22,fmask=11
完成
至此,nextcloud的搭建基本完成,nextcloud官网提供桌面和手机客户端,同时有很多插件可供选择,可以使其更好用。