lnmp 环境搭建 以及 vagrant box文件打包
1. virtualbox centos 6.5 安装 virtualbox 下载地址 centos 6.5 x64 下载地址 安装过程 不再详细记录 记得在启动后读取光盘内容的时候可能需要你手动在设置里面加载下
2. 安装后的准备 网络设置 1 2 3 4 5 6 7 # 开启ip自动分配 vi /etc/sysconfig/network-scripts/ifcfg-eth0 ONBOOT=yes # 重启网卡服务 service network restart # 检查ip ip a
安装wget vim 等常用工具 1 2 yum install wget yum install vim
更换yum源 epel 1 2 rpm -Uvh http://mirrors.kernel.org/fedora-epel/6/i386/epel-release-6-8.noarch.rpm yum repolist
3. nginx 下载源码 并解压 1 2 wget https://nginx.org/download/nginx-1.10.1.tar.gz tar -zxvf nginx-1.10.1.tar.gz
安装必备工具 1 2 yum -y install gcc autoconf automake yum -y install zlib zlib-devel openssl openssl-devel pcre-devel
编译安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 cd nginx-1.10.1 ./configure \ --prefix=/usr/local/nginx \ --sbin-path=/usr/local/nginx/sbin/nginx \ --conf-path=/usr/local/nginx/conf/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --pid-path=/var/run/nginx/nginx.pid \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_flv_module \ --with-http_gzip_static_module \ --http-log-path=/var/log/nginx/access.log \ --http-client-body-temp-path=/var/tmp/nginx/client \ --http-proxy-temp-path=/var/tmp/nginx/proxy \ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi \ --with-http_stub_status_module make && make install
启动nginx 1 2 3 4 5 ##### 添加nginx运行用户以及对应用户组 groupadd -r nginx useradd -s /sbin/nologin -g nginx -r nginx ##### 启动服务 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
在启动的过程中报错
1 nginx: [emerg] mkdir() "/var/tmp/nginx/client" failed (2: No such file or directory)
创建对应的文件即可
1 mkdir -p /var/tmp/nginx/client
检查是否启动成功
1 2 3 4 ps -ef | grep nginx -------------------- root 9422 1 0 13:25 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf nginx 9423 9422 0 13:25 ? 00:00:00 nginx: worker process
找到nginx进程即启动成功
4. php 下载源码并解压 1 2 wget http://cn2.php.net/distributions/php-7.0.9.tar.gz tar -zxvf php-7.0.9.tar.gz
安装依赖包 1 yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel MySQL pcre-devel curl curl-devel libmcrypt libmcrypt-devel
编译安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 cd php-7.0.9 ./configure \ --prefix=/usr/local/php7 \ --exec-prefix=/usr/local/php7 \ --bindir=/usr/local/php7/bin \ --sbindir=/usr/local/php7/sbin \ --includedir=/usr/local/php7/include \ --libdir=/usr/local/php7/lib/php \ --mandir=/usr/local/php7/php/man \ --with-config-file-path=/usr/local/php7/etc \ --with-mysql-sock=/var/run/mysql/mysql.sock \ --with-mcrypt=/usr/include \ --with-mhash \ --with-openssl \ --with-mysqli=shared,mysqlnd \ --with-pdo-mysql=shared,mysqlnd \ --with-gd \ --with-iconv \ --with-zlib \ --enable-zip \ --enable-inline-optimization \ --disable-debug \ --disable-rpath \ --enable-shared \ --enable-xml \ --enable-bcmath \ --enable-shmop \ --enable-sysvsem \ --enable-mbregex \ --enable-mbstring \ --enable-ftp \ --enable-gd-native-ttf \ --enable-pcntl \ --enable-sockets \ --with-xmlrpc \ --enable-soap \ --without-pear \ --with-gettext \ --enable-session \ --with-curl \ --with-jpeg-dir \ --with-freetype-dir \ --enable-opcache \ --enable-fpm \ --with-fpm-user=nginx \ --with-fpm-group=nginx \ --without-gdbm \ --enable-fileinfo make && make install
添加redis扩展 1 2 3 4 5 6 7 8 # 下载解压包 wget http://pecl.php.net/get/redis-3.0.0.tgz tar -zxvf redis-3.0.0.tgz # 生成configure 文件 cd redis-3.0.0 /usr/local/php7/bin/phpize ./configure --with-php-config=/usr/local/php7/bin/php-config make && make install
参考链接
开启 opcache
redis
pdo_mysql
必备扩展 1 2 3 4 5 #file : etc/php.ini extension=redis.so extension=pdo_mysql.so zend_extension=opcache.so
opcache 配置参数参考
启动fpm服务 如果在 etc
目录找不到 php.ini
文件 可以去源代码里面 cp
一份php-fpm
配置文件需要准备
1 /usr/local/php7/sbin/php-fpm
检查是否启动 1 2 3 4 5 6 7 ps -ef | grep php-fpm ----------------------- root 13900 1 0 16:57 ? 00:00:00 php-fpm: master process (/usr/local/php7/etc/php-fpm.conf) nginx 13901 13900 0 16:57 ? 00:00:00 php-fpm: pool www nginx 13902 13900 0 16:57 ? 00:00:00 php-fpm: pool www root 13904 1479 0 16:58 pts/0 00:00:00 grep php-fpm
将php添加到系统路径 1 ln -s /usr/local/php7/bin/php /usr/local/bin
5. nginx + php-fpm 首先通过ip访问 如果访问不通 查看防火墙
如果防火墙开启 请先关闭
php配置文件开启真实文件路径的支持 1 2 # file : etc/php.ini cgi.fix_pathinfo=1
nginx 配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 server { listen 80; service_name localhost; # 绑定路径 这个要定义在server下 root /root/dev; index index.html index.htm; location / {} error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location ~ \.php$ { # 代理地址 以及转发 端口 fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; # 这个要设置正确 不然 会报 file not found # 配合php.ini 的 cgi.fix_pathinfo=1 使用 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
6. mysql 下载解压源码 1 2 3 wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.14.tar.gz tar -zxvf mysql-5.7.14.tar.gz cd mysql-5.7.14
安装依赖工具 mysql 5.7 必须的三个依赖 ncurses 字符终端处理库 cmake 跨平台的编译工具 类似(automake) boost c++ 的一个标准库 bison GNU的一个语法分析器
1 2 3 4 5 6 7 8 # 可以通过 rpm -q 查看软件包是否安装 yum -y install gcc gcc-c++ ncurses-devel cmake bison # 下载 boost wget https://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz tar -zxvf boost_1_59_0.tar.gz mv boost_1_59_0 /usr/local/boost # 创建mysql用户 以及用户组 useradd mysql
编译安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 cmake . \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DMYSQL_TCP_PORT=3306 \ -DMYSQL_USER=mysql \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_MEMORY_STORAGE_ENGINE=1 \ -DDOWNLOAD_BOOST=1 \ -DWITH_BOOST=/usr/local/boost # 编译出错需要清除缓存 rm -f CMakeCache.txt make clean
顺便一提: php nginx 都是用纯c写的 mysql用的是c++ 在cmkae mysql的时候 竟然发现没装gcc-c++
编译安装的时候出现如下错误
1 mysql Fatal error: can't close CMakeFiles/innobase.dir/sync/sync0rw.cc.o: No space left on device
这是因为mysql需要写文件到 /tmp
目录 , 但是在linux上面 /tmp
目录是一个固定大小(十几KB)的目录 解决办法就是将系统的临时文件夹换掉(通过修改系统变量来实现)
1 2 3 mkdir /home/tmp # 只在本次登录有效 export TMPDIR=/home/tmp
最后换掉还是不行 是因为虚拟机分配的硬盘容量太小 通过增加容量解决编译问题 如何给virtualbox硬盘扩容
启动服务 安装后需要先初始化下mysql
1 2 3 4 5 6 # --initialize 初始化mysql 会给root生成默认随机密码 # --initialize-insecure 初始化mysql 但 不会给root生成随机密码 # --user 指定mysql执行的用户 # --basedir mysql的安装路径 # --datadir 指定数据存储路径 这个路径必须是空文件夹 当然也要有读写权限 /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysql/data
将mysql安装成服务
1 2 3 4 5 6 7 cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld chkconfig --add mysqld chkconfig mysqld on service mysqld status # 启动mysql的方式 service mysqld start /etc/init.d/mysqld start
mysql启动时候默认的配置文件是 /etc/my.cnf
1 2 3 4 5 6 7 8 9 10 11 12 # 客户端配置 [client] port=3306 socket=/var/lib/mysql/mysql.sock #服务端配置 [mysqld] port=3306 socket=/var/lib/mysql/mysql.sock # 文件目录 datadir=/var/lib/mysql/data # 服务启动用户 user=mysql
参考链接
官方安装参考链接
7. 其他相关软件 node composer git nfs samba supervisor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # composer 先将php加入系统路径 curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer composer -v # git yum -y install git # redis yum -y install redis # nfs yum -y install nfs-utils [使用参考链接](http://fantiq.github.io/2016/06/07/linux-centos-%E7%A1%AC%E7%9B%98%E5%85%B1%E4%BA%ABnfs%E4%BD%BF%E7%94%A8%E6%80%BB%E7%BB%93/) # samba yum -y install samba [使用参考链接](http://fantiq.github.io/2016/06/07/linux-centos-samba-%E6%96%87%E4%BB%B6%E5%85%B1%E4%BA%AB/) # supervisor yum -y install supervisor [使用参考链接](http://fantiq.github.io/2016/06/07/linux-centos-supervisor%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B%E6%80%BB%E7%BB%93/)
8. virtualbox 增强工具 挂载增强工具光盘 1 2 设备 -> 安装增强工具 -> VBoxGuestAdditions.iso(文件在virtualbox 安装目录 这个iso盘会被自动挂载) mount /dev/cdrom /mnt/cdrom
遇到错误提示 mount: block device /dev/sr0 is write-protected, mounting read-only 是正常的 因为光盘就是 read only 的 可以加参数 避免 错误提醒 :
1 2 umount /mnt/cdrom mount -t auto -o ro /dev/cdrom /mnt/cdrom
mount 命令具体参考
安装 1 2 3 4 5 6 # 安装依赖 yum -y install bzip2 make automake gcc gcc-c++ kernel-devel kernel-headers # 更新linux 内核源码 并重启服务器 [参考](https://srobb.net/rhkerndev.html) yum update # 执行sh脚本 ./VBoxLinuxAdditions.run
如果后面有如下错误提示 :
1 Building the OpenGL support module [失败]
这个问题可以不解决 不想看到这个提示可以在编译的时候忽略这个错误
1 export MAKE='/usr/bin/gmake -i'
virtualbox 增强包安装 参考
如何使用 先设置虚拟机的共享 设置>共享文件夹>固定分配
自动挂载 启动机器 挂载硬盘
1 mount -t vboxsf 共享目录名称 服务器要挂载的目录
9. 打包成 box文件 1 创建vagrant用户并添加到sudo 1 2 3 4 5 6 7 useradd vagrant passwd vagrant vagrant # 添加行 visudo vagrant ALL=(ALL) NOPASSWD:ALL
sudoer 文件格式
1 2 3 4 5 6 7 8 user host=(run_as) command # user 定义用户或者用户组 用户组以 % 开始 如 %vagrant # host 主机名 # run_as 作为哪个用户执行 不写(run_as) 默认是 root # command 可执行的命令 这个命令要写全路径 相对路径存在安全问题(用户可以创建同名脚本 以root用户执行脚本 脚本里的命令就可以按照root用户的权限执行了) # command 前可以通过 NOPASSWD: 来修饰 表示sudo执行命令的时候不用密码 %vagrant ALL=(root) NOPASSWD:/usr/sbin/useradd # 上面命令定义 vagrant组的用户可以在所有主机以root身份执行 /usr/sbin/useradd 命令且不需要密码
参考链接
写入 vagrant 中提供的公钥 到用户.ssh 文件夹的 authorized_keys文件中 cd /home/vagrant/.ssh wget https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub -O authorized_keys
chmod 600 /home/vagrant/.ssh/authorized_keys
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #### 打包box # 首先通过virtualbox命令查询要打包的虚拟机名称 VBoxManage list vms # 打包 vagrant package --base VBoxName --output dev.box # 设置vagrant box存储位置 设置环境变量 VAGRANT_HOME # 添加box vagrant add box centos65 /foo/bar/dev.box # 用box初始化环境 vagrant init centos56 # 修改配置文件 Vagrantfile config.ssh.insert_key = false # 启动 vagrant up