利用COS在archlinux搭建nextcloud

Scroll Down

搭建nextcloud


最近发现一款非常棒的笔记软件Joplin,开源、免费、支持Android、IOS、linux、windoes多端同步、支持MarkDown,我非常喜欢。
但是他的多端同步虽然支持OneDrive、Dropbox、WebDAV但是我试了一下,可能因为国内的网络环境,onedrive和dropbox同步很慢,有时甚至会同步出错误。也试了坚果云,但是坚果云空间比较小(相比于onedrive的5t),于是我看上了nextcloud。
腾讯云主机学生优惠,搭配腾讯云的对象存储(COS)最低不到1元/GB,做私有云很划算。开搞!


准备

  • 购买一台云服务器/轻量应用服务器,
  • 利用VPS2ARCH将服务器变成Arch系统;😸
  • 配置Archlinux
  • 在对象储存准备一个储存桶

安装

安装nginx

$sudo pacman -Syu nginx
$sudo systemctl enable --now nginx

安装mariadb

$sudo pacman -S mariadb
$sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
$sudo systemctl enable --now mariadb
$sudo mysql_secure_installation  #这里一路回车就好了

配置mariadb

$sudo mysql -u root
> create database nextcloud;  #新建一个名为nextclod的数据库
> create user 'nextcloud'@'localhost' identified by 'password';  #新建用户名为nextcloud密码为password的用户
> grant all privileges on nextcloud.* to 'nextcloud'@'localhost' identified by 'password';  #授予权限
> flush privileges;  #刷新
> exit  

安装php7和相关插件

$yay -S php7 php7-apcu php7-fpm php7-gd php7-igbinary php7-imagick php7-intl php7-memcache php7-memcached php7-redis # 一些包可能不在官方仓库,所以需要使用AUR Helper
$sudo vim /etc/nginx/nginx.conf
在http模块添加
include /etc/nginx/conf.d/*.conf;

将location ~ \.php${}取消注释,并修改如下

location ~ \.php${
    root           /usr/share/nginx/html;
    fastcgi_pass   unix:/run/php-fpm7/php-fpm.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

$sudo systemctl reload nginx
$sudo systemctl enable --now php-fpm7
$sudo vim /etc/php7/php.ini
修改memory_limit = 512M
取消以下注释
extension=gd
extension=intl
extension=mysqli
extension=pdo_mysqli

安装nextcloud

配置文件在这my nextcloud config

$sudo pacman -S nextcloud
$sudo chown -R http:http /usr/share/webapps/nextcloud
$sudo mkdir /etc/nginx/conf.d
$sudo vim /etc/nginx/conf.f/nextcloud.conf # 将上面的nextcloud.conf贴上

$sudo vim /etc/php7/php-fpm.d/www.conf
取消注释env[PATH]和env[TMP]
$sudo mkdir /var/nextcloud
$sudo chown http:http /var/nextcloud
$sudo chmod 750 /var/nextcloud
$sudo mkdir -p /usr/share/webapps/nextcloud/apps
$sudo chown -R http:http /usr/share/webapps/nextcloud/{apps,data}
$sudo chmod 750 /usr/share/webapps/nextcloud/{apps,data}
$sudo systemctl edit php-fpm7 将php-fpm7改为
[Service]
ReadWritePaths=/usr/share/webapps/nextcloud/data
ReadWritePaths=/usr/share/webapps/nextcloud/apps
ReadWritePaths=/usr/share/webapps/nextcloud/config
ReadWritePaths=/var/nextcloud
$sudo systemctl enable --now php-fpm7

添加腾讯对象储存bucket

$sudo vim /usr/share/webapps/nextcloud/config/congif.php 
添加以下内容,其中的信息在汝的对象储存控制台
'objectstore' => 
  array (
    'class' => '\\OC\\Files\\ObjectStore\\S3',
    'arguments' => 
    array (
      'bucket' => '桶名',
      'autocreate' => false,
      'key' => '汝的腾讯云key',
      'secret' => '汝的腾讯云secret',
      'hostname' => 'cos.<对象存储所在地区>.myqcloud.com',
      'use_ssl' => true,
    ),

大功告成

访问汝的域名或者服务器IP


后期优化

开启APCU和Redis缓存

$sudo pacman -S Redis
$sudo vim /etc/redis.conf
取消unixsock行注释修改为unixsocket /run/redis/redis.sock
以及unixsocketperm 700 改为770
$sudo usermod -a -G redis http # 将http加入redis组
$sudo systemctl enable --now redis
$sudo vim /usr/share/webapps/nextcloud/config/config.php
在最后一个括号前添加  
  'memcache.local' => '\\OC\\Memcache\\APCu',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'memcache.distributed' => '\\OC\\Memcache\\Redis',
  'redis' => 
  array (
    'host' => '/run/redis/redis.sock',
  )

开启OPcache

$sudo vim /etc/php7/php.ini
取消注释zend_extension=opcache
在[opcache]内容修改如下
opcache.enable = 1 
opcache.interned_strings_buffer = 8 
opcache.max_accelerated_files = 10000 
opcache.memory_consumption = 128 
opcache.save_comments = 1 
opcache.revalidate_freq = 1