使用桌上型伺服器在Ubuntu環境中安裝nextcloud筆記
Posted on June 16, 2023 (Last modified on July 6, 2023) • 3 min read • 436 words因為Sysnology NAS受到很多資訊安全限制,因此需要一個可靠、安全且高效的方法來管理和存取我的檔案。而Nextcloud,作為一個open source的自建雲平台,提供了完美的解決方案。Nextcloud還提供了一個功能強大的應用生態系統,能輕鬆地在自己的伺服器上建立和運行一個私有的檔案同步和分享平台。透過這個平台,可以方便地存取和共享檔案,並與團隊成員、合作夥伴和客戶合作。
在本文中,我將記錄使用一部華碩桌上型伺服器,以Ubuntu為作業系統,安裝Nextcloud的步驟和過程。
我使用一台2018年的Asus桌上型伺服器為平台,硬碟以美光SSD為開機碟;另外準備了兩顆1T容量不同品牌的傳統硬碟作為主儲存空間。華碩主機板的優勢是內建RAID控制晶片C232,可支援 Intel Rapid Storage Technology enterprise Option ROM Utility。這使得我能直接在BIOS中把硬碟設定為RAID 0、RAID 1、RAID 10與RAID 5;由於我僅準備兩顆硬碟,所以設定為RAIO 0來降低單顆硬碟損壞的風險。
我選擇Ubuntu。好處在於它是一個免費、開源且廣受支持的作業系統。Ubuntu提供了穩定、安全和可靠的運行環境,並且有強大的社群支援和豐富的應用生態系統。它易於安裝和使用,提供直觀的用戶界面和友好的命令列介面。Ubuntu還有持續的更新和安全修補程式,確保系統的安全性和最新功能。此外,Ubuntu支援多種硬體平台,並且在虛擬化和雲端環境中表現出色。總結而言,選擇Ubuntu意味著獲得一個強大、穩定和高度自訂的作業系統,適用於各種用途和使用者需求。 在Ubuntu正體中文站 可以下載 PC 適用的 image,server以穩定為優先,所以我選擇 22.04 LTS的 64位元版本。
下載完成後,我使用 Rufus 把映像檔案寫到隨身碟,然後插到電腦進行安裝。安裝完成後先進行一些基本設定:
設定 Locale,把中文加上去:
sudo dpkg-reconfigure locales
設定時區,選到台灣:
sudo dpkg-reconfigure tzdata
啟動 mDNS: 我的習慣是先在區域網路做設定(就是lab環境),大致上測試都ok了推到production,所以安裝mDNS會比較容易存取。
sudo apt install avahi-daemon
先下載必要的相依模組:
sudo apt update && sudo apt upgrade
sudo apt install apache2 mariadb-server libapache2-mod-php php-gd php-mysql \
php-curl php-mbstring php-intl php-gmp php-bcmath php-xml php-imagick php-zip
建立 Nextcloud 使用的資料庫
先進入 MariaDB,MariaDB是MySQL的孿生兄弟,所以也是執行MySQL:
sudo mysql
建立資料庫並設定連結。
CREATE DATABASE nextcloud;
GRANT ALL ON nextcloud.* TO 'ncadmin'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
EXIT;
從Nextcloud server下載區裡面,COMMUNITY PROJECTS這個區塊找到 GET ZIP file的button,然後複製其連結。然後回到終端機:
wget https://download.nextcloud.com/server/releases/latest.tar.bz2
解壓縮檔案並放到/var/www
sudo tar -jxvf latest.tar.bz2 -C /var/www
設定權限:
sudo chown -R www-data:www-data /var/www/nextcloud
sudo chmod -R 755 /var/www/nextcloud
接著,因為我的RAID硬碟掛載在/home,所以要在那建立存放資料的資料夾,並讓web user可以存取:
sudo mkdir /home/nextcloud
sudo chown www-data:www-data /home/nextcloud
現在可以啟動資料庫與PHP了:
sudo systemctl enable php-fpm
sudo systemctl start php-fpm
sudo systemctl enable mariadb
sudo systemctl start mariadb
我計畫用資料夾的方式設定Apache www server,所以設定檔應該存放在/etc/apache2/sites-available/nextcloud.conf
sudo touch /etc/apache2/sites-available/nextcloud.conf
放進以下的內容:
Alias /nextcloud "/var/www/nextcloud/"
<Directory /var/www/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
<IfModule mod_dav.c>
Dav off
</IfModule>
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>
</Directory>
建立後,執行以下命令讓設定檔生效:
sudo a2ensite nextcloud.conf
系統會提示需要重啟Apache
sudo systemctl reload apache2
Nextcloud需要mod_rewrite模組才能正確運作,執行以下命令來開啟enable:
sudo a2enmod rewrite
另外,推薦啟用的模組還有 mod_headers, mod_env, mod_dir 及 mod_mime:
sudo a2enmod headers
sudo a2enmod env
sudo a2enmod dir
sudo a2enmod mime
建議在Nextcloud上禁用伺服器配置的驗證,並在 <Directory>
部分中添加一行指令來關閉對Nextcloud的驗證。
Satisfy Any
「Pretty URLs」功能,它可以刪除 URL 中的「index.php」部分,使得分享鏈接等 URL 更短、更美觀。其中,「Pretty URLs」是一種常見的技術術語,指的是通過修改 URL 的結構,使其更加易讀、易記、美觀的技術手段。 Web 服務器必須安裝 mod_env 和 mod_rewrite 模組,並且 .htaccess 文件必須可寫入,以便 HTTP 用戶可以對其進行修改。
sudo a2enmod env
sudo a2enmod rewrite
重啟Apache後需要通過圖形安裝向導或使用occ命令在命令行上運行來完成安裝。為了啟用這個功能,需要將Nextcloud目錄的所有權更改為HTTP用戶。
可能會有多個php.ini需要修改,這與系統情形相關,主要是要修改date.timezone
、記憶體限制memory_limit
(系統建議值是512MB),以及 opcache.interned_strings_buffer
(設定高於8的值)
/etc/php/8.1/apache2/php.ini
or
/etc/php/8.1/fpm/php.ini
or ...
到這邊應該可以到瀏覽器,開啟安裝的位址執行安裝精靈。
先安裝相依模組與元件
sudo apt install lsb-release curl gpg
然後新增軟體庫,更新並安裝 Redis 與 APCu:
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
sudo apt-get install redis
sudo apt -y install php-apcu
使用ps ax
驗證redis有執行:
ps ax | grep redis
接著編輯 config.php,在檔案的末端加入以下內容:
'default_phone_region' => 'TW',
'memcache.local' => '\OC\Memcache\APCu',
'filelocking.enabled' => true,
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => '/var/run/redis/redis.sock',
'port' => 0,
'timeout' => 0.0,
),
這個與libmagickcore相關,可以安裝libmagickcore-6.q16-6-extra
sudo apt install libmagickcore-6.q16-6-extra
若在區域網路內測試沒甚麼問題,可以準備把機器丟上internet。我的機器一樣會躲在防火牆後面,您可以選擇把機器丟到DMZ或是用port forward的方式讓機器上internet。
設定精靈預設僅會把您第一次執行時輸入的網址設為信任網域,因此若您像我一樣先在區域網路上作業,那麼預設的信任網域將無法在internet上提供服務,所以需要修改config.php
的trusted_domains:
信任網域可以設定多個,原來在區域網路上的網域也可以保留。
'trusted_domains' =>
[
'demo.example.org',
'otherdomain.example.org',
'10.111.112.113',
'[2001:db8::1]'
],
雖然我沒打算花錢申請SSL憑證,但還是可以到Let’s Encrypt申請個免費的憑證讓網域可以透過HTTPs存取。 我會使用 Certbot來安裝我的SSL憑證。
Certbot的相依元件是snapd,Ubuntu有預載,因此只需要確認是最新版的:
sudo snap install core
sudo snap refresh core
接著依照官方文件的要求先解除之前安裝的Certbot:
sudo apt-get remove certbot
然後就可以安裝 Certbot了:
sudo snap install --classic certbot
準備Certbot命令: 執行以下命令確保Certbot可以正確執行:
sudo ln -s /snap/bin/certbot /usr/bin/certbot
接著,可以直接取得並安裝憑證:
sudo certbot --apache
步驟是先提供您要取得憑證的網域名稱,依照前文的說明,網址必須在internet上且可以存取port。通常很快會直接安裝完成,而且Certbot還會設定自動更新憑證程序。
接著可以用https開啟您的網址,到此應該完成設定可以使用了。
執行 cron.php
使用作業系统的 cron 功能是執行定期任務的首選方法。此方法使得可以在不受 Web server 既有限制下執行必要的工作。
sudo crontab -u www-data -e
加上這行:
*/5 * * * * php -f /var/www/nextcloud/cron.php --define apc.enable_cli=1