You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
165 lines
4.4 KiB
165 lines
4.4 KiB
# dev-environment-vagrant
|
|
Developer Environment with Vagrant, Docker and Ansible
|
|
|
|
## What does this provide
|
|
|
|
Spin up linux development environments quickly that offers the following:
|
|
- run shell commands (installing dependencies as an example)
|
|
- use the docker provisioner if you want to make use of docker containers in your environment
|
|
- use the ansible provisioner if you want to make use of ansible playbooks to prepare your environment
|
|
- remote development on vscode
|
|
|
|
I have included a example of the shell, docker and ansible provisioner.
|
|
|
|
## Usage
|
|
|
|
Clone the repo and change to the directory:
|
|
|
|
```bash
|
|
git clone https://github.com/ruanbekker/dev-environment-vagrant
|
|
cd dev-environment-vagrant
|
|
```
|
|
|
|
Install vagrant by following their [installation documentation](https://www.vagrantup.com/docs/installation), then install the vbguest plugin:
|
|
|
|
```bash
|
|
vagrant plugin install vagrant-vbguest
|
|
```
|
|
|
|
then boot the environment using:
|
|
|
|
```bash
|
|
vagrant up
|
|
```
|
|
|
|
In this example we are using 3 provisioners for demonstration:
|
|
- shell provisioner (runs shell commands on provisioning)
|
|
- docker provisioner (runs a docker container on provisioning)
|
|
- ansible provisioner (runs a ansible playbook on provisioning)
|
|
|
|
Once the vm is booted, we can get the status:
|
|
|
|
```bash
|
|
vagrant status
|
|
```
|
|
|
|
We can ssh directly to the vm, using:
|
|
|
|
```
|
|
vagrant ssh
|
|
```
|
|
|
|
If we want to use VSCode for remote development, you can install the [Remote-SSH](https://code.visualstudio.com/docs/remote/ssh) extension if you don't have it already, then you can view the ssh config of your vm using:
|
|
|
|
```
|
|
vagrant ssh-config
|
|
```
|
|
|
|
To make things easier, we can then append the ssh config to your `~/.ssh/config` file, then we can ssh to our vm using:
|
|
|
|
```
|
|
ssh sektor
|
|
```
|
|
|
|
Or use VSCode for Remote Development, to see the instructions and screenshots, see the [VSCode Readme](README_VSCODE.md).
|
|
|
|
When making changes to your provisioner or ansible playbooks, then you can simply run:
|
|
|
|
```
|
|
vagrant provision
|
|
```
|
|
|
|
To destroy your environment:
|
|
|
|
```
|
|
vagrant destroy
|
|
```
|
|
|
|
## Project Structure
|
|
|
|
The procject structure:
|
|
|
|
```bash
|
|
.
|
|
├── README.md
|
|
├── README_VSCODE.md
|
|
├── Vagrantfile
|
|
└── ansible
|
|
├── inventory
|
|
├── playbook-no-roles.yml
|
|
├── playbook.yml
|
|
└── roles
|
|
└── website
|
|
├── README.md
|
|
├── defaults
|
|
│ └── main.yml
|
|
├── files
|
|
│ └── styles.css
|
|
├── handlers
|
|
│ └── main.yml
|
|
├── meta
|
|
│ └── main.yml
|
|
├── tasks
|
|
│ ├── configuration.yml
|
|
│ ├── main.yml
|
|
│ └── setup-ubuntu.yml
|
|
├── templates
|
|
│ ├── app.conf.j2
|
|
│ ├── index.html.j2
|
|
│ └── nginx.conf.j2
|
|
├── tests
|
|
│ ├── inventory
|
|
│ └── test.yml
|
|
└── vars
|
|
└── main.yml
|
|
|
|
11 directories, 20 files
|
|
```
|
|
|
|
## Example Applications
|
|
|
|
The deployed docker container can be accessed on:
|
|
- http://http://192.168.33.23:8080
|
|
|
|
The deployed website via ansible can be accessed on:
|
|
- http://192.168.33.23:8080/
|
|
|
|
## Customization
|
|
|
|
Changing the shell provisioner is done on line [19-22](Vagrantfile#L19-L22):
|
|
|
|
```ruby
|
|
config.vm.provision "shell", inline: <<-SHELL
|
|
apt update
|
|
apt install curl git cmake vim -y
|
|
SHELL
|
|
```
|
|
|
|
Changing the docker provisioner is done on line [24-27](Vagrantfile#L24-L27):
|
|
|
|
```ruby
|
|
config.vm.provision "docker" do |d|
|
|
d.run "linux-dash", image: "imightbebob/linux-dash:x86",
|
|
args: "-p 8080:8080 -v '/:/rootfs:ro' -v '/sys:/host/sys:ro' -v '/proc:/host/proc:ro' -v '/var/run/docker.sock:/var/run/docker.sock' --privileged"
|
|
end
|
|
```
|
|
|
|
Changing the ansible provisioner is done on line [30-36](Vagrantfile#L30-L36):
|
|
|
|
```ruby
|
|
config.vm.provision "ansible" do |ansible|
|
|
ansible.compatibility_mode = "2.0"
|
|
ansible.playbook = "ansible/playbook.yml"
|
|
ansible.inventory_path = "ansible/inventory"
|
|
ansible.become = true
|
|
end
|
|
```
|
|
|
|
The `ansible/playbook.yml` references a role, which can be found in `ansible/roles/` and the tasks being actioned is within the tasks directory `ansible/roles/website/tasks/main.yml`.
|
|
|
|
For a simple playbook without roles, you can reference `ansible/playbook-no-roles.yml`
|
|
|
|
## Resources
|
|
|
|
- https://github.com/AntonyLeons/Ward
|
|
- https://hub.docker.com/r/imightbebob/linux-dash |