웹사이트 검색

Docker를 사용하여 FileRun을 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. 1단계 - 방화벽 구성\n
    1. 센트 OS/록키 리눅스/알마 리눅스
    2. 우분투/데비안

    1. CentOS/록키 리눅스/알마 리눅스
    2. 우분투
    3. 데비안

    1. CentOS/록키 리눅스/알마 리눅스
    2. 우분투/데비안

    1. 우분투/데비안
    2. CentOS/록키 리눅스/알마 리눅스

    FileRun은 자체 호스팅 파일 동기화 및 공유 웹 기반 애플리케이션입니다. Linux, Windows, NAS 등을 포함한 모든 서버에서 실행할 수 있습니다. 파일은 PWA 앱을 사용하여 웹 및 모바일에서 액세스할 수 있습니다. Nextcloud와 호환되므로 데스크톱 및 모바일 앱을 사용하여 파일에 액세스할 수 있습니다. WebDAV 프로토콜을 사용하여 파일에 액세스할 수도 있습니다. FileRun은 Google 포토 대체품으로도 사용할 수 있으며 사무실 및 이미지 플러그인을 지원합니다.

    FileRun은 최대 10개의 계정을 지원할 수 있는 무료 버전과 더 많은 기능과 계정을 원하는 경우 엔터프라이즈 버전으로 제공됩니다. 이 자습서에서는 Linux 서버에서 Docker 환경을 사용하여 FileRun을 설치하는 방법을 배웁니다. 또한 전체 텍스트 검색 지원을 제공하도록 Elasticsearch를 구성할 것입니다.

    전제 조건

    • A Linux server with a minimum of 2 CPU cores and 2GB of RAM. This tutorial will run on every Linux distribution.

    • A non-root user with sudo privileges.

    • A fully qualified domain name (FQDN) pointing to the server. For our purposes, we will use filerun.example.com as the domain name.

    • Make sure everything is updated.

      ## Ubuntu/Debian
      $ sudo apt update && sudo apt upgrade
      
      ## CentOS/Fedora/Rocky Linux/AlmaLinux
      $ sudo dnf update
      
    • Install basic utility packages. Some of these may already be installed.

      ## Ubuntu/Debian
      $ sudo apt install wget curl nano unzip -y
      
      ## CentOS/Rocky Linux/AlmaLinux
      $ sudo dnf install wget curl nano unzip yum-utils -y
      

    1단계 - 방화벽 구성

    센트 OS/록키 리눅스/알마 리눅스

    Firewalld 방화벽이 설치되어 있어야 합니다. 방화벽 상태를 확인하십시오.

    $ sudo firewall-cmd --state
    running
    

    포트 80, 9443 및 443을 엽니다. Portainer는 포트 9443을 사용하여 HTTPS를 통해 웹 UI를 노출합니다. Nginx Proxy Manager는 UI에 포트 81을 사용합니다.

    $ sudo firewall-cmd --permanent --add-service=http
    $ sudo firewall-cmd --permanent --add-service=https
    

    변경 사항을 활성화하려면 방화벽을 다시 로드하십시오.

    $ sudo firewall-cmd --reload
    

    우분투/데비안

    Ubuntu 및 Debian 시스템은 기본적으로 ufw(복잡하지 않은 방화벽)를 사용합니다.

    방화벽이 실행 중인지 확인하십시오.

    $ sudo ufw status
    

    실행 중인 경우 HTTP 및 HTTPS 포트를 엽니다.

    $ sudo ufw allow http
    $ sudo ufw allow https
    

    방화벽이 실행되고 있지 않으면 SSH 포트를 엽니다.

    $ sudo ufw allow "OpenSSH"
    

    방화벽이 실행되고 있지 않으면 활성화하십시오.

    $ sudo ufw enable
    

    실행 중인 경우 다시 로드하여 변경 사항을 적용합니다.

    $ sudo ufw reload
    

    2단계 - Docker 및 Docker Compose 설치

    다음 명령을 실행하여 Docker를 설치합니다.

    CentOS/록키 리눅스/알마 리눅스

    $ sudo dnf install -y yum-utils
    $ sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
    $ sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    

    Docker를 설치하는 동안 다음 오류가 발생할 수 있습니다.

    ror: 
     Problem: problem with installed package buildah-1:1.26.2-1.el9_0.x86_64
      - package buildah-1:1.26.2-1.el9_0.x86_64 requires runc >= 1.0.0-26, but none of the providers can be installed
      - package containerd.io-1.6.9-3.1.el9.x86_64 conflicts with runc provided by runc-4:1.1.3-2.el9_0.x86_64
      - package containerd.io-1.6.9-3.1.el9.x86_64 obsoletes runc provided by runc-4:1.1.3-2.el9_0.x86_64
      - cannot install the best candidate for the job
    

    위의 오류가 발생하면 다음 명령을 사용하십시오.

    $ sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin --allowerasing
    

    우분투

    $ sudo apt install ca-certificates curl gnupg lsb-release
    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    $ echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    $ sudo apt update
    $ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    

    데비안

    $ sudo apt install ca-certificates curl gnupg lsb-release
    $ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    $ echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    $ sudo apt update
    $ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    

    Docker 서비스를 활성화하고 시작합니다.

    $ sudo systemctl start docker --now
    

    Docker 그룹에 사용자 이름을 추가합니다.

    $ sudo usermod -aG docker $USER
    

    시스템에서 로그아웃했다가 다시 로그인하여 변경 사항을 적용하십시오.

    3단계 - FileRun Docker 구성 만들기

    Filerun Docker 구성을 위한 디렉터리를 만듭니다.

    $ mkdir dockerfilerun
    

    디렉터리로 전환합니다.

    $ cd ~/dockerfilerun
    

    편집을 위해 Docker 작성 파일을 만들고 엽니다.

    $ nano docker-compose.yml
    

    다음 코드를 붙여넣습니다.

    version: '3.8'
    
    services:
      db:
        image: mariadb:10.5
        container_name: filerun_mariadb
        environment:
          MYSQL_ROOT_PASSWORD: your_mysql_root_password
          MYSQL_USER: your_filerun_username
          MYSQL_PASSWORD: your_filerun_password
          MYSQL_DATABASE: your_filerun_database
        volumes:
          - ./db:/var/lib/mysql
    
      web:
        image: filerun/filerun
        container_name: filerun_web
        environment:
          FR_DB_HOST: db
          FR_DB_PORT: 3306
          FR_DB_NAME: your_filerun_database
          FR_DB_USER: your_filerun_username
          FR_DB_PASS: your_filerun_password
          APACHE_RUN_USER: www-data
          APACHE_RUN_USER_ID: 33
          APACHE_RUN_GROUP: www-data
          APACHE_RUN_GROUP_ID: 33
        depends_on:
          - db
        links:
          - db
          - tika
          - elasticsearch
        ports:
          - "8080:80"
        volumes:
          - ./html:/var/www/html
          - ./user-files:/user-files
    
      tika:
        image: apache/tika
        container_name: filerun_tika
    
      elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:6.8.23
        container_name: filerun_search
        environment:
          - cluster.name=docker-cluster
          - bootstrap.memory_lock=true
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        ulimits:
          memlock:
            soft: -1
            hard: -1
          nofile:
            soft: 65535
            hard: 65535
        mem_limit: 1g
        volumes:
          - ./esearch:/usr/share/elasticsearch/data
    

    Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

    작성 파일을 살펴보겠습니다.

    • 먼저 데이터를 저장하기 위해 MariaDB 도커 이미지를 가져옵니다. 루트 비밀번호, MySQL 사용자 이름, MySQL 비밀번호, FileRun용 데이터베이스 이름을 입력합니다. 데이터베이스를 ~/dockerfilerun/db 디렉터리에 마운트하여 백업합니다.\n
    • 다음으로 동일한 데이터베이스 자격 증명을 사용하여 MariaDB 이미지에 연결하는 FileRun 컨테이너를 가져옵니다. 또한 사내에서 Apache 서버를 실행하고 포트 80을 통해 FileRun을 노출합니다. 또한 호스트의 ~/dockerfilerun/html 디렉토리에 공용 디렉토리를 마운트하고 해당 사용자가 업로드한 파일을 ~/dockerfilerun/user-files 디렉토리.
    • 다음으로 Filerun이 파일의 메타데이터를 읽는 데 도움이 되는 Apache Tika 컨테이너를 가져옵니다.
    • 마지막으로 FileRun에 업로드된 콘텐츠에서 전체 텍스트 검색을 실행하는 데 도움이 되는 Elasticsearch 컨테이너를 가져옵니다. FIleRun은 현재 Elasticsearch 6.8.x만 지원합니다. 환경 변수를 사용하여 서버에서 사용 가능한 메모리와 관련하여 메모리 제한을 제어할 수 있습니다. Elasticsearch 데이터를 ~/dockerfilerun/esearch 디렉터리에 마운트합니다.\n

    Elasticsearch용 디렉토리를 생성합니다. Docker는 볼륨에 대한 디렉터리를 자동으로 생성하지만 Elasticsearch는 로컬 디렉터리를 사용자가 소유하고 그룹의 ID가 1000인 경우에만 작동합니다.

    $ mkdir esearch
    

    다음 명령을 사용하여 올바른 권한을 설정하십시오.

    $ chmod g+rwx esearch
    $ sudo chgrp 1000 esearch
    

    컨테이너를 시작하기 전에 Elasticsearch가 작동하려면 mmap 수에 대한 제한을 늘려야 합니다. 편집을 위해 /etc/sysctl.conf 파일을 엽니다.

    $ sudo nano /etc/sysctl.conf
    

    맨 아래에 다음 줄을 붙여넣습니다.

    vm.max_map_count = 262144
    

    Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다. 이렇게 하면 변경 사항이 영구적으로 적용되지만 시스템을 다시 시작하는 경우에만 적용됩니다.

    다음 명령을 실행하여 바로 변경 사항을 구현하십시오.

    $ sudo sysctl -w vm.max_map_count=262144
    

    Docker 서비스를 다시 시작하십시오.

    $ sudo systemctl restart docker
    

    4단계 - FileRun Docker 컨테이너 실행

    다음 명령을 실행하여 Docker 컨테이너를 시작합니다.

    $ docker compose up -d
    

    Docker 이미지 가져오기, 네트워크 생성 및 필요한 컨테이너 실행을 포함하는 프로세스를 완료하는 데 시간이 다소 걸립니다.

    컨테이너의 상태를 확인합니다.

    $ docker ps
    

    비슷한 출력을 얻을 수 있습니다.

    다음 단계는 Nginx를 사용하여 SSL을 설치하여 보안을 강화하는 것입니다. 이를 위해 Nginx 서버를 사용할 것입니다.

    5단계 - Nginx 설치

    CentOS/록키 리눅스/알마 리눅스

    최신 버전의 Nginx를 설치하려면 공식 Nginx 리포지토리를 설치해야 합니다.

    전제조건 패키지를 설치하십시오.

    $ sudo dnf install yum-utils
    

    Nginx yum 리포지토리를 생성하고 엽니다.

    $ sudo nano /etc/yum.repos.d/nginx.repo
    

    다음 코드를 붙여넣습니다.

    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    
    [nginx-mainline]
    name=nginx mainline repo
    baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    

    Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

    Nginx를 설치합니다.

    $ sudo dnf install nginx
    

    Nginx 서버를 활성화하고 시작합니다.

    $ sudo systemctl start nginx --now
    

    Filerun에서 네트워크 연결을 허용하도록 SELinux를 구성합니다.

    $ sudo setsebool -P httpd_can_network_connect on
    

    우분투/데비안

    Ubuntu 22.04 및 Debian 11은 이전 버전의 Nginx와 함께 제공됩니다. 최신 버전을 설치하려면 공식 Nginx 저장소를 다운로드해야 합니다.

    Nginxs 서명 키를 가져옵니다.

    $ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
    

    Nginxs 안정 버전용 리포지토리를 추가합니다.

    $ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
    http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list
    

    Debian의 경우 다음 명령을 대신 사용하십시오.

    $ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
    http://nginx.org/packages/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list
    

    시스템 리포지토리를 업데이트합니다.

    $ sudo apt update
    

    Nginx를 설치합니다.

    $ sudo apt install nginx
    

    설치를 확인하십시오.

    $ nginx -v
    nginx version: nginx/1.22.1
    

    6단계 - SSL 설치

    우분투/데비안

    SSL 인증서를 생성하려면 Certbot을 설치해야 합니다. Ubuntus 저장소를 사용하여 Certbot을 설치하거나 Snapd 도구를 사용하여 최신 버전을 가져올 수 있습니다. 우리는 Snapd 버전을 사용할 것입니다.

    Ubuntu 22.04 및 Debian 11에는 기본적으로 Snapd가 설치되어 있습니다. 다음 명령을 실행하여 Snapd 버전이 최신인지 확인하십시오.

    $ sudo snap install core
    

    Certbot을 설치합니다.

    $ sudo snap install --classic certbot
    

    다음 명령을 사용하여 /usr/bin 디렉토리에 대한 심볼릭 링크를 생성하여 Certbot 명령을 실행할 수 있는지 확인하십시오.

    $ sudo ln -s /snap/bin/certbot /usr/bin/certbot
    

    CentOS/록키 리눅스/알마 리눅스

    Certbot이 작동하려면 EPEL 저장소가 필요합니다.

    $ sudo dnf install epel-release
    

    Snapd를 사용하여 Certbot을 설치합니다. 스냅드를 설치합니다.

    $ sudo dnf install snapd
    

    Snap 서비스를 활성화하고 시작합니다.

    $ sudo systemctl enable snapd --now
    

    Snap 코어 패키지를 설치합니다.

    $ sudo snap install core
    $ sudo snap refresh core
    

    Snapd가 작동하는 데 필요한 링크를 만듭니다.

    $ sudo ln -s /var/lib/snapd/snap /snap
    $ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh
    

    다음 명령을 실행하여 Certbot을 설치합니다.

    $ sudo snap install --classic certbot
    

    실행 파일에 대한 symlink를 생성하여 Certbot을 활성화합니다.

    $ sudo ln -s /snap/bin/certbot /usr/bin/certbot
    

    다음 명령을 실행하여 SSL 인증서를 생성하십시오.

    $ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d filerun.example.com
    

    Nginx를 사용하는 Certbot의 certonly 옵션을 사용하여 SSL 인증서를 생성했습니다. Nginx 서버를 사용하여 인증서를 설치하지만 아무 것도 수정하지 않습니다.

    위의 명령은 서버의 /etc/letsencrypt/live/filerun.example.com 디렉토리에 인증서를 다운로드합니다.

    Diffie-Hellman 그룹 인증서를 생성합니다.

    $ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
    

    SSL 갱신이 제대로 작동하는지 확인하려면 프로세스를 시험 실행하십시오.

    $ sudo certbot renew --dry-run
    

    오류가 표시되지 않으면 모든 설정이 완료된 것입니다. 인증서가 자동으로 갱신됩니다.

    7단계 - Nginx 구성

    편집을 위해 /etc/nginx/nginx.conf 파일을 엽니다.

    $ sudo nano /etc/nginx/nginx.conf
    

    include /etc/nginx/conf.d/*.conf; 줄 앞에 다음 줄을 추가합니다.

    server_names_hash_bucket_size  64;
    

    Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

    편집을 위해 /etc/nginx/conf.d/filerun.conf 파일을 만들고 엽니다.

    $ sudo nano /etc/nginx/conf.d/filerun.conf
    

    다음 코드를 붙여넣습니다. filerun.example.com을 도메인 이름으로 바꿉니다.

    upstream backend {
       server 127.0.0.1:8080;
       keepalive 32;
    }
    
    server {
      listen 80 default_server;
      server_name filerun.example.com;
      return 301 https://$server_name$request_uri;
    }
    
    server {
       listen 443 ssl http2;
       server_name filerun.example.com;
    
       http2_push_preload on; # Enable HTTP/2 Server Push
    
       ssl_certificate /etc/letsencrypt/live/filerun.example.com/fullchain.pem;
       ssl_certificate_key /etc/letsencrypt/live/filerun.example.com/privkey.pem;
       ssl_trusted_certificate /etc/letsencrypt/live/filerun.example.com/chain.pem;
       ssl_session_timeout 1d;
    
       # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
       ssl_protocols TLSv1.2 TLSv1.3;
    
       # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
       # prevent replay attacks.
       #
       # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
       ssl_early_data on;
    
       ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
       ssl_prefer_server_ciphers on;
       ssl_session_cache shared:SSL:50m;
       # OCSP Stapling --- fetch OCSP records from URL in ssl_certificate and cache them
       ssl_stapling on;
       ssl_stapling_verify on;
       ssl_dhparam /etc/ssl/certs/dhparam.pem;
    
       add_header X-Early-Data $tls1_3_early_data;
    
       access_log /var/log/nginx/filerun.access.log main;
       error_log  /var/log/nginx/filerun.error.log;
    
       location / {
           client_max_body_size 50M;
           proxy_set_header Connection "";
           proxy_set_header Host $http_host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header X-Forwarded-Proto $scheme;
           proxy_set_header X-Forwarded-Protocol $scheme;
           proxy_buffers 256 16k;
           proxy_buffer_size 16k;
           proxy_read_timeout 1800s;
           proxy_connect_timeout 1800s;
           proxy_http_version 1.1;
           proxy_pass http://backend;
       }
    }
    
    # This block is useful for debugging TLS v1.3. Please feel free to remove this
    # and use the `$ssl_early_data` variable exposed by NGINX directly should you
    # wish to do so.
    map $ssl_early_data $tls1_3_early_data {
      "~." $ssl_early_data;
      default "";
    }
    

    Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

    Nginx 구성을 확인합니다.

    $ sudo nginx -t
    

    Nginx 서버를 다시 시작합니다.

    $ sudo systemctl restart nginx
    

    8단계 - FileRun 액세스 및 구성

    URL https://filerun.example.com을 방문하면 다음 화면이 나타납니다.

    다음 버튼을 클릭하여 시스템 요구 사항 페이지를 엽니다.

    모든 것이 정상이면 다음 버튼을 클릭하여 데이터베이스 설정 페이지로 이동합니다.

    데이터베이스 이름, 사용자 및 암호를 입력하고 다음 버튼을 클릭하여 계속 진행합니다.

    여기에 로그인 세부 정보가 제공됩니다. 다음 버튼을 클릭하여 로그인 페이지를 엽니다.

    이전 단계에서 로그인 자격 증명을 입력하고 로그인 버튼을 클릭하여 FileRuns 대시보드를 엽니다.

    화면 맨 왼쪽 하단에 있는 수퍼유저 링크를 클릭하고 계정 설정을 클릭합니다.

    비밀번호 변경 탭을 클릭하여 기본 비밀번호를 변경할 수 있는 다음 페이지에 액세스합니다. 변경 사항 저장 버튼을 클릭하여 저장합니다.

    페이지 왼쪽 하단에서 제어판 링크를 클릭하여 FileRun 제어판에 액세스합니다. 페이지의 파일 >> 검색 섹션을 방문하십시오. 여기에서 일부 고급 파일 검색 및 OCR 기능을 활성화합니다.

    ElasticSearch 호스트 URL로 http://elasticsearch:9200을 입력합니다. 호스트 이름은 docker 파일의 Elastics 서비스 이름을 나타냅니다. 테스트 서버 버튼을 클릭하여 제대로 작동하는지 테스트하십시오.

    제대로 작동하는지 확인하는 위와 유사한 출력이 표시되어야 합니다.

    Apache Tika 서버 호스트 이름으로 tika를 입력합니다. 포트 번호로 9998을 입력합니다. OCR PDF 파일 버튼을 확인하십시오. 테스트 서버 버튼을 클릭하여 제대로 작동하는지 테스트하십시오.

    제대로 작동하는지 확인하는 유사한 출력이 Tika 서버에 표시되어야 합니다. 또한 OCR 이미지 파일 버튼을 클릭합니다. 페이지 상단의 변경 사항 저장 버튼을 클릭합니다.

    그런 다음 기본 검색 기준 옵션의 값을 이름에서 내용으로 변경하여 전체 텍스트 검색을 활성화합니다. 변경 사항 저장 버튼을 다시 클릭하여 프로세스를 마칩니다.

    9단계 - FileRun 업데이트

    FileRun 업그레이드는 간단한 단계입니다. FileRuns Docker 구성 디렉터리로 전환합니다.

    $ cd ~/dockerfilerun
    

    그런 다음 기존 컨테이너를 중지하고 제거합니다. 귀하의 데이터는 유지됩니다.

    $ docker compose down --remove-orphans
    

    최신 버전의 FileRun 도커 이미지를 가져옵니다.

    $ docker compose pull
    

    컨테이너를 다시 시작하십시오.

    $ docker compose up -d
    

    FileRun 설치가 업데이트되고 다시 시작됩니다.

    결론

    이것으로 Linux 서버에서 Docker를 사용하여 FileRun 파일 호스팅 소프트웨어를 설치하는 방법을 배운 자습서를 마칩니다. 질문이 있으시면 아래 의견에 게시하십시오.