NeXTcloud บน Debian(บทความเก่า)
Warning, Tip, Notice, or Information.
เป็นบทความเก่า อาจจะมีปัญหากับการติดตั้ง พวก php Nging Mariadb แต่ไม่ลบเนื่องจากเนื้อหาในการปรับแต่งบางสวน สามารถไปประยุกต์ใช้ได้ แค่เปลี่ยนรุปแบบการติดตั้งบางส่วน ก็ใช้ได้ ต้องการเก็บไว้อ้างอิงครับ
ข้อมูลในบทความนี้ อ้างอิงจากเว็บไซต์นี้
c-rieger.de/nextcloud-installationsanleitung/
การติดตั้ง Nextcloud บน Debian(บทความเก่า)
Nextcloud เป็นระบบ cloud ฟรี และมีคุณสมบัติที่หลากหลากมาก รวมท้งสามารถติดตั้ง App เพิ่มเติมในส่วนที่จำเป็นได้อีก ที่สำคัญเป็นระบบที่ทีมงานผู้พัฒนาได้พัฒนาอย่างต่อเนื่อง และที่สำคัญอีกอย่างคือฟรี
สำหรับบทความนี้ แนะนำการติดตั้งบน Debian 11 php 8.8 ซึ่งเป็นเวอร์ชั่นล่าสุดขณะเขียนบทความ และสามารถติดตั้งลงบน UBuntu ก็ได้ เพียงแต่งจัดการเกี่ยวกับ Source นิดหน่อย
Debian or Ubuntu Server
เริ่มจากใช้คำสั่ง เพื่อใช้สิทธิ์ Root
#sudo -s
ติดตั้งซอฟต์แวร์แพ็คเก็ต ในส่วนที่จำเป็น
apt install -y curl gnupg2 git lsb-release ssl-cert ca-certificates apt-transport-https tree locate software-properties-common dirmngr screen htop net-tools zip unzip bzip2 ffmpeg ghostscript libfile-fcntllock-perl libfontconfig1 libfuse2 socat
กรณี ยังไม่ได้ติดตั้ง Crul ติดตั้งด้วยคำสั่ง
apt install curl
แก้ไขรายละเอียดของ hosts
vi /etc/hosts
127.0.0.1 localhost
61.7.218.11 jitsi.knupan.xyz jitsi
127.0.1.1 jitsi.knupan.xyz jitsi
Notice, or Information.
ความหมาย
61.7.218.11 คือ ip จริง
jitsi คือชื่อ Host ของ Server
knupan.xyz คือโดเมนเนม
เข้าไปกำหนดชื่อของ Host (กรณีเราติดตั้งกำหนดไว้แล้ว ก็ไม่ต้องไปกำหนดอีก ยกเว้น เราจะแก้ไข๗
vi /etc/hostname
jitsi.knupan.xyz
เข้าไปแก้ไข เกี่ยวกับการอ้างอิงของเวลา เพื่อให้การทำงานเกี่ยวกับเวลาสมบูรณ์
vi /etc/systemd/timesyncd.conf
NTP = time.navy.mi.th ntp.ku.ac.th
สั่งให้เริ่มระบบเวลา ทำงานใหม่
systemctl restart systemd-timesyncd
รีสตาร์ทเครื่อง
reboot now
Add the software sources for nginx, PHP and MariaDB:
sudo -s
cd /etc/apt/sources.list.d
Add the software sources for nginx, PHP and MariaDB:
echo "deb [arch = amd64] https://packages.sury.org/php/ $ (lsb_release -cs) main" | tee php.list
echo "deb [arch = amd64] http://nginx.org/packages/mainline/debian $ (lsb_release -cs) nginx" | tee nginx.list
echo "deb [arch = amd64] http://mirror2.hs-esslingen.de/mariadb/repo/10.6/debian $ (lsb_release -cs) main" | tee mariadb.list
PHP key:
wget -q https://packages.sury.org/php/apt.gpg -O- | apt-key add -
NGINX key:
curl -fsSL https://nginx.org/keys/nginx_signing.key | apt-key add -
MariaDB key:
apt-key adv --recv-keys --keyserver hkps://keyserver.ubuntu.com:443 0xF1656F24C74CD1D8
สั่งอัพเดท และอัพเกรด
apt update && apt upgrade -y
make-ssl-cert generate-default-snakeoil -y
ถอนโปรแกรมตัวเก่าออก หรือที่ไม่จำเป็นบางส่วน
apt remove nginx nginx-extras nginx-common nginx-full -y --allow-change-held-packages
หยุดการทำงานของ apache และปิดการทำงานเสีย
systemctl stop apache2.service && systemctl disable apache2.service
Nginx
การติดตั้ง
apt install nginx -y
เปิดการทำงาน
systemctl enable nginx.service
ย้ายสำรองไฟล์คอนฟิกเดิม ไปสร้างสำรอง และสร้างตัวใหม่ ขึ้นมา
mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak && touch /etc/nginx/nginx.conf
เข้าไปเพิ่มค่า ตามรายละเอียดข้างล่าง และแก้ไขรายละเอียด ip ที่ set_real_ip_from x.x.x.x/24 ให้ใส่ไอพี วงเน็ตเวิร์คของเรา
vi /etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
multi_accept on; use epoll;
}
http {
server_names_hash_bucket_size 64;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log warn;
#set_real_ip_from 127.0.0.1;
#optional, you can add your own subnet, for example:
set_real_ip_from .x.x.x.x.0/24;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
send_timeout 3600;
tcp_nopush on;
tcp_nodelay on;
open_file_cache max=500 inactive=10m;
open_file_cache_errors on;
keepalive_timeout 65;
reset_timedout_connection on;
server_tokens off;
resolver 127.0.0.53 valid=30s;
resolver_timeout 5s;
include /etc/nginx/conf.d/*.conf;
}
สั่งรีสตาร์ท
service nginx restart
หากเกิดปัญหา ตรวจสอบด้วยคำสั่ง
sudo nginx -t
สร้าง ไดเร็กเตอรี่ โดยใช้คำสั่ง ให้สามารถเพิ่ม ไดว์เร็กเตอรี่ย่อยได้
mkdir -p /var/nc_data /var/www/letsencrypt/.well-known/acme-challenge /etc/letsencrypt/rsa-certs /etc/letsencrypt/ecc-certs
เปลี่ยนเจ้าของไดว์เร็กเตอรี่ โดยเปลี่ยนใน ไดเร็กเตอรี่ย่อยด้วย
chown -R www-data:www-data /var/nc_data /var/www
การติดตั้ง php 8.0
apt update && apt install -y php8.0-fpm php8.0-gd php8.0-mysql php8.0-curl php8.0-xml php8.0-zip php8.0-intl php8.0-mbstring php8.0-bz2 php8.0-ldap php8.0-apcu php8.0-bcmath php8.0-gmp php8.0-imagick php8.0-igbinary php8.0-redis php8.0-smbclient php8.0-cli php8.0-common php8.0-opcache php8.0-readline imagemagick
กรณีมีปัญหา ติดตั้ง php 8 ไม่ได้
apt update
apt install -y lsb-release ca-certificates apt-transport-https software-properties-common
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list
wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -
sudo apt update
apt list --upgradable
apt update --fix-missing
ตรวจสอบ version
php-v
ตรวจสอบ module ที่เราติดตั้งว่าครบไหม
php -m
กำหนดเวลา.
timedatectl set-timezone Asia/Bangkok
ใช้คำสั่งสำรองข้อมูล โดย ก็อปปี้ไปวางเป็นไฟล์ใหม่
cp /etc/php/8.0/fpm/pool.d/www.conf /etc/php/8.0/fpm/pool.d/www.conf.bak
cp /etc/php/8.0/fpm/php-fpm.conf /etc/php/8.0/fpm/php-fpm.conf.bak
cp /etc/php/8.0/cli/php.ini /etc/php/8.0/cli/php.ini.bak
cp /etc/php/8.0/fpm/php.ini /etc/php/8.0/fpm/php.ini.bak
cp /etc/php/8.0/fpm/php-fpm.conf /etc/php/8.0/fpm/php-fpm.conf.bak
cp /etc/php/8.0/mods-available/apcu.ini /etc/php/8.0/mods-available/apcu.ini.bak
cp /etc/ImageMagick-6/policy.xml /etc/ImageMagick-6/policy.xml.bak
ใช้คำสั่ง sed เพิ่อกำหนดค่าในไฟล์ www.conf
sed -i "s/;env\[HOSTNAME\] = /env[HOSTNAME] = /" /etc/php/8.0/fpm/pool.d/www.conf
sed -i "s/;env\[TMP\] = /env[TMP] = /" /etc/php/8.0/fpm/pool.d/www.conf
sed -i "s/;env\[TMPDIR\] = /env[TMPDIR] = /" /etc/php/8.0/fpm/pool.d/www.conf
sed -i "s/;env\[TEMP\] = /env[TEMP] = /" /etc/php/8.0/fpm/pool.d/www.conf
sed -i "s/;env\[PATH\] = /env[PATH] = /" /etc/php/8.0/fpm/pool.d/www.conf
sed -i "s/pm.max_children =.*/pm.max_children = 240/" /etc/php/8.0/fpm/pool.d/www.conf
sed -i "s/pm.start_servers =.*/pm.start_servers = 30/" /etc/php/8.0/fpm/pool.d/www.conf
sed -i "s/pm.min_spare_servers =.*/pm.min_spare_servers = 10/" /etc/php/8.0/fpm/pool.d/www.conf
sed -i "s/pm.max_spare_servers =.*/pm.max_spare_servers = 200/" /etc/php/8.0/fpm/pool.d/www.conf
sed -i "s/;pm.max_requests =.*/pm.max_requests = 1000/" /etc/php/8.0/fpm/pool.d/www.conf
sed -i "s/allow_url_fopen =.*/allow_url_fopen = 1/" /etc/php/8.0/fpm/php.ini
sed -i "s/output_buffering =.*/output_buffering = 'Off'/" /etc/php/8.0/cli/php.ini
sed -i "s/max_execution_time =.*/max_execution_time = 3600/" /etc/php/8.0/cli/php.ini
sed -i "s/max_input_time =.*/max_input_time = 3600/" /etc/php/8.0/cli/php.ini
sed -i "s/post_max_size =.*/post_max_size = 10240M/" /etc/php/8.0/cli/php.ini
sed -i "s/upload_max_filesize =.*/upload_max_filesize = 10240M/" /etc/php/8.0/cli/php.ini
sed -i "s/;date.timezone.*/date.timezone = Asia\/\Bangkok/" /etc/php/8.0/cli/php.ini
sed -i "s/memory_limit = 128M/memory_limit = 1024M/" /etc/php/8.0/fpm/php.ini
sed -i "s/output_buffering =.*/output_buffering = 'Off'/" /etc/php/8.0/fpm/php.ini
sed -i "s/max_execution_time =.*/max_execution_time = 3600/" /etc/php/8.0/fpm/php.ini
sed -i "s/max_input_time =.*/max_input_time = 3600/" /etc/php/8.0/fpm/php.ini
sed -i "s/post_max_size =.*/post_max_size = 10240M/" /etc/php/8.0/fpm/php.ini
sed -i "s/upload_max_filesize =.*/upload_max_filesize = 10240M/" /etc/php/8.0/fpm/php.ini
sed -i "s/;date.timezone.*/date.timezone = Asia\/\Bangkok/" /etc/php/8.0/fpm/php.ini
sed -i "s/;session.cookie_secure.*/session.cookie_secure = True/" /etc/php/8.0/fpm/php.ini
sed -i "s/;opcache.enable=.*/opcache.enable=1/" /etc/php/8.0/fpm/php.ini
sed -i "s/;opcache.enable_cli=.*/opcache.enable_cli=1/" /etc/php/8.0/fpm/php.ini
sed -i "s/;opcache.memory_consumption=.*/opcache.memory_consumption=128/" /etc/php/8.0/fpm/php.ini
sed -i "s/;opcache.interned_strings_buffer=.*/opcache.interned_strings_buffer=8/" /etc/php/8.0/fpm/php.ini
sed -i "s/;opcache.max_accelerated_files=.*/opcache.max_accelerated_files=10000/" /etc/php/8.0/fpm/php.ini
sed -i "s/;opcache.revalidate_freq=.*/opcache.revalidate_freq=1/" /etc/php/8.0/fpm/php.ini
sed -i "s/;opcache.save_comments=.*/opcache.save_comments=1/" /etc/php/8.0/fpm/php.ini
sed -i "s|;emergency_restart_threshold.*|emergency_restart_threshold = 10|g" /etc/php/8.0/fpm/php-fpm.conf
sed -i "s|;emergency_restart_interval.*|emergency_restart_interval = 1m|g" /etc/php/8.0/fpm/php-fpm.conf
sed -i "s|;process_control_timeout.*|process_control_timeout = 10|g" /etc/php/8.0/fpm/php-fpm.conf
sed -i '$aapc.enable_cli=1' /etc/php/8.0/mods-available/apcu.ini
sed -i "s/rights=\"none\" pattern=\"PS\"/rights=\"read|write\" pattern=\"PS\"/" /etc/ImageMagick-6/policy.xml
sed -i "s/rights=\"none\" pattern=\"EPS\"/rights=\"read|write\" pattern=\"EPS\"/" /etc/ImageMagick-6/policy.xml
sed -i "s/rights=\"none\" pattern=\"PDF\"/rights=\"read|write\" pattern=\"PDF\"/" /etc/ImageMagick-6/policy.xml
sed -i "s/rights=\"none\" pattern=\"XPS\"/rights=\"read|write\" pattern=\"XPS\"/" /etc/ImageMagick-6/policy.xml
service php8.0-fpm restart
service nginx restart
Mariadb
ติดตั้ง Mariadb
apt update && apt install mariadb-server -y
mysql_secure_installation
ติดตั้งเสร็จ สั่งหยุด Mariadb เพื่อแก้ไขค่าคอนฟิก
service mysql stop
ย้ายไฟล์ my.cnf ไปยังชื่อใหม่
mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
สร้างไฟล์ my.cnf ใหม่ แล้ว copy รายละเอียดข้างล่างลงไป
vi /etc/mysql/my.cnf
[server]
skip_name_resolve = 1
innodb_buffer_pool_size = 128M
innodb_buffer_pool_instances = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 32M
innodb_max_dirty_pages_pct = 90
query_cache_type = 1
query_cache_limit = 2M
query_cache_min_res_unit = 2k
query_cache_size = 64M
tmp_table_size= 64M
max_heap_table_size= 64M
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
[client-server]
!includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mariadb.conf.d/
[client]
default-character-set = utf8mb4
[mysqld]
character_set_server = utf8mb4 collation_server = utf8mb4_general_ci transaction_isolation = READ-COMMITTED binlog_format = ROW innodb_large_prefix=on innodb_file_format=barracuda innodb_file_per_table=1
Warning, Tip, Notice, or Information.
กรณีที่ติดตั้ง Mariadb แล้วมีปัญหา ให้แก้ไข ตามรายละเอียดข้างล่าง
ลบฐานข้อมูลเดิมออก
sudo rm -rf /var/lib/mysql/
sudo rm -rf /etc/mysql/
ขณะติดตั้งใหม่ หากข้อผิดพลาดเกี่ยวกับ แพ็คเก็ต ให้แก้ไขโดยใช้คำสั่ง
sudo dpkg --configure -a
sudo apt-get install -f
sudo dpkg --configure -a
กรณีที่ติดตั้งแล้วมีปัญหามาก อยากจะลบทั้งหมดเพื่อติดตั้งใหม่ ก็คำสั่ง ตามข้างล่าง
apt-get remove --purge mysql*
apt-get remove --purge mysql
apt-get remove --purge mariadb
apt-get remove --purge mariadb*
apt-get --purge remove mariadb-server
apt-get --purge remove python-software-properties
แล้วก็ติดตั้งใหม่ พร้อมกับแพ็คเก็ตที่เกี่ยวข้อง
apt-get install python-software-properties
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
apt-get install software-properties-common
apt-get install mariadb-server mariadb-client
ตรวจสอบรุ่น
mysql -V
กำหนดค่า ความปลอดภัย
mysql_secure_installation
เรียกใช้งาน mariadb เพื่อสร้าง ฐานข้อมูลและผู้ใช้
mysql -u root -p
CREATE DATABASE nextclouddb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER nextclouddbuser@localhost identified by 'nextclouddbpassword';
GRANT ALL PRIVILEGES on nextclouddb.* to nextclouddbuser@localhost;
FLUSH privileges; quit;
แก้ไขให้ตรงกับรายละเอียดฐานข้อมูลของเรานะครับ
แก้ตรง nextclouddb>=ชื่อฐานข้อมูล nextclouddbuser>ชื่อผู้ใช้ nextclouddbpassword> รหัสผ่าน
สั่งให้ Mariadb ทำงาน
service mysql restart
ตรวจสอบความถูกต้องอีกครั้ง
mysql -h localhost -uroot -p -e "SELECT @@TX_ISOLATION; SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA WHERE SCHEMA_NAME='nextcloud'"
SCHEMA_NAME=’nextcloud'” ตรงนี้ ท้ายสุดของคำสั่ง ให้แก้ให้ตรงกับ ฐานข้อมูลของเรานะครับ
redis-server
ติดตั้้ง redis-server
apt update && apt install redis-server
เพื่อป้องกันความผิดพลาด ก็อป ไฟล์คอนฟิก redis.conf ไปเก็บไว้
cp /etc/redis/redis.conf /etc/redis/redis.conf.bak
เพิ่มค่าบางส่วน ให้กับไฟล์ redis.conf โดยใช้คำสั่ง sed
sed -i "s/port 6379/port 0/" /etc/redis/redis.conf
sed -i s/\#\ unixsocket/\unixsocket/g /etc/redis/redis.conf
sed -i "s/unixsocketperm 700/unixsocketperm 770/" /etc/redis/redis.conf
sed -i "s/# maxclients 10000/maxclients 512/" /etc/redis/redis.conf
เปลี่ยนให้ไปอยู่ในกลุ่ม www-data
usermod -aG redis www-data
สำรองไฟล์ sysctl.conf
cp /etc/sysctl.conf /etc/sysctl.conf.bak
เพิ่มค่าเพิ่มเติม
sed -i '$avm.overcommit_memory = 1' /etc/sysctl.conf
reboot
ปรับแต่งค่าคอนฟิกของ Nginx
sudo -s
[ -f /etc/nginx/conf.d/default.conf ] && mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
touch /etc/nginx/conf.d/default.conf
touch /etc/nginx/conf.d/http.conf
touch /etc/nginx/conf.d/nextcloud.conf
vi /etc/nginx/conf.d/http.conf
upstream php-handler {
server unix:/run/php/php8.0-fpm.sock;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name jitsi.knupan.xyz;
root /var/www;
location ^~ /.well-known/acme-challenge {
default_type text/plain;
root /var/www/letsencrypt;
}
location / {
return 301 https://$host$request_uri;
}
}
ตรงค่า server_name jitsi.knupan.xyz; ตรงนี้ แก้ไขให้ตรงกับ ชื่อ host.domain.com ของเรานะครับ
nginx
vi /etc/nginx/conf.d/nextcloud.conf
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name jitsi.knupan.xyz;
ssl_certificate /etc/letsencrypt/rsa-certs/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/rsa-certs/privkey.pem;
ssl_certificate /etc/letsencrypt/ecc-certs/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/ecc-certs/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/ecc-certs/chain.pem;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384';
ssl_ecdh_curve X448:secp521r1:secp384r1;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
client_max_body_size 10G;
fastcgi_buffers 64 4K;
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
add_header Permissions-Policy "interest-cohort=()";
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
fastcgi_hide_header X-Powered-By;
root /var/www/nextcloud;
index index.php index.html /index.php$request_uri;
location = / {
if ( $http_user_agent ~ ^DavClnt ) {
return 302 /remote.php/webdav/$is_args$args;
}
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ^~ /apps/rainloop/app/data {
deny all;
}
location ^~ /.well-known {
location = /.well-known/carddav { return 301 /remote.php/dav/; }
location = /.well-known/caldav { return 301 /remote.php/dav/; }
location /.well-known/acme-challenge { try_files $uri $uri/ =404; }
location /.well-known/pki-validation { try_files $uri $uri/ =404; }
return 301 /index.php$request_uri;
}
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/) { return 404; }
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { return 404; }
location ~ \.php(?:$|/) {
rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+|.+\/richdocumentscode\/proxy) /index.php$request_uri;
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
set $path_info $fastcgi_path_info;
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
fastcgi_read_timeout 3600;
fastcgi_send_timeout 3600;
fastcgi_connect_timeout 3600;
}
location ~ \.(?:css|js|svg|gif|png|jpg|ico)$ {
try_files $uri /index.php$request_uri;
expires 6M;
access_log off;
}
location ~ \.woff2?$ {
try_files $uri /index.php$request_uri;
expires 7d;
access_log off;
}
location /remote {
return 301 /remote.php$request_uri;
}
location / {
try_files $uri $uri/ /index.php$request_uri;
}
}
Warning, Tip, Notice, or Information.
server_name jitsi.knupan.xyz;
แก้ไขตรงนี้ นะครับ ให้ตรงกับที่ต้องการ host.domain.com ของเราเอง
openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
service nginx restart
การติดตั้ง Nextcloud
เข้าไปยังห้อง สำหรับดาวโหลดน์ มาเก็บไว้
cd /usr/local/src
ใช้คำสั่งดาวโหลดและไฟล์ตรวจสอบความสมบูรณ์ของไฟล์ที่ดาวโหลดน์มา
wget https://download.nextcloud.com/server/releases/latest.tar.bz2
wget https://download.nextcloud.com/server/releases/latest.tar.bz2.md5
ตรวจสอบความสมบูรณ์ของไฟล์ที่ดาวโหลดน์มา
md5sum -c latest.tar.bz2.md5 < latest.tar.bz2
แตกไฟล์ และนำไปเก็บไว้ใน Web Document
tar -xjf latest.tar.bz2 -C /var/www && chown -R www-data:www-data /var/www/ && rm -f latest.tar.bz2
ติดตั้ง Acme
adduser --disabled-login acmeuser
usermod -a -G www-data acmeuser
ใช้คำสั่ง ตัวไหน ก็ได้ ระหว่างสองตัวนี้#visudo or vi /etc/sudoers
visudo
vi /etc/sudoers
เข้าไปเพิมสิทธิ์ ว่า ไม่ต้องใช้ พาสเวิร์ด
# User privilege specification
root ALL=(ALL:ALL) ALL
acmeuser ALL=NOPASSWD: /bin/systemctl reload nginx.service
โดยให้เพิ่มค่านี้
acmeuser ALL=NOPASSWD: /bin/systemctl reload nginx.service
เข้าใช้งานในฐานะ acmeuser
su - acmeuser
รับไฟล์ acme.sh
curl https://get.acme.sh | sh
exit
เปลี่ยนสิทธิ์การเข้าถึง ไดเร็คเตอรี่ และเปลี่ยนเจ้าของและกลุ่มของไฟล์ที่เราต้องใช้งาน
chmod -R 775 /var/www/letsencrypt && chmod -R 770 /etc/letsencrypt && chown -R www-data:www-data /var/www/ /etc/letsencrypt
เซ็ตค่า ดีฟอลต์ Set Let’s Encrypt as the default CA for your server
su - acmeuser -c ".acme.sh/acme.sh --set-default-ca --server letsencrypt"
สลับ User อีกครั้ง
su - acmeuser
acme.sh --issue -d ihre.domain.de --server letsencrypt --keylength 4096 -w /var/www/letsencrypt --key-file /etc/letsencrypt/rsa-certs/privkey.pem --ca-file /etc/letsencrypt/rsa-certs/chain.pem --cert-file /etc/letsencrypt/rsa-certs/cert.pem --fullchain-file /etc/letsencrypt/rsa-certs/fullchain.pem --reloadcmd "sudo /bin/systemctl reload nginx.service"
acme.sh --issue -d ihre.domain.de --server letsencrypt --keylength ec-384 -w /var/www/letsencrypt --key-file /etc/letsencrypt/ecc-certs/privkey.pem --ca-file /etc/letsencrypt/ecc-certs/chain.pem --cert-file /etc/letsencrypt/ecc-certs/cert.pem --fullchain-file /etc/letsencrypt/ecc-certs/fullchain.pem --reloadcmd "sudo /bin/systemctl reload nginx.service"
ตรงนี้สำคัญมากว่า เราจะสร้างการเข้ารหัสได้หรือไม่ได้ ต้องจัดการเรื่อง Dns managment ให้ดี
Now request the SSL certificates from Let’s Encrypt and replace your.domain.de with your own domain:
ให้เราเปลี่ยนชื่อจาก iher.domin.de เป็น ชื่อ host.domain.com ของเรา
ออกจากชื่อผู้ใช้ acme
exit
สร้างไฟล์ permissions.sh เพื่อสั่งให้ทำงาน ใน root แล้วเพิ่มรายละเอียดตามข้างล่าง
vi /root/permissions.sh
!/bin/bash
find /var/www/ -type f -print0 | xargs -0 chmod 0640
find /var/www/ -type d -print0 | xargs -0 chmod 0750
chmod -R 775 /var/www/letsencrypt
chmod -R 770 /etc/letsencrypt
chown -R www-data:www-data /var/www /etc/letsencrypt
chown -R www-data:www-data /var/nc_data
chmod 0644 /var/www/nextcloud/.htaccess
chmod 0644 /var/www/nextcloud/.user.ini
exit 0
เปลี่ยนสิทธิ์ ให้สามารถเรียกทำงานได้
chmod +x /root/permissions.sh
การเรียกใช้คำสั่ง
/root/permissions.sh
เพิ่มการจัดการเกี่ยวกับ Certifications ใหม่ และปิดการใช้งานอันเก่า
sed -i '/ssl-cert-snakeoil/d' /etc/nginx/conf.d/nextcloud.conf
sed -i s/#\ssl/\ssl/g /etc/nginx/conf.d/nextcloud.conf
สั่ง restart nginx
service nginx restart
ใส่คำสั่งเพื่อให้ renew the SSL certificates เมื่อหมดอายุ
crontab -l -u acmeuser
การปรับแต่ง Nextcloud
การปรับแต่งผ่าน command โดยเราจะต้องกำหนดค่าต่างๆๆ ให้ตรงกับของเรา
sudo -u www-data php /var/www/nextcloud/occ maintenance:install --database "mysql" --database-name "nextcloud" --database-user "Userpxxx" --database-pass "PxxxxxPsswd" --admin-user "admin-user" --admin-pass "Admin_pass" --data-dir "/var/nc_data"
เปลี่ยนให้ตรงกับค่าต่างๆ ของเราเอง
nextcloud=ชื่อฐานข้อมูล
Userpxxx=ชื่อผู้ใช้
pxxxpsswd= รหัสผ่านฐานข้อมูล
กำหนด admin-user และ admin-pass เพื่อเข้าจัดการ Nextcloud
การปรับแต่งไฟล์คอนฟิก ของ nextcloud ซึ่งในส่วนนี้ คือการเพิ่มค่า โดเมน ให้แก้ไขตรง value=host.domain.com ของเราเองนะครับ
sudo -u www-data php /var/www/nextcloud/occ config:system:set trusted_domains 0 --value=jitsi.knupan.xyz
sudo -u www-data php /var/www/nextcloud/occ config:system:set overwrite.cli.url --value=https://jitsi.knupan.xyz
สำรองข้อมูลก่อน กันพลาด
sudo -u www-data cp /var/www/nextcloud/config/config.php /var/www/nextcloud/config/config.php.bak
แก้ไขไฟล์ คอนฟิก
#sudo -u www-data sed -i 's/^[ ]*//' /var/www/nextcloud/config/config.php
#sudo -u www-data sed -i '/);/d' /var/www/nextcloud/config/config.php
ใช้คำสั่ง cat เพิ่มข้อมูลลงในไฟล์ config.php ของ Nextcloud
sudo -u www-data cat <>/var/www/nextcloud/config/config.php
'activity_expire_days' => 14,
'auth.bruteforce.protection.enabled' => true,
'blacklisted_files' =>
array (
0 => '.htaccess',
1 => 'Thumbs.db',
2 => 'thumbs.db',
),
'cron_log' => true,
'default_phone_region' => 'TH',
'enable_previews' => true,
'enabledPreviewProviders' =>
array (
0 => 'OC\Preview\PNG',
1 => 'OC\Preview\JPEG',
2 => 'OC\Preview\GIF',
3 => 'OC\Preview\BMP',
4 => 'OC\Preview\XBitmap',
5 => 'OC\Preview\Movie',
6 => 'OC\Preview\PDF',
7 => 'OC\Preview\MP3',
8 => 'OC\Preview\TXT',
9 => 'OC\Preview\MarkDown',
),
'filesystem_check_changes' => 0,
'filelocking.enabled' => 'true',
'htaccess.RewriteBase' => '/',
'integrity.check.disabled' => false,
'knowledgebaseenabled' => false,
'logfile' => '/var/nc_data/nextcloud.log',
'loglevel' => 2,
'logtimezone' => 'Asia/Bangkok',
'log_rotate_size' => 104857600,
'maintenance' => false,
'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
'overwriteprotocol' => 'https',
'preview_max_x' => 1024,
'preview_max_y' => 768,
'preview_max_scale_factor' => 1,
'redis' =>
array (
'host' => '/var/run/redis/redis-server.sock',
'port' => 0,
'timeout' => 0.0,
),
'quota_include_external_storage' => false,
'share_folder' => '/Freigaben',
'skeletondirectory' => '',
'theme' => '',
'trashbin_retention_obligation' => 'auto, 7',
'updater.release.channel' => 'stable',
);
EOF
Warning, Tip, Notice, or Information.
ในส่วนนี้ หากเราต้องการแก้ไข เพื่อให้ตรงกับที่เราต้องการ เราอาจจะแก้ไข โดยตรงได้จาก นี้ ครับ nextcloud/config/config.php
Modify the “.user.ini”
sudo -u www-data sed -i "s/output_buffering=.*/output_buffering=0/" /var/www/nextcloud/.user.ini
จัดการเรื่องเกี่ยวกับ App ของ Nextcloud
sudo -u www-data php /var/www/nextcloud/occ app:disable survey_client
sudo -u www-data php /var/www/nextcloud/occ app:disable firstrunwizard
sudo -u www-data php /var/www/nextcloud/occ app:enable admin_audit
sudo -u www-data php /var/www/nextcloud/occ app:enable files_pdfviewer
หลังจากนั้น ดำเนิน restart
service nginx stop
service php8.0-fpm stop
service mysql restart
service php8.0-fpm restart
service redis-server restart
service nginx restart
มาถึงจุดนี้ ก็ใช้งาน Cloud ตามที่เราต้องการได้แล้วครับ วิธีการใช้งาน ก็แค่เรียกหน้า ผ่าน Domain ที่เรากำหนดครับ จริงแล้ว ยังมีการปรับแต่งได้อีกครับ แต่หน้าบทความมันยาว และมีปัญหาการเรียกหน้า เดี่ยวจะแยกเป็นอีกบทความให้ครับ