天天看点

CentOS8.2中的Podman使用初探-以搭建LNMP-seafile-onlyoffice为情景

CentOS8已经发布第3版了,之前刚出来,也试着用了一下,发现对于老硬件的支持性不好,而我的测试机正好在不支持的范围内,也就没有折腾。

1.测试机的lspci信息:

05:00.0 Network controller: Qualcomm Atheros AR9285 Wireless Network Adapter (PCI-Express) (rev 01)

09:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8040 PCI-E Fast Ethernet Controller

这是我的三星N148上网本的网卡信息,很老的机子了,10年前的。

通过U盘进行最小化安装,在图形界面下,只能看到无线网卡,尽管安装时已经配置了无线网络的密码等,但是安装后WiFi无法自动启动,通过nmcli 发现“plugin missing”错误。搜索了一下,找到解决方法,也就是安装“NetworkManager-wifi”即可,不过还需要wpa_supplicant-2.7-1.el8.x86_64.rpm 才可以。

这里直接给出两者的下载地址

http://mirror.centos.org/centos/8/BaseOS/x86_64/os/Packages/NetworkManager-wifi-1.20.0-3.el8.x86_64.rpm

http://mirror.centos.org/centos/8/BaseOS/x86_64/os/Packages/wpa_supplicant-2.7-1.el8.x86_64.rpm 

2.podman命令

podman从网上的说明看,和docker差不多,大部分命令都可用,只有细微差别。直接用pull拉取镜像

podman pull nginx
podman pull mariadb
podman pull php:7.4-fpm
podman pull seafileltd/seafile
podman pull onlyoffice/Documentserver
           

注意! podman 可以在非root账号下运行容器,所以,什么身份进行操作也是比较重要的。 以普通用户和以root身份pull下来的images存储位置不同,并且, “podman image list"  只显示当前用户拉取的镜像。

拉取的镜像的存储位置, 可以通过”podman info"来获取相关信息。

3. 原本想着用 podman network create 命令来设置一个容器之间的虚拟局域网的,结果podman是1.4.2版本,网上搜索了一番,看到说是podman-1.6.0以上才增加了这个命令,偏偏当前还没有升级或者安装的方法,所以这个先搁置,直接单独构建容器好了。

 更新2020-7-6 20:01:28  新版的在centos8.2中,可以增加 --ip  10.88.0.XXX  参数,为容器指定一个固定的ip了

podman run -itd --name mysql -h mysql --privileged=true -p 3306:3306 --ip 10.88.0.4 -v /home/sql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456789 mariadb
podman run -itd --name mynginx -h nginx --privileged=true -p 80:80 --ip 10.88.0.3 -v /home/html:/usr/share/nginx/html nginx
podman run -itd --name myphp -h php --privileged=true -p 9000:9000 --ip 10.88.0.6 -v /home/html:/usr/share/nginx/html php:7.4-fpm
           

使用 ~# podman inspect contaimer_name_ID | grep IPAddress\":             用来显示各个容器的内部ip

CentOS8.2中的Podman使用初探-以搭建LNMP-seafile-onlyoffice为情景

4. 修改nginx的配置文件

在podman的命令中,不知道是不是我操作不对? 还是需要加上什么参数, 总之,从容器向本地cp,只能cp文件夹,向容器内CP也是一样,和之前docker命令有所不同。

4.1 cp 原本的配置文件

podman cp mynginx:/etc/nginx/conf.d conf.d
vi conf.d/default.conf
           

4.2 对default.conf文档进行修改

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.php index.html index.htm;  #增加了一个index.php
    }

    #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   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
    #    root           html;
        fastcgi_pass   10.88.0.6:9000;   #这里是myphp 的ip
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
    #上面这一行也比较关键,这个路径是php容器内的路径。如果上一步构建php容器使用的是 /var/www/html/ 则用就是 /var/www/html

        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}
           

4.3 将修改好的文档cp进容器

podman cp /home/conf.d mynginx:/etc/nginx/
           

4.4 新建 info.php文件

vi /home/html/info.php
           

 文件内容:  <?php phpinfo();?>

4.5 重启 mysql myphp mynginx  

podman restart mysql myphp mynginx  
           

输入 http://host-ip/info.php 应当看到类似下面的画面

CentOS8.2中的Podman使用初探-以搭建LNMP-seafile-onlyoffice为情景

5. 安装phpMyAdmin 管理mysql

下载并解压phpMyAdmin到 /lnmp/nginx/html中,通过浏览器进入

http://host-ip/phpMyAdmin/

出现错误:

CentOS8.2中的Podman使用初探-以搭建LNMP-seafile-onlyoffice为情景

很明显,要在myphp容器中添加mysqli扩展

5.1.为php容器添加扩展组件

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容器
           

5.2 重启 myphp容器 

podman restart myphp
           

5.3.再次尝试   http://host-ip/phpMyAdmin/

CentOS8.2中的Podman使用初探-以搭建LNMP-seafile-onlyoffice为情景

5.4 登录时会出现错误提示,因为phpMyAdmin没有和mysql容器正确连接,需要对其配置文件进行修改

vi /home/html/phpMyAdmin\libraries\config.default.php
           

将下列配置项进行修改: $cfg['Servers'][$i]['host']='10.88.0.4';

刷新登录页面即可正确登录

6.编辑systemd配置文档,令各个容器能实现开机启动

由于podman不是守护进程,所以开机后该服务不会自动启动,所以,不能像docker那样,随着docker的启动,控制各个容器达成的服务也自动开启。 因此,要使用systemd服务来进行设定

6.1 生成配置文档

vi /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.target
           

注意:一定要使用编辑工具直接在  /etc/systemd/system/  目录下直接生成配置文件,如果在其他位置,例如 /home目录下,编辑后再cp 或者mv 进去,则下面的操作则不会起效。

6.2 启动容器服务,并设定容器服务开机启动

podman stop mynginx                    #为了更好的验证配置效果,先停止mynginx容器
systemctl start mynginx.service        #启动mynginx容器
systemctl status mynginx.service       #查看该容器服务是否正常。  
systemctl enable mynginx.service       #开机启动的设定命令
           

6.3 其他容器的配置内容:

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.target
           

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
           

 7. 运行myoffice 和myseafile 容器

podman run --privileged -itd --name myoffice -h onlyoffice -p 7788:80 onlyoffice/documentserver

podman run --privileged -itd --name myseafile -h seafile -e [email protected] -e SEAFILE_ADMIN_PASSWORD='123456789' -v /home/myseafile:/shared -p 10001:10001 -p 12001:12001 -p 8000:8000 -p 8082:8082 -p 8080:80 seafileltd/seafile
           

7.1 配置myseafile,使之支持onlyoffice

vi /home/myseafile/seafile/conf/seahub_settings.py

在最下方填写下面的内容,根据实际情况修改一下自己的myoffice的地址

# Enable Only Office
ENABLE_ONLYOFFICE = True
VERIFY_ONLYOFFICE_CERTIFICATE = False
ONLYOFFICE_APIJS_URL = 'http://192.168.2.33/web-apps/apps/api/documents/api.js'
ONLYOFFICE_FILE_EXTENSION = ('pdf','doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'odt', 'fodt', 'odp', 'fodp', 'ods', 'fods')
ONLYOFFICE_EDIT_FILE_EXTENSION = ('doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx')
           

这里面 192.168.2.33,是我在另外一台linux主机上用podman搭建的myoffice服务,主要原因是,按照docker 来进行onlyoffice向seafile集成的配置,始终无法通过。

192.168.2.33主机的配置命令:

podman run -itd --name myoffice -h onlyoffice --privileged=true -p 80:80 onlyoffice/documentserver
           

这是一个运行在KVM服务器上的centos8 虚拟机,专门用来运行onlyoffice

正常运行并测试成功的结果

CentOS8.2中的Podman使用初探-以搭建LNMP-seafile-onlyoffice为情景

 7.2 onlyoffice 和seafile 运行于同一台主机的配置

目前在我的这台N148上是没有配置成功。coreos系统,docker 下的配置成功的经验,请参考我之前的博客

纯docker搭建seafile私有云盘并集成onlyoffice服务-在CoreOS容器操作系统中

继续阅读