当前位置: 首页 > 后端技术 > PHP

Debian9下编译安装LNMP环境(Stretch)

时间:2023-03-29 17:44:44 PHP

源码安装Debian9下LNMP1.前言之前,我的开发环境是Windows-10+PHP-7.1+Nginx-1.10+MariaDB-10.1。后期开发需要用到memcached、redis等nosql,但windows下很难定制。很多PHP扩展没有.dll文件,在Windows下编译PHP扩展还是比较困难的。所以促使我转向了Linux下的开发。首先,我搜索了一下,主要是RedHat和Debian。基于RedHat:商业版、Centos、Fedora基于Debian:Debian、Ubuntu我选择了Debian9、PHP-7.2、MariaDB-10.2、Nginx-1.132.Requirements的一般安装顺序,mariadb>nginx>php,以下涉及的软件和库名称均基于Debian(Ubuntu)。2.1PHP需要的附加库:##源码aptinstallbison需要的词法分析器##源码都是c程序,需要c编译器,注意编译器版本aptinstallgcc-6##C++编译器aptinstallg++##xml解析库aptinstalllibxml2libxml2-dev##makecmakem4autoconfaptinstallmakecmakem4autoconf##webp格式,可以带小图片aptinstalllibwebp6libwebp-dev##jpeg格式支持aptinstalllibjpeg-dev##png格式支持aptinstalllibpng-dev##免费开源字体引擎aptinstalllibfreetype6libfreetype6-dev##ssl加密库支持(源码安装openssl,可以选择使用Debian包安装openssl)aptinstallopenssl##ssh2库(源码安装)aptinstalllibssh2-1-dev##mhash库aptinstalllibmhash2##zlib压缩库(源码安装)aptinstallzlib1gzlib1g-dev##pcre正则表达式库(源码安装ion)aptinstalllibpcre3-devlibpcre3##gzipaptinstallgzip##bz2aptinstalllibbz2-1.0libbz2-dev##soduimphp7.2新特性现代加密标准aptinstalllibsodium-dev##argon2php7.2新特性新加密函数,通过PHC(PasswordHashingCompetition)Releaseaptinstallargon2libargon2-0libargon2-0-dev2.2Nginx需要另外三个库openssl,zlib,pcre,可以通过Debian自带的库或者源码安装来安装。我选择后者,所以不会和上面的有冲突,后面会讲到原因。2.3MariaDB需要的附加库##bison词法分析器aptinstallbison##libncurses一个基于文本的程序库,可以用来编写独立终端aptinstalllibncurses5libncurses5-dev##libevent-dev一个事件库aptinstalllibevent-dev##openssl一个加密库aptinstallopenssl3、安装过程按照MariaDB>Nginx>PHP的顺序安装。安装前请再次检查是否安装了上述附加库。3.1对应系统用户创建为什么要创建用户?答:因为安装完成后,我们只需要这些程序用于系统服务(daemon或其他自运行进程)即可,不需要使用特定的用户身份来操作他。即创建系统账户和系统用户组。groupadd-rmysqluseradd-r-gmysql-s/bin/false-Mmysqlmkdir/usr/local/data/mysqlchown-Rmysql:mysql/usr/local/data/mysql注意参数含义可以通过mangroupadd或manuseradd创建具体的手册-r创建系统用户或用户组-g指定用户所属的用户组-s指定用户登录shell名,sh,bash,因为是系统用户所以不需要,设置/bin/false或/usr/sbin/nologin-M不创建用户主目录。同样,创建nginx和php-fpmgroupadd-rphp-fpmuseradd-r-gphp-fpm-s/bin/false-Mphp-fpmgroupadd-rnginxuseradd-r-gnginx-s/bin/false-Mnginx3.2MariaDBMariaDB安装可能有点麻烦,不是常见的make方式,而是cmake方式。获取mariadb-10.2源码wgethttp://mirror.jaleco.com/mariadb//mariadb-10.2.12/source/mariadb-10.2.12.tar.gztar-zxvfmariadb-10.2.12.tar.gzmkdirbuild-mariadbcd构建-mariadbcmake../-DCMAKE_INSTALL_PREFIX=/opt/soft/mariadb-10.3.4\-DMYSQL_DATADIR=/var/data/mysql\-DSYSCONFDIR=/etc\-DWITHOUT_TOKUDB=1\-DWITH_INNOBASE_STORAGE_ENGINE=1\-DWITH_ARCHIVE_STPRAGE_ENGINE=1\-DWITH_BLACKHOLE_STORAGE_ENGINE=1\-DWIYH_READLINE=1\-DWIYH_SSL=系统\-DVITH_ZLIB=系统\-DWITH_LOBWRAP=0\-DMYSQL_UNIX_ADDR=/tmp/mysql.sock\-DDEFAULT_CHARSET=utf8\-DDEFAULT_COLLATION=utf8_general_ciROM_BPROSBUILDONmake&&makeinstall如果失败使用rm-rfCMakeCache.txt3.2.1配置MariaDBvim/etc/profile.d/mariadb.shaddexportPATH=$PATH:/opt/soft/mariadb-10.2/binsource/etc/profile.d/mariadb.shcd/opt/soft/mariadb-10.2scripts/mysql_install_db--user=mysql--datadir=/usr/local/data/mysql成功输出信息:InstallingMariaDB/MySQLsystemtablesin'/data/mysql'...确定开始mysqld在启动时你必须将support-files/mysql.server复制到你系统的正确位置请记住为MariaDBroot用户设置密码!为此,启动服务器,然后发出以下命令:'./bin/mysqladmin'-urootpassword'new-password''./bin/mysqladmin'-uroot-hlocalhost.localdomainpassword'new-password'或者你可以运行:'./bin/mysql_secure_installation'这也会给你删除默认创建的测试数据库和匿名用户的选项。强烈建议用于生产服务器。请参阅位于http://mariadb.com/kb的MariaDB知识库或MySQL手册以获取更多说明。您可以使用以下命令启动MariaDB守护程序:cd'.';./bin/mysqld_safe--datadir='/data/maria'您可以使用mysql-test-run.plcd'./mysql-test'测试MariaDB守护进程;perlmysql-test-run.pl请在http://mariadb.org/jira报告任何问题有关MariaDB的最新信息可在http://mariaadb.org/.您可以在以下位置找到有关MySQL部分的更多信息:http://dev.mysql.com考虑加入MariaDB强大而充满活力的社区:https://mariadb.org/get-involved/copycd/opt/soft/mariadb-10.2cpsupport-files/my-large.cnf/etc/my.cnf或cpsupport-files/my-large.cnf/etc/mysql/my.cnf创建系统启动脚本(使用systemd)cd/etc/systemd/systemvimmysqld.service[Unit]Description=MariaDBServerAfter=network.target[Service]ExecStart=/opt/soft/mariadb-10.2/bin/mysqld--defaults-file=/etc/mysql/my.cnf--datadir=/usr/local/data/mysql--socket=/tmp/mysql.sockUser=mysqlGroup=mysqlWorkingDirectory=/opt/soft/mariadb-10.2[Install]WantedBy=multi-user.targetsystemctldaemon-reloadsystemctl重启mysqld。servicesystemctlstatusmysqld.servie如果没有启动,请使用journalctl-xn或journalctl-xl查看错误信息如果要启动,请使用systemctlenablemysqld.service安全设置$:mysql_secure_installationEntercurrentpasswordforroot(enterfornone):Enterthecurrentrootpassword(noinput)设置root密码?[Y/n]设置root密码?(Yes/No)Newpassword:EnternewrootpasswordRe-enternewpassword:Confirminputrootpassword密码更新成功!密码更新成功默认情况下,MariaDB安装有一个匿名用户,允许任何人登录MariaDB而无需为他们创建用户帐户。这仅用于测试,并使安装更顺利。在进入生产环境之前,您应该删除它们。默认情况下,MariaDB安装有一个匿名用户,允许任何人登录MariaDB,而无需为此目的创建用户帐户仅用于测试,安装会更顺利一些。您应该在投入生产之前删除它们。删除匿名用户?[Y/n]删除匿名用户?(是/否)通常,只应允许root从“localhost”连接。这可确保有人无法从网络中猜出root密码。通常,root只允许来自localhost的连接。这确保其他用户无法从网络中猜出root密码。禁止root远程登录?[Y/n]不允许root远程登录?(是/否)默认情况下,MariaDB附带一个任何人都可以访问的名为“test”的数据库。这也仅用于测试,应在进入生产环境之前将其删除。默认情况下,MariaDB提供了一个名为“test”的数据库,任何人都可以访问。这也仅用于测试,应在投入生产前删除。重新加载权限表将确保到目前为止所做的所有更改将立即生效。现在重新加载权限表?[Y/n]现在重新加载特权表(是/否)全部完成!如果您已完成上述所有步骤,那么您的MariaDB安装现在应该是安全的。全做完了!如果您已完成上述步骤,MariaDB安装现在应该是安全的。感谢您使用MariaDB!至此,mariaaddb已经安装完毕,可以使用ps-aux|grepmysql查看服务现在测试一下,mysql-uroot-pormysql-hlocalhost-P5001-ushanechiu-p3.3PHP安装PHP安装比较简单,主要是选择你要安装的扩展或者需要启用的功能。您可以使用./configure--help浏览源安装提供的安装选项。一些安装选项是PHP的内置函数。你只需要启用或禁用它们,例如php-fpm,需要启用。有些扩展是可以动态加载的,叫做共享扩展,不过官方也说了并不是所有的扩展都可以共享。获取源代码:wgethttp://am1.php.net/distributions/php-7.2。1.tar.bz2解压:tar-xvfphp-7.2.1.tar.bz2cdphp-7.2.1./configure--prefix=/opt/soft/php7.2\--with-config-file-path=/opt/soft/php7.2/etc\--with-mysql-sock=/tmp/mysql.sock\--with-openssl\--with-mhash\--with-mysqli=shared,mysqlnd\--with-pdo-mysql=shared,mysqlnd\--with-pdo-pgsql=/opt/soft/pgsql\--with-gd\--with-iconv\--with-zlib\--enable-exif\--enable-intl\--enable-calendar\--enable-zip\--enable-inline-optimization\--disable-debug\--disable-rpath\--enable-shared\--enable-xml\--enable-bcmath\--enable-shmop\--enable-mbregex\--enable-mbstring\--enable-ftp\--enable-sysvmsg\--enable-sysvsem\--enable-sysvshm\--enable-pcntl\--enable-sockets\--enable-ipv6\--with-bz2\--with-xmlrpc\--enable-soap\--without-pear\--with-gettext\--enable-session\--with-curl=/opt/soft/curl7.57--enable-debug\--with-jpeg-dir\--with-png-dir\--with-freetype-dir\--enable-opcache\--enable-fpm\--with-fpm-user=nginx\--with-fpm-group=nginx\--with-sodium\--with-libxml-dir\--with-password-argon2\--without-gdbm\--with-pcre-regex\--with-pcre-jit\--enable-fast-install\--enable-fileinfo配置项源码文件,cpphp.ini.development/opt/soft/php-7.2/php.ini修改以下部分extension_dir=/opt/soft/php-7.2/lib/php/extensions/no-debug-non-zts-20170718/extension=mysqlitime_zone=PRC还需要添加php-fpm配置文件,etc/下cpphp-fpm.conf.defaultphp-fpm.conf和cpphp.conf.d/www.conf.defaultphp.conf安装目录下.d/www.confPHP-FPM启动脚本(systemd)PHP非常人性化,可以在源码目录/sapi/fpm中找到php-fpm.service文件,复制到/etc/systemd/system/php-fpm.service在systemdctlstartphp-fpm.servicesystemdctlstatusphp-fpm.service如果报错,使用journalctl-xn查看具体报错信息,启动itup,sytemctlenablephp-fpm.service3.4Nginx源码安装编译安装Nginx的难度应该是LNMP环境下最简单的首先需要三个源码包,一个zlib(压缩库),一个pcre(正规的)expressionlibrary),和一个openssl(加密库,如果要使用HTTPS,这个库是必须的),当然如果你是通过debian自带的包管理器安装的,这个可以省略,但是两个必须要安装,一个是软件本身,必须同时安装开发库,像这样,apt-yinstallopensslopensll-devcommand:--configure--prefix=/opt/soft/nginx\--user=nginx\--group=nginx\--with-http_ssl_module\#这个默认是不开启的,比如如需要使用TLS,请带上此项进行编译。--with-pcre=../pcre-8.41\--with-zlib=../zlib-1.2.11\--with-openssl=../openssl-1.1.0g然后make和makeinstall注意,如果你已经使用二进制包安装了zlib、pcre、openssl和相应的开发库,则不需要指定路径。配置:编写nginx守护进程文件,或者使用systemd工具vim/etc/sytemd/system/nginx.service[Unit]Description=TheNGINXHTTPandreverseproxyserverAfter=syslog.targetnetwork.targetremote-fs.targetnss-查找.target[Service]Type=forkingPIDFile=/opt/soft/nginx/logs/nginx.pidExecStartPre=/opt/soft/nginx/sbin/nginx-tExecStart=/opt/soft/nginx/sbin/nginxExecReload=/bin/kill-sHUP$MAINPIDExecStop=/bin/kill-sQUIT$MAINPIDPrivateTmp=true[Install]WantedBy=multi-user.target这个在nginx官网上可以找到,可以根据自己的需要修改。注意路径改成你自己的安装路径。systemctlstartnginx.service启动Nginxsystemctlenablenginx.serviceStartup记住,如果中途修改服务文件,必须先运行systemctldaemon-reload重新加载守护进程文件。然后运行??systemctlstartnginx.service重启服务。4.APPEND后面会添加一键安装脚本。5.参考资料systemd入门教程CentOS7.3编译安装MariaDB10.2.6CentOS7.3编译安装php7.1GNUbisonGD-supportconfigurePHPArgon2TheSodiumcryptolibrary(libsodium)》getthemariadbcode,buildit,testitGenericBuildInstructionsInstallingSystem表(mysql_install_db)")"从源代码编译MariaDB"ncursesCMakephp-manulPHP7.2新功能从源代码构建nginx