Linux installation configuration nginx+php build and configure in docker
Article directory
-
- Linux installation configuration nginx+php build and configure in docker
-
- 1.nginx source code package compilation environment and installation of corresponding dependencies
- 2.Install nginx
- 3. Start nginx service
- 4. Modify the nginx configuration file to create a new port page
- 5.Install php
- 6.Install docker
- 7. Pull the nginx image and mounting configuration on docker
- 8. Configure php service in docker environment
1.nginx source code package compilation environment and installation of corresponding dependencies
1.1 Install the compilation environment
#安装编译环境
[root@localhost /]# yum install -y gcc gcc-c++
1.2 Install the pcre library, zlib library and openssl library
-
pcre (Perl Compatible Regular Expressions) is a Perl library, a regular expression function library written in C language, and a lightweight function library. The http module of nginx uses pcre to parse regular expressions, so you need to install the pcre library on Linux
-
zlib is a set of general decompression open source libraries that provides in-memory compression and decompression functions and can detect the integrity of decompressed data. nginx uses zlib to gzip the contents of the http package, so the zlib library needs to be installed on Linux.
-
openssl, or open secure sockets layer, is an open source secure sockets layer cryptographic library. Including commonly used password encryption and decryption algorithms, commonly used key algorithms, certificate management and SSL protocols. nginx not only supports the http protocol, but also supports https (that is, transmitting http over the ssl protocol), so you need to install the openssl library on Linux.
#安装pcre库
[root@localhost /]# yum install -y pcre pcre-devel
#安装zlib库
[root@localhost /]# yum install -y zlib zlib-devel
#安装openssl库
[root@localhost /]# yum install -y openssl-devel
2.Install nginx
2.1 Obtain the source code package from the nginx official website and download it
[root@localhost /]# mkdir nginxfile
[root@localhost /]# cd nginxfile/
#下载nginx源码包
[root@localhost nginxfile]# wget https://nginx.org/download/nginx-1.24.0.tar.gz
2.2 Decompress and compile
#解压源码包
[root@localhost nginxfile]# tar -zxvf nginx-1.24.0.tar.gz
#编译配置
[root@localhost nginxfile]# cd nginx-1.24.0/
[root@localhost nginx-1.24.0]# ./configure --with-http_ssl_module
[root@localhost nginx-1.24.0]# ./configure --with-stream
[root@localhost nginx-1.24.0]# ./configure
#执行安装
[root@localhost nginx-1.24.0]# make && make install
3. Start nginx service
3.1 Run nginx
Enter the directory /usr/local/sbin and execute the ./nginx command
[root@localhost nginx-1.24.0]# cd /usr/local/nginx/sbin/
[root@localhost sbin]# ls
nginx
#执行nginx
[root@localhost sbin]# ./nginx
#查看nginx的进程开启情况
[root@localhost sbin]# ps -aux | grep nginx
root 72876 0.0 0.0 34444 384 ? Ss 21:27 0:00 nginx: master process ./nginx
nobody 72877 0.0 0.2 66624 3932 ? S 21:27 0:00 nginx: worker process
root 72887 0.0 0.0 12136 1120 pts/2 R+ 21:28 0:00 grep --color=auto nginx
3.2 Turn off the firewall
Turn off the firewall to prevent local host access from being blocked
[root@localhost sbin]# systemctl stop firewalld.service
[root@localhost sbin]# systemctl status firewalld.service
3.3 Use a local browser to serve the virtual machine address
The welcome to nginx page appears, indicating that the nginx installation is complete.
4. Modify the nginx configuration file to create a new port page
cd to the path /usr/local/nginx/html and create a new file with the suffix .html
[root@localhost html]# touch web.html
#在文件中编写新的网页
[root@localhost html]# vim web.html
<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
<style>
html {
color-scheme: light dark; }
body {
width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Hello world</h1>
</body>
</html>
cd to the directory /usr/local/nginx/conf, modify the configuration file, and add the following configuration
[root@localhost conf]# vim nginx.conf
server {
listen 8080; #浏览器访问虚拟机的8080端口时显示该页面
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index web.html index.htm; #访问8080端口时定位到web.html文件
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
#停止nginx服务
[root@localhost sbin]# cd /usr/local/nginx/sbin/
[root@localhost sbin]# ./nginx -s stop
#重新启动nginx服务
[root@localhost sbin]# ./nginx
Use a local browser to access port 8080 to view the new page
5.Install php
5.1 Use yum to install php-fpm
#因为源码安装的方式会需要搭载很多的依赖包,安装编译过程也比较的繁琐,所以这里采用yum源安装途径,yum仓库安装的方法比源码包安装更加的简洁快速
[root@localhost /]# yum -y install php-fpm
#启动php-fpm服务
[root@localhost /]# systemctl start php-fpm
[root@localhost /]# systemctl status php-fpm
● php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; disabled; vendor preset:> Active: active (running) since Tue 2023-08-08 14:29:59 CST; 22s ago
5.2 Modify the php configuration file
#定位到php-fpm的文件下
[root@localhost /]# cd /etc/php-fpm.d/
#修改www.conf文件内容
[root@localhost php-fpm.d]# vim www.conf
Comment out the listen = /run/php-fpm/www.sock section in the www.conf file and add listen = 127.0.0.1:9000
5.3 Modify nginx configuration file
#定位到nginx/conf文件下
[root@localhost nginx]# cd /usr/local/nginx/conf/
#修改nginx.conf文件内容
[root@localhost conf]# vim nginx.conf
Uncomment the server
missing location ~ \.php$
content
Change the content after the uncommented location ~ \.php$
content tofastcgi_param SCRIPT_FILENAME
/scripts$fastcgi_script_name
$document_root$fastcgi_script_name
Add the file name after server
the first paragraph location /
of content (used to locate the php page file that will be created later)index
web.php
5.4 Create php page files and view tests
#定位到nginx/html文件下
[root@localhost nginx]# cd /usr/local/nginx/html/
#创建web.php页面文件
[root@localhost html]# vim web.php
<?php
phpinfo();
?>
After all files are configured, you need to restart the php-fpm service and nginx
#重启php-fpm服务
[root@localhost html]# systemctl restart php-fpm
[root@localhost html]# systemctl status php-fpm
● php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; disabled; vendor preset:> Active: active (running) since Tue 2023-08-08 15:02:04 CST; 7s ago
Main PID: 76438 (php-fpm)
#重启nginx
#定位到nginx/sbin文件路径下
[root@localhost html]# cd /usr/local/nginx/sbin/
#停止nginx
[root@localhost sbin]# ./nginx -s stop
#重新启动nginx
[root@localhost sbin]# ./nginx
#查看开启情况
[root@localhost sbin]# ps -aux | grep nginx
root 76473 0.0 0.0 34444 440 ? Ss 15:03 0:00 nginx: master process ./nginx
nobody 76474 0.0 0.2 66564 4172 ? S 15:03 0:00 nginx: worker process
root 76503 0.0 0.0 12136 1192 pts/1 R+ 15:04 0:00 grep --color=auto nginx
Access the web.php page in your local browser
Note: If the access is unsuccessful, you can check whether the firewall is turned off.
6.Install docker
6.1 Check the operating system release version and clear the old installed docker version
Docker requires centos kernel version to be higher than 3.10
[root@localhost /]# uname -r
4.18.0-348.el8.x86_64
#卸载旧的docker版本
[root@localhost /]# yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
6.2 Configuration before installing docker
#安装yum-utils
[root@localhost /]# yum install -y yum-utils
#添加阿里云仓库
[root@localhost /]# yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装makecache
[root@localhost /]# yum makecache
6.3 Installing and starting docker
[root@localhost /]# yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Usually an error is reported
Solution:
#运行以下内容
[root@localhost /]# yum erase podman buildah
#重新进行安装
[root@localhost /]# yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Start docker
[root@localhost /]# systemctl start docker
[root@localhost /]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset> Active: active (running) since Wed 2023-08-09 00:51:52 CST; 9s ago
Run hello-world to test
[root@localhost /]# docker run hello-world
7. Pull the nginx image and mounting configuration on docker
7.1 Pull nginx image
[root@localhost /]# docker pull nginx
#查看本地镜像
[root@localhost /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 89da1fb6dcb9 11 days ago 187MB
hello-world latest 9c7a54a9a43c 3 months ago 13.3kB
7.2 Create an nginx service and mount the local nginx configuration file
#创建运行一个nginx容器同时挂载本地文件
[root@localhost ~]# docker run --name nginx-test -p 9090:80 -d -v /usr/local/nginx/conf:/usr/share/nginx/conf -v /usr/local/nginx/html:/usr/share/nginx/html -v /etc/nginx/conf.d:/usr/share/nginx/conf.d nginx
38e38f4ea4534594b8b8cdcebee6bee843debbf8a18c82904ea5ac7f63efc283
[root@localhost conf]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
38e38f4ea453 nginx "/docker-entrypoint.…" 4 minutes ago Up 4 minutes 0.0.0.0:9090->80/tcp, :::9090->80/tcp nginx-test
7.3 Check the mapping of the corresponding 9090 port
8. Configure php service in docker environment
8.1 Pull the php-fpm image
[root@localhost /]# docker pull php:7.2-fpm
#查看本地镜像
[root@localhost /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 89da1fb6dcb9 11 days ago 187MB
hello-world latest 9c7a54a9a43c 3 months ago 13.3kB
php 7.2-fpm 28f52b60203d 2 years ago 398MB
8.2 Create container
#创建php文件挂载目录
[root@localhost /]# mkdir -p /docker/nginx/www/myphp
#创建容器
[root@localhost /]# docker run --name myphp -v /docker/nginx/www/myphp:/www/myphp -d php:7.2-fpm
dcfdfe9436d080c87d66305104df09a13e4335f6c3532fcd461982b22bf8c090
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dcfdfe9436d0 php:7.2-fpm "docker-php-entrypoi…" 37 seconds ago Up 36 seconds 9000/tcp myphp
8.3 Create the conf.d directory and configure the .conf file
[root@localhost /]# mkdir -p /docker/nginx/conf/conf.d
[root@localhost conf.d]# vim myphp.conf
Write the following content in the configuration file
8.4 Create nginx container
#创建一个nginx容器
[root@localhost conf.d]# docker run --name nginx1 -p 8088:80 -d \
> -v /docker/nginx/www:/usr/share/nginx/html \
> -v /docker/nginx/conf/conf.d:/etc/nginx/conf.d \
> --link myphp:php nginx
f761985089f1ed5abd61625ac84b90298a7f53f9c1c2013533afce05df135cc4
[root@localhost conf.d]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f761985089f1 nginx "/docker-entrypoint.…" 5 minutes ago Up 5 minutes 0.0.0.0:8088->80/tcp, :::8088->80/tcp nginx1
dcfdfe9436d0 php:7.2-fpm "docker-php-entrypoi…" 13 minutes ago Up 13 minutes 9000/tcp myphp
8.5 Testing
/docker/nginx/www/myphp/
Create a .php file under the path
[root@localhost conf.d]# cd /docker/nginx/www/myphp/
[root@localhost myphp]# vim index.php
<?php
phpinfo();
?>
Use the local browser to test port 8088 to access the PHP home page.