以前,個人開發環境是Windows-10+PHP-7.1+Nginx-1.10+MariaDB-10.1。php
後面開發須要使用到memcached,redis等nosql比較多,而在Windows下定製難度,不少PHP拓展並無.dll文件,且PHP拓展在Windows下compile難度仍是比較大的。html
因此促使我轉向Linux下開發。mysql
首先,我search了一下,主要是Red Hat 與Debian。nginx
基於Red Hat:商業版,Centos,Fedora
基於Debian: Debian,Ubuntu
我選擇了Debian 9,PHP-7.2,MariaDB-10.2,Nginx-1.13web
通常安裝順序,mariadb > nginx > php,如下的涉及的軟件,庫名均是基於Debian(Ubuntu)。
## 源碼須要的詞法分析器 apt install bison ## 源碼都是c程序,須要c編譯器,注意編譯器版本 apt install gcc-6 ## C++編譯器 apt install g++ ## xml解析庫 apt install libxml2 libxml2-dev ## make cmake m4 autoconf apt install make cmake m4 autoconf ## webp 格式,可以帶來更小體積的圖片 apt install libwebp6 libwebp-dev ## jpeg格式支持 apt install libjpeg-dev ## png格式支持 apt install libpng-dev ## 免費開源字體引擎 apt install libfreetype6 libfreetype6-dev ## ssl加密庫支持(源碼安裝openssl,能夠選擇使用Debian 包來安裝openssl) apt install openssl ## ssh2 庫(源碼安裝) apt install libssh2-1-dev ## mhash 庫 apt install libmhash2 ## zlib 壓縮庫(源碼安裝) apt install zlib1g zlib1g-dev ## pcre 正則表達式庫(源碼安裝) apt install libpcre3-dev libpcre3 ## gzip apt install gzip ## bz2 apt install libbz2-1.0 libbz2-dev ## soduim php7.2新特性 現代加密標準 apt install libsodium-dev ## argon2 php7.2新特性 新的加密函數,由PHC(Password Hashing Competition)發佈 apt install argon2 libargon2-0 libargon2-0-dev
主要是三個,openssl,zlib,pcre,能夠經過Debian自己的庫安裝,也能夠選擇源碼安裝。我選擇後者,因此,正則表達式
並不會與上面的衝突,後面會涉及到緣由。redis
## bison詞法分析器 apt install bison ## libncurses 一個可用於編寫獨立終端基於文本的的程序庫 apt install libncurses5 libncurses5-dev ## libevent-dev 一個事件庫 apt install libevent-dev ## openssl 一個加密庫 apt install openssl
按照MariaDB > Nginx > PHP的順序安裝,安裝前請再次檢查上述所需的額外庫都已安裝。sql
爲何要建立用戶?
答:由於安裝完成後,咱們只須要這些程序只用於系統服務就好(daemon或者其餘本身運行的進程),並不須要使用一個具體用戶身份去操做他。即建立系統帳戶,以及系統用戶組。shell
groupadd -r mysql useradd -r -g mysql -s /bin/false -M mysql mkdir /usr/local/data/mysql chown -R mysql:mysql /usr/local/data/mysql
note 參數含義
經過man groupadd 或者man useradd 能夠調出具體的手冊 -r 建立系統用戶或者用戶組 -g 指定用戶所屬用戶組 -s 指定用戶登陸shell名字,sh,bash,由於是系統用戶,並不須要,設置 /bin/false或者/usr/sbin/nologin -M 不建立用戶主目錄
一樣,分別建立nginx,php-fpm數據庫
groupadd -r php-fpm useradd -r -g php-fpm -s /bin/false -M php-fpm groupadd -r nginx useradd -r -g nginx -s /bin/false -M nginx
MariaDB 安裝可能略顯麻煩,並非常見的make方式,而是cmake方式。
獲取mariadb-10.2源碼
wget http://mirror.jaleco.com/mariadb//mariadb-10.2.12/source/mariadb-10.2.12.tar.gz tar -zxvf mariadb-10.2.12.tar.gz mkdir build-mariadb cd build-mariadb cmake ../ -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=system \ -DVITH_ZLIB=system \ -DWITH_LOBWRAP=0 \ -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DBUILD_LIBPROTOBUF_FROM_SOURCES=ON make && make install
若是失敗 使用 rm -rf CMakeCache.txt
vim /etc/profile.d/mariadb.sh
addexport PATH=$PATH:/opt/soft/mariadb-10.2/bin
source /etc/profile.d/mariadb.sh cd /opt/soft/mariadb-10.2 scripts/mysql_install_db --user=mysql --datadir=/usr/local/data/mysql
成功輸出信息:
Installing MariaDB/MySQL system tables in '/data/mysql' ... OK To start mysqld at boot time you have to copy support-files/mysql.server to the right place for your system PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER ! To do so, start the server, then issue the following commands: './bin/mysqladmin' -u root password 'new-password' './bin/mysqladmin' -u root -h localhost.localdomain password 'new-password' Alternatively you can run: './bin/mysql_secure_installation' which will also give you the option of removing the test databases and anonymous user created by default. This is strongly recommended for production servers. See the MariaDB Knowledgebase at http://mariadb.com/kb or the MySQL manual for more instructions. You can start the MariaDB daemon with: cd '.' ; ./bin/mysqld_safe --datadir='/data/maria' You can test the MariaDB daemon with mysql-test-run.pl cd './mysql-test' ; perl mysql-test-run.pl Please report any problems at http://mariadb.org/jira The latest information about MariaDB is available at http://mariadb.org/. You can find additional information about the MySQL part at: http://dev.mysql.com Consider joining MariaDB's strong and vibrant community: https://mariadb.org/get-involved/
複製
cd /opt/soft/mariadb-10.2 cp support-files/my-large.cnf /etc/my.cnf
或者
cp support-files/my-large.cnf /etc/mysql/my.cnf
建立系統啓動腳本(使用systemd)
cd /etc/systemd/system vim mysqld.service [Unit] Description=MariaDB Server After=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.sock User=mysql Group=mysql WorkingDirectory=/opt/soft/mariadb-10.2 [Install] WantedBy=multi-user.target systemctl daemon-reload systemctl restart mysqld.service systemctl status mysqld.servie
若是沒有啓動,請使用journalctl -xn
或者 journalctl -xl
來查看錯誤信息
若是想開機啓動,請使用systemctl enable mysqld.service
安全設置
$:mysql_secure_installation Enter current password for root (enter for none): 輸入當前root密碼(沒有輸入) Set root password? [Y/n] 設置root密碼?(是/否) New password: 輸入新root密碼 Re-enter new password: 確認輸入root密碼 Password updated successfully! 密碼更新成功 By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. 默認狀況下,MariaDB安裝有一個匿名用戶, 容許任何人登陸MariaDB而他們無需建立用戶賬戶。 這個目的是隻用於測試,安裝去更平緩一些。 你應該進入前刪除它們生產環境。 Remove anonymous users? [Y/n] 刪除匿名用戶?(是/否) Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. 一般狀況下,root只應容許從localhost鏈接。 這確保其餘用戶沒法從網絡猜想root密碼。 Disallow root login remotely? [Y/n] 不容許root登陸遠程?(是/否) By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. 默認狀況下,MariaDB提供了一個名爲「測試」的數據庫,任何人均可以訪問。 這也只用於測試,在進入生產環境以前應該被刪除。 Reloading the privilege tables will ensure that all changes made so far will take effect immediately. 從新加載權限表將確保全部到目前爲止所作的更改將當即生效。 Reload privilege tables now? [Y/n] 如今從新加載權限表(是/否) All done! If you've completed all of the above steps, your MariaDB installation should now be secure. 所有完成!若是你已經完成了以上步驟,MariaDB安裝如今應該安全。 Thanks for using MariaDB!
至此,mariaddb已經安裝完成,可使用 ps -aux | grep mysql 查看服務
如今測試一下,mysql -u root -p
或者 mysql -h localhost -P 5001 -u shanechiu -p
PHP 安裝比較簡單,主要是選擇你要安裝的拓展或者須要開啓的功能
可使用./configure --help
來瀏覽源碼安裝提供的安裝選項
有些屬於PHP內置的功能,你只須要 enable或者disable,好比php-fpm,是須要啓用的。
有些拓展是能夠動態加載的,稱之爲shared extension,可是官方也說了,並非全部的拓展都是可以shared.
獲取源碼:wget http://am1.php.net/distributions/php-7.2.1.tar.bz2
解壓:
tar -xvf php-7.2.1.tar.bz2 cd php-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
配置
進入源碼文件,cp php.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=mysqli time_zone=PRC
同時要添加php-fpm配置文件,安裝目錄下 etc/
下 cp php-fpm.conf.default php-fpm.conf
和 cp php.conf.d/www.conf.default php.conf.d/www.conf
PHP-FPM啓動腳本(systemd)
PHP 很是人性化,在源碼目錄下/sapi/fpm
下能夠找到php-fpm.service
文件,複製到/etc/systemd/system/php-fpm.service
中systemdctl start php-fpm.service
systemdctl status php-fpm.service
若是發生錯誤,使用journalctl -xn查看具體錯誤信息
開機啓動,sytemctl enable php-fpm.service
Nginx的編譯安裝難易程度應該是LNMP環境中最簡單的
首先須要三個源碼包,一個zlib(壓縮庫),一個pcre(正則表達式庫),一個openssl(加密庫,若是要使用HTTPS,這個庫是必須的),
固然你若是是經過debian自己的包管理器安裝的,這個能夠省略,可是必定要安裝兩個,一個是軟件自己,同時還要安裝開發庫,像這種,apt -y install openssl opensll-dev
。
命令:
--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
和 make install
注意,若是是使用二進制包安裝了zlib,pcre,openssl,及相應的開發庫,不須要指定路徑。
配置:
編寫nginx守護進程文件,仍是利用systemd工具vim /etc/sytemd/system/nginx.service
[Unit] Description=The NGINX HTTP and reverse proxy server After=syslog.target network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/opt/soft/nginx/logs/nginx.pid ExecStartPre=/opt/soft/nginx/sbin/nginx -t ExecStart=/opt/soft/nginx/sbin/nginx ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target
這個能夠在nginx 官網找到,能夠按照本身需求修改。注意路徑修改爲本身的安裝路徑。
systemctl start nginx.service
啓動Nginxsystemctl enable nginx.service
開機啓動
記得,若是中途修改了service文件,必定要先運行systemctl daemon-reload
從新加載守護進程文件。而後運行systemctl start nginx.service
重啓服務。
後續會添加一鍵安裝腳本。