Docker容器内用户与宿主机用户不匹配问题
打包了一个lnmp包,里面包含了Nginx和php服务。设置nginx和php用户为www-data,同时将代码挂载到容器下。使用时,发现代码基本能正常运行,但生成缓存及图片上传时,都提示文件夹权限错误。因为使用Thinkphp,框架运行时会生成缓存文件,图片上传时也需要生成存放路径。
总结来说,容器中php能够读取代码,但是写的权限不够。这很奇怪。
而且在不同服务器,表现不同。有一台服务器能够运行,另外一个却出现这个问题。
进入容器中查看,php和nginx中配置运行用户都是www-data,理论上应该是没有问题的。搜索了相关问题,仔细研究,才发现了问题所在。
发现问题代码目录,所属用户www-data,同时设置php配置文件中用户使用www-data
正常时候能够运行,但是生成的runtime缓存文件,用户却不是www-data
缓存文件的所属用户为33,而用户组都是tape,为啥会是这样的。
产生原因产生上述问题的根源是,容器中用户和宿主机用户ID不同。
宿主机用户的ID查看宿主机用户www-data的id,可以看到所属用户及组
1id www-data
为uid=1000 ...
阿里云远程连接mysql失败
在阿里云的服务器上使用docker安装了MySQL, 然后远程访问总是不通。 查询了很久,排查思路如下:
检查mysql是否启动,服务是否正常
检查本机3306端口是否处于监听状态
检查阿里云控制台是否开启了安全限制, 限制3306和23端口
检查mysql用户能否在远程进行登录
mysql 的 bind-address 设置为 127.0.0.1
mysql是否启动这个比较简单, ps -ef | grep mysql 如果能看到对应的进程就是没有问题的
如果使用docker安装,需要docker ps 查看对应的状态
检查本机3306端口是否处于监听状态可以通过netstat -tlanp | grep 3306 来看mysql是否在监听。
主要如果使用docker安装,要查看docker 3306端口所对应开发是否是指定IP,还是0.0.0.0
如果本地端口监听状态 telnet 127.0.0.1 3306 看看是否成功, 如果成功。则说明本地服务没有问题。
远程 telnet 公网ip 3306 则 在远程 telnet 公网ip 3306 来判断一下是否成功, 如果成 ...
Docker安装mysql8及远程链接
Docker安装1docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.23
docker mysql官方文档
不过我们一般讲mysql的数据文件挂载在容器外,这样重启容器不会数据。
对应脚本docker_run.sh
123456789#!/bin/bashdocker stop mysql8docker rm mysql8docker run --name mysql8 \ -p 3306:3306 \ -v /docker/services/mysql8/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456\ -d mysql:8.0.23
也可以使用docker-compose安装
123456789101112131415version: '3.1'services: db: image: mysql:8.0.23 volumes: ...
使用podman代替docker管理容器
最近新装了Centos8,运行docker时,发现服务器有提示使用Podman。
后来了解才发现 CentOS8 使用 Podman 作为默认的容器管理工具了。相比docker,具有不少新的优势。
查询了相关文档,了解到,Podman(Pod Manager)是一个功能齐全的容器引擎,它是一个简单的无守护工具。 Podman提供了一个类似Docker-CLI的命令行,可以简化从其他容器引擎的转换,并允许管理pod,容器和图像。
Podman 的用法几乎和原来的 docker 一样,命令基本都一样。下面就看看 Podman 怎样来管理容器吧。
相比Docker优势 podman 相对与 docker 来说,最明显的变化是 podman 不需要启动一个后台服务,可以直接运行了,并且可以使用普通用户来运行。
123456789podman imagespodman run -d -p 8000:80 nginxpodman ps podman inspect nginx //获取容器元数据 podman inspect nginx | grep IPAddress //显示容器的内部ip
...
ElasticSearch应用
公司服务器最新经常提示ElasticSearch占用cpu太高,查询相关文档,加深了了解。
介绍全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。
它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。
Elastic 是 Lucene 的封装,提供了 REST API 的操作接口。
使用Elastic 需要 Java 8 环境。也可以使用docker安装。
1docker run -p 9200:9200 -d --name elasticsearch elasticsearch
其默认使用9200端口。打开另一个命令行窗口,请求该端口,会得到说明信息。
123456789101112131415$ curl localhost:9200{ "name" : "atntrTf", "cluster_name" : "elasticsearch", "cluster_ ...
微信小程序开发常见问题
最近在做公司小程序开发,以前只是做后台接口,现在开始接触到小程序前端。遇到一些问题。总结记录下。
请求无响应无网络请求,console提示 需要配置合法域名
需要在小程序官方中配置请求域名。 开发管理-开发设置-服务器域名-request合法域名
本地正常,线上异常小程序,在开发者工具中,显示正常,线上无数据展示。
可能原因为设置 开发者域名。
在小程序-开发-开发管理-开发设置中,有服务器域名设置。未设置域名,可能导致线上无法获取数据。
需要在服务器安全域名中配置相应的域名。这是微信的一种安全机制。
体验版扫码空白,重新进入正常真机测试没问题,发布为小程序体验版后,扫码进入白屏,重新进入小程序才会出现首页。
可能是体验版设置的首页路径和代码首页不一致
支付支付提示账号不匹配,需要在支付账户中申请关联,同时在小程序账号中,同意关联。
设置AppID微信开发者工具,可以在项目创建时,设置appID
也可以点击右上角“详情” 修改AppID
校验文件微信配置普通二维码时,需要配置微信校验文件。
请下载校验文件,并根据说明文档要求将文件上传至服务器指定目录
一般我们可以在Nginx上 ...
Linux大文件删除
通常,要在 Linux 终端删除一个文件,我们使用 rm 命令(删除文件)、shred 命令(安全删除文件)、wipe 命令(安全擦除文件)。
如果我们想要删除超大的文件/文件夹,比如大概 100-200GB,在删除文件(I/O 调度)所花费的时间以及 RAM 占用量方面,就没有那么简单。
为啥不用rmrm命令大量调用了lstat64和unlink,可以推测删除每个文件前都从文件系统中做过一次lstat操作。过程:正式删除工作分三阶段。
第一阶段,需要通过getdirentries64调用,分批读取目录(每次大约为4K),在内存中建立rm的文件列表;
第二阶段,lstat64确定所有文件的状态;
第三阶段,通过unlink执行实际删除。
这三个阶段都有比较多的系统调用和文件系统操作。
清空内容来释放空间通过重定向到 Null 来清空文件内容清空或者让一个文件成为空白的是最简单方式。
通过重定向到 Null 来清空文件内容1# > access.log
使用 ‘true’ 命令重定向来清空文件12# : > access.log # true ...
git仓库同步
最近进行了git仓库迁移,将git代码从自建的gitlab仓库,转移到阿里云的“云效”管理平台。
阿里云-云效
同步仓库12345git clone --mirror https://github.com/xxxxxxx/oldProject.gitgit remote set-url origin https://github.com/xxxxxxx/newProject.gitgit push --mirror
拉取所有分支Git 远程同步
git 拉取远程所有分支
12345git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; donegit fetch --all && git pull --allgit remote set-url origin git@192.168.1.237:algo/chicona_c ...
扫普通链接二维码打开小程序
小程序与线下对接时,需要用到普通二维码。
例如,管理后台设置了商品分享二维码,需要分享商品详情页面,希望用户打开后,直接跳转到小程序的商品详情页。
查看官方文档,刚好有这样的功能,能够通过普通的网页url跳转小程序。
首先、需要在小程序中官方平台中配置规则。
同时、在代码中接受特定的参数。
例如www.pangxieke.com/pages/goods/detail/detail?sku_id=123
这样的链接,在用户用微信扫码时,就可以跳转到小程序了。
普通二维码的区别此方法和调用小程序产生的分享二维码不同。
在小程序官方文档中,有获取二维码的接口。通过调用小程序接口,传入scene 字段,获取对应二维码。
scene 字段的值会作为 query 参数传递给小程序/小游戏。用户扫描该码进入小程序/小游戏后,开发者可以获取到二维码中的 scene 值,再做处理逻辑
但在线下,这种方式就过于繁琐,不太适合。
官方文档:
https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr- ...
微信小程序长按识别二维码
最新开发小程序,需要在小程序中添加二维码,引导用户关注个人微信号。验证发现有人实现了相应功能。现在将原文转载。
我们都知道公众号里的二维码可以长按识别,但是小程序限制比较严格,没有办法实现二维码的长按识别,一直以来我都是这样认为的,微信的官方规则里也是这么写的,直到今天上午,我无意间发现一个小程序里的二维码居然可以长按识别,于是就好奇的去研究了一番,结果还真的可以实现小程序里长按识别二维码。不知道是官方的漏洞还是程序的bug,但是既然这个功能可以实现,那当然要愉快的用上一用啦
小程序使用webview来显示公众号文章我们知道公众号文章里是自带长按识别二维码的功能的,所以我们要先在小程序里长按识别二维码,就必须在小程序里显示公众号文章,怎么显示公众号文章在小程序里呢,这里我们就要用到webview了。webview使用起来很简单,只需要如下即可。
1<web-view :src="src"></web-view>
src就是我们公号文章对应的链接,只需要这样写就完成了代码部分了,后面都是一些配置工作了。
公众号中设置关联小程序如果你只是随便找 ...