웹사이트 검색

Rocky Linux 9에서 Ghost CMS를 배포하는 방법


이 페이지에서

  1. 전제 조건
  2. 1단계 - 방화벽 구성\n
  3. 2단계 - Nginx 설치
  4. 3단계 - Node.js 설치
  5. 4단계 - MySQL 설치
  6. 5단계 - Ghost 설치
    1. Ghost-CLI 설치
    2. 고스트 디렉토리 준비
    3. 고스트 설치

    Ghost는 전문가 수준의 블로그를 만드는 데 도움이 되는 오픈 소스 블로그 플랫폼입니다. 지나치게 복잡해졌기 때문에 WordPress의 대안으로 2013년에 출시되었습니다. JavaScript로 작성되었으며 Node.js 라이브러리로 구동됩니다.

    이 튜토리얼에서는 Rocky Linux 9 기반 서버에서 Nginx 및 MySQL을 사용하여 Ghost CMS를 설치하는 방법을 살펴봅니다. Nginx 서버를 사용하여 블로그를 호스팅하고 Lets Encrypt SSL 인증서를 사용하여 설치를 보호합니다.

    전제 조건

    • A server running Rocky Linux 9.

    • A non-root user with sudo privileges.

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

    • Make sure everything is updated.

      $ sudo dnf update
      
    • Install basic utility packages. Some of them may already be installed.

      $ sudo dnf install wget curl nano unzip yum-utils -y
      

    1단계 - 방화벽 구성

    첫 번째 단계는 방화벽을 구성하는 것입니다. Rocky Linux는 Firewalld Firewall을 사용합니다. 방화벽 상태를 확인하십시오.

    $ sudo firewall-cmd --state
    running
    

    방화벽은 다른 영역에서 작동하며 공개 영역은 우리가 사용할 기본 영역입니다. 방화벽에서 활성화된 모든 서비스와 포트를 나열합니다.

    $ sudo firewall-cmd --permanent --list-services
    

    다음 출력이 표시되어야 합니다.

    cockpit dhcpv6-client ssh
    

    Wiki.js가 작동하려면 HTTP 및 HTTPS 포트가 필요합니다. 열어보세요.

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

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

    $ sudo firewall-cmd --reload
    

    2단계 - Nginx 설치

    Rocky Linux 9는 이전 버전의 Nginx와 함께 제공됩니다. 최신 버전을 설치하려면 공식 Nginx 저장소를 다운로드해야 합니다.

    공식 Nginx 리포지토리를 만들기 위한 /etc/yum.repos.d/nginx.repo 파일을 만들고 엽니다.

    $ 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 -y
    

    설치를 확인하십시오.

    $ nginx -v
    nginx version: nginx/1.22.1
    

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

    $ sudo systemctl enable nginx --now
    

    서버의 상태를 확인하십시오.

    $ sudo systemctl status nginx
    ? nginx.service - nginx - high performance web server
         Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
         Active: active (running) since Tue 2022-10-25 08:27:47 UTC; 2s ago
           Docs: http://nginx.org/en/docs/
        Process: 1650 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
       Main PID: 1651 (nginx)
          Tasks: 2 (limit: 5912)
         Memory: 1.9M
            CPU: 7ms
         CGroup: /system.slice/nginx.service
                 ??1651 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
                 ??1652 "nginx: worker process"
    
    Oct 25 08:27:47 ghost.example.com systemd[1]: Starting nginx - high performance web server...
    

    3단계 - Node.js 설치

    Ghost Installer가 작동하려면 Nodejs가 필요합니다. 다음 명령을 실행하여 노드 16을 설치합니다.

    $ curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -
    

    노드를 설치합니다.

    $ sudo dnf install -y nodejs
    

    노드 설치를 확인합니다.

    $ node --version
    v16.18.0
    

    이 튜토리얼을 작성할 당시에는 Node 18이 출시되었으며 LTS 버전입니다. Ghost는 아직 지원을 추가하지 않았습니다. 지원되는 최신 노드 버전에 대한 노드 버전에 대한 Ghost 문서를 계속 확인하십시오. Ghost가 Node 18에 대한 지원을 추가하면 대신 다음 명령을 사용하여 Node 18을 설치하십시오.

    $ curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
    $ sudo dnf install -y nodejs
    

    4단계 - MySQL 설치

    Rocky Linux 9는 최신 버전의 MySQL과 함께 제공됩니다. 단일 명령으로 설치할 수 있습니다.

    $ sudo dnf install mysql-server
    

    MySQL의 버전을 확인하십시오.

    $ mysql --version
    mysql  Ver 8.0.30 for Linux on x86_64 (Source distribution)
    

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

    $ sudo systemctl enable mysqld --now
    

    서비스 상태를 확인하세요.

    $ sudo systemctl status mysqld
    ? mysqld.service - MySQL 8.0 database server
         Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
         Active: active (running) since Tue 2022-10-25 09:00:26 UTC; 3s ago
        Process: 2920 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS)
        Process: 2942 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mysqld.service (code=exited, status=0/SUCCESS)
       Main PID: 3021 (mysqld)
         Status: "Server is operational"
          Tasks: 39 (limit: 5912)
         Memory: 404.4M
            CPU: 4.686s
         CGroup: /system.slice/mysqld.service
                 ??3021 /usr/libexec/mysqld --basedir=/usr
    
    Oct 25 09:00:18 ghost.example.com systemd[1]: Starting MySQL 8.0 database server...
    Oct 25 09:00:18 ghost.example.com mysql-prepare-db-dir[2942]: Initializing MySQL database
    Oct 25 09:00:26 ghost.example.com systemd[1]: Started MySQL 8.0 database server.
    

    기본적으로 Unix 인증을 사용하여 MySQL 셸에 로그인할 수 있습니다. 그러나 보안 설정 마법사를 실행할 수 없습니다. 따라서 MySQL 버전 8.0.28 이상에서는 다음 단계가 필요합니다. MySQL 쉘을 입력하십시오.

    $ sudo mysql
    

    다음 명령을 실행하여 루트 사용자의 비밀번호를 설정하십시오. 숫자, 대문자, 소문자 및 특수 문자가 혼합되어 있는지 확인하십시오.

    mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourPassword12!';
    

    쉘을 종료합니다. 이 단계의 주의 사항은 더 이상 Unix 인증을 사용하여 MySQL 셸에 로그인할 수 없다는 것입니다.

    mysql> exit
    

    MySQL 보안 설치 스크립트를 실행합니다.

    $ sudo mysql_secure_installation
    

    암호 확인 구성 요소를 설치하라는 메시지가 표시됩니다. MySQL에서 사용되는 암호의 강도를 확인합니다. Y를 눌러 설치합니다.

    Securing the MySQL server deployment.
    
    Connecting to MySQL using a blank password.
    
    VALIDATE PASSWORD COMPONENT can be used to test passwords
    and improve security. It checks the strength of password
    and allows the users to set only those passwords which are
    secure enough. Would you like to setup VALIDATE PASSWORD component?
    
    Press y|Y for Yes, any other key for No: Y
    

    다음으로 암호 유효성 검사 정책 수준을 설정하라는 메시지가 표시됩니다. 2개가 가장 강력하므로 2개를 선택합니다. 그런 다음 루트 암호를 생성하라는 메시지가 표시됩니다. 주어진 요구 사항에 따라 암호를 입력하십시오. 비밀번호를 계속 입력할 것인지 묻는 메시지가 표시되면 Y를 눌러 계속 진행합니다.

    There are three levels of password validation policy:
    
    LOW    Length >= 8
    MEDIUM Length >= 8, numeric, mixed case, and special characters
    STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file
    
    Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
    Please set the password for root here.
    
    New password: 
    
    Re-enter new password: 
    
    Estimated strength of the password: 100 
    Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y
    

    마지막으로 Y를 눌러 익명 사용자를 제거하고 원격 루트 로그인을 허용하지 않으며 테스트 데이터베이스를 제거하고 권한 테이블을 다시 로드합니다.

    By default, a MySQL installation has an anonymous user,
    allowing anyone to log into MySQL without having to have
    a user account created for them. This is intended only for
    testing, and to make the installation go a bit smoother.
    You should remove them before moving into a production
    environment.
    
    Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
    Success.
    
    
    Normally, root should only be allowed to connect from
    'localhost'. This ensures that someone cannot guess at
    the root password from the network.
    
    Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
    Success.
    
    By default, MySQL comes with a database named 'test' that
    anyone can access. This is also intended only for testing,
    and should be removed before moving into a production
    environment.
    
    
    Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
     - Dropping test database...
    Success.
    
     - Removing privileges on test database...
    Success.
    
    Reloading the privilege tables will ensure that all changes
    made so far will take effect immediately.
    
    Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
    Success.
    
    All done!
    

    이렇게 하면 MySQL 설치 및 보안 프로세스가 완료됩니다.

    5단계 - 고스트 설치

    Ghost 설치는 Ghost 블로그와 블로그 패키지 자체에 대한 업데이트를 설치 및 관리하는 Ghost-CLI 명령줄 도구의 세 가지 구성 요소로 구성됩니다.

    Ghost-CLI 설치

    다음 명령을 실행하여 Ghost-CLI 도구를 설치하십시오. 프로세스 중에 표시되는 모든 경고를 무시하십시오.

    $ sudo npm install  -g
    

    고스트 디렉토리 준비

    Ghost 루트 디렉터리를 만듭니다.

    $ sudo mkdir -p /var/www/html/ghost
    

    디렉터리 소유권을 현재 사용자로 설정합니다.

    $ sudo chown $USER:$USER /var/www/html/ghost
    

    올바른 디렉토리 권한을 설정하십시오.

    $ sudo chmod 755 /var/www/html/ghost
    

    Ghost 디렉토리로 전환하십시오.

    $ cd /var/www/html/ghost
    

    고스트 설치

    Ghost 설치는 단일 명령 프로세스입니다.

    $ ghost install
    

    설치 중에 CLI 도구는 블로그를 구성하기 위해 여러 가지 질문을 합니다.

    • 이 튜토리얼을 작성하는 시점에서 Ghost-CLI는 Ubuntu 이외의 다른 OS를 지원하지 않습니다. 여전히 설치를 계속할 것인지 묻습니다. 계속하려면 Y를 누르십시오.\n
    • 블로그 URL: https 프로토콜과 함께 전체 블로그 URL을 입력합니다. (https://ghost.example.com)
    • MySQL 호스트 이름: Ghost 설치와 MySQL이 동일한 서버에 있으므로 localhost의 기본값을 사용하려면 Enter 키를 누르십시오.\n
    • MySQL 사용자 이름: MySQL 사용자 이름으로 root를 입력합니다.\n
    • MySQL 암호: 이전에 만든 루트 암호를 입력합니다.\n
    • Ghost 데이터베이스 이름: Ghost 데이터베이스의 이름을 지정합니다. (ghostdb)
    • Sudo 비밀번호: 승격된 명령을 수행하려면 시스템 sudo 비밀번호를 입력하십시오.\n
    • Ghost MySQL 사용자를 설정하시겠습니까?: 설치 프로그램에서 Ghost용으로 별도의 MySQL 사용자를 생성할지 묻습니다. 계속하려면 Y를 누르십시오.\n
    • Nginx 설정?: 일반적으로 Ghost-CLI는 Nginx 설치를 감지하고 블로그에 맞게 자동으로 구성합니다. 그러나 현재로서는 Nginx 설치를 감지할 수 없습니다. 따라서 설치 프로그램은 이 단계를 자동으로 건너뜁니다. Nginx를 수동으로 구성합니다.\n
    • SSL 설정?: Nginx 구성을 건너뛰었기 때문에 CLI 도구도 SSL 설정을 건너뜁니다.
    • Set up systemd?: Ghost는 Ghost에 대한 시스템 서비스를 설정할지 묻습니다. 계속하려면 Y를 누르십시오.\n
    • Ghost 시작?: Y를 눌러 Ghost 설치를 시작하십시오. 서비스가 시작되지만 작동하려면 Nginx 및 SSL을 구성해야 합니다.\n

    6단계 - SSL 설치

    계속하기 전에 도메인에 대한 Certbot 도구와 SSL 인증서를 설치해야 합니다.

    Certbot을 설치하기 위해 Snapd 패키지 설치 프로그램을 사용합니다. Snapd는 항상 최신 안정 버전의 Certbot을 사용하므로 이를 사용해야 합니다.

    Snapd 도구가 작동하려면 Epel 저장소가 필요합니다.

    $ sudo dnf install epel-release -y
    

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

    $ sudo dnf install snapd -y
    

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

    $ sudo systemctl enable snapd.socket --now
    

    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
    

    snapd 버전이 최신인지 확인하십시오.

    $ sudo snap install core 
    $ sudo snap refresh core
    

    Certbot을 설치합니다.

    $ sudo snap install --classic certbot
    

    다음 명령을 사용하여 /usr/bin 디렉토리에 대한 심볼릭 링크를 생성하여 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 ghost.example.com
    

    위의 명령은 서버의 /etc/letsencrypt/live/ghost.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/conf.d/ghost.conf 파일을 만들고 엽니다.

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

    ghost.conf 파일에 다음 코드를 붙여넣습니다. ghost.example.com의 모든 인스턴스를 도메인으로 교체하십시오.

    ## enforce HTTPS
    server {
      listen 80;
      listen [::]:80;
      server_name ghost.example.com;
      return 301 https://$server_name$request_uri;
    }
    
    server {
      listen 443 ssl http2;
      listen [::]:443 ssl http2;
      server_name ghost.example.com;
    
      access_log /var/log/nginx/ghost.access.log;
      error_log /var/log/nginx/ghost.error.log;
      client_max_body_size 20m;
    
      http2_push_preload on; # Enable HTTP/2 Server Push
    
      ssl_certificate     /etc/letsencrypt/live/ghost.example.com/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/ghost.example.com/privkey.pem;
      ssl_trusted_certificate /etc/letsencrypt/live/ghost.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_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
      ssl_session_cache shared:SSL:50m;
      ssl_session_tickets off;
    
      # 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;
    
      location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://localhost:2368;
      }
    }
    
    # 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 "";
    }
    

    위의 구성은 모든 HTTP 요청을 HTTPS로 리디렉션하고 도메인을 통해 서비스를 제공하는 Ghost 서비스의 프록시 역할을 합니다.

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

    편집을 위해 /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를 입력하여 파일을 저장합니다.

    Nginx 구성을 확인합니다.

    $ sudo nginx -t
    

    오류가 표시되지 않으면 잘 진행된 것입니다. Nginx 서버를 다시 로드합니다.

    $ sudo systemctl reload nginx
    

    8단계 - SELinux 구성

    Nginx가 네트워크에 연결하도록 허용합니다.

    $ sudo setsebool -P httpd_can_network_connect 1
    

    9단계 - 사이트 실행

    이제 웹 브라우저에서 https://ghost.example.com을 열어 설치를 확인할 수 있습니다. 성공적인 설치를 나타내는 다음 페이지가 나타납니다.

    10단계 - 설정 완료

    Ghost 블로그 설정을 완료하려면 브라우저에서 https://ghost.example.com/ghost를 방문하세요. 블로그 도메인 끝에 있는 추가 /ghost는 Ghosts 관리자 패널 또는 이 경우 처음으로 액세스하는 설정으로 리디렉션합니다.

    관리자 계정을 만들고 블로그 제목을 선택해야 합니다.

    세부 정보를 입력하고 계정 만들기 및 게시 시작 버튼을 클릭하여 계속 진행합니다.

    다음으로, 첫 번째 게시물 작성, 사이트 사용자 지정, 회원 가져오기와 같은 옵션이 제공되는 다음 화면으로 이동합니다.

    탐색할 고스트 탐색 관리자를 선택하고 대시보드로 직접 이동합니다. 설정이 끝나면 Ghosts 관리 패널이 표시됩니다.

    어두운 모드로 전환하려면 설정 페이지 하단의 설정 톱니바퀴 버튼 옆에 있는 토글 스위치를 클릭하면 됩니다.

    게시물 페이지로 전환하면 기본 게시물이 표시됩니다. 게시를 취소하거나 삭제하고 게시를 시작할 수 있습니다.

    11단계 - 메일러 구성

    Ghost는 블로깅 플랫폼 역할을 할 뿐만 아니라 뉴스레터 관리자 역할도 합니다. 일상적인 작업의 경우 모든 트랜잭션 메일 서비스를 사용하여 Ghost와 함께 메일을 보낼 수 있습니다. 그러나 Ghost를 통해 뉴스레터를 보내려는 경우 지원되는 유일한 공식 대량 메일러는 Mailgun입니다. 다른 뉴스레터 서비스를 사용할 수도 있지만 그러려면 Ghost의 Zapier 통합 기능을 사용해야 합니다.

    먼저 트랜잭션 이메일용 SMTP 서비스를 구성해 보겠습니다. 이를 위해 편집을 위해 /var/www/html/ghost/config.production.json 파일을 엽니다.

    $ nano /var/www/html/ghost/config.production.json
    

    다음 줄을 찾으십시오.

     "mail": {
        "transport": "Direct"
      },
    

    다음 코드로 바꿉니다.

    "mail": {
        "from": "'Acme Support' ",
        "transport": "SMTP",
        "options": {
            "host": "YOUR-SES-SERVER-NAME",
            "port": 465,
            "service": "SES",
            "auth": {
                "user": "YOUR-SES-SMTP-ACCESS-KEY-ID",
                "pass": "YOUR-SES-SMTP-SECRET-ACCESS-KEY"
            }
        }
    },
    

    여기에서는 EC2 서비스를 사용하는 경우 매우 저렴하고 평생 무료이기 때문에 Amazon SES 메일 서비스를 사용하고 있습니다.

    Mailgun을 사용하여 뉴스레터 서비스를 사용하려면 대신 다음 코드를 입력하십시오.

    "mail": {
      "from": "'Acme Support' ",
      "transport": "SMTP",
      "options": {
        "service": "Mailgun",
        "host": "smtp.mailgun.org",
        "port": 587,
        "secure": true,
        "auth": {
          "user": "",
          "pass": "1234567890"
        }
      }
    },
    

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

    완료되면 Ghost 응용 프로그램을 다시 시작하여 변경 사항을 적용하십시오.

    $ ghost restart
    

    뉴스레터 설정을 구성하려면 설정 >> 이메일 뉴스레터 섹션을 방문하십시오.

    확장하려면 Mailgun 구성 링크를 클릭하십시오.

    Mailgun 지역, 도메인 및 API 키를 입력합니다.

    오른쪽 상단의 저장 버튼을 클릭하여 설정을 저장합니다.

    뉴스레터 전달을 테스트하려면 게시물을 열고 해당 설정을 연 다음 이메일 뉴스레터 옵션을 클릭합니다. 그런 다음 테스트 이메일을 보내 작동하는지 확인하십시오. 오류가 발생하지 않으면 뉴스레터 전달이 제대로 된 것입니다.

    12단계 - 고스트 업데이트

    Ghost 업데이트에는 마이너 업데이트와 메이저 업데이트의 두 가지 유형이 있습니다.

    먼저 마이너 업데이트를 실행하려면 전체 백업을 수행하십시오.

    $ cd /var/www/html/ghost
    $ ghost backup
    

    업데이트 명령을 실행하여 마이너 업데이트를 수행합니다.

    $ ghost update
    

    주요 업데이트를 수행하려면 Ghost에서 공식 세부 업데이트 가이드를 따라야 합니다. 현재 사용 중인 버전과 업데이트하려는 주 버전에 따라 단계가 달라집니다.

    결론

    이것으로 Nginx를 사용하여 Rocky Linux 9 서버에서 Ghost CMS를 설정하는 방법에 대한 자습서를 마칩니다. 질문이나 피드백이 있으면 아래 의견에 공유하십시오.