-
Notifications
You must be signed in to change notification settings - Fork 1.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Vagrantfile #1459
Merged
Merged
Add Vagrantfile #1459
Changes from 7 commits
Commits
Show all changes
12 commits
Select commit
Hold shift + click to select a range
b8c07b8
Add Vagrantfile
natanfelles bc8ecf1
Makes Vagrantfile workable
natanfelles 826a5dd
Back synced_folder type to rsync
natanfelles f3d4793
Add Directory section
natanfelles 1712ae9
Allow rsync use symlinks and prepare user guide requirements
natanfelles e0e99b1
Add php-zip
natanfelles 0e71060
Update Vagrantfile
natanfelles 4426258
Allow external access to Memcached and Redis
natanfelles 3bf4971
Update Apache config and add optional APT Proxy
natanfelles a395dd9
Display PHP errors
natanfelles 73450c8
Up memory to 1024 and add swap to low-memory systems
natanfelles 2277532
Rename Vagrantfile to Vagrantfile.dist
natanfelles File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,161 @@ | ||
# -*- mode: ruby -*- | ||
# vi: set ft=ruby : | ||
|
||
# https://github.com/hashicorp/vagrant/issues/9442#issuecomment-374785457 | ||
unless Vagrant::DEFAULT_SERVER_URL.frozen? | ||
Vagrant::DEFAULT_SERVER_URL.replace('https://vagrantcloud.com') | ||
end | ||
|
||
Vagrant.configure("2") do |config| | ||
# VM Box | ||
config.vm.box = "ubuntu/bionic64" | ||
# Automatic box update checking | ||
config.vm.box_check_update = true | ||
|
||
# CodeIgniter virtual host | ||
config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1" | ||
# Code Coverage virtual host | ||
config.vm.network "forwarded_port", guest: 81, host: 8081, host_ip: "127.0.0.1" | ||
# User Guide virtual host | ||
config.vm.network "forwarded_port", guest: 82, host: 8082, host_ip: "127.0.0.1" | ||
# MySQL server | ||
#config.vm.network "forwarded_port", guest: 3306, host: 3307, host_ip: "127.0.0.1" | ||
# PostgreSQL server | ||
#config.vm.network "forwarded_port", guest: 5432, host: 5433, host_ip: "127.0.0.1" | ||
# Memcached server | ||
#config.vm.network "forwarded_port", guest: 11211, host: 11212, host_ip: "127.0.0.1" | ||
# Redis server | ||
#config.vm.network "forwarded_port", guest: 6379, host: 6380, host_ip: "127.0.0.1" | ||
|
||
# Add "192.168.10.10 ${VIRTUALHOST}" in your host file to access by domain | ||
#config.vm.network "private_network", ip: "192.168.10.10" | ||
|
||
# Same path set in the $CODEIGNITER_PATH Provision | ||
# "virtualbox" type allow auto-sync host to guest and guest to host | ||
# but chmod does not work... tests will fail. | ||
# Default rsync__args except "--copy-links", to allow phpunit correctly works by symlink | ||
config.vm.synced_folder ".", "/var/www/codeigniter", type: "rsync", rsync__args: ["--verbose", "--archive", "--delete", "-z"] | ||
|
||
# Provider-specific configuration | ||
config.vm.provider "virtualbox" do |vb| | ||
# Display the VirtualBox GUI when booting the machine | ||
vb.gui = false | ||
# Customize the amount of memory on the VM: | ||
vb.memory = "768" | ||
end | ||
|
||
# Provision | ||
config.vm.provision "shell", inline: <<-SHELL | ||
MYSQL_ROOT_PASS="password" | ||
PGSQL_ROOT_PASS="password" | ||
VIRTUALHOST="localhost" | ||
CODEIGNITER_PATH="/var/www/codeigniter" | ||
PHP_VERSION=7.2 | ||
PGSQL_VERSION=10 | ||
|
||
grep -q "127.0.0.1 ${VIRTUALHOST}" /etc/hosts || echo "127.0.0.1 ${VIRTUALHOST}" >> /etc/hosts | ||
|
||
export DEBIAN_FRONTEND=noninteractive | ||
|
||
echo "================================================================================" | ||
echo "Updating and Installing Required Packages" | ||
echo "================================================================================" | ||
|
||
apt-get update | ||
|
||
debconf-set-selections <<< "mysql-server mysql-server/root_password password ${MYSQL_ROOT_PASS}" | ||
debconf-set-selections <<< "mysql-server mysql-server/root_password_again password ${MYSQL_ROOT_PASS}" | ||
|
||
apt-get install -y \ | ||
php$PHP_VERSION apache2 composer \ | ||
php-intl php-mbstring php-xml php-zip php-xdebug \ | ||
php-mysql mysql-server mysql-client \ | ||
php-pgsql postgresql-$PGSQL_VERSION \ | ||
php-sqlite3 sqlite3 \ | ||
php-memcached memcached \ | ||
php-redis redis-server \ | ||
php-curl curl \ | ||
php-gd php-imagick \ | ||
python-pip | ||
|
||
pip install sphinx sphinxcontrib-phpdomain | ||
|
||
apt-get autoclean | ||
|
||
echo "================================================================================" | ||
echo "Preparing User Guide" | ||
echo "================================================================================" | ||
|
||
cd "${CODEIGNITER_PATH}/user_guide_src/cilexer" | ||
python setup.py install | ||
cd .. | ||
make html | ||
|
||
echo "================================================================================" | ||
echo "Configuring Databases" | ||
echo "================================================================================" | ||
|
||
sed -i "s/^bind-address/#bind-address/" /etc/mysql/mysql.conf.d/mysqld.cnf | ||
mysql -e "CREATE DATABASE IF NOT EXISTS codeigniter COLLATE 'utf8_general_ci'; | ||
UPDATE mysql.user SET Host='%' WHERE user='root'; | ||
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; | ||
FLUSH PRIVILEGES;" -uroot -p$MYSQL_ROOT_PASS | ||
systemctl restart mysql | ||
|
||
sed -i "s/^#listen_addresses = 'localhost'/listen_addresses = '*'/" /etc/postgresql/$PGSQL_VERSION/main/postgresql.conf | ||
grep -q "host all root all md5" /etc/postgresql/$PGSQL_VERSION/main/pg_hba.conf || echo "host all root all md5" >> /etc/postgresql/$PGSQL_VERSION/main/pg_hba.conf | ||
sudo -u postgres psql -tc "SELECT 1 FROM pg_roles WHERE rolname='root'" | grep -q 1 || sudo -u postgres psql -c "CREATE ROLE root WITH SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN" | ||
sudo -u postgres psql -c "ALTER ROLE root WITH PASSWORD '${PGSQL_ROOT_PASS}'" | ||
sudo -u postgres psql -tc "SELECT 1 FROM pg_database WHERE datname='codeigniter'" | grep -q 1 ||sudo -u postgres psql -c "CREATE DATABASE codeigniter" | ||
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE codeigniter TO root" | ||
systemctl restart postgresql | ||
|
||
|
||
echo "================================================================================" | ||
echo "Configuring Virtual Hosts" | ||
echo "================================================================================" | ||
|
||
mkdir -p "${CODEIGNITER_PATH}/build/coverage-html" | ||
mkdir -p "${CODEIGNITER_PATH}/public" | ||
mkdir -p "${CODEIGNITER_PATH}/user_guide_src/build/html" | ||
mkdir -p "${CODEIGNITER_PATH}/writable/apache" | ||
chown -R vagrant:vagrant $CODEIGNITER_PATH | ||
|
||
if [ ! -d /home/vagrant/codeigniter ]; then ln -s $CODEIGNITER_PATH /home/vagrant/codeigniter; fi | ||
|
||
sed -i "s/^APACHE_RUN_USER=www-data/APACHE_RUN_USER=vagrant/" /etc/apache2/envvars | ||
sed -i "s/^APACHE_RUN_GROUP=www-data/APACHE_RUN_GROUP=vagrant/" /etc/apache2/envvars | ||
grep -q "Listen 81" /etc/apache2/ports.conf || sed -i "s/^Listen 80/Listen 80\\nListen 81\\nListen 82/" /etc/apache2/ports.conf | ||
|
||
echo "ServerName ${VIRTUALHOST} | ||
<Directory ${CODEIGNITER_PATH}> | ||
DirectoryIndex index.html index.php | ||
Options All | ||
AllowOverride All | ||
</Directory> | ||
<VirtualHost *:80> | ||
ServerAdmin vagrant@localhost | ||
DocumentRoot ${CODEIGNITER_PATH}/public | ||
ErrorLog ${CODEIGNITER_PATH}/writable/apache/error.log | ||
CustomLog ${CODEIGNITER_PATH}/writable/apache/custom.log combined | ||
</VirtualHost> | ||
<VirtualHost *:81> | ||
DocumentRoot ${CODEIGNITER_PATH}/build/coverage-html | ||
</VirtualHost> | ||
<VirtualHost *:82> | ||
DocumentRoot ${CODEIGNITER_PATH}/user_guide_src/build/html | ||
</VirtualHost> | ||
" > /etc/apache2/sites-available/codeigniter.conf | ||
|
||
a2enmod rewrite | ||
a2dissite 000-default.conf | ||
a2ensite codeigniter.conf | ||
systemctl restart apache2 | ||
|
||
echo "================================================================================" | ||
echo "Services Status" | ||
echo "================================================================================" | ||
service --status-all | ||
|
||
SHELL | ||
end |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
VM runs with 400MB, 308MB "stopped". Required ~600MB when running tests
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I run mine with 1024m. Probably overkill, but hoping/planning for near-complete code coverage eventually.
Is there much of a penalty specifying more memory?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It depends on the user's machine. Thinking about taking up as little resources as possible, I started with 512MB, but PHPUnit broke for not having enough memory to do the coverage. I run again and saw that it occupies about 600MB at most (MySQLi driver). I increased 256MB.
Testing now with the SQLite3 driver, PHPUnit also could not gererate the code coverage:
I'll go up to 1024 and test again. But this seems to me a very high value, I'm thinking of maybe already letting in the script instructions to create a swap file, because the memory only rises so much when it's generating code coverage.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SQLite3 with
database.tests.database = ':memory:'
...There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK. Increased the default
vb.memory
to 1024 and added script to auto add 1GB of swap if the VM has low RAM.Tested using SQLite3 with
vb.memory = "512"
and no problem. It used ~120MB of swap during coverage.