• Debian11.5安装Podman并以多容器方式搭建LEMP环境


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

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

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

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

     

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

     

     

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

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

     

     

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

    1. podman search nginx
    2. podman pull docker.io/library/nginx
    3. podman search mariadb
    4. podman pull docker.io/library/mariadb
    5. podman pull docker.io/bitnami/php-fpm
    6. podman images

     

     

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

    1. 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
    2. 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
    3. 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
    4. #下面查看一下开启的容器,查看指定的ip
    5. podman ps
    6. podman inspect mynginx | grep IPAddress\":
    7. podman inspect mysql | grep IPAddress\":
    8. podman inspect myphp | grep IPAddress\":

    5.配置nginx和mariadb

    5.1 配置nginx使用php-fpm

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

    查看一下nginx的配置文件

    1. root@nginx:/# whereis nginx
    2. nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
    3. root@nginx:/# cd /etc/nginx/
    4. root@nginx:/etc/nginx# ls
    5. conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
    6. root@nginx:/etc/nginx# nginx -v
    7. nginx version: nginx/1.21.5
    8. root@nginx:/etc/nginx# ls conf.d
    9. default.conf
    10. root@nginx:/etc/nginx#

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

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

    所修改的内容:

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

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

    1. cat /home/html/info.php
    2. phpinfo();
    3. ?>

    登录本机地址:  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博客

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

    配置php

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

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

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

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

    放回到容器中 

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

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

    1. vi /etc/systemd/system/mynginx.service
    2. vi /etc/systemd/system/mysql.service
    3. vi /etc/systemd/system/myphp.service

    每个配置文件的内容:

    1. cat /etc/systemd/system/mynginx.service
    2. # 内容如下:
    3. [Unit]
    4. Description= mynginx service
    5. After=network.target
    6. After=network-online.target
    7. [Service]
    8. Restart=always
    9. ExecStart=/usr/bin/podman start -a mynginx
    10. ExecStop=/usr/bin/podman stop -t 10 mynginx
    11. [Install]
    12. WantedBy=multi-user.target
    13. cat /etc/systemd/system/mysql.service
    14. # 内容如下:
    15. [Unit]
    16. Description= mysql service
    17. After=network.target
    18. After=network-online.target
    19. [Service]
    20. Restart=always
    21. ExecStart=/usr/bin/podman start -a mysql
    22. ExecStop=/usr/bin/podman stop -t 10 mysql
    23. [Install]
    24. WantedBy=multi-user.target
    25. cat /etc/systemd/system/myphp.service
    26. # 内容如下:
    27. [Unit]
    28. Description= myphp service
    29. After=network.target
    30. After=network-online.target
    31. [Service]
    32. Restart=always
    33. ExecStart=/usr/bin/podman start -a myphp
    34. ExecStop=/usr/bin/podman stop -t 10 myphp
    35. [Install]
    36. WantedBy=multi-user.target

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

    1. podman stop mynginx mysql myphp
    2. systemctl start mynginx.service
    3. systemctl enable mynginx.service
    4. systemctl start mysql.service
    5. systemctl enable mysql.service
    6. systemctl start myphp.service
    7. systemctl enable myphp.service
  • 相关阅读:
    ORB-SLAM2 ---- Tracking::MonocularInitialization函数
    AcWing 772. 只出现一次的字符 JavaScript中将字符转换为十进制数
    Linux系统Shell脚本第三章:for、while循环及脚本实操
    win11下使用VMmare设置CentOS7里面的静态IP
    目标检测网络系列——YOLOV3
    设计模式---策略模式
    JavaWeb---会话技术
    12海里、24海里、200海里的意义及名称
    【C++】命名空间namespace,cin,cout,函数重载
    人工神经网络技术的优点,浅谈人工神经网络
  • 原文地址:https://blog.csdn.net/lggirls/article/details/128033613