How to Install Ghost/Gatsby on Debian 10

Create a new user

adduser user
usermod -aG sudo user

Install and configure Firewall

apt install -y ufw
ufw default allow outgoing
ufw default deny incoming
ufw allow ssh/tcp
ufw allow http/tcp
ufw allow https/tcp
systemctl enable ufw
ufw enable

Install Nginx

apt install nginx

Install and configure Maria DB

apt-get install mariadb-server
mysql_secure_installation
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
exit

Install Node.js and Ghost-cli

apt install curl
curl -sL https://deb.nodesource.com/setup_15.x | sudo -E bash -
apt-get install -y nodejs
npm install ghost-cli@latest -g

Setup directories

mkdir -p /var/www/ghost
chmod 775 /var/www/ghost
chown user:user /var/www/ghost
cd /var/www/ghost 

User + install

sudo user
PATH="$PATH:/usr/sbin" ghost install 

dd an A record “www” with your vps’s ip as value

ghost config url https://www.mydomain.com

Generate a ssl ghost setup nginx ssl

Set again ghost config url https://mydomain.com

edit the nginx config files for your second domain to redirect to your main domain: edit both: /system/files/my-second-domain.com.conf and /system/files/my-second-domain.com-ssl.conf , replacing the content of the first location block (leave the .well-known location block - this is used for renewing certificates) with:

return 301 https://my-canonical-domain.com$request_uri;

to finish run sudo nginx -t and then sudo nginx -s reload

Disable access $domain/ghost/#/signin

location ~ /ghost/ {
    rewrite ^(\/(.*\/)?ghost\/)(.*)$ $1 redirect;

Gatsby cli:

 apt install build-essential git
 npm install -g gatsby-cli

Gatsby folder

gatsby new foder-name GIT
cd foder-name
gatsby develop -H IP
gatsby build

SSL

apt install certbot certbot
certbot certonly --standalone -d $website

vi /etc/nginx/sites-enabled/$website.conf

server { 
        listen 80 default_server;
        listen [::]:80 default_server;

   root /var/www/gatsby/site/public;
   index index.html index.htm index.nginx-debian.html;
   server_name $WEBSITE www.$WEBSITE;
}

server {
    listen 443 ssl http2;
   server_name $WEBSITE www.$WEBSITE;

  root /var/www/gatsby/site/public;
  index index.php index.htm index.html;

  ssl_certificate  /etc/letsencrypt/live/$WEBSITE/fullchain.pem;
  ssl_certificate_key  /etc/letsencrypt/live/$WEBSITE/privkey.pem;


location / {
    alias /var/www/gatsby/site/public;
    index index.html;
    
#multidomain
#location / {
    #proxy_pass http://localhost:4000;
    #proxy_http_version 1.1;
    #proxy_set_header Upgrade $http_upgrade;
    #proxy_set_header Connection 'upgrade';
    #proxy_set_header Host $host;
    #proxy_cache_bypass $http_upgrade;
#}
    
    }
    }

Troubleshooting

npm cache clean npm cache clean --force rm -rf node_modules package-lock.json npm install npm run develop