Vagrant 프로젝트 구성의 첫 단계는 Vagrantfile
생성하는 것이다.
$ mkdir vagrant_getting_started
$ cd vagrant_getting_started
$ vagrant init hashicorp/bionic64
Vagrant는 가상 머신을 바닥부터 만드는 대신에 box
라고 부르는 베이스 이미지
를 빠르게 클론(복제)하여 사용한다. Vagrantfile
을 생성한 후 가장 먼저 하는 일이 Vagrant 환경에서 사용할 box
를 지정하는 것이다.
Vagrant
파일 없이box
를 추가하고 싶은 경우는vagrant add box
명령어를 사용한다.
박스들은 글로벌하게 저장된다. 각 프로젝트는 박스를 초기 이미지로 사용하여 복제를 하게 되고 실제 베이스 이미지를 변경하지 않는다.
$ vagrant box add hashicorp/bionic64
위 명령어에서 네임스페이스를 사용하고 있음을 알 수 있다. 박스 이름은 username
과 boxname
두 부분으로 나뉜다. (URL이나 Local File Path를 사용해서도 박스를 지정할 수 있다고 한다.)
박스를 추가하였으니 프로젝트가 추가된 박스를 베이스로 사용하도록 구성할 필요가 있다.
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/bionic64"
end
추가로 버전과 URL도 명시할 수 있다.
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/bionic64"
config.vm.box_version = "1.0.282"
config.vm.box_url = "https://vagrantcloud.com/hashicorp/bionic64"
end
프로젝트 초기화하고 사용할 박스를 지정하였으니 첫번째 Vagrant 환경을 부팅을 시킬 시간이다.
$ vagrant up
$ vagrant ssh
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-58-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Tue Jun 16 21:57:57 UTC 2020
System load: 0.44 Processes: 91
Usage of /: 2.5% of 61.80GB Users logged in: 0
Memory usage: 11% IP address for eth0: 10.0.2.15
Swap usage: 0%
* MicroK8s gets a native Windows installer and command-line integration.
https://ubuntu.com/blog/microk8s-installers-windows-and-macos
0 packages can be updated.
0 updates are security updates.
vagrant@vagrant:~$
CTRL-D
를 누르거나 logout
명령어로 빠져나올 수 있다.
vagrant@vagrant:~$ logout
Connection to 127.0.0.1 closed.
$ vagrant box list
hashicorp/bionic64 (virtualbox, 1.0.282)
$ vagrant box remove hashicorp/bionic64
Removing box 'hashicorp/bionic64' (v1.0.282) with provider 'virtualbox'...
SSH 터미널안에서 vi
로 편집하는게 썩 편리하지는 않다. Vagrant는 로컬 파일을 자동으로 게스트 머신과 동기화를 시켜주므로 이 방법을 사용하여 로컬에서 편집하고 가상 개발 환경에서 파일을 실행할 수 있다.
*로컬 호스트 머신 --> 원격 게스트 머신
Vagrant는 Vagrantfile
이 위치한 루트 디렉토리를 게스트 머신의 /vagrant
디렉토리에 마운트한다.
(synced folder
)
vagrant@vagrant:~$ ls /vagrant
Vagrantfile
게스트 머신에서 파일을 생성한 후 호스트 머신에서도 동일하게 보이는지 테스트 해보자.
vagrant@vagrant:~$ touch /vagrant/foo
vagrant@vagrant:~$ exit
logout
Connection to 127.0.0.1 closed.
# ls
Vagrantfile foo
이제 웹서버를 띄워보자.
$ mkdir html
간단하게 index.html
문서를 생성한다.
<!DOCTYPE html>
<html>
<body>
<h1>Getting started with Vagrant!</h1>
</body>
</html>
쉘스크립트를 이용하여 아파치를 셋업해 보자. 아래의 내용을 bootstrap.sh
로 저장한다.
#!/usr/bin/env bash
apt-get update
apt-get install -y apache2
if ! [ -L /var/www ]; then
rm -rf /var/www
ln -fs /vagrant /var/www
fi
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/bionic64"
config.vm.provision :shell, path: "bootstrap.sh"
end
$ vagrant reload --provision
여기서 두 번째 난관을 만나게 된다.
일단 vagrant-proxyconf
를 먼저 시도해 본다.
# vagrant plugin install vagrant-proxyconf
Installing the 'vagrant-proxyconf' plugin. This can take a few minutes...
ERROR: SSL verification error at depth 0: unable to get local issuer certificate (20)
ERROR: You must add ~~회사 인증서~~ to your local trusted store
Vagrant failed to load a configured plugin source. This can be caused
by a variety of issues including: transient connectivity issues, proxy
filtering rejecting access to a configured plugin source, or a configured
plugin source not responding correctly. Please review the error message
below to help resolve the issue:
SSL_connect returned=1 errno=0 state=error: certificate verify failed (unable to get local issuer certificate) (https://gems.hashicorp.com/specs.4.8.gz)
Source: https://gems.hashicorp.com/
아래 내용 참고해서 인증서 설치하면 정상적으로 플러그인이 설치가 된다.
# workaround of above https problem -- vagrant 설치폴더
$sudo -E echo ./xxxxxxx.crt >> /C/HashiCorp/Vagrant/embedded/cacert.pem
다음 Vagrantfile
에 아래의 내용을 추가하자.
Vagrant.configure("2") do |config|
if Vagrant.has_plugin?("vagrant-proxyconf")
config.proxy.http = "http://192.168.0.2:3128/"
config.proxy.https = "http://192.168.0.2:3128/"
config.proxy.no_proxy = "localhost,127.0.0.1,.example.com"
end
# ... other stuff
end
이제 프락시 타고 프로비저닝이 정상적으로 잘 진행된다.
default: VirtualBox Version: 6.1
==> default: Configuring proxy for Apt...
==> default: Configuring proxy environment variables...
==> default: Configuring proxy for Git...
==> default: Mounting shared folders...
default: /vagrant => D:/Workspace/hello-vagrant
==> default: Running provisioner: shell...
default: Running: C:/Users/JAESEO~1.PAR/AppData/Local/Temp/vagrant-shell20211201-10976-1er1iq4.sh
default: Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
default: Get:2 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
default: Get:3 http://security.ubuntu.com/ubuntu bionic-security/main i386 Packages [1,080 kB]
default: Get:4 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
default: Get:5 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
프로비저닝이 진행되면 웹서버가 실행되어 동작하나 아직 호스트의 브라우저에서는 접근이 되지 않는다. 일단 게스트의 SSH 터미널에서 확인을 먼저 해보자.
vagrant@vagrant:~$ wget -qO- 127.0.0.1
<!DOCTYPE html>
<html>
<body>
<h1>Getting started with Vagrant!</h1>
</body>
</html>
Host PC 에서 VM 내의 웹서버에 접근하기 위해서는 포트 포워딩 설정이 필요하다.
Vagrant.configure("2") do |config|
config.vm.network "forwarded_port", guest: 80, host: 8080
end
위의 설정을 추가한 후 vagrant reload --provision
명령을 실행하면 포트 포워딩 설정이 이루어지고 이후에 Host PC의 브라우저에서 localhost:8080
으로 접근하면 웹 페이지가 출력된다.
Local Windows PC에 GitHub Actions Self Hosted Runner 설치 중에 사내 Proxy 서버로 인한 문제 해결 과정을 추가로 작성하였다.
E: The repository 'https://cli.github.com/packages stable Release' does not have a Release file.
https://ubuntu.com/server/docs/security-trust-store
$ sudo apt-get install -y ca-certificates
$ sudo cp local-ca.crt /usr/local/share/ca-certificates
$ sudo update-ca-certificates
npm ERR! code UNABLE_TO_VERIFY_LEAF_SIGNATURE
$ npm config set cafile /vagrant/local-ca.crt
gcloud's default CA certificates failed to verify your connection, which can happen if you are behind a proxy or firewall.
$ gcloud config set core/custom_ca_certs_file /vagrant/local-ca.crt