使用 puppet 快速搭建跨平台 php 开发环境


发布评论 (0)

PuPHPet 是基于 Vagrant  php 开发环境配置的可视化生成工具。

关于 Vagrant

Vagrant 支持 MAC OS X 、 WINDOWS、CENTOS 等系统。Vagrant 会虚拟化一个 Centos/Ubuntu/Debian (PuPHPet 支持) 或者其他 Linux 系统的开发环境,我们通过 Vagrant 来保证我们所有成员的开发环境与生产环境完全一致,并且一次配置就可以在多台(多平台)机器上运行。

下载 Vagrant

https://www.vagrantup.com/downloads.html 下载对应版本

使用 PuPHPet 生成 php开发环境 配置文件

https://puphpet.com/ Provider 我们使用 Virsualbox Distro 选择 Centos 6 x64 Shared Folders 可以将虚拟机目录映射到宿主机目录中 按提示选择需要安装的 程序和相关 PHP 扩展,PHP一栏如果选择安装 NGINX 需要安装 PHP-FPM 选择 Download your custom server config! 下载配置文件 解压 配置文件

Windows 平台BUG修正

https://github.com/mitchellh/vagrant/issues/5933 如果出现
chown: changing ownership of /vagrant: Not a directory
  修改文件
VAGRANTROOT\embedded\gems\gems\vagrant-1.8.1\plugins\providers\virtualbox\driver\version_5_0.rb
搜索 if Vagrant::Util::Platform.windows? 注释掉以下行
# if Vagrant::Util::Platform.windows?
# hostpath = Vagrant::Util::Platform.windows_unc_path(hostpath)
# end
 
打开终端(Windows下需要使用 Git bash 安装 Vagrant 时已安装 Git For Windows)执行
vagrant up
修改配置
puphpet/config.yaml
修改配置后执行以下命令重新配置
vagrant provision
稍等片刻等待下载完成即可。
由于 gem 被墙所以需要挂代理才能完成安装,Windows 平台可以通过 Proxifier 来设置 Ruby.exe 和 VboxHeadless.exe 代理即可完成安装。 注册码 GKZ4Q-R2XYK-6FHWM-EVQVD-RKFJK Mac OS 通过网络设置即可设置全局代理

测试

首先找到我们在配置文件中选择 Shared Folders -> Folder Source 中的宿主机目录,如果忘记了在 CONFIGROOT/puphpet/config.yaml 文件中可以找到
synced_folder:
            vflsf_ksyp0lsovgda:
                source: 'f:/Dev/www'
                target: /var/www
这里的 source 即为 宿主机目录 vagrant 已经把该目录映射到虚拟机 target 目录 ,我们在 source 目录中的修改会同步至虚拟机目录。 在宿主机添加 hosts 至 192.168.56.101 ( PuPHPet 默认) 如:
192.168.56.101 www.vagrant.host
在宿主主中访问 www.vagrant.host 即可访问到虚拟机中的php环境

远程访问

vagrant ssh 
可直接进入该虚拟机终端 Windows 平台上没有好用的终端可以通过其他软件连接虚拟机终端(如 putty xshell) Host: 127.0.0.1 端口: 2222 User name: vagrant User Key: VAGRANTUPROOT/.vagrant/machines/default/virtualbox/private_key (首次 vagrant up 成功后 就会生成 id_rsa key 文件) 使用以上默认配置即可完成远程登录 通过命令查看相关配置信息
vagrant ssh-config
默认的 root 密码是 vagrant, 即
UserName: root
Password: vagrant

打包开发环境

首先关闭 虚拟机
vagrant halt
打包我们已完成的开发环境
vagrant package
生成文件于 ./package.box

分发 package.box

vagrant box add phpdev ./package.box  # 添加package.box 
vagrant init phpdev # 初始化该包
vargrant up # 启动
package.box 是我们打包的压缩包,phpdev 是我们为该环境命的名字 简单几步操作即可在其他机器上恢复我们打包的开发环境 修改目录下的 Vagrantfile 文件配置, 打开以下注释
 config.vm.network "private_network", ip: "192.168.56.101" # 虚拟机IP 为 192.168.56.101
 config.vm.synced_folder "../data", "/var/www" # 将 宿主机目录 映射到 虚拟机 /var/www web目录
 config.vm.network "forwarded_port", guest: 80, host: 8080 # 此项可将宿主机 8080 端口映射到虚拟机80 端口 如有需要可开启

常用命令

vagrant init  # 初始化
vagrant up  # 启动虚拟机
vagrant halt  # 关闭虚拟机
vagrant reload  # 重启虚拟机
vagrant ssh  # SSH 至虚拟机
vagrant status  # 查看虚拟机运行状态
vagrant destroy  # 销毁当前虚拟机
vagrant provision # 重新加载配置

注意事项

使用 Apache/Nginx 时会出现诸如图片修改后但页面刷新仍然是旧文件的情况,是由于静态文件缓存造成的。需要对虚拟机里的 Apache/Nginx 配置文件进行修改:
# Apache 配置添加:
EnableSendfile off

# Nginx 配置添加:
vim /etc/nginx/nginx.conf
sendfile off;
# http{} 中

修改 php.ini 中的配置未生效

修改 /etc/php.d/zzzz.custom.ini 配置
以下配置均在 zzzz_custom 有定义 即使修改了 /etc/php.ini 也不会生效,所以请编辑 custom.ini 的配置或直接删除该配置
cgi.fix_pathinfo=1
display_errors=On
error_reporting=-1
session.save_path=/var/lib/php/session
date.timezone=UTC

PuPHPet  config.yaml 配置样例

vagrantfile:
    target: local
    vm:
        box: puphpet/centos65-x64
        box_url: puphpet/centos65-x64
        hostname: vagrant
        memory: '512'
        cpus: '1'
        chosen_provider: virtualbox
        box_version: ''
        network:
            private_network: 192.168.56.101
            forwarded_port:
                vflnp_h3g14gtl4f7d:
                    host: '6843'
                    guest: '22'
        post_up_message: ''
        provider:
            virtualbox:
                modifyvm:
                    natdnshostresolver1: false
                showgui: '0'
            vmware:
                numvcpus: 1
            parallels:
                use_linked_clone: '0'
                check_guest_tools: '0'
                update_guest_tools: '0'
        provision:
            puppet:
                manifests_path: puphpet/puppet/manifests
                module_path: puphpet/puppet/modules
                options:
                    - '--verbose'
                    - '--hiera_config /vagrant/puphpet/puppet/hiera.yaml'
        synced_folder:
            vflsf_ksyp0lsovgda:
                source: '{WEBROOT}' #此处为宿主主 webroot 目录
                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'
                owner: www-data
                group: www-data
        usable_port_range:
            start: 10200
            stop: 10500
    ssh:
        host: null
        port: null
        private_key_path: null
        username: vagrant
        guest_port: null
        keep_alive: true
        forward_agent: false
        forward_x11: false
        shell: 'bash -l'
        insert_key: false
    vagrant:
        host: detect
    proxy:
        http: ''
        https: ''
        ftp: ''
        no_proxy: ''
        enabled: ''
server:
    install: '1'
    packages:
        - htop
        - vim
users_groups:
    install: '1'
    groups: {  }
    users: {  }
locale:
    install: '1'
    settings:
        default_locale: zh_CN.UTF-8
        locales:
            - en_GB.UTF-8
            - en_US.UTF-8
        timezone: Asia/Shanghai
firewall:
    install: '1'
    rules: {  }
cron:
    install: '1'
    jobs: {  }
nginx:
    install: '1'
    settings:
        default_vhost: 1
        proxy_buffer_size: 128k
        proxy_buffers: '4 256k'
        proxy_connect_timeout: 600s
        proxy_send_timeout: 600s
        proxy_read_timeout: 600s
        names_hash_bucket_size: 128
    upstreams: {  }
    vhosts:
        nxv_wm270gmq09z4:
            server_name: vagrant.host
            server_aliases:
                - www.vagrant.host
            www_root: /var/www/default
            listen_port: '80'
            index_files:
                - index.html
                - index.htm
                - index.php
            client_max_body_size: 1m
            ssl: '0'
            ssl_cert: ''
            ssl_key: ''
            ssl_port: '443'
            ssl_protocols: ''
            ssl_ciphers: ''
            rewrite_to_https: '1'
            spdy: '1'
            locations:
                nxvl_igpg3ffy2ozo:
                    location: /
                    autoindex: 'off'
                    internal: 'false'
                    try_files:
                        - $uri
                        - $uri/
                        - /index.php$is_args$args
                    fastcgi: ''
                    fastcgi_index: ''
                    fastcgi_split_path: ''
                    proxy: ''
                    proxy_redirect: ''
                nxvl_rhewriyh85w8:
                    location: '~ \.php$'
                    autoindex: 'off'
                    internal: 'false'
                    try_files:
                        - $uri
                        - $uri/
                        - /index.php$is_args$args
                    fastcgi: '127.0.0.1:9000'
                    fastcgi_index: index.php
                    fastcgi_split_path: '^(.+\.php)(/.*)$'
                    fast_cgi_params_extra:
                        - 'SCRIPT_FILENAME $request_filename'
                        - 'APP_ENV dev'
                    set:
                        - '$path_info $fastcgi_path_info'
                    proxy: ''
                    proxy_redirect: ''
    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:
        av_ip0asvcon7u7:
            servername: awesome.dev
            serveraliases:
                - www.awesome.dev
            docroot: /var/www/awesome
            port: '80'
            setenv:
                - 'APP_ENV dev'
            setenvif:
                - 'Authorization "(.*)" HTTP_AUTHORIZATION=$1'
            custom_fragment: ''
            ssl: '0'
            ssl_cert: ''
            ssl_key: ''
            ssl_chain: ''
            ssl_certs_dir: ''
            ssl_protocol: ''
            ssl_cipher: ''
            directories:
                avd_6tvb9nxm9unu:
                    path: /var/www/awesome
                    options:
                        - Indexes
                        - FollowSymlinks
                        - MultiViews
                    allow_override:
                        - All
                    require:
                        - 'all granted'
                    custom_fragment: ''
                    files_match:
                        avdfm_uyng02i4p8ax:
                            path: \.php$
                            sethandler: 'proxy:fcgi://127.0.0.1:9000'
                            custom_fragment: ''
                            provider: filesmatch
                    provider: directory
php:
    install: '1'
    settings:
        version: '56'
    modules:
        php:
            - cli
            - intl
            - fpm
            - mysql
            - mysqlnd
            - gd
            - common
        pear: {  }
        pecl:
            - mongo
            - redis
    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:
        phpfp_5ky05ds2qaqu:
            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'
xhprof:
    install: '0'
wpcli:
    install: '0'
    version: v0.21.1
drush:
    install: '0'
    version: 6.3.0
ruby:
    install: '1'
    versions:
        rv_9agtkcvqzl35:
            default: '1'
            bundler: '1'
            version: 1.9.3
python:
    install: '1'
    packages: {  }
    versions: {  }
nodejs:
    install: '0'
    settings:
        version: '5'
    npm_packages: {  }
hhvm:
    install: '0'
    nightly: 0
    composer: '1'
    composer_home: ''
    settings: {  }
    server_ini:
        hhvm.server.host: 127.0.0.1
        hhvm.server.port: '9000'
        hhvm.log.use_log_file: '1'
        hhvm.log.file: /var/log/hhvm/error.log
    php_ini:
        display_errors: 'On'
        error_reporting: '-1'
        date.timezone: UTC
mariadb:
    install: '0'
    settings:
        version: '10.1'
        root_password: '123456'
        override_options: {  }
    adminer: 0
    users:
        mariadbnu_wfpl2dznwxbm:
            name: dbuser
            password: '123456'
    databases:
        mariadbnd_f6pbir9ooexz:
            name: dbname
            sql: ''
    grants:
        mariadbng_klkisbbkzf0n:
            user: dbuser
            table: '*.*'
            privileges:
                - ALL
mysql:
    install: '1'
    settings:
        version: '5.5'
        root_password: '123456'
        override_options: {  }
    adminer: 0
    users:
        mysqlnu_qao4alf50h7h:
            name: dbuser
            password: '123456'
    databases:
        mysqlnd_50v8livjai3j:
            name: dbname
            sql: ''
    grants:
        mysqlng_wbc8kqc9t58s:
            user: dbuser
            table: '*.*'
            privileges:
                - ALL
postgresql:
    install: '0'
    settings:
        global:
            encoding: UTF8
            version: '9.4'
        server:
            postgres_password: '123'
    databases: {  }
    users: {  }
    grants: {  }
    adminer: 0
mongodb:
    install: '1'
    settings:
        auth: 1
        bind_ip: 127.0.0.1
        port: '27017'
    globals:
        version: 2.6.0
    databases: {  }
redis:
    install: '1'
    settings:
        port: '6379'
sqlite:
    install: '0'
    adminer: 0
    databases: {  }
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: {  }
    vhosts: {  }
    plugins: {  }
elastic_search:
    install: '0'
    settings:
        version: 2.1.0
        java_install: true
    instances:
        esi_awfpanxwerkg:
            name: es-01
solr:
    install: '0'
    settings:
        version: 4.10.2
        port: '8984'
 

创建快照

安装
vagrant plugin install vagrant-vbox-snapshot

创建快照

vagrant snapshot take "SNAPSHOTNAME"
查看快照列表
vagrant snapshot list
从快照中恢复
vagrant snapshot go "SNAPSHOTNAME"
删除快照
vagrant snapshot delete "SNAPSHOTNAME"
 

本文发布于: 2016-01-24 13:42:22,作者: Zack Lee。 属于: Web, Linux, PHP, Mac, OS 分类,被贴了 vagrant, puphpet, 跨平台, 开发环境 标签。


> 评论区域


还没有人参与评论