喺 Ubuntu 18.04 安裝 NextCloud 13

半年前已經安裝過一次,最近由於停咗兩次電,個數據庫 (MariaDB database)終於衰咗,搶救倒,可以用 DBeaver remote access 個 database,不過 NextCloud 就 start 唔倒,blank page,即係 NextCloud connect 唔倒 database,搞搞下連 MariaDB 都 start 唔倒,冇法,要重新起過,嘅然係咁,我就連 Ubuntu 都重新安裝過,同時寫低個安裝過程以便日後,你知啦,有第人次就會有第二次… 😅

首先要準備好隻 Ubuntu 18.04,哩個步驟喺 18.04 簡化哂,好易安裝,我諗唔使講,直接跳去安裝 Ubuntu 之後:

 

今次我用 2 粒 CPU Core +16GB RAM +2TB HD,試試用 NextCloud 推薦嘅硬件,咁多 RAM,停電就更大鑊,要做好 backup 先得。😎 先整個 static IP,要 edit 隻
/etc/netplan/50-cloud-init.yaml
未改之前 我就改成咁,你就根據自己需要嚟改啦。
安裝 apache2

#下載/安裝
sudo apt install apache2
#disable directory listing,你可以 manual 改隻 conf 檔案都得
sudo sed -i "s/Options Indexes FollowSymLinks/Options FollowSymLinks/" /etc/apache2/apache2.conf
#啟動隻 apache2
sudo systemctl stop apache2.service
sudo systemctl start apache2.service
sudo systemctl enable apache2.service
安裝 MariaDB

#下載/安裝
sudo apt install mariadb-server mariadb-client
#啟動隻 MariaDB
sudo systemctl stop mariadb.service
sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service
#secure 隻 MariaDB server
sudo mysql_secure_installation
Secure 過程中嘅問答

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): XXXXXXXXXX
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] n
 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!
 
Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
尸
Disallow root login remotely? [Y/n] n
 ... skipping.

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
 
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
安裝 PHP 同埋一啲相關嘅 Modules

#下載/安裝
apt-get install php
#check 下你隻 PHP 係咩 version
php -v
#安裝常用嘅 php 7.2 modules:
apt install php-pear php-fpm php-dev php-zip php-curl php-xmlrpc php-gd php-mysql php-mbstring php-xml libapache2-mod-php
#安裝 nextcloud 要用嘅 moduels,目前係 PHP v7.2
apt install php7.2 libapache2-mod-php7.2 php7.2-common php7.2-mbstring php7.2-xmlrpc php7.2-soap php7.2-apcu php7.2-smbclient php7.2-ldap php7.2-redis php7.2-gd php7.2-xml php7.2-intl php7.2-json php7.2-imagick php7.2-mysql php7.2-cli php7.2-ldap php7.2-zip php7.2-curl
修改 PHP 嘅 default parameters:

#用 vi edit 隻 ini 檔案
sudo vi /etc/php/7.2/apache2/php.ini
#搵出以下幾行,改之
file_uploads = On
allow_url_fopen = On
memory_limit = 512M
upload_max_filesize = 2000M
display_errors = Off
date.timezone = Asia/Hong_Kong
建立 NextCloud database:

#登入 MariaDB
sudo mysql-u root -p
#登入之後,首先 create 隻 database
CREATE DATABASE nextcloud;
#Create 另一個 user,專門俾 NextCloud 用
CREATE USER 'nxstudio'@'localhost' IDENTIFIED BY 'XXXXXXXXXX';
#准哩個 user remote 登入,我諗住可以有備無患啫
GRANT USAGE ON *.* TO 'nxstudio'@'%' IDENTIFIED BY 'XXXXXXXXXX';
#准埋 root user remote 登入
GRANT USAGE ON *.* TO 'root'@'%' IDENTIFIED BY 'XXXXXXXXXX';
#准 user nxstudio 用 database 'nextcloud'
GRANT ALL ON nextcloud.* TO 'nxstudio'@'%' IDENTIFIED BY 'XXXXXXXXXX' WITH GRANT OPTION;
#搞掂,收工
FLUSH PRIVILEGES;
EXIT;
初步測試,DBeaver 用 root 登入成功。 DBeaver 用 nxstudio 登入成功,要指明用 nextcloud 哦,因為 nxstudio 衹可以用預設嘅 database,而 root 就冇限制。
安裝 NextCloud:

#下載最新 NextCloud,目前係 v13.06
cd /tmp && wget https://download.nextcloud.com/server/releases/latest-13.zip
#解壓
unzip latest-13.zip
#抄去 web server directory,我唔選 under /var/www/html,個人習慣,:)
sudo mv nextcloud /var/www/nextcloud/
#更改 owner
sudo chown -R www-data:www-data /var/www/nextcloud/
#更改 permission
sudo chmod -R 755 /var/www/nextcloud/
執正 NextCloud 喺 apache2 嘅 conf 檔案(1):

#Edit conf 檔案 - nextcloud.conf
sudo vi /etc/apache2/sites-available/nextcloud.conf
#我用嘅 conf 檔案,俾內聯網用嘅(http://192.168.12.148/nextcloud/):
Alias /nextcloud "/var/www/nextcloud/"
 

  Options +FollowSymlinks
  AllowOverride All
 
 
  Dav off
 
 
 SetEnv HOME /var/www/nextcloud
 SetEnv HTTP_HOME /var/www/nextcloud
 
執正 NextCloud 喺 apache2 嘅 conf 檔案(2):

#Edit conf 檔案 - nc.domain.conf
sudo vi /etc/apache2/sites-available/nc.domain.conf
#我用嘅 conf 檔案,俾 domain name 用嘅(http://nc.domain.com/):
# Ensure that Apache listens on port 80
#Listen 80

    DocumentRoot "/var/www/nextcloud/"
    ServerName nc.domain.com
    
      Options +FollowSymlinks
      AllowOverride All

      
        Dav off
      

      SetEnv HOME /var/www/nextcloud
      SetEnv HTTP_HOME /var/www/nextcloud
      Satisfy Any

    
啟動:

#Activate 兩隻 conf 檔案
sudo a2ensite nextcloud.conf
sudo a2ensite nc.domain.conf
#apache2 hardening
sudo a2enmod rewrite
sudo a2enmod headers
sudo a2enmod env
sudo a2enmod dir
sudo a2enmod mime
#restart apache2
sudo systemctl restart apache2.srvice
第一次 access 你隻 NextCloud 要輸入嘅資料,填錯就關人囉!我用(順序):

nxstudio
XXXXXXXXXX
/var/www/nextcloud/data
nxstudio
XXXXXXXXXX
nextcloud
localhost

到此,你隻 NextCloud 已經可以用得!🤓 以下係 NextCloud Tuning。

Enable PHP OpCache:

#修改 PHP 隻 ini 檔案
#PHP 用 memory caches,前題係你有安裝 PHP-FPM 又叫(FastCGI),我哋有 :)
sudo vi /etc/php/7.2/fpm/conf.d/10-opcache.ini
#加下面幾行
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
Enable Redis memory cache/ file locking:

#下載/安裝 Redis
sudo apt install redis-server php-redis -y
#修改 /var/www/nextcloud/config/config.php 如果你打算淨係用 Redis 做哂 cache + locking
'memcache.local' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' => array(
'host' => 'localhost',
'port' => 6379,
),
Enable PHP APCu memory cache:

#下載/安裝 PHP APCu
sudo apt install php-apcu -y
#修改 /var/www/nextcloud/config/config.php 如果你打算用 Redis 做 locaking 同時用 PHP ACPu 做 cache
'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' => array(
'host' => 'localhost',
'port' => 6379,
),

如果你部機 RAM 得 2GB 或以下,建議淨係用 Redis,唔好同時用 PHP APCu,我有 16GB 當然可以了。😇

*** 重啟 apache2,全篇完哂***