Debian11.5安装Podman并以多容器方式搭建LEMP环境
创始人
2024-02-15 01:51:36
0

起因:之前在CentOS系统时代,写过一篇采用docker搭建LEMP环境的博客。现在时过境迁,CentOS系统,CoreOS系统,Docker,Podman管理工具的地位和应用,都有了极大变化,而我也转到了更为自由的Debian系统环境中。

这里是为了测试Podman管理容器中的网络功能而进行的实验。在2020年,podman还无法指定容器的ip,现在看官方说明,似乎可以了,所以再次进行了多容器以ip方式关联应用的搭建试验。

1. Debian11.5中安装podman,配置国内镜像源

apt update
apt install podman -y# 配置国内镜像,这里以阿里云为例,
vim /etc/containers/registries.conf
# 在最下方加入以下内容:
unqualified-search-registries = ["docker.io"][[registry]]
prefix = "docker.io"
location = "xxxxxxx.mirror.aliyuncs.com"
# 注意,上方的xxxxx表示你自己的专属id,用支付宝登录阿里云自己获取

 

 更改国内镜像加速源后,就可以 podman search 了

 

 

2.使用podman 创建 lemp这一外部网络

podman network create lemp    # 创建
podman network ls             # 查看
podman network inspect lemp   # 查看lemp网络的详细信息

 

 

3. podman 拉取需要的软件镜像

podman search nginx
podman pull docker.io/library/nginx
podman search mariadb
podman pull docker.io/library/mariadb
podman pull docker.io/bitnami/php-fpm
podman images

 

 

 4.安装 nginx,mariadb,php-fpm,并指定ip地址和网络


podman run -itd --name mynginx -h nginx --privileged=true --network=lemp --ip 10.88.2.3 -p 80:80 -v /home/html:/usr/share/nginx/html docker.io/library/nginx
podman run -itd --name mysql -h mysql --privileged=true --network=lemp --ip 10.88.2.4 -p 3306:3306 -v /home/sql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456789 docker.io/library/mariadb
podman run -itd --name myphp -h php --privileged=true --network=lemp --ip 10.88.2.5 -p 9000:9000 -v /home/html:/usr/share/nginx/html docker.io/bitnami/php-fpm#下面查看一下开启的容器,查看指定的ip
podman ps
podman inspect mynginx | grep IPAddress\":
podman inspect mysql | grep IPAddress\":
podman inspect myphp | grep IPAddress\":

5.配置nginx和mariadb

5.1 配置nginx使用php-fpm

# 进入容器
podman exec -it mynginx /bin/bash

查看一下nginx的配置文件

root@nginx:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@nginx:/# cd /etc/nginx/
root@nginx:/etc/nginx# ls
conf.d  fastcgi_params  mime.types  modules  nginx.conf  scgi_params  uwsgi_params
root@nginx:/etc/nginx# nginx -v
nginx version: nginx/1.21.5
root@nginx:/etc/nginx# ls conf.d
default.conf
root@nginx:/etc/nginx#

将配置文件拉出来,修改后再覆盖回去

# 从容器中提取配置文件
podman cp mynginx:/etc/nginx/conf.d/default.conf ./# 修改完成后,将配置文件传回容器
podman cp ./default.conf mynginx:/etc/nginx/conf.d/default.conf # 重启容器
podman restart mynginx

所修改的内容:

vim ./default.conf
# 找到下列内容,去掉行前的注释符号,并配置ip行和路径行# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000#location ~ \.php$ {root           html;fastcgi_pass   10.88.2.5:9000;   # myhp 被指定的ipfastcgi_index  index.php;
#       fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
#                                    注意,下面的路径就是我们构建myphp容器时指定的,注意对比        fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;include        fastcgi_params;}

编辑 info.php,查看是否配置完成

cat /home/html/info.php

登录本机地址:  http://debianpodman-ip/info.php

5.2 下载 phpMyAdmin,登录mariadb测试

目前的测试中,出现了 “  mysqli_real_connect(): (HY000/2002): No such file or directory   ”的 错误提示,需要修改phpMyAdmin的配置文件来解决

具体方法为:

1.将$/html/phpmyadmin\libraries\config.default.php,修改条目为: $cfg['Servers'][$i]['host']='10.88.2.4';

2.将$/html/phpmyadmin\config.sample.inc.php重命名为config.inc.php,修改条目为:  $cfg['Servers'][$i]['host'] = '10.88.2.4';

然后重新登录。 

这里我们在构建mariadb数据库时,指定了root账户的密码为 123456789

登录成功后界面右侧会显示下图信息

 

5.3 为myphp容器增加插件

请参考我之前的文章:docker php 扩展安装合集_lggirls的博客-CSDN博客

$ podman exec -it myphp /bin/bash          # 进入myphp容器 
$ cd /usr/local/bin                        # 进入安装命令和组件所在目录 
$ ./docker-php-ext-install pdo_mysql       # 安装扩展pdo_mysql 
$ ./docker-php-ext-install mysqli          # 安装扩展 mysqli 
$ exit                                     # 退出myphp容器 
$ podman myphp restart                     # 重启容器,使扩展组件生效

配置php

进入 myphp容器,根据info.php页面显示的配置文件信息,探查一下真实的配置文件地址。

例如下图中所示地址,实际上只有最后一行是真实的,前两行都是软链接:

容器内的php.ini文件不含常用的配置内容,可以自己编辑一个 upload.ini文件,将其cp进 最后一行的实际位置中。 

cat ./upload.ini
# 我所增加的几个常见配置内容:
file_uploads = On
memory_limit = 128M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 600

放回到容器中 

podman cp ./upload.ini myphp:/opt/bitnami/php/etc/upload.ini 

6. 利用systemd,配置各个容器开机启动 

vi /etc/systemd/system/mynginx.service
vi /etc/systemd/system/mysql.service
vi /etc/systemd/system/myphp.service

每个配置文件的内容:

cat /etc/systemd/system/mynginx.service
# 内容如下:
[Unit]
Description= mynginx service
After=network.target
After=network-online.target
[Service]
Restart=always
ExecStart=/usr/bin/podman start -a mynginx
ExecStop=/usr/bin/podman stop -t 10 mynginx
[Install]
WantedBy=multi-user.targetcat /etc/systemd/system/mysql.service
# 内容如下:[Unit]
Description= mysql service
After=network.target
After=network-online.target
[Service]
Restart=always
ExecStart=/usr/bin/podman start -a mysql
ExecStop=/usr/bin/podman stop -t 10 mysql
[Install]
WantedBy=multi-user.targetcat /etc/systemd/system/myphp.service
# 内容如下:
[Unit]
Description= myphp service
After=network.target
After=network-online.target
[Service]
Restart=always
ExecStart=/usr/bin/podman start -a myphp
ExecStop=/usr/bin/podman stop -t 10 myphp
[Install]
WantedBy=multi-user.target

关闭容器,启用systemd管理,设置为开机启动

podman stop mynginx mysql myphp
systemctl start mynginx.service
systemctl enable mynginx.service
systemctl start mysql.service
systemctl enable mysql.service
systemctl start myphp.service
systemctl enable myphp.service

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...