So here’s an example Vagrant YAML file that does the following:
- Spins a CentOS 7 VM
- Gives it a Static IP
- Installs on VirtualBox on the local machine
- Sets the vCPU and Memory
- Creates a Sync Folder if needed
- Installs custom packages (htop, vim etc)
- Creates a user (me! Yea!)
- Sets the locale and timezone
- Sets up the firewall
- DNS
- Sets the hostname
- Installs PHP/Python etc
vagrantfile:
target: local
vm:
provider:
local:
box: bento/centos-7
box_url: 'false'
box_version: '0'
chosen_virtualizer: virtualbox
virtualizers:
virtualbox:
modifyvm:
natdnshostresolver1: false
showgui: 0
vmware:
numvcpus: 1
parallels:
linked_clone: 0
check_guest_tools: 0
update_guest_tools: 0
machines:
machine1:
id: machine1
hostname: ayan.vm
network:
private_network: 192.168.56.101
forwarded_port:
port1:
host: '9912'
guest: '22'
memory: '1'
cpus: '1'
provision:
puppet:
manifests_path: puphpet/puppet/manifests
module_path:
- puphpet/puppet/modules
- puphpet/puppet/manifests
options:
- '--verbose'
- '--hiera_config /opt/puphpet/puppet/hiera.yaml'
synced_folder:
folder1:
owner: vagrant
group: vagrant
source: ./
target: /var/www
sync_type: default
smb:
smb_host: ''
smb_username: ''
smb_password: ''
mount_options:
dir_mode: '0775'
file_mode: '0664'
rsync:
args:
- '--verbose'
- '--archive'
- '-z'
exclude:
- .vagrant/
- .git/
auto: 'true'
usable_port_range:
start: 10200
stop: 10500
post_up_message: ''
ssh:
host: 'false'
port: 'false'
private_key_path: 'false'
username: vagrant
guest_port: 'false'
keep_alive: '1'
forward_agent: 'false'
forward_x11: 'false'
shell: 'bash -l'
insert_key: 'false'
vagrant:
host: detect
proxy:
http: ''
https: ''
ftp: ''
no_proxy: ''
server:
install: '1'
packages:
- bash-completion
- htop
- vim
users_groups:
install: '1'
groups: { }
users:
- ayan
locale:
install: '1'
settings:
default_locale: en_US.UTF-8
locales:
- en_GB.UTF-8
- en_US.UTF-8
timezone: UTC
firewall:
install: '1'
rules: { }
resolv:
install: '1'
nameservers:
- 8.8.8.8
- 8.8.4.4
domainname: ''
searchpath: { }
cron:
install: '1'
jobs: { }
nginx:
install: '1'
settings:
version: present
default_vhost: 1
proxy_buffers: '4 256k'
proxy_buffer_size: 128k
proxy_connect_timeout: 600s
proxy_send_timeout: 600s
proxy_read_timeout: 600s
names_hash_bucket_size: 128
upstreams: { }
vhosts:
vhost1:
server_name: awesome.test
server_aliases:
- www.awesome.test
www_root: /var/www/awesome
listen_port: '80'
client_max_body_size: 1m
ssl: '0'
locations:
php_html:
www_root: /var/www/awesome
location: /
autoindex: 'off'
internal: 'false'
index_files:
- index.html
- index.php
try_files:
- $uri
- $uri/
- /index.php$is_args$args
php_php:
www_root: /var/www/awesome
location: '~ \.php$'
autoindex: 'off'
internal: 'false'
index_files:
- index.php
try_files:
- $uri
- $uri/
set:
- '$path_info $fastcgi_path_info'
fastcgi: '127.0.0.1:9000'
fastcgi_index: index.php
fastcgi_split_path: '^(.+?\.php)(/.*)$'
fast_cgi_params_extra:
- 'SCRIPT_FILENAME $document_root$fastcgi_script_name'
proxies: { }
apache:
install: '0'
settings:
version: 2.4
user: www-data
group: www-data
default_vhost: true
manage_user: false
manage_group: false
sendfile: 0
modules:
- proxy_fcgi
- rewrite
vhosts:
vhost1:
servername: awesome.test
serveraliases:
- www.awesome.test
docroot: /var/www/awesome
port: '80'
setenvif:
- 'Authorization "(.*)" HTTP_AUTHORIZATION=$1'
ssl: '0'
ssl_cert: LETSENCRYPT
ssl_key: LETSENCRYPT
ssl_chain: LETSENCRYPT
ssl_certs_dir: LETSENCRYPT
ssl_protocol: ''
ssl_cipher: ''
directories:
php_html:
provider: directory
path: /var/www/awesome
directoryindex: 'index.php index.html'
options:
- Indexes
- FollowSymlinks
- MultiViews
allow_override:
- All
require:
- 'all granted'
php_php:
provider: filesmatch
path: \.php$
sethandler: 'proxy:fcgi://127.0.0.1:9000'
letsencrypt:
install: '1'
settings:
email: ''
webserver_service: ''
domains: { }
php:
install: '1'
settings:
version: '7.2'
modules:
php:
- cli
- intl
- xml
pear: { }
pecl: { }
ini:
display_errors: 'On'
error_reporting: '-1'
session.save_path: /var/lib/php/session
date.timezone: UTC
fpm_ini:
error_log: /var/log/php-fpm.log
fpm_pools:
pool1:
ini:
prefix: www
listen: '127.0.0.1:9000'
security.limit_extensions: .php
user: www-user
group: www-data
composer: '1'
composer_home: ''
xdebug:
install: '0'
settings:
xdebug.default_enable: '1'
xdebug.remote_autostart: '0'
xdebug.remote_connect_back: '1'
xdebug.remote_enable: '1'
xdebug.remote_handler: dbgp
xdebug.remote_port: '9000'
blackfire:
install: '0'
settings:
server_id: ''
server_token: ''
agent:
http_proxy: ''
https_proxy: ''
log_file: stderr
log_level: '1'
php:
agent_timeout: '0.25'
log_file: ''
log_level: '1'
wpcli:
install: '0'
drush:
install: '0'
version: 8.0.5
ruby:
install: '1'
versions:
ruby1:
default: '1'
bundler: '1'
version: '2.4'
gems:
- deep_merge@1.2.1
- activesupport@5.1.4
- vine@0.4
python:
install: '1'
packages: { }
versions: { }
nodejs:
install: '0'
settings:
version: '6'
npm_packages: { }
mariadb:
install: '1'
settings:
version: '10.1'
root_password: '123'
override_options: { }
users:
user1:
name: dbuser
password: '123'
databases:
database1:
name: dbname
collate: utf8_general_ci
sql: ''
grants:
grant1:
user: dbuser
table: '*.*'
privileges:
- ALL
mysql:
install: '0'
settings:
version: '5.7'
root_password: '123'
override_options: { }
users:
user1:
name: dbuser
password: '123'
databases:
database1:
name: dbname
collate: utf8_general_ci
sql: ''
grants:
grant1:
user: dbuser
table: '*.*'
privileges:
- ALL
postgresql:
install: '0'
settings:
global:
encoding: UTF8
version: '9.6'
server:
postgres_password: '123'
databases:
database1:
dbname: dbname
owner: dbuser
users:
user1:
username: dbuser
password: '123'
superuser: '1'
grants:
grant1:
role: dbuser
db: dbname
privilege:
- ALL
mongodb:
install: '0'
settings:
bind_ip: 127.0.0.1
port: '27017'
globals:
version: 3.6.2
databases:
database1:
name: dbname
user: dbuser
password: '123'
redis:
install: '0'
settings:
port: '6379'
sqlite:
install: '0'
databases:
database1:
name: dbname
owner: www-data
group: www-data
sql_file: ''
mailhog:
install: '0'
settings:
smtp_ip: 0.0.0.0
smtp_port: 1025
http_ip: 0.0.0.0
http_port: '8025'
path: /usr/local/bin/mailhog
beanstalkd:
install: '0'
settings:
listenaddress: 0.0.0.0
listenport: '11300'
maxjobsize: '65535'
maxconnections: '1024'
binlogdir: /var/lib/beanstalkd/binlog
binlogfsync: null
binlogsize: '10485760'
beanstalk_console: 0
rabbitmq:
install: '0'
settings:
port: '5672'
users:
user1:
admin: '1'
name: admin
password: '123'
tags:
- admin
vhosts: { }
plugins: { }
elastic_search:
install: '0'
settings:
version: 6.1.2
java_install: true
instances:
instance1:
name: es-01
jvm_options:
- '-Xms2G'
- '-Xmx2G'
As you can see, multiple installs. (rabbitmq, elastic search etc) can be clubbed together based on the installation requirements
Spinning up the VM is just a matter of bringing up the Vagrant box up