вступление

Для разработки одностраничного приложения хорошим выбором могут быть Spring Boot и Vue. Когда вы закончите этап разработки, самое время развернуть приложение в Интернете.

Традиционно вам может потребоваться написать сценарии для запуска вашей java-службы, и вам нужно будет выполнить большую настройку для сервера Nginx.

Чтобы сделать процесс проще и эффективнее, я бы рекомендовал использовать Docker для развертывания приложения. Поначалу вам может быть немного сложно научиться этому, но вы извлечете выгоду из обучения, поскольку Docker может вам очень помочь.

Установите Docker в инстанс AWS EC2

После создания экземпляра AWS EC2 вам необходимо установить в нем Docker. Я написал сообщение об этом процессе, вы можете проверить его: https://williamyuaus.com/2021/07/How-to-install-Docker-in-AWS-EC2-instances/

Разверните серверную службу

Скомпилируйте и соберите файл JAR

Во-первых, вы должны скомпилировать и собрать JAR-файл для вашего проекта Spring Boot. Возможно, вам сначала потребуется изменить параметры производственной конфигурации. После того, как вы это сделаете, вы можете выполнить аналогичные шаги, чтобы получить файл JAR.

Загрузите файл JAR на сервер

Затем вам нужно загрузить файл JAR на сервер. Я бы использовал /home/ec2-user/ в качестве рабочего каталога. Таким образом, вам может потребоваться создать новый каталог \eladmin и использовать сервер scp для передачи файла JAR с локального компьютера на сервер.

Команда для создания каталога mkdir eladmin. Команда для SCP-сервера передать файл JAR:

scp -r -i /Users/willyu/dev/deploy/college-system-keys.cer /Users/willyu/dev/deploy/eladmin-system-2.6.jar ec2-user@IP:/home/ec2-user/eladmin

Исправить ошибку разрешений 0644

Вы можете получить ошибку Permissions 0644, когда пытались использовать команду scp. Это потому, что к закрытому ключу никто не может получить доступ. Полное сообщение об ошибке выглядит следующим образом:

Чтобы решить эту проблему, вам необходимо дать разрешение на запись и чтение файла с помощью этой команды:

sudo chmod 600 /Users/****.cer

Затем потребуется пароль, и вы решите проблему.

Создайте образ Docker для службы Java

Чтобы создать образ Docker для службы Java, вам необходимо создать файл Dockerfile для образа. Файл должен называться Dockerfile без какого-либо расширения. Содержимое файла:

Файл должен быть загружен в тот же каталог, что и файл JAR в /home/ec2-user/eladmin/.

Затем вам нужно создать образ с помощью команды:

docker build -t eladmin .

Запустить контейнер для серверной службы

Перед запуском контейнера внутренней службы вам может потребоваться установить и запустить redis в Docker.

Теперь вы можете использовать следующую команду для запуска внутреннего сервера контейнера.

Вы можете протестировать серверную службу в браузере или почтальоне.

Разверните интерфейсную службу

Подготовьтесь к Nginx

Для развертывания интерфейсной службы мы используем Nginx в качестве веб-сервера. Во-первых, нам нужно создать несколько каталогов для Nginx.

  • /home/ec2-user/nginx/conf.d предназначен для файлов конфигурации;
  • / home / ec2-user / nginx / cert - для хранения SSL-сертификата;
  • / home / ec2-user / nginx / html - для хранения файлов веб-сайтов;
  • / home / ec2-user / nginx / logs, если для хранения журналов.
  • /home/ec2-user/nginx.conf - это файл конфигурации Nginx по умолчанию.

Файл конфигурации Nginx по умолчанию определяется следующим образом:

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


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

    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;

    keepalive_timeout  65;

    #gzip  on;

    client_max_body_size 100M;

    include /etc/nginx/conf.d/*.conf;
}

Затем нам нужно определить пользовательский файл конфигурации для обратного прокси. Итак, нам нужно создать файл с именем eladmin.conf в каталоге /home/ec2-user/nginx/conf.d. Содержимое файла:

server
    {
        listen 80;
        server_name domain/IP;
        index index.html;
        root  /usr/share/nginx/html/eladmin/dist;  #dist upload directory 
        client_max_body_size 800M;

        # avoid 404 error
        location / {
          try_files $uri $uri/ @router;
          index  index.html;
        }

        location @router {
          rewrite ^.*$ /index.html last;
        }

        # socket
        location /api {
          proxy_pass http://172.17.0.1:8000;
          proxy_set_header X-Forwarded-Proto $scheme;
          proxy_set_header X-Forwarded-Port $server_port;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";
        }

        # auth socket
        location /auth {
          proxy_pass http://172.17.0.1:8000;
          proxy_set_header X-Forwarded-Proto $scheme;
          proxy_set_header X-Forwarded-Port $server_port;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";
        }

        # WebSocket service
        location /webSocket {
          proxy_pass http://172.17.0.1:8000;
          proxy_set_header X-Forwarded-Proto $scheme;
          proxy_set_header X-Forwarded-Port $server_port;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";
        }

        # avatar
        location /avatar {
          proxy_pass http://172.17.0.1:8000;
        }

        # files
        location /file {
          proxy_pass http://172.17.0.1:8000;
        }
    }

Создайте производственные файлы для интерфейсного проекта

После подготовки к серверу Nginx нам нужно собрать производственные файлы для интерфейсного проекта. Мы используем эту команду для создания производственных файлов:

npm run build:prod

Когда процесс сборки будет завершен, вы получите производственные файлы в папке dist, как показано ниже.

Загрузите файлы внешнего проекта

Поскольку каталог в контейнере /usr/share/nginx/html/eladmin/dist связан с каталогом /home/ec2-user/nginx/html на хост-сервере. Следовательно, мы должны загрузить файлы внешнего проекта в этот каталог.

Мы можем использовать сервер scp для загрузки производственных файлов в каталог.

Установите и запустите контейнер Nginx в Docker

Теперь все готово. Пришло время установить контейнер Nginx в Docker с помощью команд:

docker run -d \
--name nginx --restart always \
-p 80:80 -p 443:443 \
-e "TZ=Australia/Melbourne" \
-v /home/ec2-user/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/ec2-user/nginx/conf.d:/etc/nginx/conf.d \
-v /home/ec2-user/nginx/logs:/var/log/nginx \
-v /home/ec2-user/nginx/cert:/etc/nginx/cert \
-v /home/ec2-user/nginx/html:/usr/share/nginx/html \
nginx:alpine

Затем запустите сервер Nginx в Docker с помощью команды:
docker start nginx

Поздравляем, вы завершили все этапы развертывания приложения Spring Boot и Vue в экземпляре AWS EC2 с помощью Docker.

Наслаждаться!

Первоначально опубликовано на https://williamyuaus.com 28 августа 2021 г.

Больше контента на plainenglish.io