๐Ÿ ํ™ˆ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ๐Ÿ  ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€

์ƒˆ์–‘ยท2021๋…„ 3์›” 7์ผ
2

ํ™ˆ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ

๋ชฉ๋ก ๋ณด๊ธฐ
9/12
post-thumbnail

๊ฐœ์š”


Nextcloud ๋Š” Dropbox, Google Drive, Onedrive ์ฒ˜๋Ÿผ ์›น์ด๋‚˜ ์•ฑ์œผ๋กœ ์ €์žฅ์†Œ๋ฅผ ์ ‘๊ทผํ•ด ๋„คํŠธ์›Œํฌ๋กœ ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.
Nextcloud๋ฅผ ํ™ˆ์„œ๋ฒ„์— ์„ค์น˜ํ•˜์—ฌ ์ž์‹ ์˜ ํ•˜๋“œ๋””์Šคํฌ ์šฉ๋Ÿ‰ ๋งŒํผ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌด๋ฃŒ์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ ๊ทœ์ •๊ณผ ๋ณด์•ˆ์ด ๋งค์šฐ ์ž˜ ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ ‘์† ์ •์ฑ…๋„ ์™„๋ฒฝํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



์ค€๋น„๋ฌผ

  • Nginx
  • Let's Encrypt
  • MariaDB
  • fail2ban
  • php

์ด๋•Œ ๊นŒ์ง€ ๋ชจ๋“  ์ฑ•ํ„ฐ๋ฅผ ๋”ฐ๋ผ์™”๋‹ค๋ฉด ๋‚จ์€ ์„ค์น˜ ํ•ญ๋ชฉ์€ php ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.



php ์„ค์น˜ ๋ฐ ์„ค์ •

Nextcloud ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ ์•Œ๋ ค์ฃผ๋Š” ์šด์šฉ์— ํ•„์š”ํ•œ php ๋ชจ๋“ˆ๋“ค์„ ์„ค์น˜ ํ•ด๋ด…์‹œ๋‹ค.
๊ผญ php-fpm ์„ ๋จผ์ € ์„ค์น˜ํ•˜์…”์•ผ ํ•˜๋Š”๋ฐ ์ด๋Š” Nginx ๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

sudo apt install php-fpm
sudo apt install php-imagick php-common php-mysql php-fpm php-gd php-json php-curl php-zip php-xml php-mbstring php-bz2 php-intl

Nextcloud์— ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ์„ ์—…๋กœ๋“œ ํ•˜๊ธฐ์œ„ํ•ด php ์„ค์ •์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
์•„๋ž˜ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•ด์ฃผ์„ธ์š”.

sudo vim /etc/php/7.4/fpm/php.ini
post_max_size = 4G
upload_max_filesize = 4G

php ์„œ๋น„์Šค๋ฅผ ์žฌ์‹œ์ž‘ ํ•ด์ค์‹œ๋‹ค.

sudo service php7.4-fpm restart




๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ

nextcloud ๋ผ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  nc ๋ผ๋Š” ๊ณ„์ •์„ ๋งŒ๋“ค์–ด์„œ nextcloud ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ชจ๋“  ๊ถŒํ•œ์„ ์ฃผ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

sudo mysql -u root -p
create database nextcloud default character set utf8mb4 collate utf8mb4_general_ci;
create user nc@localhost identified by [๋น„๋ฐ€๋ฒˆํ˜ธ];
grant all privileges on nextcloud.* to nc@localhost;
flush privileges;
exit

[๋น„๋ฐ€๋ฒˆํ˜ธ] ๋Š” Nextcloud ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๋Š” nc ๊ณ„์ •์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.




Nextcloud ๋‹ค์šด๋กœ๋“œ

Nextcloud ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์— ์ ‘์†ํ•ด์„œ ์ตœ์‹ ๋ฒ„์ „ ๋‹ค์šด๋กœ๋“œ ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋ƒ…์‹œ๋‹ค.
https://nextcloud.com/install

.tar.bz ๋ฅผ ์šฐํด๋ฆญ ํ•˜์…”์„œ ๋งํฌ ์ฃผ์†Œ ๋ณต์‚ฌ ๋ฅผ ์„ ํƒํ•˜์„ธ์š”.

๋ณต์‚ฌํ•  ๋งํฌ๋ฅผ ํ† ๋Œ€๋กœ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์••์ถ• ํ’€๊ธฐ๋ฅผ ํ•ฉ์‹œ๋‹ค.

cd ~
wget [๋ณต์‚ฌํ•œ ๋งํฌ ์ฃผ์†Œ]
tar -xvf nextcloud-*.tar.bz2
sudo chown -R www-data:www-data nextcloud
sudo mv nextcloud /var/www
rm nextcloud-*.tar.bz2
  1. ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™
  2. nextcloud ๋ฅผ ํ™ˆํŽ˜์ด์ง€์—์„œ ๋‹ค์šด๋กœ๋“œ
  3. ๋‹ค์šด๋กœ๋“œํ•œ nextcloud ์••์ถ• ํ’€๊ธฐ
  4. ์›น์„œ๋ฒ„์—์„œ ๋™์ž‘ํ•˜๋‹ˆ nextcloud ๋ชจ๋“  ํŒŒ์ผ์„ ์›น ์œ ์ €์ธ www-data ์˜ ๊ถŒํ•œ์œผ๋กœ ๋ณ€๊ฒฝ
  5. ์›น์„œ๋ฒ„ ํด๋”๋กœ nextcloud ์ด๋™
  6. ๋‹ค์šด๋กœ๋“œํ•œ nextcloud ์••์ถ•ํŒŒ์ผ ์‚ญ์ œ




DNS ๋ ˆ์ฝ”๋“œ ์ถ”๊ฐ€

ํ˜ธ์ŠคํŒ… ์ผ€์ด์•Œ์—์„œ DNS ๋ ˆ์ฝ”๋“œ๋กœ Nextcloud๋กœ ์‚ฌ์šฉํ•  ์„œ๋ธŒ ๋„๋ฉ”์ธ์„ ์ถ”๊ฐ€ํ•ฉ์‹œ๋‹ค.
[๊ตฌ๋ฆ„] ๋ถ€๋ถ„์€ ์ ๋‹นํ•œ ์˜์–ด๋กœ ๋ฐ”๊ฟ” ์ž…๋ ฅํ•˜์‹œ๊ณ  ์ด๋ ‡๊ฒŒ ์ƒ์„ฑํ•œ ๋„๋ฉ”์ธ์ด ์ดํ›„์— ์„œ๋ฒ„๋ธ”๋ก ์„ค์ •ํŒŒ์ผ์˜ [Nextcloud๋„๋ฉ”์ธ] ๋ถ€๋ถ„์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ธฐ์กด DNS ๋ ˆ์ฝ”๋“œ์™€ ๋™์ผํ•˜๊ฒŒ A๋ ˆ์ฝ”๋“œ๋กœ์จ IP์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.



Nginx ์„œ๋ฒ„ ๋ธ”๋ก ์ƒ์„ฑ

์•„๋ž˜ ๋‚ด์šฉ์€ Nextcloud ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์˜ docs๋ฅผ ํ† ๋Œ€๋กœ ๋งŒ๋“ค์–ด ๋ณด์•˜๊ณ  ์ •์ƒ ์ž‘๋™ ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
์„œ๋ฒ„ ๋ธ”๋ก ๋‚ด์šฉ ์ค‘ ๊ฐ€์žฅ ๋งŽ์œผ๋ฏ€๋กœ ์ž์„ธํžˆ ํ™•์ธํ•˜์—ฌ ์ž์‹ ์˜ ๋„๋ฉ”์ธ ์ฃผ์†Œ๋งŒ ์ •ํ™•ํžˆ ์ˆ˜์ •ํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

sudo vim /etc/nginx/sites-available/[Nextcloud๋„๋ฉ”์ธ]
upstream php-handler {
    server unix:/run/php/php7.4-fpm.sock;
}

server {
        listen 80;
        server_name [Nextcloud๋„๋ฉ”์ธ];
        return 301 https://$server_name$request_uri;
}

server {
        listen 443 ssl http2;
        server_name [Nextcloud๋„๋ฉ”์ธ];
        root /var/www/nextcloud;

        access_log /var/log/nginx/nextcloud.access.log;
        error_log /var/log/nginx/nextcloud.error.log;

        ssl_certificate /etc/letsencrypt/live/[๋„๋ฉ”์ธ]/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/[๋„๋ฉ”์ธ]/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/[๋„๋ฉ”์ธ]/chain.pem;
        ssl_dhparam /etc/ssl/dhparam.pem;
        ssl_session_timeout 10m;
        ssl_session_cache shared:SSL:10m;
        ssl_session_tickets off;

        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256;
        ssl_ecdh_curve secp384r1;
        ssl_stapling on;
        ssl_stapling_verify on;

        add_header Strict-Transport-Security max-age=15552000;
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        add_header Referrer-Policy no-referrer;
        fastcgi_hide_header X-Powered-By;

        location = /.well-known/carddav {
                return 301 $scheme://$host/remote.php/dav;
        }
        location = /.well-known/caldav {
                return 301 $scheme://$host/remote.php/dav;
        }
        location /.well-known/acme-challenge { }

        client_max_body_size 0;
        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;

        location / {
                rewrite ^ /index.php;
        }
        location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
                deny all;
        }
        location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
                deny all;
        }
        location ~ ^/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) {
                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;
        }
        location ~ ^/(?:updater|oc[ms]-provider)(?:$|\/) {
                try_files $uri/ =404;
                index index.php;
        }
        location ~ ^/.+[^\/]\.(?:css|js|woff2?|svg|gif|map)$ {
                try_files $uri /index.php$request_uri;
                add_header Cache-Control "public, max-age=15778463";
                add_header X-Content-Type-Options nosniff;
                add_header X-XSS-Protection "1; mode=block";
                add_header X-Robots-Tag none;
                add_header X-Download-Options noopen;
                add_header X-Permitted-Cross-Domain-Policies none;
                add_header Referrer-Policy no-referrer;

                access_log off;
        }
        location ~ ^/.+[^\/]\.(?:png|html|ttf|ico|jpg|jpeg|bcmap)$ {
                try_files $uri /index.php$request_uri;
                access_log off;
        }
}

๋ฌธ๋ฒ•์— ์ด์ƒ์ด ์—†๋Š”์ง€ ๊ฒ€์‚ฌ ํ›„ Nginx๋ฅผ ์žฌ์‹œ์ž‘ ํ•ด์„œ ์ƒˆ๋กœ์šด ์„œ๋ฒ„ ๋ธ”๋ก์„ ์ ์šฉํ•ฉ์‹œ๋‹ค.

sudo ln -s /etc/nginx/sites-available/[Nextcloud๋„๋ฉ”์ธ] /etc/nginx/sites-enabled/
sudo nginx -t
sudo service nginx restart




Nextcloud ์ €์žฅ์†Œ ํด๋” ์ƒ์„ฑ

์šฐ์„  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ํ•˜๋“œ๋””์Šคํฌ๊ฐ€ ๋งˆ์šดํŠธ๊นŒ์ง€ ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ด…์‹œ๋‹ค.

sudo fdisk -l
...
Disk /dev/sdb: 1.84 TiB, 2000398934016 bytes, 3907029168 sectors
Disk model: ST2000LM003 HN-M
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

ํ™ˆ์„œ๋ฒ„๋ฅผ ์„ค์น˜ ํ•  ๋•Œ ๋งˆ์šดํŠธ๊นŒ์ง€ ํ•ด์ฃผ์–ด์„œ 1.84TiB์˜ ์šฉ๋Ÿ‰์„ ๊ฐ€์ง„ ๋””์Šคํฌ๊ฐ€ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค.

df -h
...
/dev/sdb        1.8T   77M  1.7T   1% /srv
...

๋งˆ์šดํŠธ๊ฐ€ ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ตฌ๊ธ€์— ์šฐ๋ถ„ํˆฌ ํ•˜๋“œ๋””์Šคํฌ ์ถ”๊ฐ€ ๋ผ๊ณ  ์น˜๋ฉด ์ž์„ธํ•˜๊ฒŒ ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ˆ ๋ณด๊ณ  ๋”ฐ๋ผํ•ด๋ณด์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ HDD์— ์ €์žฅ์†Œ ํด๋”๋ฅผ ์ƒ์„ฑํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

cd /srv
sudo mkdir nextcloud
sudo chown -R www-data:www-data nextcloud




Nextcloud ์„ค์น˜

์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์ž์‹ ๋งŒ์˜ ํ™ˆ์„œ๋ฒ„ Nextcloud ์ฃผ์†Œ https://[Nextcloud๋„๋ฉ”์ธ] ์— ์ ‘์†ํ•˜๊ณ  ์•„๋ž˜๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ํ•ด๋ณด์„ธ์š”.

๊ด€๋ฆฌ์ž ๊ณ„์ • ๋งŒ๋“ค๊ธฐ

์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ์•”ํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด Nextcloud ์ ‘์† ํ•  ๋•Œ ์‚ฌ์šฉํ•  ๊ณ„์ •์„ ๋งŒ๋“ค๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ํด๋”

HDD๋ฅผ ๋งˆ์šดํŠธ ํ•˜๊ณ  ์ƒ์„ฑํ–ˆ๋˜ nextcloud-data ํด๋”๋ฅผ ๋ฐ์ดํ„ฐ ํด๋”๋กœ ์ง€์ •ํ•ด์ค๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •

๋งŒ๋“ค์—ˆ๋˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•ด์ค๋‹ˆ๋‹ค.
ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํฌํŠธ๋ฒˆํ˜ธ๋Š” 3306 ๋ฒˆ ์ด๋ฏ€๋กœ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

์„ค์น˜ ์™„๋ฃŒ

์•„๋ž˜์ชฝ ์ถ”์ฒœ ์•ฑ ์„ค์น˜ ์ฒดํฌ ํ•ด์ œ๋ฅผ ํ•ด์ค€ ๋’ค ์„ค์น˜ ์™„๋ฃŒ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ์‹œ๋‹ค.


์ผ์ • ์‹œ๊ฐ„ ๋’ค ๋Œ€์‰ฌ๋ณด๋“œ๋กœ ์ ‘์†๋˜์—ˆ๋‹ค๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ ์„ค์น˜๊ฐ€ ๋๋‚œ๊ฒƒ์ž…๋‹ˆ๋‹ค.


ํŒ์—…์ฐฝ์„ ๋‹ซ๊ณ  ์ขŒ์ธก ์ƒ๋‹จ์˜ ํด๋” ๋ชจ์–‘์„ ํด๋ฆญํ•˜์„ธ์š”.


์—ฌ๊ธฐ๊ฐ€ Nextcloud ํŒŒ์ผ ๊ด€๋ฆฌ ํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.

๋ณด์ด๋Š” ํŒŒ์ผ๊ณผ ํด๋”๋“ค์€ ๊ธฐ๋ณธ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ๋“ค์ด๋‹ˆ ์ „๋ถ€ ์‚ญ์ œ ํ•ด์ฃผ์‹œ๊ณ  ์›ํ•˜๋Š” ํŒŒ์ผ์„ ์—…๋กœ๋“œ ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.



Nextcloud ๋ณด์™„

ํ•˜์ง€๋งŒ ์•„์ง ๊ทธ๋ƒฅ ์‚ฌ์šฉํ•˜๊ธฐ์—” ์ด๋ฆ…๋‹ˆ๋‹ค.
์ถ”๊ฐ€์ ์ธ ์ž‘์—…์œผ๋กœ Nextcloud๊ฐ€ ์™„๋ฒฝํžˆ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์™„์„ ํ•ด์ค์‹œ๋‹ค.

์šฐ์ธก ์ƒ๋‹จ ํ”„๋กœํ•„ ์‚ฌ์ง„ ํด๋ฆญ > ์ขŒ์ธก ๋ฉ”๋‰ด ์ค‘ ๊ฐœ์š” ํด๋ฆญ

Nextcloud๊ฐ€ ์„ค์ •์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ์นœ์ ˆํ•˜๊ฒŒ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.
ํ•˜๋‚˜์”ฉ ์ฐจ๊ทผ์ฐจ๊ทผ ํ•ด๊ฒฐํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


php ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ๊ฐ’ ์ฆ๊ฐ€

sudo vim /etc/php/7.4/fpm/php.ini
memory_limit = 1G

์ˆ˜์ •์ด ๋๋‚ฌ์œผ๋‹ˆ php ์„œ๋น„์Šค๋ฅผ ์žฌ์‹œ์ž‘ ํ•ด์ค์‹œ๋‹ค.

sudo service php7.4-fpm restart

Nextcloud ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ๊ณ ์นจ ํ•˜๋ฉด ํฌ๋ฆฌํ‹ฐ์ปฌ ์˜ค๋ฅ˜์ธ ๋นจ๊ฐ„ ๊ธ€์”จ๊ฐ€ ์‚ฌ๋ผ์ง„ ๊ฒƒ์ด ํ™•์ธ๋ฉ๋‹ˆ๋‹ค.


php PATH ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •

sudo vim /etc/php/7.4/fpm/pool.d/www.conf
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

์ด ๋‚ด์šฉ๋“ค ์ œ์ผ ์•ž์— ์ฃผ์„ ; ์ด ๋ถ™์–ด์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
; ์„ ์ œ๊ฑฐํ•ด ์ค์‹œ๋‹ค.

๋‚ด์šฉ์€ 409๋ฒˆ ์งธ ์ค„ ๊ทผ์ฒ˜์— ๋‚˜ํƒ€๋‚˜์ ธ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜์ •์ด ๋๋‚ฌ๋‹ค๋ฉด php๋ฅผ ์žฌ์‹œ์ž‘ ํ•ด์ฃผ์„ธ์š”.

sudo service php7.4-fpm restart



Nginx ์„œ๋ฒ„ ๋ธ”๋ก ์ˆ˜์ •

sudo vim /etc/nginx/sites-available/[Nextcloud๋„๋ฉ”์ธ]

X-Frame-Options ํ—ค๋” ์ถ”๊ฐ€

์šฐ์„  ๋Œ€๋žต 34๋ฒˆ์งธ ์ค„์— Strict-Transport-Security ํ—ค๋” ์ถ”๊ฐ€ ๋ถ€๋ถ„์ด ์žˆ์„ํ…๋ฐ ๊ทธ ์•„๋ž˜์— X-Frame-Options ์•„๋ž˜ ๋‚ด์šฉ์„ ๋„ฃ์–ด์ฃผ์„ธ์š”.

add_header X-Frame-Options "SAMEORIGIN" always;

well-knwon ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ

50๋ฒˆ์งธ ์ค„์— location /.well-known/acme-challenge {} ๋‚ด์šฉ์ด ์žˆ์„ ํ…๋ฐ ๋ฐ”๋กœ ๋ฐ‘์— ์•„๋ž˜ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”.

location ^~ /.well-known {
        return 301 /index.php$uri;
}

์ˆ˜์ •์ด ๋๋‚ฌ๋‹ค๋ฉด Nginx ์„œ๋น„์Šค๋ฅผ ์žฌ์‹œ์ž‘ ํ•ด์ฃผ์„ธ์š”.

sudo service nginx restart



nextcloud ์ „ํ™” ์ง€์—ญ ์ถ”๊ฐ€

sudo vim /var/www/nextcloud/config/config.php
'default_phone_region' => 'KR'

๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์— default_phone_region ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”.

์ˆ˜์ •์ด ๋๋‚ฌ๋‹ค๋ฉด Nginx ์„œ๋น„์Šค๋ฅผ ์žฌ์‹œ์ž‘ ํ•ด์ฃผ์„ธ์š”.

sudo service nginx restart



๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ ๊ตฌ์„ฑ ๋ฐ ๋ชจ๋“ˆ ์ถ”๊ฐ€

๋จผ์ €, OPcache ๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š”๋ฐ php 5.5 ๋ฒ„์ „ ์ดํ›„์— ์ž๋™์œผ๋กœ ์„ค์น˜๋œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†๊ณ  OPcache ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ php ์„ค์ •๊ฐ’ ๋ณ€๊ฒฝํ•ฉ์‹œ๋‹ค.

sudo vim /etc/php/7.4/fpm/php.ini

vim ๋ช…๋ น๋ชจ๋“œ์—์„œ /opc ๋ผ๊ณ  ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ๋ผ์ธ์ธ ๋Œ€๋žต 1766๋ฒˆ์งธ ์ค„๋กœ ๋ฐ”๋กœ ์ด๋™ ํ•ด์ค๋‹ˆ๋‹ค.
์ฃผ์„ ๋˜์–ด ์žˆ์œผ๋ฉด ํ’€๊ณ  ์•„๋ž˜ ๋‚ด์šฉ์œผ๋กœ ๋ณ€๊ฒฝ ํ•ด์ฃผ์„ธ์š”.

[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.max_wasted_percentage=5
opcache.validate_timestamps=1
opcache.revalidate_freq=2

Nextcloud์— ํ•„์š”ํ•œ ์ถ”๊ฐ€์ ์ธ ํŒจํ‚ค์ง€ ์„ค์น˜

๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ์— ํ•„์š”ํ•œ APCu์™€ ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๋„์›€๋˜๋Š” php ๋ชจ๋“ˆ๋“ค์„ ์ถ”๊ฐ€์ ์œผ๋กœ ์„ค์น˜ํ•ฉ์‹œ๋‹ค.

sudo apt install php-apcu php-bcmath php-gmp imagemagick -y

Nextcloud์— APCu ๋ชจ๋“ˆ ๋ฐ˜์˜

sudo vim /var/www/nextcloud/config/config.php
'filesystem_check_changes' => 1,
'memcache.local' => '\OC\Memcache\APCu',
  • filesystem_check_changes sftp, transmission ์™€ ๊ฐ™์ด ์›น ๋˜๋Š” ์•ฑ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์„œ๋น„์Šค์—์„œ Nextcloud ๋ฐ์ดํ„ฐ ํด๋”์— ํŒŒ์ผ ๋“ฑ์„ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ ์ถ”๊ฐ€๋œ ํŒŒ์ผ์„ ์ž๋™์œผ๋กœ ์ธ์‹ํ•ด ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ๋Š” ๊ฒƒ
  • memcache.local ๋ฐฉ๊ธˆ ์„ค์น˜ํ•œ APCu ๋ชจ๋“ˆ์„ Nextcloud ์ ์šฉํ•˜๋Š” ๊ฒƒ

์ˆ˜์ •๊ณผ ์„ค์น˜๊ฐ€ ๋๋‚ฌ๋‹ค๋ฉด php๋ฅผ ์žฌ์‹œ์ž‘ ํ•ด์ฃผ์„ธ์š”.

sudo service php7.4-fpm restart
sudo service nginx restart

๋“œ๋””์–ด ๋๋‚ฌ์Šต๋‹ˆ๋‹ค.
์ด์ œ Nextcloud ํŽ˜์ด์ง€์— ์ ‘์†ํ•ด ๋ด…์‹œ๋‹ค.

Nextcloud ๋ชจ๋“  ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด์ œ ์•ˆ์ •์ ์œผ๋กœ Nextcloud ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค!



fail2ban ์ ์šฉ

Nextcloud๋Š” ๋กœ๊ทธ์ธ ์—ฌ๋Ÿฌ๋ฒˆ ์‹คํŒจํ–ˆ์„ ๊ฒฝ์šฐ ์ž์ฒด์ ์œผ๋กœ ์ˆ˜์‹ญ์ดˆ๋™์•ˆ ๋กœ๊ทธ์ธ์„ ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ •๋„๋กœ ๋งŒ์กฑํ•˜๋Š” ์‚ฌ๋žŒ์€ ๊ตณ์ด fail2ban์„ ์ ์šฉํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.
์ €๋Š” ์†Œ์ค‘ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” Nextcloud์˜ ์•ˆ์ „์„ ์œ„ํ•ด SSH์™€ ๊ฐ™์ด ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Nextcloud ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ ์ œ๊ณตํ•˜๋Š” ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ jail์„ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


ํ•„ํ„ฐ

Nextcloud ํ™ˆํŽ˜์ด์ง€์—์„œ ๋ฐ”๋กœ ๋“ค๊ณ ์˜จ ํ•„ํ„ฐ ์ฝ”๋“œ๋ผ ์ˆ˜์ •ํ•  ํ•„์š”์—†์ด ์ž‘์„ฑํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

sudo vim /etc/fail2ban/filter.d/nextcloud.conf
[Definition]
_groupsre = (?:(?:,?\s*"\w+":(?:"[^"]+"|\w+))*)
failregex = ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Login failed:
            ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Trusted domain error.
datepattern = ,?\s*"time"\s*:\s*"%%Y-%%m-%%d[T ]%%H:%%M:%%S(%%z)?"



๊ฐ์˜ฅ

Nextcloud์— ๋Œ€ํ•œ fail2ban ๊ทœ์น™์„ ์„ค์ •ํ•ฉ์‹œ๋‹ค.
fail2ban์„ ์„ค์น˜ํ•˜๊ณ  ssh์— ์ ์šฉํ•  ๋•Œ maxretry, bantime, findtime์„ jail.local์— ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ๋˜‘๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์—ฌ๊ธฐ์„œ ๊ตณ์ด ์ง€์ •ํ•ด์ค„ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

sudo vim /etc/fail2ban/jail.d/nextcloud.local
[nextcloud]
backend = auto
enabled = true
port = 80,443
protocol = tcp
filter = nextcloud
logpath = /srv/nextcloud/nextcloud.log

logpath ๋Š” nextcloud ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ ํด๋”์— ์žˆ๋Š” ๋กœ๊ทธํŒŒ์ผ์„ ์ ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.



์ ์šฉ ๋ฐ ํ™•์ธ

์‹คํ–‰ ํ™•์ธ

sudo service fail2ban restart
sudo fail2ban-client status nextcloud
Status for the jail: nextcloud
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- File list:        /srv/nextcloud/nextcloud.log
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:

์ถœ๋ ฅ ๋‚ด์šฉ์ด ์œ„์™€ ๊ฐ™๋‹ค๋ฉด ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์ œ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์Šค๋งˆํŠธํฐ์˜ ๋ชจ๋ฐ”์ผ ๋ฐ์ดํ„ฐ ํ™˜๊ฒฝ์—์„œ Nextcloud ํŽ˜์ด์ง€์— ์ ‘์†ํ•ด ๋กœ๊ทธ์ธ 5๋ฒˆ์„ ์‹คํŒจํ•ด๋ด…์‹œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ๋ฒค ๋‹นํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐจ๋‹จ ํ™•์ธ

sudo fail2ban-client status nextcloud
Status for the jail: nextcloud
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     5
|  `- File list:        /srv/nextcloud/nextcloud.log
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   223.39.149.171

Banned IP List ์— ์Šค๋งˆํŠธํฐ ์™ธ๋ถ€ IP๊ฐ€ ์ƒ๊ฒผ๋‹ค๋ฉด ์ฐจ๋‹จ๋„ ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์ œ ๋งˆ์Œ ํŽธํ•˜๊ฒŒ ํด๋ผ์šฐ์Šค ์Šคํ† ๋ฆฌ์ง€ Nextcloud๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์›๋ž˜ ๋‹ค์Œ ์ฑ•ํ„ฐ์—์„œ Nextcloud์—์„œ ์›น๊ธฐ๋ฐ˜์œผ๋กœ ๋ฌธ์„œ ์ž‘์—…(์›Œ๋“œ, ํŒŒ์›Œํฌ์ธํŠธ, ์—‘์…€) ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋Š” OnlyOffice๋ฅผ ์„ค์น˜ํ•ด๋ณด๋ ค ํ–ˆ๋Š”๋ฐ ์‚ฌ์šฉ๋ฅ ์ด ๊ทธ๋‹ฅ ๋งŽ์ง€ ์•Š๊ณ  Onedrive ์‚ฌ์šฉ์„ ๋ณ‘ํ–‰ํ•˜๊ธฐ์— Nextcloud์˜ ์˜คํ”ผ์Šค ์„œ๋ฒ„๋Š” ๊ตณ์ด ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ํ™ˆ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ ์‹œ๋ฆฌ์ฆˆ์—์„œ๋Š” ๋‹ค๋ฃจ์ง€ ์•Š์„ ๊ฒƒ์ด๋ฏ€๋กœ ํ˜น์‹œ๋ผ๋„ ์„ค์น˜ํ•ด๋ณด๊ณ  ์‹ถ์œผ์‹œ๋ฉด ๊ตฌ๊ธ€์— ์šฐ๋ถ„ํˆฌ Onlyoffice ์„œ๋ฒ„ ์„ค์น˜ ๋ผ๊ณ  ๊ฒ€์ƒ‰ํ•ด๋ณด์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Nextcloud ์šฉ๋Ÿ‰์„ ๋Š˜๋ฆฌ๊ณ  ์‹ถ์œผ์‹œ๋ฉด ํ•˜๋“œ๋””์Šคํฌ๋ฅผ ์ถ”๊ฐ€ ์žฅ์ฐฉํ•˜์—ฌ Raid ๊ตฌ์„ฑ์„ ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
Raid ๊ตฌ์„ฑ์ด ์–ด๋ ค์šฐ์‹  ๋ถ„์€ /srv ์™€ ๊ฐ™์ด ์ ๋‹นํ•œ ํด๋”์— ๋งˆ์šดํŠธ ํ•œ ๋’ค Nextcloud ์ž์ฒด ๊ธฐ๋Šฅ์˜ ๋””์Šคํฌ ์ถ”๊ฐ€๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

profile
์•ˆ๋…•, ์„ธ์ƒ!

2๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2024๋…„ 8์›” 30์ผ

์ž์„ธํ•œ ํฌ์ŠคํŒ… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!!
๋•๋ถ„์— ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„ ๊ทผ๋ฐ ์ปดํ“จํ„ฐ๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  ๋‹ค์‹œ ํด๋ผ์šฐ๋“œ๋ฅผ ๋„์šฐ๊ณ  ์‹ถ์„๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”??

1๊ฐœ์˜ ๋‹ต๊ธ€