Easyswoole学习笔记
发布时间:2021-10-13, 19:58:31 分类:PHP | 编辑 off 网址 | 辅助
正文 5373字数 504,220阅读
官方文档
docker安装easyswoole
1. 拉取swoole镜像
docker pull easyswoole/easyswoole3
Run code
Cut to clipboard
2. 启动docker容器
docker run -ti -p 9501:9501 easyswoole/easyswoole3
-ti 启动容器后直接进入容器终端
-p 容器端口映射到外部端口
Run code
Cut to clipboard
此时发现容器根目录中存在easyswoole项目目录,为了方便开发,需要做目录映射,
由于直接映射会覆盖掉容器中对应目录的内容,需要在宿主机安装easyswoole再进行映射,
因此这里先将容器中项目目录拷贝出来,再重新创建容器并映射目录
3. 拷贝文件目录到宿主机中
docker cp {dockerId}:/easyswoole /data/www/
Run code
Cut to clipboard
注:/data/www/ 后面不能有easyswoole文件夹,否则会重复easyswoole两个目录
4. 关闭并删除容器
docker stop {dockerId}
docker rm {dockerId}
Run code
Cut to clipboard
5. 启动容器并映射目录
docker run -ti -p 9501:9501 -v /data/www/easyswole:/easyswoole easyswoole/easyswoole3
Run code
Cut to clipboard
6. 启动服务
php easyswoole start
Run code
Cut to clipboard
可以追加 -d 参数进行守护模式启动
7. 访问页面
浏览器访问宿主机ip的9501端口,即可看到欢迎页面
注:开启目录映射后,在宿主机和容器中操作映射文件效果是一样的,因此开发过程中可以在容器使用composer引入依赖
带有Nginx 1.6.2的CentOS 6.6-突然无法重新启动
Nginx-Nginx:[emerg] open()“ /usr/share / nginx / on”失败(13:权限被拒绝)
确保您以超级用户身份运行.
sudo nginx -t
Run code
Cut to clipboard
修改运行中的docker容器的端口映射和挂载目录
修改容器配置文件,重启docker服务
容器的配置文件路径:
/var/lib/docker/containers/[hash_of_the_container]/hostconfig.json
Run code
Cut to clipboard
其中的hashofthecontainer是docker镜像的hash值,可以通过docker ps或者docker inspect containername查看。(CONTAINER ID就可以看出来)
cat /var/lib/docker/containers/f8511e56585fdd68d4bb5ad57250d829bac52626d722305a43dec1e5cf18406c/hostconfig.json
{"Binds":["/srv/gitlab/logs:/var/log/gitlab","/srv/gitlab/data:/var/opt/gitlab","/srv/gitlab/config:/etc/gitlab"],"Contai....
Run code
Cut to clipboard
然后重启docker服务,再启动容器服务
systemctl restart docker
Run code
Cut to clipboard
Linux系统占用CPU100%的进程
用top命令查看占用CPU高的进程
使用
docker stats
Run code
Cut to clipboard
vscode-remote-ssh 远程连接后 rg 进程占用 CPU
VSCode 的 Remote Development 功能十分好用
但在连接阿里云 ECS 时偶会遇到断连和命令行卡顿问题
经过排查发现是远程开发插件的 rg 进程长时间高占用 CPU 导致
使用 VSCode 的 Remote SSH 连接 ECS 云主机,观察 top 命令面板,可发现 rg 进程长时间大量占用 CPU
此问题在所连接到的工作区含有大量 symlinks 时会出现
解决方案为:打开设置,搜索
search.followSymlinks
Run code
Cut to clipboard
nginx: [emerg] no events section in configuration
解决方案1:
加如下的配置:
events {
worker_connections 1024; ## Default: 1024
}
Run code
Cut to clipboard
不加没有啥影响,不加nginx就用默认的1024
nginx报错nginx: [error] open() “/run/nginx.pid” failed (2: No such file or directory)
CentOS 7.5下启动Nginx出现如下错误:
nginx: [error] open() "/run/nginx.pid" failed (2: No such file or directory)
解决方法:找到你的nginx.conf的文件夹目录,然后运行类似如下命令
nginx -c etc/nginx/nginx.conf
Run code
Cut to clipboard
再运行
nginx -s reload
Run code
Cut to clipboard
案例2:
如果启动Nginx出现如下错误:
[linuxidc@localhost www.linuxidc.com]$ nginx -s reload
nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)
2018/11/03 10:26:00 [warn] 21354#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:5
2018/11/03 10:26:00 [notice] 21354#0: signal process started
2018/11/03 10:26:00 [alert] 21354#0: kill(21052, 1) failed (1: Operation not permitted)
原因:当前用户对该位置没有写入权限,输入su和密码进入root模式后,重新启动服务器就好了,原因是因为没有权限。
Run code
Cut to clipboard
注:以非root权限启动时,会出现 nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied) 错误。那就以root权限启动就好。
nginx则
确保您以超级用户身份运行.
sudo nginx -t
Run code
Cut to clipboard
使用nginx代理easyswoole http
docker 则使用阿里云内网ip
server {
root /data/wwwroot/;
server_name local.easyswoole.com;
location / {
proxy_http_version 1.1;
proxy_set_header Connection "keep-alive";
proxy_set_header X-Real-IP $remote_addr;
if (!-e $request_filename) {
proxy_pass http://127.0.0.1:9501;
}
if (!-f $request_filename) {
proxy_pass http://127.0.0.1:9501;
}
}
}
Run code
Cut to clipboard
使用easyswoole进行开发web网站
easyswoole实现开机自启
命令脚本
首先我们新建3个.sh文件,分别对应 启动,重启,停止 3个命令:
启动:
#!/usr/bin/env bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH;
cd /Host/app-api/;## 这里cd进自己的项目目录
php easyswoole server start -d
Run code
Cut to clipboard
重启:
#!/usr/bin/env bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH;
cd /Host/app-api/;
git fetch --all && git reset --hard origin/master && git pull ## 这里额外增加了强制拉git代码的命令,可以去掉
php easyswoole server stop && php easyswoole server start -d ## 这里是先停止再启动,可以改成reload
Run code
Cut to clipboard
停止:
#!/usr/bin/env bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH;
cd /Host/app-api/;
php easyswoole server stop
Run code
Cut to clipboard
服务脚本
新建easyswoole.service文件:
[Unit]
Description=api server
After=network.target
[Service]
ExecStart=/usr/bin/bash /start.sh ## 绝对路径
ExecStop=/usr/bin/bash /stop.sh ## 绝对路径
ExecReload=/usr/bin/bash /reload.sh ## 绝对路径
Type=simple
User=root
Group=root
RuntimeDirectory=/work/ ## 自己的项目目录
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
Run code
Cut to clipboard
服务脚本移动到
/usr/lib/systemd/system
Run code
Cut to clipboard
cp easywoole.service /usr/lib/systemd/system
Run code
Cut to clipboard
服务管理
启动服务:
systemctl start easyswoole
Run code
Cut to clipboard
停止服务:
systemctl stop easyswoole
Run code
Cut to clipboard
重启服务
systemctl reload easyswoole
Run code
Cut to clipboard
加入到开机自启:
systemctl enable easyswoole
Run code
Cut to clipboard
入门教程
(支付宝)给作者钱财以资鼓励 (微信)→
有过 1 条评论 »
docker run --name docker_nginx -d -p 80:80 \ -v /home/test/nginx/log:/var/log/nginx \ -v /home/test/nginx/conf:/etc/nginx/conf.d \ -v /home/test/nginx/nginx.conf:/etc/nginx/nginx.conf \ -v /home/test/nginx/html:/usr/share/nginx/html nginx ### 第一个-v:挂载日志目录 第二个-v:挂载配置目录 第三个-v:挂载主配置文件 第四个-v:挂载项目目录
docker container update --restart=always 容器名字
首先主机中执行docker exec -it <容器名 or id> /bin/bash进入容器的命令行
#主机中 #如果之前启用了gd,需要先在php.ini文件中注释掉extension=gd.so并重启容器 docker exec -it <容器ID或容器名称> /bin/bash #进入php容器
#容器中 #echo "deb http://mirrors.163.com/debian/ stretch main contrib non-free\ndeb http://mirrors.163.com/debian/ stretch-updates main contrib non-free\ndeb http://mirrors.163.com/debian/ stretch-backports main contrib non-free" > /etc/apt/sources.list #软件源修改为网易镜像站源 apt update #更新软件源 apt install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev #安装各种库 docker-php-source extract #解压源码 cd /usr/src/php/ext/gd #gd源码文件夹 docker-php-ext-configure gd --with-webp-dir=/usr/include/webp --with-jpeg-dir=/usr/include --with-png-dir=/usr/include --with-freetype-dir=/usr/include/freetype2 #准备编译 docker-php-ext-install gd #编译安装 make & make install #安装编译 php -m | grep gd #重启容器
在php.ini配置文件中直接加入extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/gd.so就行了
extension=/usr/local/lib/php/extensions/no-debug-non-zts-20151012/gd.so
使用docker-compose,启动的容器默认是用的root权限,但是docker中的root只是相当于普通用户
所以需要给挂载的目录或者文件开启权限,代码如下:
#开启目录权限 chmod -R a+rwx /home/user/ #开启docker挂载权限 chmod a+rw /var/run/docker.sock
nginx好像没有什么应用会对web目录定入东西,
如果是nignx的缓存目录,可以把目录用户权限改成与nginx.conf配置中的user一样
如我的 nignx.conf 中
user www;
把缓存目录用户权限修改为 www
chown www fastcgi_cache