折腾VPS:LNMP+VSFTPD的搭建
VPS 我用的是ubuntu 9.10 server x86的,因为个人对ubuntu 更熟悉一些,至于CentOS,没有折腾过。有时间再折腾吧。
先安装 vsftpd ,这是为了便于传文件,我可以在本地修改好配置文件,然后通过ftp传过去,哈哈。要知道,在VPS上vim 修改东西速度是相当慢的,在本地修改还是快一点。
burst主机不支持远程桌面的,在WIN下用putty登录ssh ,在LINUX下可直接ssh登录。
putty.zip 下载 (1.4 MB, 27 次)
先安装vsftpd:
如果没有安装 gnome ,pam 一般是没有安装的,等下验证我们需要 libpam :
1 2 3 4 5 6 7 8 | apt-get install flex bison apt-get install chkconfig wget http://www.kernel.org/pub/linux/libs/pam/pre/library/Linux-PAM-0.99.10.0.tar.gz tar xvzf Linux-PAM-0.99.10.0.tar.gz cd Linux-PAM-0.99.10.0 ./configure make make install |
http://vsftpd.beasts.org/
http://vsftpd.beasts.org/vsftpd_conf.html
1 2 3 4 | apt-get install db4.7-util wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.2.2.tar.gz tar -xvzf vsftpd-2.2.2.tar.gz cd vsftpd-2.2.2 |
我修改了 defs.h ,将默认配置文件位置修改为 /etc/vsftpd/vsftpd.conf
然后是
1 2 | make && make install mkdir /usr/share/empty/ |
下面是我的配置:
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 | listen=YES listen_port=21 pasv_min_port=30000 pasv_max_port=20999 anonymous_enable=NO local_enable=YES write_enable=NO anon_upload_enable=NO anon_mkdir_write_enable=NO anon_other_write_enable=NO dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES xferlog_file=/var/log/vsftpd.log xferlog_std_format=YES idle_session_timeout=600 #nopriv_user=ftpsecure ftpd_banner=Welcome to hacklog FTP service. chroot_local_user=YES #ls_recurse_enable=YES secure_chroot_dir=/usr/share/empty/ pam_service_name=vsftpd guest_enable=YES guest_username=ftpuser user_config_dir=/etc/vsftpd/vsftpd_user_conf #chown_upload_mode=0644 chmod_enable=YES virtual_use_local_privs=YES file_open_mode=0666 local_umask=022 |
1 2 | mkdir -p /etc/vsftpd/vsftpd_user_conf vim /etc/vsftpd/loginUsers.txt |
loginUsers.txt格式为:
user_id
password
1 2 | db4.7_load -T -t hash -f /etc/vsftpd/loginUsers.txt /etc/vsftpd/vsftpd_login.db chmod 600 /etc/vsftpd/vsftpd_login.db |
1 | vim /etc/pam.d/vsftpd |
内容如下:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
1 2 3 4 5 6 7 | mkdir /home/ftp useradd ftpuser -d /home/ftp -s /bin/false chown ftpuser:ftpuser /home/ftp cd /etc/vsftpd/vsftpd_user_conf touch huangyewudeng vim huangyewudeng |
huangyewudeng内容为:
1 2 3 4 5 6 | local_root=/var/www anon_world_readable_only=NO write_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES |
1 | chown ftpuser:ftpuser /var/www |
启动ftp 并查看 libpam 是否成功加载:
1 2 3 4 5 6 7 8 9 10 11 | root@vps:/home/soft/vsftpd-2.2.2# /usr/local/sbin/vsftpd & [1] 23956 root@vps:/home/soft/vsftpd-2.2.2# ldd /usr/local/sbin/vsftpd libpam.so.0 => /lib/libpam.so.0 (0xb7f31000) libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7f2d000) libnsl.so.1 => /lib/tls/i686/cmov/libnsl.so.1 (0xb7f15000) libresolv.so.2 => /lib/tls/i686/cmov/libresolv.so.2 (0xb7f01000) libutil.so.1 => /lib/tls/i686/cmov/libutil.so.1 (0xb7efd000) libcap.so.2 => /lib/libcap.so.2 (0xb7ef7000) libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7db3000) /lib/ld-linux.so.2 (0xb7f45000) |
可看到/lib/libpam.so.0 已经加载了。
接下面就FTP登录啦。
一、准备
用root登录以后,可添加一个常用帐号。
1 2 | useradd admin passwd admin |
我下载的软件都放到 /home/soft , /home/soft/conf 用来存放配置文件
1 2 | mkdir /home/soft/conf -p cd /home/soft |
卸载apache2
1 2 | apt-get remove apache2 apt-get autoremove |
安装一些必要软件和常用软件:
令我惊奇的是:默认的服务器上竟然连wget都没有。先安装它:
1 | apt-get install wget |
安装一些编译需要用到的软件
1 | apt-get install gcc g++ autoconf libxml2 libxml2-dev bzip2 bzip2-devel krb5 krb5-devel patch zip |
对于有些软件可能需要autoconf2.13 ,要从svn编译软件,没有subversion 和 bison是不行的:
1 2 3 4 5 | apt-get install subversion autoconf2.13 apt-get install bison apt-get install zlib1g-dev apt-get install libevent-1.4-2 libevent-core-1.4-2 libevent-dev libevent-extra-1.4-2 apt-get install curl libcurl3 libcurl3-dev |
更新时区
1 | cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime |
下载lnmp所需的软件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | wget http://nginx.org/download/nginx-0.8.36.tar.gz wget http://cn.php.net/get/php-5.3.2.tar.bz2/from/us.php.net/mirror wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.46.tar.gz/from/http://mirror.services.wisc.edu/mysql/ wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz wget http://downloads.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz?use_mirror=nchc wget http://downloads.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.bz2?use_mirror=nchc wget http://pecl.php.net/get/memcache-2.2.5.tgz wget http://downloads.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.bz2?use_mirror=nchc wget http://downloads.sourceforge.net/project/pcre/pcre/8.02/pcre-8.02.tar.bz2?use_mirror=nchc wget http://bart.eaccelerator.net/source/0.9.6/eaccelerator-0.9.6.tar.bz2 http://pecl.php.net/package/PDO_MYSQL wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz wget ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz wget http://pecl.php.net/get/imagick-2.3.0.tgz |
上传配置文件:
这里我用FTP 将配置文件上传到/var/www (现在WWW服务还没有启用,因此放这里是安全的).
二、安装php-5.3.2和 mysql-5.1.46
首先安装一些编译PHP需要的组件,否则编译PHP时会报错:
1,编译安装libiconv
1 2 3 4 5 6 7 | tar xvzf libiconv-1.13.1.tar.gz cd libiconv-1.13.1 ./configure --prefix=/usr/local make make install make clean ln -s /usr/local/lib/libiconv.so.2 /usr/lib/ |
2,编译安装libmcrypt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | cd .. tar xvjf libmcrypt-2.5.8.tar.bz2 cd libmcrypt-2.5.8 ./configure make make install /sbin/ldconfig cd libltdl/ ./configure --enable-ltdl-install make make install make clean cd ../../ |
3、安装mhash
1 2 3 4 5 6 | tar xvjf mhash-0.9.9.9.tar.bz2 cd mhash-0.9.9.9/ ./configure make make install cd ../ |
1 2 3 4 5 6 7 8 9 | ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4 ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8 ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2 ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1 |
4、安装 mcrypt
1 2 3 4 5 6 7 | tar zxvf mcrypt-2.6.8.tar.gz cd mcrypt-2.6.8/ /sbin/ldconfig ./configure make make install cd ../ |
5、安装freetype
1 2 3 4 5 6 7 | wget http://downloads.sourceforge.net/project/freetype/freetype2/2.3.12/freetype-2.3.12.tar.bz2?use_mirror=nchc tar -xvjf freetype-2.3.12.tar.bz2 cd freetype-2.3.12 ./configure make make install make clean |
6、安装libpng
1 2 3 4 5 6 7 | wget http://downloads.sourceforge.net/project/libpng/01-libpng-master/1.4.2/libpng-1.4.2.tar.gz?use_mirror=nchc tar -xvzf libpng-1.4.2.tar.gz cd libpng-1.4.2 ./configure make make install make clean |
7、安装jpeg库
1 2 3 4 5 6 7 8 | wget http://www.ijg.org/files/jpegsrc.v8a.tar.gz tar -xvzf jpegsrc.v8a.tar.gz cd jpeg-8a/ ./configure --enable-static --enable-shared make make install make install-lib make clean |
8、安装GD库
1 2 3 4 5 6 | wget http://www.libgd.org/releases/gd-2.0.35.tar.bz2 tar zxvf gd-2.0.35.tar.gz cd gd-2.0.35 ./configure --prefix=/usr/local/gd2 make make install |
2、编译安装mysql-5.1.46
先给mysql分配一个用户:
1 2 | /usr/sbin/groupadd mysql /usr/sbin/useradd -g mysql mysql |
1 2 3 4 5 6 | apt-get install libncurses5-dev tar xvzf mysql-5.1.46.tar.gz cd mysql-5.1.46/ ./configure --prefix=/usr/local/webserver/mysql/ --enable-assembler --with-charset=utf8 --with-extra-charsets=all --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile --with-plugins=innobase make && make install make clean |
1 2 3 4 | chmod +w /usr/local/webserver/mysql chown -R mysql:mysql /usr/local/webserver/mysql ln -s /usr/local/webserver/mysql/lib/mysql/libmysqlclient.so.16 /usr/lib/ cd ../ |
配置mysql:
1 2 3 | mkdir /var/mysql/ cp /home/soft/conf/my.cnf /var/mysql/my.cnf chown mysql:mysql /var/mysql/ |
生成数据库 启动服务进程 修改密码
1 2 3 | /usr/local/webserver/mysql/bin/mysql_install_db --basedir=/usr/local/webserver/mysql --datadir=/var/mysql/data --user=mysql /usr/local/webserver/mysql/bin/mysqld_safe --defaults-file=/var/mysql/my.cnf & /usr/local/webserver/mysql/bin/mysqladmin -uroot password "这里放密码" -p |
复制mysql启动脚本:
1 2 | cp support-files/mysql.server /etc/init.d/mysqld chmod +x /etc/init.d/mysqld |
也可以把mysql 添加为服务:
1 2 3 4 5 6 7 8 9 10 11 | 添加mysqld服务 chkconfig --add mysqld 设置mysqld在运行级3和5中启动 chkconfig --level 35 mysqld on 检查mysql的服务运行状态 chkconfig --list mysql 启动mysql service mysqld start |
进入mysql 查看状态(可以不做):
1 2 3 | /usr/local/webserver/mysql/bin/mysql -uroot -p密码 status exit |
mysql root 密码不正确或者忘记了root密码怎么办?先kill 掉mysql 服务进程,再
1 2 3 4 5 6 | /usr/local/webserver/mysql/libexec/mysqld stop /usr/local/webserver/mysql/bin/mysqld_safe --defaults-file=/var/mysql/my.cnf --skip-grant-tables & /usr/local/webserver/mysql/bin/mysql --user=root mysql update user set Password=PASSWORD('新密码') where user='root'; flush privileges; exit; |
3、 编译安装PHP(FastCGI模式)
1 2 | apt-get install libxml2-dev apt-get install libsasl2-dev |
libsasl2一定要安装,不然configure 时会出错:
configure: error: sasl.h not found!
1 2 3 4 5 6 | ln -s /usr/local/include/freetype2 /usr/include/ ln -s /usr/local/lib/libfree* /usr/lib/ ln -s /usr/local/lib/libpng* /usr/lib/ ln -s /usr/local/lib/libjpeg* /usr/lib/ |
由于编译安装打了fpm补丁的PHP没有成功,我直接checkout SVN 编译安装了:
1 2 3 | svn co http://svn.php.net/repository/php/php-src/branches/PHP_5_3_FPM php_5_3_fpm cd php_5_3_fpm ./buildconf --force |
1 2 3 | ./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local/lib --with-freetype-dir=/usr/local/lib --with-jpeg-dir=/usr/local/lib --with-png-dir=/usr/local/lib --with-zlib-dir=/usr/local/lib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd=/usr/local/gd2/ --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap make ZEND_EXTRA_LIBS='-liconv' make install |
如果make ZEND_EXTRA_LIBS=’-liconv’出错,直接 make 行了。
1 2 | cd ../ cp /var/www/php.ini /usr/local/webserver/php/etc/php.ini |
4、编译安装PHP5扩展模块
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 | tar zxvf memcache-2.2.5.tgz cd memcache-2.2.5/ /usr/local/webserver/php/bin/phpize ./configure --with-php-config=/usr/local/webserver/php/bin/php-config make make install cd ../ tar jxvf eaccelerator-0.9.6.tar.bz2 cd eaccelerator-0.9.6/ /usr/local/webserver/php/bin/phpize ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/webserver/php/bin/php-config make make install cd ../ tar zxvf PDO_MYSQL-1.0.2.tgz cd PDO_MYSQL-1.0.2/ /usr/local/webserver/php/bin/phpize ./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-pdo-mysql=/usr/local/webserver/mysql make make install cd ../ tar zxvf ImageMagick.tar.gz cd ImageMagick-6.6.1-8/ ./configure make make install cd ../ tar zxvf imagick-2.3.0.tgz cd imagick-2.3.0/ /usr/local/webserver/php/bin/phpize ./configure --with-php-config=/usr/local/webserver/php/bin/php-config make make install cd ../ |
如果不需要,在php.ini中 注释下面信息
extension = “memcache.so”
extension = “pdo_mysql.so”
extension = “imagick.so”
把output_buffering = On
改output_buffering = Off
如果不需要eAccelerator加速PHP,可以删除掉[eaccelerator] 配置块。
5、 创建www用户和组,以及供blog使用的目录:
1 2 3 4 5 | /usr/sbin/groupadd www /usr/sbin/useradd -g www www mkdir -p /var/www/blog chmod +w /var/www/blog chown -R www:www /var/www/blog |
6、php-fpm配置文件
1 | cp /var/www/php-fpm.conf /usr/local/webserver/php/etc/php-fpm.conf |
7、启动php-cgi进程,监听 127.0.0.1的9000端口,进程数为64(根据内存情况来定),用户为www:
1 2 | ulimit -SHn 51200 /usr/local/webserver/php/sbin/php-fpm |
三、安装Nginx 0.8.36
1、安装Nginx所需的pcre库:
1 2 3 4 5 | tar xvjf pcre-8.02.tar.bz2 cd pcre-8.02/ ./configure make && make install cd ../ |
2、安装Nginx
这里make nginx时会出错,说找不到 pcre ,原因是我是编译安装pcre的,做个链接:
1 | ln -s /usr/local/lib/libpcre.so.0 /usr/lib/ |
1 2 3 4 5 | tar zxvf nginx-0.8.36.tar.gz cd nginx-0.8.36/ ./configure --user=www --group=www --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module make && make install cd ../ |
3、 创建Nginx配置文件
1 | cp /var/www/nginx.conf /usr/local/webserver/nginx/conf/nginx.conf |
5、启动Nginx
1 2 | ulimit -SHn 51200 /usr/local/webserver/nginx/sbin/nginx |
我这里启动nginx时出现了一个错误:
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
[emerg]: still could not bind()
这个错误说明主机名称已经被绑定了(已经被别的程序占用了) ,我估计是我在控制面板里设置的主机名与这个网站监听的主机名一样,可以查看下主机名,再对照下nginx配置文件里的站点使用的是不是与该名字相同:
1 | cat /etc/hostname |
然后修改下hostname就可以了。
四、 配置开机自动启动Nginx + PHP +Mysql
将以下命令加入 /etc/rc.local 的 exit 0 前面 :
1 2 3 4 5 | ulimit -SHn 51200 /usr/local/webserver/php/sbin/php-fpm -c /usr/local/webserver/php/etc -y /usr/local/webserver/php/etc/php-fpm.conf /usr/local/webserver/nginx/sbin/nginx /usr/local/webserver/mysql/bin/mysqld_safe --defaults-file=/var/mysql/my.cnf & /usr/local/sbin/vsftpd & |
检测 php-fpm 是否运行:
1 2 | ps aux | grep "php-fpm" netstat -anpo | grep "php-fpm" | wc -l |
在不停止Nginx服务的情况下平滑变更Nginx配置
1、修改/usr/local/webserver/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确:
1 | /usr/local/webserver/nginx/sbin/nginx -t |
如果屏幕显示以下两行信息,说明配置文件正确:
the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok
the configuration file /usr/local/webserver/nginx/conf/nginx.conf was tested successfully
2、这时,输入以下命令查看Nginx主进程号:
1 | ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}' |
屏幕显示的即为Nginx主进程号,例如:
6302
这时,执行以下命令即可使修改过的Nginx配置文件生效:
1 | kill -HUP 6302 |
或者无需这么麻烦,找到Nginx的Pid文件:
1 | kill -HUP `cat /usr/local/webserver/nginx/nginx.pid` |
编写每天定时切割Nginx日志的脚本
1、创建脚本/usr/local/webserver/nginx/sbin/cut_nginx_log.sh
1 | vim /usr/local/webserver/nginx/sbin/cut_nginx_log.sh |
输入以下内容:
1 2 3 4 5 6 7 | #!/bin/bash # This script run at 00:00 # The Nginx logs path logs_path="/usr/local/webserver/nginx/logs/" mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/ mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log kill -USR1 `cat /usr/local/webserver/nginx/nginx.pid` |
2、设置crontab,每天凌晨00:00切割nginx访问日志
1 | crontab -e |
输入以下内容:
1 | 00 00 * * * /bin/bash /usr/local/webserver/nginx/sbin/cut_nginx_log.sh |
创建一个nginx启动脚本:
vim /etc/init.d/nginx 然后插入以下脚本
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 52 53 54 55 | #!/bin/sh ### BEGIN INIT INFO # Provides: nginx # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-De.ion: starts the nginx web server # De.ion: starts nginx using start-stop-daemon ### END INIT INFO PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/webserver/nginx/sbin DAEMON=/usr/local/webserver/nginx/sbin/nginx NAME=nginx DESC=nginx test -x $DAEMON || exit 0 # Include nginx defaults if available if [ -f /etc/default/nginx ] ; then . /etc/default/nginx fi set -e case "$1" in start) echo -n "Starting $DESC: " start-stop-daemon --start --quiet --pidfile /usr/local/webserver/nginx/nginx.pid \ --exec $DAEMON -- $DAEMON_OPTS echo "$NAME." ;; stop) echo -n "Stopping $DESC: " start-stop-daemon --stop --quiet --pidfile /usr/local/webserver/nginx/nginx.pid \ --exec $DAEMON echo "$NAME." ;; restart|force-reload) echo -n "Restarting $DESC: " start-stop-daemon --stop --quiet --pidfile \ /usr/local/webserver/nginx/nginx.pid --exec $DAEMON sleep 1 start-stop-daemon --start --quiet --pidfile \ /usr/local/webserver/nginx/nginx.pid --exec $DAEMON -- $DAEMON_OPTS echo "$NAME." ;; reload) echo -n "Reloading $DESC configuration: " start-stop-daemon --stop --signal HUP --quiet --pidfile /usr/local/webserver/nginx/nginx.pid \ --exec $DAEMON echo "$NAME." ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0 |
如果有需要,你还可以添加脚本到系统默认运行级别:
1 | /usr/sbin/update-rc.d -f nginx defaults |
这样,就可以以下面的方式启动nginx了:
1 | /etc/init.d/nginx start |
VPS测试博客 : http://blog.ihacklog.com
此文基本参考张宴的: Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)








真厲害啊~ 耐心夠, 很適合折騰.
哈哈,你还真折腾,一个一个去安装,我搞个LNMP包一次搞定
不过途中还是碰到了不少麻烦,自己动手一个一个装还是有好处的