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

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>

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 > 调试 > 调试端口)

linux自动压缩apache日志的计划任务脚本

上线后的网站, apache的日志每天都会增长很多, 有时一天就是几个G, 要么关闭日志, 要么压缩保存, 这里提供一个定时压缩的脚本, 每天

步骤

  1. 创建备份压缩脚本
  2. 创建计划任务

1. 创建备份压缩脚本

在服务器上创建一个shell脚本文件, 写入以下内容
  1. now_date=`date -d yesterday +%Y_%m_%d`
  2. /usr/bin/gzip -c 日志文件路径/access.log > 压缩后的路径/access.log_${now_date}.gz
  3. echo "" > 日志文件路径/access.log
  4. /usr/bin/gzip -c 错误日志文件路径/error.log > 错误日志文件路径/error.log_${now_date}.gz
  5. echo "" > 错误日志文件路径/error.log
实例: /data/wwwlog/gzip_log.cron
  1. now_date=`date -d yesterday +%Y_%m_%d`
  2. /usr/bin/gzip -c /data/wwwlog/access.log > /data/wwwlog/access.log_${now_date}.gz
  3. echo "" > /data/wwwlog/access.log
  4. /usr/bin/gzip -c /data/wwwlog/error.log > /data/wwwlog/error.log_${now_date}.gz
  5. echo "" > /data/wwwlog/error.log

2. 创建计划任务

  1. 在命令行输入 crontab -e 调出计划任务配置文件
  2. 写入配置 10 0 * * * sh /data/wwwlog/gzip_log.cron
  3. esc :wq 回车保存

这样就可以在每天晚上 12点压缩日志了

Apache开启 .htaccess , url_rewrite ,vhost

1. 开启.htaccess支持

将 httpd.conf 中
AllowOverride None
改为
AllowOverride All

2. 开启url_rewrite模块

去掉 httpd.conf#LoadModule rewrite_module modules/mod_rewrite.so 前面的#

3. 开启vhost功能

(1) 去掉 httpd.conf#Include conf/extra/httpd-vhosts.conf 前面的#
(2) 去掉 httpd.conf#LoadModule vhost_alias_module modules/mod_vhost_alias.so 前面是#
(3) 然后去配置 conf/extra/httpd-vhosts.conf 文件中, 根据示例配置虚拟主机

4. 常用的.htaccess配置

  1. <IfModule mod_rewrite.c>
  2. RewriteEngine on
  3. RewriteCond %{REQUEST_FILENAME} !-d
  4. RewriteCond %{REQUEST_FILENAME} !-f
  5. RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
  6. </IfModule>

5. 常用站点配置

  1. # conf/extra/httpd-vhosts.conf
  2. <VirtualHost *:80>
  3. DocumentRoot "D:\Project\Coding\phpIDE"
  4. ServerName ide
  5. ServerAlias ide
  6. <Directory "D:\Project\Coding\phpIDE">
  7. Options FollowSymLinks ExecCGI
  8. AllowOverride All
  9. Order allow,deny
  10. Allow from all
  11. Require all granted
  12. </Directory>
  13. </VirtualHost>

别忘了在hosts文件中添加 127.0.0.1 ide