본문 바로가기
Server/Vapor - Server_Side_Swift

GCP - 무료 Vapor 서버 만들기 - Ubuntu+Swift+Vapor(3)

by HaningYa 2020. 8. 15.
728x90

----- 이번 포스팅에서는 Hello World 성공했습니다.  ------

 

 

저번 포스팅까지 한것

  1. GCP 무료 인스턴스 생성 (Ubuntu18.04)
  2. Ubuntu Swift5 환경 구축
  3. Swift 컴파일되는거 확인
  4. Vapor 프레임워크 설치
  5. Vapor Build & Serve 확인
  6. localHost 에서 Run

근데 VM 외부 ip 로 접속 했을 때 connection refused 가 뜬다.

생각해보니 Spring boot 서버 세팅할 때 순서가

  1. 로컬에서 스프링부트 init
  2. 로컬에서 API 개발
  3. 깃 리모트 레포에 푸쉬
  4. 클라우드 서버에 아파치2, Nginx 설치
  5. 해당 깃 풀 받기
  6. 뭐 서버 돌리기

였던걸로 기억난다.

문제점은 Vapor 를 서버에서 돌렸을때 돌아가는 하는데 외부 접속을 위한 단계가 빠진 것 같다.

오늘은 기필코 Hello World api 만든다.

(투자한 시간 3일째)


새마음 새뜻으로 새롭게 VM 부터 파겠다.

VM 지우고 깔고 지우고 깔고 역쉬 클라우드가 편해

이제는 외우겠다

  1. Ubuntu 16.04 로 인스턴스 생성
  2. SSH 접속

Swift 5.2.5 설치 (본인의 OS 에 맞는 Swift 바이너리 파일 주소를 적어야 합니다.)

[여기서서확인]

 

Swift.org

Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns.

swift.org

sudo apt-get update
sudo apt-get install clang libicu-dev libpython2.7

wget https://swift.org/builds/swift-5.2.5-release/ubuntu1604/swift-5.2.5-RELEASE/swift-5.2.5-RELEASE-ubuntu16.04.tar.gz
tar xzf swift-5.2.5-RELEASE-ubuntu16.04.tar.gz 
sudo mv swift-5.2.5-RELEASE-ubuntu16.04.tar.gz  /usr/share/swift
echo "export PATH=/usr/share/swift/usr/bin:$PATH" >> ~/.bashrc

source ~/.bashrc

sudo apt-get install python3-swiftclient

 

Ubuntu18.02 에서는 swiftclient 깔라는 얘기는 없었는데 16.04라서 그런가 


Nginx 설치 및 방화벽 설정

sudo apt-get update
sudo apt-get install nginx

sudo ufw allow 'Nginx HTTP'
sudo ufw status

systemctl status nginx

외부 ip 로 접속

 

문제를 찾았다. 문제는 Vapor 가 아니다. 일단 외부 ip 접속 부터 해보자

다시 인스턴스 삭제했다가

이번엔 다시 우분투 18.02 로 만들었다.

sudo su
apt-get update
apt-get upgrade
apt-get install nginx

 

그리고 외부 ip 에 접속해보는데

https 로 하면 안된다 http 로 해야된다 하 이거때매 안되는줄 알고 vm 2번 새로 만들었다 아 짜증나네 진짜


정신차리고 다시 정리해보자

  1. vm 인스턴스 만든다 (우분투)
  2. Nginx 설치한다.
  3. HTTP 로 외부 ip 접속했을때 welcome to nginx 뜬다.
  4. https 로도 접속 가능하게 인증서 추가한다. 생략
  5. 거기에 swift 환경 설치한다.
  6. 거기에 vapor 환경 설치한다.
  7. Nginx 랑 vapor 연결해준다 (포워딩)
  8. 데모 프로젝트 만들어서 hello world 띄운다.
  9. Supervisor 로 SSH 창 꺼도 계속 동작하게 한다.

참고할 점은 Apple 은 Http로 통신하면 경고뜬다. HTTPS 써야된다.

근데 나는 나중에 필요하면 바꾸고 일단은 Hello World 제발


Ubuntu 18.04 인스턴스 생성

버전주의


Nginx 설치

sudo su
apt-get update
apt-get upgrade

apt-get install nginx

외부 ip http 기본 페이지 확인

확인

Swift 설치

[출처]

 

Swift and Vapor on Ubuntu 18.04

Swift and Vapor on Ubuntu 18.04. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

sudo apt-get update
sudo apt-get install clang libicu-dev libpython2.7

wget https://swift.org/builds/swift-5.2.5-release/ubuntu1804/swift-5.2.5-RELEASE/swift-5.2.5-RELEASE-ubuntu18.04.tar.gz


tar xzf swift-5.2.5-RELEASE-ubuntu18.04.tar.gz

sudo mv swift-5.2.5-RELEASE-ubuntu18.04 /usr/share/swift

echo "export PATH=/usr/share/swift/usr/bin:$PATH" >> ~/.bashrc
source  ~/.bashrc

swift --version

swift
:exit

Vapor 설치

사실은 Swift 5.1.0 깔아서다시하고있음 이래서 도커를 쓰는구나 싶다.

이 에러뜨면 Swift 버전이랑 vapor 브랜치 버전이 안맞는거임

git clone https://github.com/vapor/toolbox.git
cd toolbox
git checkout <원하는버전> //나는 최신버전이니까 master
swift build -c release --disable-sandbox --enable-test-discovery
mv .build/release/vapor /usr/local/bin

 

아 증말 이단계에서 진행이 안된다. 너무 오래걸려ㅠㅠ

 

리얼 한 1시간 걸린거 같다.


vapor 프로젝트 만들어서 NGIX 포워딩

vapor new hello

hello 프로젝트 생성됨

/etc/nignx/sites-available 파일 수정

server {
        listen 80 default_server;
        listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
        try_files $uri @proxy;
        location @proxy {
                proxy_pass http://127.0.0.1:8080;
                proxy_pass_header Server;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_pass_header Server;
                proxy_connect_timeout 3s;
                proxy_read_timeout 10s;
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                #try_files $uri $uri/ =404;
        }
}

nginx 재시작 후 vapor 서버 시작

sudo systemctl restart nginx
cd ~/hello
vapor build
vapor run

처음 빌드하는 거면 시간이 꽤 걸린다.

http://YourDomainOrIP/hello 접속했을 때 Hello World 나오면 성공

오오 된다
오오 됬따아아!!!

 

와씨 됬다 드디어 하 참 Hello World 겁나 반갑네

로그도 잘 찍힌다.


Supervisor 설치 (생략했음)

sudo apt-get update
sudo apt-get install supervisor

 

config 파일 만들기
경로 - /etc/supervisor/conf.d/hello.conf

아래 sammy 를 본인 이름 루트로 변경

내 경로는

uuzaza74@vapor:~$ pwd 
/home/uuzaza74

그래서 sammy 에 내 경로를 넣어준다.

[program:hello]
command=vapor run --env=production
directory=/home/sammy/hello/          # Put correct path here
autorestart=true
user=sammy                            # Put username here
stdout_logfile=/var/log/supervisor/%(program_name)-stdout.log
stderr_logfile=/var/log/supervisor/%(program_name)-stderr.log

서비스 에러나도 자동으로 다시 시작하는 기능

sudo supervisorctl reread
sudo supervisorctl add hello
sudo supervisorctl start hello

잘안된다

 

일단 supervisor 는 붙이지 않겠다.

 

SSH 연결 끄고도 접속 되는지 확인

여전히 잘된다.

 

 

후기

  • 소요시간 3일
  • VM 인스턴스 28번 삭제했다 만듬
  • 자 이제 시작이야
  • 편하게 스프링부트 쓸껄
  • 시작한 김에 끝까지?
  • 굳이 Vapor..?
  • 디비는 또 어떻게 하지
  • CI/CD는 뭘로하지?
  • 아 

 

[헬로월드 주소] (유동ip라 바뀔수도 있음)

 


 

https://medium.com/@ankitank/deploy-a-basic-vapor-app-with-nginx-and-supervisor-1ef303320726

 

Deploy a basic Vapor app with Nginx and Supervisor

Swift on server: Learn to deploy a vapor app and setup Nginx and Supervisor.

medium.com

https://gist.github.com/DevSecOpsGuy/281ffc34e4fc2f01e36d1e2bdf9db574

 

Swift and Vapor on Ubuntu 18.04

Swift and Vapor on Ubuntu 18.04. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

728x90

댓글