Vagrant+Virtual Box 快速搭建开发环境

  1. Vagrant.configure("2") do |config|
  2. config.vm.box = "ubuntu/xenial64"
  3. # config.vm.network "forwarded_port", guest: 80, host: 80
  4. # config.vm.network "forwarded_port", guest: 3306, host: 3306
  5. config.vm.network "private_network", ip: "10.0.0.3"
  6. config.vm.provision "shell", inline: <<-SHELL
  7. # 更换aliyun软件源
  8. cp /etc/apt/sources.list /etc/apt/sources.list.bak
  9. echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse' > /etc/apt/sources.list
  10. echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse' >> /etc/apt/sources.list
  11. echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse' >> /etc/apt/sources.list
  12. echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse' >> /etc/apt/sources.list
  13. echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse' >> /etc/apt/sources.list
  14. apt-get update
  15. # 安装docker
  16. apt-get -y install apt-transport-https ca-certificates curl software-properties-common
  17. curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
  18. add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
  19. apt-get -y update
  20. apt-get -y install docker-ce docker-compose
  21. # 使用aliyun加速docker镜像
  22. mkdir -p /etc/docker
  23. echo '{' > /etc/docker/daemon.json
  24. echo ' "registry-mirrors": ["https://kag9wqej.mirror.aliyuncs.com"]' >> /etc/docker/daemon.json
  25. echo '}' >> /etc/docker/daemon.json
  26. systemctl daemon-reload
  27. systemctl restart docker
  28. # 把vagrant用户添加到 docker 组
  29. usermod -G docker vagrant
  30. # ssh登录后, 进入/vagrant目录, 并启动docker compose , 然后 输出一下当前正在运行的容器
  31. echo 'cd /vagrant && docker-compose up -d && docker ps' >> /home/vagrant/.bashrc
  32. SHELL
  33. end

vagrant+docker一键搭建php+mysql开发环境

必备软件

  1. Vagrant
  2. Virtual Box

启动脚本

  1. Vagrantfile
  1. Vagrant.configure("2") do |config|
  2. config.vm.box = "ubuntu/xenial64"
  3. config.vm.network "forwarded_port", guest: 80, host: 80
  4. config.vm.network "forwarded_port", guest: 3306, host: 3306
  5. config.vm.network "private_network", ip: "10.0.0.2"
  6. config.vm.provision "shell", inline: <<-SHELL
  7. # 更换aliyun软件源
  8. cp /etc/apt/sources.list /etc/apt/sources.list.bak
  9. echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse' > /etc/apt/sources.list
  10. echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse' >> /etc/apt/sources.list
  11. echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse' >> /etc/apt/sources.list
  12. echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse' >> /etc/apt/sources.list
  13. echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse' >> /etc/apt/sources.list
  14. apt-get update
  15. # 安装docker
  16. apt-get -y install apt-transport-https ca-certificates curl software-properties-common
  17. curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
  18. add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
  19. apt-get -y update
  20. apt-get -y install docker-ce docker-compose
  21. # 使用aliyun加速docker镜像
  22. mkdir -p /etc/docker
  23. echo '{' > /etc/docker/daemon.json
  24. echo ' "registry-mirrors": ["https://kag9wqej.mirror.aliyuncs.com"]' >> /etc/docker/daemon.json
  25. echo '}' >> /etc/docker/daemon.json
  26. systemctl daemon-reload
  27. systemctl restart docker
  28. usermod -G docker vagrant
  29. cd /vagrant
  30. docker-compose up -d
  31. # 开机自启动
  32. echo '#!/bin/bash' > /etc/rc.local
  33. echo 'sleep 10' >> /etc/rc.local
  34. echo 'cd /vagrant' >> /etc/rc.local
  35. echo 'docker-compose up -d' >> /etc/rc.local
  36. echo 'exit 0' >> /etc/rc.local
  37. sudo rm /bin/sh
  38. sudo ln -s /bin/bash /bin/sh
  39. SHELL
  40. end
  1. docker-compose.yml
  1. version: '2'
  2. services:
  3. mysql:
  4. image: mysql
  5. environment:
  6. - MYSQL_ROOT_PASSWORD=root
  7. volumes:
  8. - "./mysql:/var/lib/mysql"
  9. ports:
  10. - '3306:3306'
  11. networks:
  12. - bridge
  13. www:
  14. build: .
  15. volumes:
  16. - "./wwwroot/www:/app"
  17. - "./wwwroot/static/Uploads:/app/Uploads"
  18. environment:
  19. - VIRTUAL_HOST="你要绑定的域名"
  20. - PHP_DB_HOST=mysql
  21. - PHP_DB_NAME=你的数据库名称
  22. - PHP_DB_USER=root
  23. - PHP_DB_PASSWORD=root
  24. networks:
  25. - bridge
  26. lb:
  27. image: 'dockercloud/haproxy'
  28. volumes:
  29. - /var/run/docker.sock:/var/run/docker.sock
  30. links:
  31. - www
  32. ports:
  33. - '80:80'
  34. networks:
  35. - bridge
  36. networks:
  37. bridge:
  1. Dockerfile
  1. FROM php:5.6-apache
  2. # 安装扩展
  3. COPY ./soft/*.tgz /soft/
  4. WORKDIR /soft
  5. RUN pecl install redis-3.1.6.tgz \
  6. && pecl install xdebug-2.5.5.tgz \
  7. && docker-php-ext-enable redis xdebug \
  8. && docker-php-ext-install pdo_mysql \
  9. && docker-php-ext-install mysqli \
  10. && rm -rf /soft
  11. # URL重写
  12. RUN a2enmod rewrite
  13. # 安装composer
  14. ADD ./soft/composer.phar /usr/local/bin/composer
  15. RUN chmod 755 /usr/local/bin/composer \
  16. && composer config -g repo.packagist composer https://packagist.phpcomposer.com
  17. # 安装代码
  18. COPY ./wwwroot /app/
  19. # 修改网站主目录
  20. ENV APACHE_DOCUMENT_ROOT /app
  21. RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
  22. RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
  23. # 可写权限
  24. RUN chmod -R 777 /app/
  25. # 默认工作目录
  26. WORKDIR /app
  27. # 暴露工作端口
  28. EXPOSE 80 443 22

php生成网站截图

组件下载: http://wkhtmltopdf.org/
Ubuntu中文支持: apt-get install openssl build-essential xorg libssl-dev libxrender-dev fonts-arphic-bsmi00lp fonts-arphic-gbsn00lp xfonts-intl-chinese

测试命令:./wkhtmltoimage baidu.com baidu.png

php中使用:

  1. // api.php
  2. <?php
  3. $url = isset($_GET['url']) ? $_GET['url'] : die('url param is require');
  4. $cache = __DIR__ .'/cache/' . md5($url) . '.png';
  5. if (!is_file($cache)) {
  6. // 这里写组件的存放位置, 主要要给文件可执行权限 chmod 777 wkhtmltoimage
  7. $shell = __DIR__ . '/shell/wkhtmltox/bin/wkhtmltoimage '. $url .' '. $cache;
  8. shell_exec($shell);
  9. }
  10. header("Content-Type: image/png");
  11. $im = imagecreatefrompng($cache);
  12. imagesavealpha($im, true);
  13. imagepng($im);
  14. imagedestroy($im);

然后访问 http://demo.zhaishuaigan.cn/php/html2img/api.php?url=baidu.com

Ubuntu 的 https协议 和 反向代理

下面假设你的域名是 git.ngapp.net , 配置服务器用 Ubuntu + Apache

ssl免费证书申请:

  1. 沃通提供的免费ssl证书: https://buy.wosign.com/free/
  2. 解压复制apache需要的文件到 /etc/apache2/ssl 目录

配置Apache

增加配置 /etc/apache2/apache2.conf
  1. ServiceName localhost
开启需要的模块
  1. a2enmod ssl
  2. a2enmod proxy
  3. a2enmod proxy_http
添加配置 /etc/apache2/sites-enabled/git.ngapp.net.conf
  1. <VirtualHost *:443>
  2. SSLEngine On
  3. SSLCertificateFile /etc/apache2/ssl/git.ngapp.net.crt
  4. SSLCertificateKeyFile /etc/apache2/ssl/git.ngapp.net.key
  5. SSLCertificateChainFile /etc/apache2/ssl/root_bundle.crt
  6. ServerName git.ngapp.net
  7. ServerAdmin zhaishuaigan@qq.com
  8. ProxyPreserveHost On
  9. ProxyRequests Off
  10. <Proxy *>
  11. AddDefaultCharset off
  12. Order deny,allow
  13. Allow from all
  14. </Proxy>
  15. ProxyPass / http://localhost:3000/
  16. ProxyPassReverse / http://localhost:3000/
  17. </VirtualHost>
  18. <VirtualHost *:80>
  19. ServerName git.ngapp.net
  20. ServerAdmin zhaishuaigan@qq.com
  21. RewriteEngine on
  22. RewriteCond %{SERVER_PORT} !^443$
  23. RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
  24. </VirtualHost>

mac下用vbox安装ubuntu映射80端口

1. 首先在 /etc/pf.anchors/ 新建一个 com.vbox 文件内容如下:

  1. rdr pass on lo0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080

其中lo0为你ifconfig时查询到的网卡的名字 80是tomcat端口,8080为你想转发的端口

注意: 在段落末尾一定要加换行,否则会报syntax error错误。

2. 然后使用 pfctl 命令检测配置文件

  1. sudo pfctl -vnf /etc/pf.anchors/com.vbox

3. 添加到主配置文件

pf启动时会自动装载/etc/pf.conf文件,因此将anchor文件链接到/etc/pf.conf,转发规则就会自动建立了。

在rdr-anchor “com.apple/*”下面增加:

  1. rdr-anchor "vbox"

在:load anchor “com.vbox” from “/etc/pf.anchors/com.apple”后添加:

  1. load anchor "vbox" from "/etc/pf.anchors/com.vbox"

最终修改后的pf.conf文件如内容如下

  1. scrub-anchor "com.apple/*"
  2. nat-anchor "com.apple/*"
  3. rdr-anchor "com.apple/*"
  4. rdr-anchor "vbox"
  5. dummynet-anchor "com.apple/*"
  6. anchor "com.apple/*"
  7. load anchor "com.apple" from "/etc/pf.anchors/com.apple"
  8. load anchor "vbox" from "/etc/pf.anchors/com.vbox"

4. 导入并运行PF命令(关键)

一定要注意导入并允许运行 pf的命令,一个是所有现在网上教程里写的下面这个:

  1. sudo pfctl -f /etc/pf.conf

上面这个在OSX Yosemite (10.10)应该没问题,但在我的OSX Yosemite (10.10.3)里是没有用的,要换成下面这个才能成功:

  1. sudo pfctl -evf /etc/pf.anchors/com.vbox

5. 设置pf开机自动打开

  1. sudo pfctl -e

添加的为-e参数,即enable

6. 如果不需要可关闭pf

  1. sudo pfctl -d

Netbeans配置远程调试ubuntu apache2 php5-xdebug

此配置方法适用于在虚拟机中搭建服务器环境, 在windows中编码的方式

1. 安装php5-xdebug

  1. sudo apt-get install php5-xdebug

2. 配置php.ini, 在最后添加xdebug配置项

  1. [xdebug]
  2. zend_extension="/usr/lib/php5/20131226/xdebug.so"
  3. xdebug.idekey="netbeans-xdebug"
  4. xdebug.remote_host=192.168.100.103
  5. xdebug.remote_connect_back=1
  6. xdebug.remote_port=9000
  7. xdebug.profiler_enable=on
  8. xdebug.remote_enable=on
  9. xdebug.remote_handle=dbgp

说明

  1. zend_extension="/usr/lib/php5/20131226/xdebug.so" # 这里根据php的版本不同, 日期路径也不一样
  2. xdebug.remote_host=192.168.100.103 # 主机的地址
  3. xdebug.remote_port=9000 # 主机netbeans的监听端口(工具 > 选项 > php > 调试 > 调试端口)

mysql的workbench导出数据报错问题

MysqlWorkbench6.0之后的版本使用export data时会遇到这个错误

问题

  1. Running: /Applications/MySQLWorkbench.app/Contents/MacOS/mysqldump --defaults-file
  2. ...
  3. mysqldump: [ERROR] unknown variable 'delayed-insert=FALSE'
  4. ...

原因

我们看错误报告显示这个变量 ‘delayed-insert=FALSE’ 不被识别,workbench默认配置里会开启这个变量并且默认值是false。如果我们用不到这个变量可以更改配置文件,注释掉这个变量来解决

解决步骤

  1. 找到配置文件目录:InstallPath/modules
  2. 打开python格式的输出配置文件:wb_admin_export_options.py
  3. 找到所在行:”delayed-insert”:[“Write INSERT DELAYED statements rather than …
  4. 在行开头插入#号注释改行
  5. 保存文件,重启Workbench

配置文件所在位置

windows

C:\Program Files\MySQL\MySQL Workbench 6.3 CE\modules

Mac

Applications -> MYSQLWorkbench.app/Contents/Resources/plugins.
Note: 在应用上右击选择 Show Package contents 进入应用目录

Ubuntu

/usr/lib/mysql-workbench/modules/wb_admin_export_options.py

Windows上读取Linux分区文件

昨天做了个Ubuntu15.10的 U盘系统, 把整个Ubuntu系统安装到了U盘里, 感觉效果也不错, 界面开发都很赞, 但是关机启动Windows后发现U盘识别不了了, 在网上搜索后发现 ext2fsd (http://www.ext2fsd.com/) 这个软件, 感觉不错给大家分享一下.

首先下载这个软件, 下载地址: http://www.ext2fsd.com/
安装软件, 一路 下一步 下一步… 完成
运行软件
然后U盘就可以访问了.

Virtual Box 和 Ubuntu Server 14.10 的共享文件

1. 安装gcc和make

  1. sudo apt-get install gcc
  2. sudo apt-get install make

2. 安装增强工具

  1. 用xftp上传vbox安装目录中的VBoxGuestAdditions.iso
  2. 挂在VBoxGuestAdditions.iso
  3. 安装
  1. sudo mkdir /media/cdimage
  2. sudo mount -o loop VBoxGuestAdditions.iso /media/cdimage
  3. cd /media/cdimage
  4. sudo ./VBoxLinuxAdditions.run

3. 关机

4. 添加共享目录

5. 映射共享目录

  1. sudo mkdir /data
  2. sudo mount -t vboxsf share /data