geerlingguy / drupal-vm

A VM for Drupal development
https://www.drupalvm.com/
MIT License
1.37k stars 645 forks source link

PHP Not Evaluated #583

Closed sonfd closed 8 years ago

sonfd commented 8 years ago

I've installed Tag 2.4 and Master and in both I'm seeing php files being shown as plain text. Server config is a little over my head, but ssh-ing into the box and running apt-get install libapache2-mod-php5 per: http://stackoverflow.com/a/30772294 seems to resolve the issue.

oxyc commented 8 years ago

You are using an outdated/modified config.yml missing the vhost ProxyPassMatch parameters. Here are the defaults: https://github.com/geerlingguy/drupal-vm/blob/master/example.config.yml#L83

Some time ago Drupal VM switched from mod_php to PHP-FPM as the default and that's the root cause of your issue. Your options are to either install libapache2-mod-php5 as you've done (you can also add it to extra_packages) or to switch over to the recommended PHP-FPM setup by adding the ProxyPassMatch parameters to your config.yml.

You can find the release notes with instructions here: https://github.com/geerlingguy/drupal-vm/releases/tag/2.2.1 And a related issue referencing how other solved it here: https://github.com/geerlingguy/drupal-vm/issues/460#issuecomment-187390303

sonfd commented 8 years ago

Hmm, yeah I was using the lastest tag (2.4 which is after 2.2) so I had that change. I also tried with master, and got the same result. I deleted my vagrant directory, and tried again and actually got a different result. But still not a working vagrant box. I'll look into this more myself. Thanks for the quick response though.

On Tue, May 3, 2016 at 11:09 AM, Oskar Schöldström <notifications@github.com

wrote:

Closed #583 https://github.com/geerlingguy/drupal-vm/issues/583.

— You are receiving this because you authored the thread. Reply to this email directly or view it on GitHub https://github.com/geerlingguy/drupal-vm/issues/583#event-648974060

oxyc commented 8 years ago

I apologize, I just figured that was the problem. But let's keep this open until you get it working. Would you mind posting your config.yml and maybe I can spot something.

sonfd commented 8 years ago

No problem at all. I thought the same thing! I've used this a bunch and never had this problem. I think I'm messing something up to be honest as I started over and I was seeing 403 forbidden rather than the unevaluated php.

Here's my config.yml: (Note: this is currently giving me 403 and not the issue with php not evaluating)

---
# `vagrant_box` can also be set to geerlingguy/centos6, geerlingguy/centos7,
# geerlingguy/ubuntu1604, geerlingguy/ubuntu1204, parallels/ubuntu-14.04, etc.
vagrant_box: geerlingguy/ubuntu1404
vagrant_user: vagrant
vagrant_synced_folder_default_type: nfs

# If you need to run multiple instances of Drupal VM, set a unique hostname,
# machine name, and IP address for each instance.
vagrant_hostname: drupalvm.dev
vagrant_machine_name: drupalvm
vagrant_ip: 192.168.88.88

# Allow Drupal VM to be accessed via a public network interface on your host.
# Vagrant boxes are insecure by default, so be careful. You've been warned!
# See: https://docs.vagrantup.com/v2/networking/public_network.html
vagrant_public_ip: ""

# A list of synced folders, with the keys 'local_path', 'destination', and
# a 'type' of [nfs|rsync|smb] (leave empty for slow native shares). See
# http://docs.drupalvm.com/en/latest/extras/syncing-folders/ for more info.
vagrant_synced_folders:
  # The first synced folder will be used for the default Drupal installation, if
  # build_makefile: is 'true'.
  - local_path: ~/workspace/sites
    destination: /var/www
    type: nfs
    create: true

# Memory and CPU to use for this VM.
vagrant_memory: 1024
vagrant_cpus: 2

# The web server software to use. Can be either 'apache' or 'nginx'.
drupalvm_webserver: apache

# Set this to false if you are using a different site deployment strategy and
# would like to configure 'vagrant_synced_folders' and 'apache_vhosts' manually.
build_makefile: false
drush_makefile_path: ../../drupal.make.yml

# Set this to false if you don't need to install drupal (using the drupal_*
# settings below), but instead copy down a database (e.g. using drush sql-sync).
install_site: false

# Settings for building a Drupal site from a makefile (if 'build_makefile:'
# is 'true').
drupal_major_version: 8
drupal_core_path: "/var/www/drupalvm/drupal"
drupal_domain: "{{ vagrant_hostname }}"
drupal_site_name: "Drupal"
drupal_install_profile: standard
drupal_enable_modules: [ 'devel' ]
drupal_account_name: admin
drupal_account_pass: admin
drupal_mysql_user: drupal
drupal_mysql_password: drupal
drupal_mysql_database: drupal

# Additional arguments or options to pass to `drush site-install`.
drupal_site_install_extra_args: []

# Cron jobs are added to the root user's crontab. Keys include name (required),
# minute, hour, day, weekday, month, job (required), and state.
drupalvm_cron_jobs: []
  # - {
  #   name: "Drupal Cron",
  #   minute: "*/30",
  #   job: "drush -r {{ drupal_core_path }} core-cron"
  # }

# Drupal VM automatically creates a drush alias file in your ~/.drush folder if
# this variable is 'true'.
configure_local_drush_aliases: true

# Apache VirtualHosts. Add one for each site you are running inside the VM. For
# multisite deployments, you can point multiple servernames at one documentroot.
# View the geerlingguy.apache Ansible Role README for more options.
apache_vhosts:
  - servername: "{{ drupal_domain }}"
    documentroot: "{{ drupal_core_path }}"
    extra_parameters: |
          ProxyPassMatch ^/(.*\.php(/.*)?)$ "fcgi://127.0.0.1:9000{{ drupal_core_path }}"

  - servername: "adminer.{{ vagrant_hostname }}"
    documentroot: "{{ adminer_install_dir }}"
    extra_parameters: |
          ProxyPassMatch ^/(.*\.php(/.*)?)$ "fcgi://127.0.0.1:9000{{ adminer_install_dir }}"

  - servername: "xhprof.{{ vagrant_hostname }}"
    documentroot: "{{ php_xhprof_html_dir }}"
    extra_parameters: |
          ProxyPassMatch ^/(.*\.php(/.*)?)$ "fcgi://127.0.0.1:9000{{ php_xhprof_html_dir }}"

  - servername: "pimpmylog.{{ vagrant_hostname }}"
    documentroot: "{{ pimpmylog_install_dir }}"
    extra_parameters: |
          ProxyPassMatch ^/(.*\.php(/.*)?)$ "fcgi://127.0.0.1:9000{{ pimpmylog_install_dir }}"

  - servername: "{{ vagrant_ip }}"
    serveralias: "dashboard.{{ vagrant_hostname }}"
    documentroot: "{{ dashboard_install_dir }}"

  - servername: "My Site"
    serveralias: "dev.my-site.dev"
    documentroot: "var/www/my_site"

apache_remove_default_vhost: true
apache_mods_enabled:
  - expires.load
  - ssl.load
  - rewrite.load
  - proxy.load
  - proxy_fcgi.load

# Nginx hosts. Each site will get a server entry using the configuration defined
# here. Set the 'is_php' property for document roots that contain PHP apps like
# Drupal.
nginx_hosts:
  - server_name: "{{ drupal_domain }}"
    root: "{{ drupal_core_path }}"
    is_php: true

  - server_name: "adminer.{{ vagrant_hostname }}"
    root: "{{ adminer_install_dir }}"
    is_php: true

  - server_name: "xhprof.{{ vagrant_hostname }}"
    root: "{{ php_xhprof_html_dir }}"
    is_php: true

  - server_name: "pimpmylog.{{ vagrant_hostname }}"
    root: "{{ pimpmylog_install_dir }}"
    is_php: true

  - server_name: "{{ vagrant_ip }} dashboard.{{ vagrant_hostname }}"
    root: "{{ dashboard_install_dir }}"

nginx_remove_default_vhost: true
nginx_ppa_use: true

# MySQL Databases and users. If build_makefile: is true, first database will
# be used for the makefile-built site.
mysql_databases:
  - name: "{{ drupal_mysql_database }}"
    encoding: utf8
    collation: utf8_general_ci

mysql_users:
  - name: "{{ drupal_mysql_user }}"
    host: "%"
    password: "{{ drupal_mysql_password }}"
    priv: "{{ drupal_mysql_database }}.*:ALL"

# Comment out any extra utilities you don't want to install. If you don't want
# to install *any* extras, make set this value to an empty set, e.g. `[]`.
installed_extras:
  - adminer
  - drupalconsole
  - mailhog
  - memcached
  # - nodejs
  - pimpmylog
  # - redis
  # - ruby
  # - selenium
  # - solr
  - varnish
  - xdebug
  - xhprof

# Add any extra apt or yum packages you would like installed.
extra_packages: []

# `nodejs` must be in installed_extras for this to work. Valid examples: "0.10",
# "0.12", "4.x", "5.x".
nodejs_version: "0.12"
nodejs_npm_global_packages: []
nodejs_install_npm_user: "{{ drupalvm_user }}"

# `ruby` must be in installed_extras for this to work.
ruby_install_gems_user: "{{ drupalvm_user }}"
ruby_install_gems: []

# You can configure almost anything else on the server in the rest of this file.
extra_security_enabled: false

drush_version: "master"
drush_keep_updated: true
drush_composer_cli_options: "--prefer-dist --no-interaction"

firewall_allowed_tcp_ports:
  - "22"
  - "25"
  - "80"
  - "81"
  - "443"
  - "4444"
  - "8025"
  - "8080"
  - "8443"
  - "8983"
firewall_log_dropped_packets: false

# PHP Configuration. Currently-supported versions: 5.5, 5.6, 7.0.
# PHP 7.0 requires a few additional changes. See the documentation at
# http://docs.drupalvm.com/en/latest/other/php-7/
php_version: "5.6"
php_memory_limit: "192M"
php_display_errors: "On"
php_display_startup_errors: "On"
php_realpath_cache_size: "1024K"
php_sendmail_path: "/usr/sbin/ssmtp -t"
php_opcache_enabled_in_ini: true
php_opcache_memory_consumption: "192"
php_opcache_max_accelerated_files: 4096
php_max_input_vars: "4000"

# Drupal VM defaults to using PHP-FPM with either Apache or Nginx. If you wish
# to instead use Apache + mod_php with an Ubuntu base box, make sure you add
# libapache2-mod-php5 to `extra_packages` elsewhere in this config file.
php_enable_php_fpm: true
php_fpm_listen: "127.0.0.1:9000"

composer_path: /usr/bin/composer
composer_home_path: "/home/{{ drupalvm_user }}/.composer"
composer_home_owner: "{{ drupalvm_user }}"
composer_home_group: "{{ drupalvm_user }}"
# composer_global_packages:
#   - { name: phpunit/phpunit, release: '@stable' }

# Run specified scripts after VM is provisioned. Path is relative to the
# `provisioning/playbook.yml` file.
post_provision_scripts: []
  # - "../examples/scripts/configure-solr.sh"

# MySQL Configuration.
mysql_root_password: root
mysql_slow_query_log_enabled: true
mysql_slow_query_time: 2
mysql_wait_timeout: 300
adminer_install_filename: index.php

# Varnish Configuration.
varnish_listen_port: "81"
varnish_default_vcl_template_path: templates/drupalvm.vcl.j2
varnish_default_backend_host: "127.0.0.1"
varnish_default_backend_port: "80"

# Pimp my Log settings.
pimpmylog_install_dir: /usr/share/php/pimpmylog
pimpmylog_grant_all_privs: true

# XDebug configuration. XDebug is disabled by default for better performance.
php_xdebug_default_enable: 0
php_xdebug_coverage_enable: 0
php_xdebug_cli_enable: 1
php_xdebug_remote_enable: 1
php_xdebug_remote_connect_back: 1
# Use PHPSTORM for PHPStorm, sublime.xdebug for Sublime Text.
php_xdebug_idekey: PHPSTORM
php_xdebug_max_nesting_level: 256

# Solr Configuration (if enabled above).
solr_version: "4.10.4"
solr_xms: "64M"
solr_xmx: "128M"

# Selenium configuration.
selenium_version: 2.46.0

# Other configuration.
dashboard_install_dir: /var/www/dashboard
known_hosts_path: ~/.ssh/known_hosts
oxyc commented 8 years ago

Do you have a Drupal installation located on your host computer in ~/workspace/sites/drupalvm/drupal/index.php?

As you've set build_makefile: false that means you need to provide the files yourself.

The destionation in the vagrant_synced_folders list needs to match up with drupal_core_path: "/var/www/drupalvm/drupal".

vagrant_synced_folders:
  # The first synced folder will be used for the default Drupal installation, if
  # build_makefile: is 'true'.
  - local_path: ~/workspace/sites
    destination: /var/www
sonfd commented 8 years ago

No, I have one at var/www/my-site that I was accessing via dev.my-site.dev. Let me try your suggestion

oxyc commented 8 years ago

I also saw you had added:

  - servername: "My Site"
    serveralias: "dev.my-site.dev"
    documentroot: "var/www/my_site"

If you have a Drupal installation in ~/workspace/sites/my_site/index.php, this should actually be set to (note the missing / at the beginning of documentroot value):

  - servername: "My Site"
    serveralias: "dev.my-site.dev"
    documentroot: "/var/www/my_site"
    extra_parameters: |
          ProxyPassMatch ^/(.*\.php(/.*)?)$ "fcgi://127.0.0.1:9000/var/www/my_site""

Usually you would not add an extra vhost entry unless you are running multiple sites in the same VM though. The default:

  - servername: "{{ drupal_domain }}"
    documentroot: "{{ drupal_core_path }}"
    extra_parameters: |
          ProxyPassMatch ^/(.*\.php(/.*)?)$ "fcgi://127.0.0.1:9000{{ drupal_core_path }}"

Will evaluate to (you can change the drupal_* variables to match your settings).

  - servername: "drupalvm.dev"
    documentroot: "/var/www/drupalvm/drupal"
    extra_parameters: |
          ProxyPassMatch ^/(.*\.php(/.*)?)$ "fcgi://127.0.0.1:9000/var/www/drupalvm/drupal"
sonfd commented 8 years ago

Yea I was planning to have multiple sites. Let me try with the extra parameters.

sonfd commented 8 years ago

Beautiful. Adding the extra_parameters did the trick. I was definitely getting confused from using an older version. I think pre 2.2. Thanks for your help!

I still can't explain the original issue of php not evaluating, so sorry for that.

In the past I've used a single box with multiple local sites, but it seems like that's not really the intended use. Is that correct?

Thanks again for your help.

sonfd commented 8 years ago

Also, really sorry I didn't see this earlier! [http://docs.drupalvm.com/en/latest/deployment/local-codebase/#disable-the-drush-make-build-and-site-install] Also that you were right with your original response.

oxyc commented 8 years ago

A lot of people are using it for multiple sites, it's just that there's still a few pieces missing. For local codebases and install_site: false, like your setup, it should work pretty well already, but if you want to use makefiles and run drush si it currently doesn't work. @geerlingguy mentioned interest in supporting it at a later stage https://github.com/geerlingguy/drupal-vm/issues/449#issuecomment-185560269.

Personally I stick to one VM per site as I like having it contained in a single cloneable repo that anyone from our tech team can get started with. It also allows us to easily configure and later modify the environment so it matches production on a site per site basis.

The setup is just a matter of preference though and I know a lot of people run multiple sites per VM just like you. Hopefully Drupal VM will support both equally well soon.