이 글은 주로 LNMP 환경을 구축하기 위해 소스 코드를 사용하는 방법을 소개합니다. 관심 있는 친구들은 아래를 살펴보시기 바랍니다.
소스 코드를 사용하여 LNMP 환경을 구축
1. RedHat8
Centos8 등을 설치하세요. 가상 머신은 VMware이고 온라인에 설치 튜토리얼이 있으므로 여기서는 자세히 설명하지 않겠습니다.
2. 로컬 소프트웨어 저장소를 구성합니다
// 把系统镜像挂载到/media/cdrom目录。 mkdir -p /media/cdrom mount /dev/cdrom /media/cdrom // mount: /media/cdrom: WARNING: device write-protected, mounted read-only. // 创建软件仓库的配置文件 ~]# vi /etc/yum.repos.d/rhel8.repo [BaseOS] name=BaseOS baseurl=file:///media/cdrom/BaseOS enabled=1 gpgcheck=0 [AppStream] name=AppStream baseurl=file:///media/cdrom/AppStream enabled=1 gpgcheck=0
vim, wget
dnf install vim wget -y
3을 테스트하고 설치합니다. 4. 필수 소프트웨어 소스 코드 패키지를 다운로드합니다
. /lnmp 디렉토리에 함께 넣으십시오. dnf -y install apr* autoconf automake numactl bison bzip2-devel cpp curl-devel fontconfig-devel freetype-devel gcc gcc-c++ gd-devel gettext-devel kernel-headers keyutils-libs-devel krb5-devel libcom_err-devel libpng-devel libjpeg* libsepol-devel libselinux-devel libstdc++-devel libtool* libxml2-devel libXpm* libxml* libXaw-devel libXmu-devel libtiff* make openssl-devel patch pcre-devel perl php-common php-gd telnet zlib-devel libtirpc-devel gtk* ntpstat na* bison* lrzsz cmake ncurses-devel libzip-devel libxslt-devel gdbm-devel readline-devel gmp-devel
rpcsvc-proto는 rcpsvc 프로토콜 파일 지원이 포함된 소프트웨어 패키지의 이름입니다. rcpsvc 프로토콜은 Nginx 및 MySQL 서비스 프로그램의 후속 배포 중에 호출되어야 합니다. mkdir /lnmp
cd /lnmp
wget https://www.linuxprobe.com/Software/rpcsvc-proto-1.4.tar.gz
wget https://www.linuxprobe.com/Software/nginx-1.16.0.tar.gz
wget https://www.linuxprobe.com/Software/mysql-8.0.18.tar.xz
wget https://www.linuxprobe.com/Software/php-7.3.5.tar.gz
wget https://www.linuxprobe.com/Software/wordpress.tar.gz
Nginx 운영을 위한 계정 만들기프로그램은 보안상의 이유로 루트가 될 수 없습니다.
그리고 홈 디렉터리나 로그인이 필요하지 않으며 단지 Nginx를 실행하는 데 사용됩니다.
tar xzvf rpcsvc-proto-1.4.tar.gz cd rpcsvc-proto-1.4/ ./configure make make install cd ..
Nginx 설치
useradd nginx -M -s /sbin/nologin // -M 不创建家目录,-s 指定 shell id nginx // 查询是否创建成功了 uid=1000(nginx) gid=1000(nginx) 组=1000(nginx)
Nginx 구성
prefix 매개변수를 사용하여 설치 경로를 지정하면 Nginx 구성 파일이 /usr/local/nginx에 있습니다.
프로그램을 실행하는 사용자의 소유자와 그룹의 소유자를 제공합니다.
lnmp]# tar zxvf nginx-1.16.0.tar.gz lnmp]# cd nginx-1.16.0/ nginx-1.16.0]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module // --prefix指定安装目录, --with-开启http_ssl_module模块 nginx-1.16.0]# make nginx-1.16.0]# make install nginx-1.16.0]# cd ..
45번째 줄에 index.php를 인덱스 구성(기본 홈페이지로 사용할 수 있는 파일)에 추가합니다.
vim /usr/local/nginx/conf/nginx.conf // 打开文件后,我们在英文模式下,按下 shift + 冒号,输入2,回车,定位到第2行。 // 连按两次 ESC,取消当前使用模式 // 再次 shift + 冒号,输入 set nu,回车,我们可以显示行号 1 2 user nginx nginx; // 第二行,修改为这样
가상 호스트 기능을 활성화하려면 65~71행 앞의 주석 문자 #을 삭제하고, 69행 이후 해당 웹 사이트 루트 디렉터리를 /usr/local/nginx/html로 변경합니다. 여기서 fastcgi_script_name 매개 변수는 다음과 같습니다. 표시 스크립트 이름은 사용자가 요청한 URL입니다. 정보가 올바르게 입력된 경우에만 Nginx가 사용자 요청을 올바르게 구문 분석할 수 있습니다. 그렇지 않으면 방문한 페이지에 "404 찾을 수 없음" 오류가 표시됩니다.
43 location / { 44 root html; 45 index index.php index.html index.htm; 46 }
소스 코드에서 컴파일되고 설치된 소프트웨어는 기본적으로 systemctl로 관리할 수 없습니다. 자체 /usr/local/nginx/sbin/nginx를 사용하여 직접 관리할 수 있습니다. 경로 추가 없이 nginx를 직접 입력할 수 있도록 PATH 환경 변수에 /usr/local/nginx/sbin 경로를 추가하는 것이 좋습니다.
그런 다음 source 명령을 사용하여 이 수정 사항을 즉시 적용하세요.
63 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 64 # 65 location ~ \.php$ { 66 root html; 67 fastcgi_pass 127.0.0.1:9000; 68 fastcgi_index index.php; 69 fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; 70 include fastcgi_params; 71 }
브라우저를 열어 192.168.89.128(내 가상 머신 주소)에 접속했는데 접속에 실패했습니다.
방화벽을 닫으세요
lnmp]# vim ~/.bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin:/usr/local/nginx/sbin // 这里加上 Nginx 的 sbin 路径 export PATH lnmp]# source ~/.bash_profile // 让修改立即生效 lnmp]# nginx // 启动 nginx 服务
다시 방문하여 작동하는지 확인하세요.
7. MySQL 설치MySQL 데이터베이스 실행을 담당하는 mysql 사용자를 만듭니다. 이 사용자는 로그인할 필요도 없습니다. systemctl status firewalld.service // 查看是否在运行
systemctl stop firewalld.service // 临时停止
systemctl disable firewalld.service // 永久关闭
lnmp]# useradd mysql -M -s /sbin/nologin
/usr/local/mysql은 MySQL 프로그램 파일이 저장되는 경로이고, /usr/local/mysql/data는 데이터가 저장되는 장소이며, 각 데이터베이스는 그 아래의 디렉터리입니다. 또한 수동으로 생성해야 합니다.
// 解压MySQL安装软件包 lnmp]# tar xvf mysql-8.0.18.tar.xz // 将解压出的程序目录改名并移动到/usr/local目录下 lnmp]# mv mysql-8.0.18-linux-glibc2.12-x86_64 mysql lnmp]# mv mysql /usr/local
MySQL을 초기화하고 디렉터리를 인증한 후 mysql 사용자가 데이터에 액세스할 수 있는지 확인하세요. 초기화하기 전에 mysqld 명령을 사용하여 MySQL 서비스 관리를 위한 사용자 이름, 데이터 저장 디렉터리 및 인코딩 정보를 확인하세요. .정보가 정확하면 초기화를 시작하세요. 초기화 후 시스템은 사용자에게 초기 임시 비밀번호를 할당합니다. 저장하는 것을 잊지 마세요.
아래 예시에서 할당된 비밀번호는 qfroRs,Ei4Ls입니다.
lnmp]# cd /usr/local/mysql mysql]# mkdir data
nginx와 유사하게 MySQL의 일부 바이너리 실행 명령은 자체 프로그램 디렉터리의 /usr/local/mysql/bin에 저장되어 있어 쉽게 액세스할 수 있도록 PATH 환경 변수에 추가할 수도 있습니다.
[root@linuxprobe mysql]# chown -R mysql:mysql /usr/local/mysql [root@linuxprobe mysql]# cd bin [root@linuxprobe bin]# ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data 2021-05-06T07:07:06.243270Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.18) initializing of server in progress as process 7606 2021-05-06T07:07:08.116268Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: qfroRs,Ei4Ls
서버가 다시 시작될 때마다 데이터베이스가 자동으로 시작될 수 있도록 시작 스크립트 mysql.server를 /etc/init.d에 넣으세요. 실행 권한을 부여합니다.
libtinfo.so.5 파일은 MySQL 8.0 이후에 새로 추가된 중요한 함수 라이브러리 파일인데, 기본적으로는 존재하지 않습니다. libtinfo.so.6.1 파일을 복사하거나 링크 파일로 사용해야 정상적으로 시작됩니다. :
[root@linuxprobe bin]# vim ~/.bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin export PATH [root@linuxprobe bin]# source ~/.bash_profile
MySQL 데이터베이스 서비스 시작 파일 및 초기화 작업을 실행합니다. 보안상의 이유로 MySQL은 버전 8.0부터 더 이상 사용자가 임시 비밀번호를 사용하여 데이터베이스 콘텐츠를 관리하는 것을 허용하지 않으며 원격으로 제어할 수도 없습니다. 사용자는 MySQL 데이터베이스를 사용하기 전에 초기화 비밀번호를 변경해야 합니다. 시스템의 중요한 구성요소 서비스로서 데이터베이스는 20자 미만의 비밀번호를 사용하지 않는 것이 좋습니다. 예를 들어, 다음은 비밀번호를 "PObejCBeDzTRCncXwgBy"로 변경합니다.
[root@linuxprobe bin]# cd /usr/local/mysql [root@linuxprobe mysql]# cp -a support-files/mysql.server /etc/init.d/ [root@linuxprobe mysql]# chmod a+x /etc/init.d/mysql.server [root@linuxprobe mysql]# ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5
하지만 여전히 작동하지 않습니다. mysql 데이터베이스로 전환하고 사용자 양식의 비밀번호 값을 수정해야 합니다. 이는 MySQL 데이터베이스 버전 8.0부터 시작되는 새로운 보안 요구 사항이기도 합니다.
[root@linuxprobe mysql]# /etc/init.d/mysql.server start Starting MySQL.Logging to '/usr/local/mysql/data/linuxprobe.com.err'. . SUCCESS! [root@linuxprobe mysql]# mysql -u root -p Enter password: 输入初始化时给的原始密码 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.18 Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> alter user 'root'@'localhost' identified by 'PObejCBeDzTRCncXwgBy'; Query OK, 0 rows affected (0.01 sec) mysql>
php 소스 코드 패키지의 압축을 풀고 컴파일 및 설치mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
| …………省略部分输出信息………… |
+---------------------------+
33 rows in set (0.00 sec)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'PObejCBeDzTRCncXwgBy';
Query OK, 0 rows affected (0.01 sec)
// 创建一个数据库
create database linuxcool;
[root@linuxprobe mysql]# cd /lnmp [root@linuxprobe lnmp]# tar xvf php-7.3.5.tar.gz [root@linuxprobe lnmp]# cd php-7.3.5/ [root@linuxprobe php-7.3.5]# ./configure --prefix=/usr/local/php --enable-fpm --with-mysqli --with-curl --with-pdo_mysql --with-pdo_sqlite --enable-mysqlnd --enable-mbstring --with-gd [root@linuxprobe php-7.3.5]# make [root@linuxprobe php-7.3.5]# make install
php 서비스 시작 항목에서 재시작 후에도 적용됩니다
[root@linuxprobe php-7.3.5]# cp php.ini-development /usr/local/php/lib/php.ini [root@linuxprobe php-7.3.5]# cd /usr/local/php/etc/ [root@linuxprobe etc]# mv php-fpm.conf.default php-fpm.conf // 复制一个模板文件到php-fpm.d的目录中,用于后续控制网站的连接性能: [root@linuxprobe etc]# mv php-fpm.d/www.conf.default php-fpm.d/www.conf
일부 기능 비활성화
[root@linuxprobe etc]# cd /lnmp/php-7.3.5 [root@linuxprobe php-7.3.5]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm [root@linuxprobe php-7.3.5]# chmod 755 /etc/init.d/php-fpm
php-fpm 프로세스 시작
[root@linuxprobe php-7.3.5]# vim /usr/local/php/lib/php.ini 307 ; This directive allows you to disable certain functions for security reasons. 308 ; It receives a comma-delimited list of function names. 309 ; http://php.net/disable-functions 310 disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server
/usr/local/nginx/html에 index.php 파일을 생성하여 테스트
<?php phpinfo();
浏览器访问地址即可。
9、搭建一个 WordPress
把 Nginx 服务程序根目录的内容清空后,将 WordPress 解压后的网站文件复制进去:
[root@linuxprobe php-7.3.5]# cd .. [root@linuxprobe lnmp]# rm -f /usr/local/nginx/html/* [root@linuxprobe lnmp]# tar xzvf wordpress.tar.gz [root@linuxprobe lnmp]# mv wordpress/* /usr/local/nginx/html/
为了能够让网站文件被 Nginx 服务程序顺利读取,应设置目录所有权的身份及可读写的权限:
[root@linuxprobe lnmp]# chown -Rf nginx:nginx /usr/local/nginx/html [root@linuxprobe lnmp]# chmod -Rf 777 /usr/local/nginx/html
输入虚拟机 IP 地址访问 WordPress 网站的首页面。
后面按说明一步步操作下去即可。
위 내용은 매우 상세합니다! 소스코드를 활용한 LNMP 환경 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!