Skip to main content

How to deploy dist.zip VueJS Project on a cutomized Nginx image with SSL - Using a Dockerfile

let's assume you have already activated your certificate SSL so in other words, you have got the cert-chain.crt and the server.key or whatever name you've given to it, and let's assume you've got an nginx.conf  file working already,  let's create a folder in which you're going to create your Docker Image
and copy in there the next files:

cert-chain.crt
server.key
dist.zip
nginx.conf

this is the nginx.conf on centos

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
# with this, we are redirecting traffic from 80 to https 443      listen 80 default_server;

      server_name sslbackendtest.xyz;
      return 301  https://sslbackendtest.xyz$request_uri;
    }

    server {

      listen 443 ssl;
   
      ssl_certificate /etc/ssl/cert-chain.crt;
      ssl_certificate_key /etc/ssl/server.key;


      server_name  https://sslbackendtest.xyz;
      access_log /var/log/nginx/nginx.vhost.access.log;
      error_log /var/log/nginx/nginx.vhost.error.log;
      root    /var/www/html/dist;
        location / {
        root /var/www/html/dist;
        try_files $uri /index.html;
      }

    }

}



let's create a file called Dockerfile, and inside of it let's paste 

FROM nginx

RUN apt-get update && apt-get install unzip
COPY nginx.conf /etc/nginx/
COPY cert-chain.crt /etc/ssl/
COPY server.key /etc/ssl/
COPY dist.zip /var/www/html/
WORKDIR /var/www/html/
RUN unzip /var/www/html/dist.zip
RUN chown -R nginx:nginx /var/www/html/dist
now let's create it with the command docker build -t nginx1 .
I gave it the name nginx1, give it the name as you want

now let's open the port 443 in the firewall with 
firewall-cmd --zone="public" --add-port=443/tcp --permanent

to run it 

docker run -p 443:443 --name nginxcontainer1 nginx1

Getting to the shell container:

If you need now to get to the shell, run this
docker exec -it --user root nginxcontainer1 bash

We have been able to deploy the Nginx app building the image and running it into a container,
now let's run it in the background or (Detached mode)


docker run -d --rm -p 443:443 --name nginxcontainer1 nginx1

-d = it means detached mode
-rm = it means if the container is running, it removes it before starting it again
-p = it is the port from the host forwarded to the container port
--name = it is the name of the container, in this case, nginxcontainer1 

if you want to know if the container is running, just run docker container ps -a or docker container ls



Comments

Popular posts from this blog

How to deploy a VueJS App using Nginx on Ubuntu

There are thousands of blogs and websites out there explaining how to do a hello world and how to start with VueJS, but in this little post, I’m just going to be explaining how to do deploy a VueJs app after you have run the command through the CLI npm run build . So when you run the command npm run build a dist folder is created and that folder’s got the essential .js files to run our app, when we want to run our app on an Nginx server by default the vue-router is not going to work well so that Nginx does not come ready to work by default with a VueJs app This is basically for a Linux Ubuntu distribution if you’ve got any other Linux distribution just pay attention where is going to be set the www/html folder and the Nginx settings so that this is useful for any Linux distribution  Install and configure nginx sudo apt install nginx Double check to make sure the nginx service is running with command service nginx status, then open your browser and enter url

How to secure SpringBoot with SSL and Tomcat or Undertow

when we are going to take our applications to production mode, we must have an SSL certificate for the FrontEnd and   BackEnd too, in this case, our backend is a  SpringBoot which is using a tomcat embedded server. Terminology TLS vs SSL TLS is the successor to SSL. It is a protocol that ensures privacy between communicating applications. Unless otherwise stated, in this document consider TLS and SSL as interchangable. Certificate (cert) The public half of a public/private key pair with some additional metadata about who issued it etc. It may be freely given to anyone. Private Key A private key can verify that its corresponding certificate/public key was used to encrypt data. It is never given out publicly. Certificate Authority (CA) A company that issues digital certificates. For SSL/TLS certificates, there are a small number of providers (e.g. Symantec/Versign/Thawte, Comodo, GoDaddy, LetsEncrypt) whose certificates are included by most browsers and Operating System

How to do pagination SpringBoot with Jbctemplate, MySQL

We are going to be working on a topic which is a basic need when doing any app, and it is Pagination. let's get started creating a product table at https://mockaroo.com/ create table products ( id INT, name VARCHAR(50), code VARCHAR(50) ); insert into products (id, name, code) values (1, 'Hettinger-Goyette', '42549-680'); insert into products (id, name, code) values (2, 'Konopelski-Klein', '49527-724'); insert into products (id, name, code) values (3, 'Smitham, Kuhlman and Balistreri', '53238-003'); insert into products (id, name, code) values (4, 'Hettinger, Weissnat and Goodwin', '0143-9916'); insert into products (id, name, code) values (5, 'Rowe Inc', '42291-898'); insert into products (id, name, code) values (6, 'Ernser-Hauck', '10544-617'); insert into products (id, name, code) values (7, 'Maggio and Sons', '68788-9087'); insert into products (id, name,