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