Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save phothinmg/7089db8ef0ed0f8e7ec21f8dc193cda8 to your computer and use it in GitHub Desktop.

Select an option

Save phothinmg/7089db8ef0ed0f8e7ec21f8dc193cda8 to your computer and use it in GitHub Desktop.

Revisions

  1. @hasibdesk hasibdesk revised this gist Nov 28, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion NodeJS App Deployment On Ubuntu Server.md
    Original file line number Diff line number Diff line change
    @@ -17,7 +17,7 @@ sudo apt install nodejs
    node --version
    ```

    If you want to installed lates nodejs version or others version visit this url and there is available all of the version of nodejs . https://github.com/nodesource/distributions#debinstall
    ## 4. Clone your project from Github
    There are a few ways to get your files on to the server, I would suggest using Git
    ```
  2. @hasibdesk hasibdesk renamed this gist Nov 28, 2019. 1 changed file with 0 additions and 0 deletions.
  3. @hasibdesk hasibdesk created this gist Nov 28, 2019.
    120 changes: 120 additions & 0 deletions NodeJS App Deployment On Ubuntu Server
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,120 @@
    # Node.js Deployment

    > Steps to deploy a Node.js app to DigitalOcean using PM2, NGINX as a reverse proxy and an SSL from LetsEncrypt

    ## 1. Sign up for Digital Ocean
    If you use the referal link below, you get $10 free (1 or 2 months)
    https://m.do.co/c/5424d440c63a

    ## 2. Create a droplet and log in via ssh
    I will be using the root user, but would suggest creating a new user

    ## 3. Install Node/NPM
    ```
    curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -

    sudo apt install nodejs

    node --version
    ```

    ## 4. Clone your project from Github
    There are a few ways to get your files on to the server, I would suggest using Git
    ```
    git clone yourproject.git
    ```

    ### 5. Install dependencies and test app
    ```
    cd yourproject
    npm install
    npm start (or whatever your start command)
    # stop app
    ctrl+C
    ```
    ## 6. Setup PM2 process manager to keep your app running
    ```
    sudo npm i pm2 -g
    pm2 start app (or whatever your file name)

    # Other pm2 commands
    pm2 show app
    pm2 status
    pm2 restart app
    pm2 stop app
    pm2 logs (Show log stream)
    pm2 flush (Clear logs)

    # To make sure app starts when reboot
    pm2 startup ubuntu
    ```
    ### You should now be able to access your app using your IP and port. Now we want to setup a firewall blocking that port and setup NGINX as a reverse proxy so we can access it directly using port 80 (http)

    ## 7. Setup ufw firewall
    ```
    sudo ufw enable
    sudo ufw status
    sudo ufw allow ssh (Port 22)
    sudo ufw allow http (Port 80)
    sudo ufw allow https (Port 443)
    ```

    ## 8. Install NGINX and configure
    ```
    sudo apt install nginx

    sudo nano /etc/nginx/sites-available/default
    ```
    Add the following to the location part of the server block
    ```
    server_name yourdomain.com www.yourdomain.com;

    location / {
    proxy_pass http://localhost:5000; #whatever port your app runs on
    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;
    }
    ```
    ```
    # Check NGINX config
    sudo nginx -t

    # Restart NGINX
    sudo service nginx restart
    ```

    ### You should now be able to visit your IP with no port (port 80) and see your app. Now let's add a domain

    ## 9. Add domain in Digital Ocean
    In Digital Ocean, go to networking and add a domain

    Add an A record for @ and for www to your droplet


    ## Register and/or setup domain from registrar
    I prefer Namecheap for domains. Please use this affiliate link if you are going to use them
    https://namecheap.pxf.io/c/1299552/386170/5618

    Choose "Custom nameservers" and add these 3

    * ns1.digitalocean.com
    * ns2.digitalocean.com
    * ns3.digitalocean.com

    It may take a bit to propogate

    10. Add SSL with LetsEncrypt
    ```
    sudo add-apt-repository ppa:certbot/certbot
    sudo apt-get update
    sudo apt-get install python-certbot-nginx
    sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

    # Only valid for 90 days, test the renewal process with
    certbot renew --dry-run
    ```

    Now visit https://yourdomain.com and you should see your Node app