From f68df6a9b06c7f683716c005b040c3a7bf0db046 Mon Sep 17 00:00:00 2001 From: hauke Date: Mon, 15 Sep 2014 19:48:47 +0200 Subject: [PATCH] made vagrant partly work again --- Vagrantfile | 224 ++------------------------------------ util/vagrant_provision.sh | 72 ++++++++++-- util/vagrant_vhost.sh | 177 ++++++++++++++++++++++++++++++ 3 files changed, 250 insertions(+), 223 deletions(-) create mode 100644 util/vagrant_vhost.sh diff --git a/Vagrantfile b/Vagrantfile index 755cf202b..48af4ae51 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -1,78 +1,21 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : -# Config Github Settings -github_username = "fideloper" -github_repo = "Vaprobash" -github_branch = "1.0.0" -github_url = "https://raw.githubusercontent.com/#{github_username}/#{github_repo}/#{github_branch}" - -# Server Configuration - -hostname = "vaprobash.dev" - -# Set a local private network IP address. -# See http://en.wikipedia.org/wiki/Private_network for explanation -# You can use the following IP ranges: -# 10.0.0.1 - 10.255.255.254 -# 172.16.0.1 - 172.31.255.254 -# 192.168.0.1 - 192.168.255.254 server_ip = "192.168.22.10" server_memory = "384" # MB -server_swap = "768" # Options: false | int (MB) - Guideline: Between one or two times the server_memory server_timezone = "UTC" -# Database Configuration -mysql_root_password = "root" # We'll assume user "root" -mysql_version = "5.5" # Options: 5.5 | 5.6 -mysql_enable_remote = "false" # remote access enabled when true -pgsql_root_password = "root" # We'll assume user "root" - -# Languages and Packages6 -ruby_version = "latest" # Choose what ruby version should be installed (will also be the default version) -ruby_gems = [ # List any Ruby Gems that you want to install - #"jekyll", - #"sass", - #"compass", -] - -# To install HHVM instead of PHP, set this to "true" -hhvm = "false" - -# PHP Options -composer_packages = [ # List any global Composer packages that you want to install - #"phpunit/phpunit:4.0.*", - #"codeception/codeception=*", - #"phpspec/phpspec:2.0.*@dev", - #"squizlabs/php_codesniffer:1.5.*", -] - -# Default web server document root -# Symfony's public directory is assumed "web" -# Laravel's public directory is assumed "public" -public_folder = "/vagrant" - -laravel_root_folder = "/vagrant/laravel" # Where to install Laravel. Will `composer install` if a composer.json file exists -laravel_version = "latest-stable" # If you need a specific version of Laravel, set it here -symfony_root_folder = "/vagrant/symfony" # Where to install Symfony. - -nodejs_version = "latest" # By default "latest" will equal the latest stable version -nodejs_packages = [ # List any global NodeJS packages that you want to install - #"grunt-cli", - #"gulp", - #"bower", - #"yo", -] +public_folder = "/vagrant" Vagrant.configure("2") do |config| - # Set server to Ubuntu 14.04 - config.vm.box = "ubuntu/trusty64" + # Set server to Ubuntu 12.04 + config.vm.box = "precise64" + + config.vm.box_url = "http://files.vagrantup.com/precise64.box" # Create a hostname, don't forget to put it to the `hosts` file # This will point to the server's default virtual host # TO DO: Make this work with virtualhost along-side xip.io URL - config.vm.hostname = hostname + config.vm.hostname = "friendica.dev" # Create a static IP config.vm.network :private_network, ip: server_ip @@ -97,167 +40,20 @@ Vagrant.configure("2") do |config| # If using VMWare Fusion config.vm.provider "vmware_fusion" do |vb, override| override.vm.box_url = "http://files.vagrantup.com/precise64_vmware.box" - + # Set server memory vb.vmx["memsize"] = server_memory end - # If using Vagrant-Cachier - # http://fgrehm.viewdocs.io/vagrant-cachier - if Vagrant.has_plugin?("vagrant-cachier") - # Configure cached packages to be shared between instances of the same base box. - # Usage docs: http://fgrehm.viewdocs.io/vagrant-cachier/usage - config.cache.scope = :box - - config.cache.synced_folder_opts = { - type: :nfs, - mount_options: ['rw', 'vers=3', 'tcp', 'nolock'] - } - end - - #### - # Base Items - ########## - - # Provision Base Packages - config.vm.provision "shell", path: "#{github_url}/scripts/base.sh", args: [github_url, server_swap] - - # Provision PHP - config.vm.provision "shell", path: "#{github_url}/scripts/php.sh", args: [server_timezone, hhvm] - - # Enable MSSQL for PHP - # config.vm.provision "shell", path: "#{github_url}/scripts/mssql.sh" - - # Provision Vim - # config.vm.provision "shell", path: "#{github_url}/scripts/vim.sh", args: github_url - - - #### - # Web Servers - ########## - - # Provision Apache Base - config.vm.provision "shell", path: "#{github_url}/scripts/apache.sh", args: [server_ip, public_folder, hostname, github_url] - - # Provision Nginx Base - # config.vm.provision "shell", path: "#{github_url}/scripts/nginx.sh", args: [server_ip, public_folder, hostname, github_url] - - - #### - # Databases - ########## - - # Provision MySQL - config.vm.provision "shell", path: "#{github_url}/scripts/mysql.sh", args: [mysql_root_password, mysql_version, mysql_enable_remote] - - # Provision PostgreSQL - # config.vm.provision "shell", path: "#{github_url}/scripts/pgsql.sh", args: pgsql_root_password - - # Provision SQLite - # config.vm.provision "shell", path: "#{github_url}/scripts/sqlite.sh" - - # Provision RethinkDB - # config.vm.provision "shell", path: "#{github_url}/scripts/rethinkdb.sh", args: pgsql_root_password - - # Provision Couchbase - # config.vm.provision "shell", path: "#{github_url}/scripts/couchbase.sh" - - # Provision CouchDB - # config.vm.provision "shell", path: "#{github_url}/scripts/couchdb.sh" - - # Provision MongoDB - # config.vm.provision "shell", path: "#{github_url}/scripts/mongodb.sh" - - # Provision MariaDB - # config.vm.provision "shell", path: "#{github_url}/scripts/mariadb.sh", args: [mysql_root_password, mysql_enable_remote] - - #### - # Search Servers - ########## - - # Install Elasticsearch - # config.vm.provision "shell", path: "#{github_url}/scripts/elasticsearch.sh" - - # Install SphinxSearch - # config.vm.provision "shell", path: "#{github_url}/scripts/sphinxsearch.sh" - - #### - # Search Server Administration (web-based) - ########## - - # Install ElasticHQ - # Admin for: Elasticsearch - # Works on: Apache2, Nginx - # config.vm.provision "shell", path: "#{github_url}/scripts/elastichq.sh" - - - #### - # In-Memory Stores - ########## - - # Install Memcached - # config.vm.provision "shell", path: "#{github_url}/scripts/memcached.sh" - - # Provision Redis (without journaling and persistence) - # config.vm.provision "shell", path: "#{github_url}/scripts/redis.sh" - - # Provision Redis (with journaling and persistence) - # config.vm.provision "shell", path: "#{github_url}/scripts/redis.sh", args: "persistent" - # NOTE: It is safe to run this to add persistence even if originally provisioned without persistence - - - #### - # Utility (queue) - ########## - - # Install Beanstalkd - # config.vm.provision "shell", path: "#{github_url}/scripts/beanstalkd.sh" - - # Install Heroku Toolbelt - # config.vm.provision "shell", path: "https://toolbelt.heroku.com/install-ubuntu.sh" - - # Install Supervisord - # config.vm.provision "shell", path: "#{github_url}/scripts/supervisord.sh" - - #### - # Additional Languages - ########## - - # Install Nodejs - # config.vm.provision "shell", path: "#{github_url}/scripts/nodejs.sh", privileged: false, args: nodejs_packages.unshift(nodejs_version, github_url) - - # Install Ruby Version Manager (RVM) - # config.vm.provision "shell", path: "#{github_url}/scripts/rvm.sh", privileged: false, args: ruby_gems.unshift(ruby_version) - - #### - # Frameworks and Tooling - ########## - - # Provision Composer - # config.vm.provision "shell", path: "#{github_url}/scripts/composer.sh", privileged: false, args: composer_packages.join(" ") - - # Provision Laravel - # config.vm.provision "shell", path: "#{github_url}/scripts/laravel.sh", privileged: false, args: [server_ip, laravel_root_folder, public_folder, laravel_version] - - # Provision Symfony - # config.vm.provision "shell", path: "#{github_url}/scripts/symfony.sh", privileged: false, args: [server_ip, symfony_root_folder, public_folder] - - # Install Screen - # config.vm.provision "shell", path: "#{github_url}/scripts/screen.sh" - - # Install config Mailcatcher - # config.vm.provision "shell", path: "#{github_url}/scripts/mailcatcher.sh" - - # Install git-ftp - # config.vm.provision "shell", path: "#{github_url}/scripts/git-ftp.sh", privileged: false - + #### # Local Scripts # Any local scripts you may want to run post-provisioning. # Add these to the same directory as the Vagrantfile. ########## - config.vm.provision "shell", path: "./util/vagrant_provision.sh" + config.vm.synced_folder "./", "/vagrant/", :owner=> 'www-data', :group=>'vagrant', :mount_options => ['dmode=775', 'fmode=775'] + config.vm.provision "shell", path: "./util/vagrant_provision.sh" end diff --git a/util/vagrant_provision.sh b/util/vagrant_provision.sh index 448e80fed..ae354bb42 100644 --- a/util/vagrant_provision.sh +++ b/util/vagrant_provision.sh @@ -3,28 +3,82 @@ # #DO NOT RUN on your physical machine as this won't be of any use #and f.e. deletes your /var/www/ folder! +echo "Friendica configuration settings" +sudo apt-get update + +#Selfsigned cert +echo ">>> Installing *.xip.io self-signed SSL" +SSL_DIR="/etc/ssl/xip.io" +DOMAIN="*.xip.io" +PASSPHRASE="vaprobash" +SUBJ=" +C=US +ST=Connecticut +O=Vaprobash +localityName=New Haven +commonName=$DOMAIN +organizationalUnitName= +emailAddress= +" +sudo mkdir -p "$SSL_DIR" +sudo openssl genrsa -out "$SSL_DIR/xip.io.key" 1024 +sudo openssl req -new -subj "$(echo -n "$SUBJ" | tr "\n" "/")" -key "$SSL_DIR/xip.io.key" -out "$SSL_DIR/xip.io.csr" -passin pass:$PASSPHRASE +sudo openssl x509 -req -days 365 -in "$SSL_DIR/xip.io.csr" -signkey "$SSL_DIR/xip.io.key" -out "$SSL_DIR/xip.io.crt" + + +#Install apache2 +echo ">>> Installing Apache2 webserver" +sudo add-apt-repository -y ppa:ondrej/apache2 +sudo apt-key update +sudo apt-get update +sudo apt-get install -y apache2 +sudo a2enmod rewrite actions ssl +sudo cp /vagrant/util/vagrant_vhost.sh /usr/local/bin/vhost +sudo chmod guo+x /usr/local/bin/vhost +sudo vhost -s 192.168.22.10.xip.io -d /var/www -p /etc/ssl/xip.io -c xip.io -a friendica.dev +sudo a2dissite 000-default +sudo service apache2 restart + +#Install php +echo ">>> Installing PHP5" +sudo apt-get install -y php5 libapache2-mod-php5 php5-cli php5-mysql php5-curl php5-gd +sudo service apache2 restart + +#Install mysql +echo ">>> Installing Mysql" +sudo debconf-set-selections <<< "mysql-server mysql-server/root_password password root" +sudo debconf-set-selections <<< "mysql-server mysql-server/root_password_again password root" +sudo apt-get install -qq mysql-server +# enable remote access +# setting the mysql bind-address to allow connections from everywhere +sed -i "s/bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/my.cnf +# adding grant privileges to mysql root user from everywhere +# thx to http://stackoverflow.com/questions/7528967/how-to-grant-mysql-privileges-in-a-bash-script for this +MYSQL=`which mysql` +Q1="GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;" +Q2="FLUSH PRIVILEGES;" +SQL="${Q1}${Q2}" +$MYSQL -uroot -proot -e "$SQL" +service mysql restart #make the vagrant directory the docroot -rm -rf /var/www/ -ln -fs /vagrant /var/www +sudo rm -rf /var/www/ +sudo ln -fs /vagrant /var/www #delete .htconfig.php file if it exists to have a fresh friendica #installation if [ -f /vagrant/.htconfig.php ] then - rm /vagrant/.htconfig.php + sudo rm /vagrant/.htconfig.php fi -#change ownership of dir where sessions are stored -chown -R www-data:www-data /var/lib/php5 - #create the friendica database echo "create database friendica" | mysql -u root -proot #create cronjob echo "*/10 * * * * cd /vagrant; /usr/bin/php include/poller.php" >> friendicacron -crontab friendicacron -rm friendicacron +sudo crontab friendicacron +sudo rm friendicacron #Optional: checkout addon repositroy -#git clone https://github.com/friendica/friendica-addons.git /vagrant/addon \ No newline at end of file +#sudo git clone https://github.com/friendica/friendica-addons.git /vagrant/addon diff --git a/util/vagrant_vhost.sh b/util/vagrant_vhost.sh new file mode 100644 index 000000000..f26d8e14d --- /dev/null +++ b/util/vagrant_vhost.sh @@ -0,0 +1,177 @@ +#!/usr/bin/env bash + +# Run this as sudo! +# I move this file to /usr/local/bin/vhost and run command 'vhost' from anywhere, using sudo. + +# +# Show Usage, Output to STDERR +# +function show_usage { +cat <<- _EOF_ + +Create a new vHost in Ubuntu Server +Assumes /etc/apache2/sites-available and /etc/apache2/sites-enabled setup used + + -d DocumentRoot - i.e. /var/www/yoursite + -h Help - Show this menu. + -s ServerName - i.e. example.com or sub.example.com + -a ServerAlias - i.e. *.example.com or another domain altogether + -p File path to the SSL certificate. Directories only, no file name. + If using an SSL Certificate, also creates a port :443 vhost as well. + This *ASSUMES* a .crt and a .key file exists + at file path /provided-file-path/your-server-or-cert-name.[crt|key]. + Otherwise you can except Apache errors when you reload Apache. + Ensure Apache's mod_ssl is enabled via "sudo a2enmod ssl". + -c Certificate filename. "xip.io" becomes "xip.io.key" and "xip.io.crt". + + Example Usage. Serve files from /var/www/xip.io at http(s)://192.168.33.10.xip.io + using ssl files from /etc/ssl/xip.io/xip.io.[key|crt] + sudo vhost -d /var/www/xip.io -s 192.168.33.10.xip.io -p /etc/ssl/xip.io -c xip.io + +_EOF_ +exit 1 +} + + +# +# Output vHost skeleton, fill with userinput +# To be outputted into new file +# +function create_vhost { +cat <<- _EOF_ + + ServerAdmin webmaster@localhost + ServerName $ServerName + $ServerAlias + + DocumentRoot $DocumentRoot + + + + Options Indexes FollowSymLinks MultiViews + AllowOverride All + Order allow,deny + allow from all + + + ErrorLog \${APACHE_LOG_DIR}/$ServerName-error.log + + # Possible values include: debug, info, notice, warn, error, crit, + # alert, emerg. + LogLevel warn + + CustomLog \${APACHE_LOG_DIR}/$ServerName-access.log combined + + + +_EOF_ +} + +function create_ssl_vhost { +cat <<- _EOF_ + + ServerAdmin webmaster@localhost + ServerName $ServerName + $ServerAlias + + DocumentRoot $DocumentRoot + + + Options Indexes FollowSymLinks MultiViews + AllowOverride All + Order allow,deny + allow from all + + + ErrorLog \${APACHE_LOG_DIR}/$ServerName-error.log + + # Possible values include: debug, info, notice, warn, error, crit, + # alert, emerg. + LogLevel warn + + CustomLog \${APACHE_LOG_DIR}/$ServerName-access.log combined + + SSLEngine on + + SSLCertificateFile $CertPath/$CertName.crt + SSLCertificateKeyFile $CertPath/$CertName.key + + + SSLOptions +StdEnvVars + + + BrowserMatch "MSIE [2-6]" \\ + nokeepalive ssl-unclean-shutdown \\ + downgrade-1.0 force-response-1.0 + # MSIE 7 and newer should be able to use keepalive + BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown + +_EOF_ +} + +#Sanity Check - are there two arguments with 2 values? +if [ "$#" -lt 4 ]; then + show_usage +fi + +CertPath="" + +#Parse flags +while getopts "d:s:a:p:c:h" OPTION; do + case $OPTION in + h) + show_usage + ;; + d) + DocumentRoot=$OPTARG + ;; + s) + ServerName=$OPTARG + ;; + a) + Alias=$OPTARG + ;; + p) + CertPath=$OPTARG + ;; + c) + CertName=$OPTARG + ;; + *) + show_usage + ;; + esac +done + +# If alias is set: +if [ "$Alias" != "" ]; then + ServerAlias="ServerAlias "$Alias +else + ServerAlias="" +fi + +# If CertName doesn't get set, set it to ServerName +if [ "$CertName" == "" ]; then + CertName=$ServerName +fi + +if [ ! -d $DocumentRoot ]; then + mkdir -p $DocumentRoot + #chown USER:USER $DocumentRoot #POSSIBLE IMPLEMENTATION, new flag -u ? +fi + +if [ -f "$DocumentRoot/$ServerName.conf" ]; then + echo 'vHost already exists. Aborting' + show_usage +else + create_vhost > /etc/apache2/sites-available/${ServerName}.conf + + # Add :443 handling + if [ "$CertPath" != "" ]; then + create_ssl_vhost >> /etc/apache2/sites-available/${ServerName}.conf + fi + + # Enable Site + cd /etc/apache2/sites-available/ && a2ensite ${ServerName}.conf + service apache2 reload +fi \ No newline at end of file