如何在Ubuntu 16.04上部署Ghost v0.11 LTS

自2013年发布以来,Ghost是一个开源博客平台,在开发人员和普通用户中已广受欢迎。它专注于内容和博客。Ghost最吸引人的地方是其简单,干净且响应迅速的设计。您可以通过手机撰写博客文章。Ghost的内容是使用Markdown语言编写的。幽灵非常适合个人或小组作家。

在本指南中,我们将使用Let's EncryptCertbotNode.jsNPMNGINXMySQL在Ubuntu 16.04 LTS VPS上建立并部署安全的Ghost v0.11.x LTS博客。

要求

  • 注册(购买)域名。
  • Ubuntu服务器16.04服务器实例,至少具有1GB RAM
  • 须藤用户。

在你开始之前

  1. 创建一个新的非root用户帐户:

    adduser johndoe --gecos "John Doe"
    
  2. 通过将其添加到sudo组使其成为超级用户:

    usermod -aG sudo johndoe
    
  3. 切换到新用户:

    su - johndoe
    
  4. 更新操作系统的软件:

    sudo apt update && sudo apt upgrade -y
    
  5. 设置时区:

    sudo dpkg-reconfigure tzdata
    
  6. 安装所需的工具:

    sudo apt install -y build-essential zip unzip vim nano openssl wget curl git apt-transport-https
    
  7. 如果需要,请重新引导系统:

    sudo shutdown -r now
    

安装Certbot

注意:在开始此步骤之前,请确保已为您的域设置了DNS记录。

我们将使用Let's Encrypt CAEFF的Certbot客户端获取Ghost博客的SSL / TLS证书。不要忘记将所有实例替换为blog.domain.tld您的域名。

  1. 安装使用Python制作的Certbot(以前称为Let's Encrypt client)证书管理软件:

    sudo apt update
    sudo apt install -y software-properties-common
    sudo add-apt-repository -y ppa:certbot/certbot
    sudo apt update
    sudo apt install -y certbot
    
  2. 检查Certbot版本:

    certbot --version
    # certbot 0.14.2
    
  3. 使用独立身份验证方法(插件)获取RSA证书:

    sudo certbot certonly --standalone --domains blog.domain.tld --rsa-key-size 2048 --must-staple --email [email protected] --no-eff-email --agree-tos
    
    # IMPORTANT NOTES:
    #  - Congratulations! Your certificate and chain have been saved at 
       /etc/letsencrypt/live/blog.domain.tld/fullchain.pem. 
    #  Your cert will expire on YYYY-MM-DD. . . .
    #  . . .
    

    完成上述步骤后,您的证书私钥将位于/etc/letsencrypt/live/blog.domain.tld目录中。

安装Node.js和NPM

注意:Ghost当前仅支持Node.js版本4.5+和6.9+

Ghost建立在Node.js之上。在撰写本文时,我们将为Ghost 安装推荐的版本v6 Boron LTS

  1. 下载并安装Node.js v6 LTS:

    curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
    sudo apt install -y nodejs
    
  2. 检查Node.js和NPM版本:

    node -v && npm -v
    # v6.11.1
    # 3.10.10
    

安装MySQL

默认情况下,Ghost已配置为使用SQLite数据库,而无需进行配置。

另外,也可以通过更改数据库配置将Ghost与MySQL数据库一起使用。您必须先创建一个数据库和用户,然后才能更改现有的sqlite3配置。

  1. 下载并安装MySQL:

    sudo apt install -y mysql-server
    

    注意:在安装过程中,系统将提示您输入MySQL“ root”用户密码。您应该为MySQL“ root”用户设置一个安全密码。

  2. 检查MySQL版本:

    mysql --version
    # mysql  Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using  EditLine wrapper
    
  3. 检查MySQL守护程序是否已启动并正在运行:

    sudo systemctl status mysql.service
    sudo systemctl is-enabled mysql.service
    
  4. 运行mysql_secure_installation脚本以稍微保护数据库:

    sudo mysql_secure_installation
    
  5. 以root用户身份登录MySQL:

    mysql -u root -p
    # Enter password:
    
  6. 创建一个新的MySQL数据库和用户:

    create database dbname;
    grant all on dbname.* to 'user' identified by 'password';
    
  7. 退出MySQL:

    exit
    

安装NGINX

  1. 从官方NGINX存储库下载并安装最新版本的NGINX 主线

    wget https://nginx.org/keys/nginx_signing.key
    sudo apt-key add nginx_signing.key
    rm nginx_signing.key
    sudo -s
    printf "deb https://nginx.org/packages/mainline/ubuntu/ `lsb_release -sc` nginx \ndeb-src https://nginx.org/packages/mainline/ubuntu/ `lsb_release -sc` nginx \n" >> /etc/apt/sources.list.d/nginx_mainline.list
    exit
    sudo apt update
    sudo apt install -y nginx nginx-module-geoip nginx-module-image-filter nginx-module-njs nginx-module-perl nginx-module-xslt nginx-nr-agent
    
  2. 通过检查NGINX版本来验证它是否已安装:

    sudo nginx -v
    # nginx version: nginx/1.13.3
    
  3. 检查状态,启用并启动NGINX服务(守护程序):

    sudo systemctl status nginx.service # inactive (dead)
    sudo systemctl enable nginx.service
    sudo systemctl start nginx.service
    
  4. 创建/etc/nginx/ssl目录并生成一个新的Diffie-Hellman(DH)组:

    sudo mkdir -p /etc/nginx/ssl
    sudo openssl dhparam -out /etc/nginx/ssl/dhparams-2048.pem 2048
    
  5. blog.domain.tld虚拟主机创建日志目录:

    sudo mkdir -p /var/log/nginx/blog.domain.tld
    
  6. 将NGINX配置为HTTPS)反向代理服务器:

    sudo vim /etc/nginx/conf.d/ghost.conf
    
  7. 将以下内容粘贴到中/etc/nginx/conf.d/ghost.conf

    # domain: blog.domain.tld
    # public: /var/www/ghost
    
    upstream ghost_app {
        server 127.0.0.1:2368;
        keepalive 32;
    }
    
    server {
        listen [::]:80 default_server;
        listen 80 default_server;
        listen [::]:443 ssl http2 default_server;
        listen 443 ssl http2 default_server;
    
        server_name blog.domain.tld;
        root /var/www/ghost;
    
        error_log /var/log/nginx/blog.domain.tld/error.log;
        access_log /var/log/nginx/blog.domain.tld/access.log;
    
        client_max_body_size 100M;
    
        ssl_certificate /etc/letsencrypt/live/blog.domain.tld/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/blog.domain.tld/privkey.pem;
        ssl_dhparam ssl/dhparams-2048.pem;
    
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
        ssl_prefer_server_ciphers on;
    
        ssl_buffer_size 4K;
    
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50M;
        ssl_session_tickets off;
    
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_trusted_certificate /etc/letsencrypt/live/blog.domain.tld/chain.pem;
    
        resolver 8.8.8.8 8.8.4.4 valid=300s;
    
        location / {
            proxy_pass http://ghost_app;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_hide_header X-Powered-By;
    
            proxy_http_version 1.1;
            proxy_set_header Connection "";
    
        }
    }
    
  8. 保存并测试NGINX配置是否存在语法错误:

    sudo nginx -t
    
  9. 重新加载NGINX配置:

    sudo systemctl reload nginx.service
    

安装Ghost

注意:如果要在同一VPS上托管多个Ghost博客,则每个Ghost实例必须在单独的端口上运行。

  1. 创建文档根目录:

    sudo mkdir -p /var/www/
    
  2. 创建一个新ghost用户:

    sudo adduser --shell /bin/bash --gecos 'Ghost application' --disabled-password ghost
    
  3. 下载Ghost:

    curl -L https://github.com/TryGhost/Ghost/releases/download/0.11.10/Ghost-0.11.10.zip -o ghost.zip
    
  4. 将Ghost解压缩到/var/www/ghost目录(推荐的安装位置)中:

    sudo unzip -uo ghost.zip -d /var/www/ghost
    rm ghost.zip
    
  5. 移至新ghost目录:

    cd /var/www/ghost
    
  6. 更改/var/www/ghost目录的所有权:

    sudo chown -R ghost:ghost .
    
  7. 切换到新ghost用户:

    sudo su - ghost
    
  8. 导航到文档根目录/var/www/ghost

    cd /var/www/ghost
    
  9. 仅安装具有生产依赖性的Ghost。完成此操作后,将安装Ghost:

    npm install --production
    
  10. 通过改变配置鬼urlmaildatabase财产production的对象内部的config.js文件:

    cp config.example.js config.js
    vim /var/www/ghost/config.js
    
    
    var path = require('path'),
        config;
    
    config = {
        // ### Production
        // When running Ghost in the wild, use the production environment.
        // Configure your URL and mail settings here
        production: {
            url: 'https://blog.domain.tld',
            mail: {
                transport: 'SMTP',
                options: {
                    service: 'Mailgun',
                    auth: {
                        user: '',
                        pass: ''
                    }
                }
            },
            database: {
                client: 'mysql',
                connection: {
                    host: '127.0.0.1',
                    user: 'your_database_user',
                    password: 'your_database_password',
                    database: 'your_database_name',
                    charset: 'utf8'
                },
                debug: false
            },
            // . . .
            // . . .
    

    注意:您还应该配置mail设置。请查阅官方的Ghost文档以了解有关操作方法。

  11. 在生产环境中启动Ghost:

    npm start --production
    

    Ghost现在将运行。博客前端和管理界面均已通过HTTPS进行了安全保护,��且HTTP / 2也在正常工作。您可以打开浏览器并访问的网站https://blog.domain.tld。不要忘记blog.domain.tld用您的域名替换。

  12. 通过按CTRL+ 关闭Ghost进程,C然后从Ghost用户返回到root用户:

    exit
    

将Ghost作为系统服务运行

如果您关闭您的VPS终端会话,您的博客也将关闭。这不好。为了避免这种情况,我们将使用systemd。这将使我们的博客保持24/7全天候运行。

  1. 创建ghost.service系统单位文件。运行sudo vim /etc/systemd/system/ghost.service并复制/粘贴以下内容:

    [Unit]
    Description=Ghost - the professional publishing platform
    Documentation=https://docs.ghost.org/v0.11.9
    After=network.target
    
    [Service]
    Type=simple
    # Edit WorkingDirectory, User and Group as needed
    WorkingDirectory=/var/www/ghost
    User=ghost
    Group=ghost
    ExecStart=/usr/bin/npm start --production
    ExecStop=/usr/bin/npm stop --production
    Restart=always
    SyslogIdentifier=Ghost
    
    [Install]
    WantedBy=multi-user.target
    
  2. 启用并开始ghost.service

    sudo systemctl enable ghost.service && sudo systemctl start ghost.service
    
  3. 检查ghost.service状态:

    sudo systemctl status ghost.service && sudo systemctl is-enabled ghost.service
    
  4. 导航到https://blog.domain.tld/ghost/并创建一个Ghost管理员用户。尽快这样做!

结论

而已。我们现在有一个功能齐全的Ghost博客。当客户端支持时,您的服务器正在通过HTTP / 2传递内容。如果要将默认的名为Casper的 Ghost主题更改为自定义主题,只需下载该主题并将其解压缩到/var/www/ghost/content/themes文件夹中,然后通过位于的Ghost管理界面将其选中即可https://blog.domain.tld/ghost



Leave a Comment

如何在Fedora 26 LAMP VPS上安装MODX Revolution

如何在Fedora 26 LAMP VPS上安装MODX Revolution

使用其他系统?MODX Revolution是一种快速,灵活,可扩展,免费和开源的企业级内容管理系统(CMS),由

在OpenBSD 6上设置Ghost Professional发布平台

在OpenBSD 6上设置Ghost Professional发布平台

Ghost是与WordPress竞争的最新,最大的暴发户。主题开发既快速又容易学习,因为Ghost开发人员决定同时使用

如何在Fedora 25上部署Ghost v0.11 LTS

如何在Fedora 25上部署Ghost v0.11 LTS

使用其他系统?Ghost是一个开放源代码博客平台,自201年以来一直在开发人员和普通用户中广受欢迎。

在Ubuntu 16.04 LTS上安装Fork CMS

在Ubuntu 16.04 LTS上安装Fork CMS

使用其他系统?Fork是用PHP编写的开源CMS。Forks源代码托管在GitHub上。本指南将向您展示如何安装Fork CM

如何在Debian 8上部署Ghost v0.11 LTS

如何在Debian 8上部署Ghost v0.11 LTS

使用其他系统?Ghost是一个开放源代码博客平台,自201年以来一直在开发人员和普通用户中广受欢迎。

如何在CentOS 7上安装排字机CMS

如何在CentOS 7上安装排字机CMS

Typesetter是一个用PHP编写的开源CMS,专注于True WYSIWYG编辑和平面文件存储的易用性。在本文中,我们将安装

如何在Debian 9(Stretch)上安装Dotclear

如何在Debian 9(Stretch)上安装Dotclear

使用其他系统?Dotclear是一个非常简单的博客引擎。它是开源的,易于使用。本教程将通过以下方式进行安装

如何在Ubuntu 16.04上使用Virtualmin和Ansible部署多个Wordpress网站

如何在Ubuntu 16.04上使用Virtualmin和Ansible部署多个Wordpress网站

Vultr虚拟服务器的常见用法是托管Wordpress网站。本指南向您展示如何从头开始自动配置虚拟服务器

如何在CentOS 7 LAMP VPS上安装MODX Revolution

如何在CentOS 7 LAMP VPS上安装MODX Revolution

使用其他系统?MODX Revolution是一种快速,灵活,可扩展,免费和开源的企业级内容管理系统(CMS),由

在OpenBSD 6.2上安装WordPress

在OpenBSD 6.2上安装WordPress

简介WordPress是互联网上占主导地位的内容管理系统。它通过动态内容为从博客到复杂网站的一切提供支持

如何在Debian 9 LAMP VPS上安装MODX Revolution

如何在Debian 9 LAMP VPS上安装MODX Revolution

使用其他系统?MODX Revolution是一种快速,灵活,可扩展,免费和开源的企业级内容管理系统(CMS),由

在Fedora 28上安装Fork CMS

在Fedora 28上安装Fork CMS

使用其他系统?Fork是用PHP编写的开源CMS。Forks源代码托管在GitHub上。本指南将向您展示如何安装Fork CM

如何在CentOS 7上安装Neos CMS

如何在CentOS 7上安装Neos CMS

Neos是一种创新的开源内容管理系统,非常适合创建和编辑在线内容。考虑到作者和编辑,Neo

如何在Ubuntu 16.04上安装Dotclear

如何在Ubuntu 16.04上安装Dotclear

使用其他系统?Dotclear是一个非常简单的博客引擎,已在PHP之上构建。在本教程中,我们将在Ubunt上安装Dotclear

如何在Ubuntu 16.04 LAMP VPS上安装MODX Revolution

如何在Ubuntu 16.04 LAMP VPS上安装MODX Revolution

使用其他系统?MODX Revolution是一种快速,灵活,可扩展,免费和开源的企业级内容管理系统(CMS),由

如何在Ubuntu 16.04上部署Ghost

如何在Ubuntu 16.04上部署Ghost

使用其他系统?自2013年发布以来,Ghost是一个开源博客平台,在开发人员和普通用户中越来越受欢迎。一世

如何在CentOS 7.3上部署Ghost v0.11 LTS

如何在CentOS 7.3上部署Ghost v0.11 LTS

使用其他系统?Ghost是一个开放源代码博客平台,自201年以来一直在开发人员和普通用户中广受欢迎。

在Debian 9上安装Fork CMS

在Debian 9上安装Fork CMS

使用其他系统?Fork是用PHP编写的开源CMS。Forks源代码托管在GitHub上。本指南将向您展示如何安装Fork CM

如何在Debian 8.7上部署Ghost

如何在Debian 8.7上部署Ghost

使用其他系统?自2013年发布以来,Ghost是一个开源博客平台,在开发人员和普通用户中越来越受欢迎。一世

在CentOS 7上创建Jekyll博客

在CentOS 7上创建Jekyll博客

使用其他系统?Jekyll是WordPress的不错替代品。它不需要任何数据库,并且可以使用许多人熟悉的机智语言

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

什麼是日誌文件系統,它是如何工作的?

什麼是日誌文件系統,它是如何工作的?

我們的計算機以稱為日誌文件系統的有組織的方式存儲所有數據。這是一種有效的方法,可以讓計算機在您點擊搜索時立即搜索和顯示文件。 https://wethegeek.com/?p=94116&preview=true

技術奇點:人類文明的遙遠未來?

技術奇點:人類文明的遙遠未來?

隨著科學的快速發展,接管了我們的大量工作,我們陷入無法解釋的奇點的風險也在增加。閱讀,奇點對我們意味著什麼。

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

2021 年人工智能對醫療保健的影響

2021 年人工智能對醫療保健的影響

過去幾十年,醫療保健領域的人工智能取得了巨大飛躍。因此,醫療保健中人工智能的未來仍在日益增長。