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


发布评论 (373)

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, 跨平台, 开发环境 标签。


> 评论区域


Displaying 1-5 of 1 result.

Hello. And Bye.

research paper on computers critical thinking skills for education students creative writing program rankings assignment movie esl descriptive essay writing get dissertation problem statement essay writing our environment apa proquest dissertation global history thematic essay write essay timeline uta business degree plan training with industry dissertation writing a report university assignment eating disorders research paper write an essay about my self
<a href="http://melgar.com.co/index.php/component/users/?option=com_k2&view=itemlist&task=user&id=30692">writing center</a> <a href="http://appu.te.ua/index.php/component/users/?option=com_k2&view=itemlist&task=user&id=258321">writing center appointments</a> <a href="http://appu.te.ua/index.php/component/users/?option=com_k2&view=itemlist&task=user&id=258390">writing center appointments</a> <a href="http://www.mysticnails.it/index.php?option=com_k2&view=itemlist&task=user&id=8373">writing center</a> <a href="http://callelasgardenias.com/index.php?option=com_k2&view=itemlist&task=user&id=1079722">online writing center</a>

> Ivandiate · 2017-10-07 20:27:15

best online international pharmacies <a href="http://canadapharmaciesbsl.com/">canadian online pharmacies</a> canada pharmacies <a href=http://canadapharmaciesbsl.com/canada+pharmacy+no+prescription/viagra-buy-pharmacy-iframe-db.html>viagra buy pharmacy iframe</a> pharmacy canada <a href="http://canadapharmaciesbsl.com/safeway+pharmacy/female-viagra-pharmacy-store-14204-19.html">female viagra pharmacy store 14204</a>

> Ivandiate · 2017-10-07 19:34:01

cheap prescription drugs online <a href="http://canadapharmaciesbsl.com/">url </a> pharmacy drug store <a href=http://canadapharmaciesbsl.com/mexican+pharmacies+shipping+to+usa/clonidine-pharmacy-7.html>clonidine pharmacy</a> discount pharmaceuticals <a href="http://canadapharmaciesbsl.com/discount+pharmaceuticals/wegmans-pharmacy-free-lipitor-d1.html">wegmans pharmacy free lipitor</a>

i need a loan today <a href="https://installmentloansmaster.org/">installment loans</a> getting loan with bad credit <a href=https://installmentloansmaster.org/>installment loans</a> loan bad credit