вступление
Для разработки одностраничного приложения хорошим выбором могут быть 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