Mr.Green

สร้าง บันทึกและแบ่งปัน

พิมพ์ค้นหาบทความได้ในช่องค้นหา

NeXTcloud บน Debian(บทความเก่า)


Warning, Tip, Notice, or Information.

เป็นบทความเก่า อาจจะมีปัญหากับการติดตั้ง พวก php  Nging Mariadb แต่ไม่ลบเนื่องจากเนื้อหาในการปรับแต่งบางสวน สามารถไปประยุกต์ใช้ได้ แค่เปลี่ยนรุปแบบการติดตั้งบางส่วน ก็ใช้ได้ ต้องการเก็บไว้อ้างอิงครับ

ข้อมูลในบทความนี้ อ้างอิงจากเว็บไซต์นี้

c-rieger.de/nextcloud-installationsanleitung/

การติดตั้ง Nextcloud บน Debian(บทความเก่า)

การติดตั้ง 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 ที่เรากำหนดครับ  จริงแล้ว ยังมีการปรับแต่งได้อีกครับ แต่หน้าบทความมันยาว และมีปัญหาการเรียกหน้า เดี่ยวจะแยกเป็นอีกบทความให้ครับ

Tags:  

Leave a Reply

Your email address will not be published. Required fields are marked *