Remmina 无法通过tls连接服务器

今天遇到一个很奇怪的问题,我在本地装了一台win10的虚拟机,可以直接通过快速链接栏链接rdp,但服务器不可以,报错,不知为何。甚至那台win10的虚拟机可以正常连接服务器。

快速链接栏

搜索了很多,最后在stackoverflow上看见一个回答[1]说是把高级里的negotiation改成TLS,试了试,并不行,于是抱着死马当活马医的态度,又试了试其它的选项,修改为RDP,很顺利的连上了。

就结果来讲,我推测是系统版本的原因,服务器是windows server,比较旧,虚拟机的RDP是官方的,肯定做了兼容,这样就解释通了

MySQL localhost禁止访问

遇到这个问题先确认是否创建了账户


use mysql;
select Host,User from user;

我遇到这个问题是在Centos+Mysql 5.6

我创建了一个example_user@%的账户,但使用mysql -u example_user -h 127.0.0.1 -p无法登录,返回信息显示 Access denied for user ‘example_user’@localhost ,我就一直觉得很奇怪,我用的host明明是127.0.0.1,为什么变成localhost了,而且%应该是匹配所有host才对。

后来经过多次测试,发现在这种环境下,127.0.0.1会被识别为localhost,而且%并不会匹配到localhost,因此,我们只需要创建localhost作为host的账户即可


grant all on example_db.* on "example_user"@"localhost" identified by "your password";
flush privileges;

ElasticSearch 权限不足

可能性一、真的权限不足

这种情况需要使用chown/chmod来对文件夹赋权限,具体要看异常提示中写的是哪一个文件夹。

可能性二、文件目录有空格

这换个文件夹名就行了,大家都会。

可能性三、java版本原因

对,我遇到的就是这个原因,因为我是比较激进的那一派,所以开发环境一般会是我部署的时候最新的版本,比如,JAVA 14。。。这里其实没有什么太完美的解决方式,临时的解决方案是把JAVA_HOME换到ElasticSearch安装目录下的jdk目录。

最后提供一种能解决所有问题的方法:万能的docker镜像


sudo docker run -itd --name es -p 9200:9200 -p 9300:9300 elasticsearch:版本号

如果需要挂载数据卷的话,请参阅官方文档

环境部署踩坑日记

一、lnmp

最近有个项目需要用lnmp环境,于是用一键脚本安装了一下

先是按照一般的nginx部署流程走了一下,结果报500[Laravel项目],很巧,大家都有这个问题,在lnmp官网就能找到,是由于lnmp默认配置禁止跨目录访问,而框架需要读取自动加载脚本[autoload.php],所以我们需要把这个功能停掉

1.编辑/home/wwwroot/default/.user.ini


sudo chattr -i .user.ini
sudo vi .user.ini


open_basedir=$document_root/:/tmp/:/proc/
#改为
#open_basedir=$document_root/:/tmp/:/proc/

2.编辑/usr/local/nginx/conf/fastcgi.conf


fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";
# 注释掉
#fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";

二、Nginx

其实这个是我的问题,直接复制原项目的配置文件,通过修改成不符合语法的配置可以看到测试不通过,也就是说这个文件本身是生效了的,但是通过虚拟域名并未访问到,一开始我以为因为”-“字符的原因server_name没有匹配到,后来发现是监听端口写错了。


listen [::]:80;
# 改为
listen 80;

使用vmware搭建开发环境

前言

  • VBox的操作差不多
  • windows下docker操作太麻烦,所以没有采用全docker的解决方案

准备材料

  • Vmware Workstation
  • CentOS 8 (为了方便,选择的Desktop)
  • VS Code + remote插件

布置环境

先把系统装上,相信大家都会,这步略过

为了方便, 编辑/etc/selinux/config 关闭selinux,重启。相应的,我们这台机器不连外网。

安装服务器及其他需要的软件


sudo yum install -y nginx php php-cli php-fpm php-mysqlnd php-xml php-mbstring php-gd

“安装”Docker(可替换)


# centos自带的
which podman
# /usr/bin/podman
sudo ln -sf /usr/bin/podman /usr/bin/docker

安装Docker(可替换)


#卸载自带的podman
sudo yum remove podman
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# nobest 解决依赖问题
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io --nobest

配置Docker、镜像


# mysql
sudo docker run -itd --name mysql \
  -v /opt/mysql:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=nothing \
  --restart always \
  -p 3306:3306 \
  mysql:5.7
# redis
sudo docker -itd --name redis \
  -p 6379:6379 \
  --restart always \
  redis
# 开机自启
sudo systemctl enable docker.service

配置固定IP

点击桌面右上角-有线连接-设置-IPV4

挂载共享文件夹

vmware-设置-选项-共享文件夹


sudo vmhgfs-fuse -o allow_other .host:/ /mnt/hgfs/

配置nginx


upstream php-fpm {
        # 这里是安装完php-fpm自带的,默认的一个接口
        # 其他distro可能是通过HTTP监听9600端口
        server unix:/run/php-fpm/www.sock;
}
server{
    listen 80;
    server_name wordpress.endercaster.lan;
    root /mnt/hgfs/workspace/wordpress;
    index index.php;
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    location ~ \.php$ {
        fastcgi_pass php-fpm;
        fastcgi_index index.php;
        include fastcgi.conf;
    }
}

配置php-fpm


sudo yum install php-pear php-devel make
sudo pecl channel-update pecl.php.net
sudo pecl install redis
# 创建/etc/php.d/40-redis.ini
# 40这个数字只要比json插件的大即可
# 输入 extension=redis
# 重启php-fpm
sudo systemctl restart php-fpm.service


[www]
;找到下面两个键,修改
php_value[session.save_handler] = redis
php_value[session.save_path]    = tcp://127.0.0.1:6379

配置HOSTS

宿主机,也就是windows这边配置C:\Windows\System32\drivers\etc\hosts,格式如下


你刚才填写的固定IP wordpress.endercaster.lan

结语

原则上来讲到这里就已经能正常访问了,特别说明一下,因为.lan不是正经域名后缀,Chrome的默认选项是搜索,所以需要在前面手动添加http://前缀,这个流程上遇到了什么问题可以给我留言。

PHP文件无读写权限

平台:CentOS + nginx + php-fpm

首先说明出现场景:权限修改为777依旧提示没有权限/文件未找到

解决方案:


setenforce 0
# [/your/path/here] 支持正则表达式写法,想要递归的话请使用正则表达式 [/your/path/here(/.*)?]
semanage fcontext -a -t httpd_sys_rw_content_t [/your/path/here]
# 或
semanage fcontext -m -t httpd_sys_rw_content_t [/your/path/here]
restorecon
setenforce 1

事情是这样的,客户的服务器是CentOS,我上传图片的时候需要先存本地然后上传到云,测试站测没问题,预发布站出问题了(因为是新系统,预发布站和生产站这个时候都部署好了),我当时就惊了。

第一件事想到的就是权限问题,于是检查一下:
drwxrwxrwx
?????????小老弟你怎么回事
总之之后通过修改代码的方式定位到了是在复制文件的时候没有成功从/tmp复制到项目文件夹下,这个时候我已经怀疑是有其他权限控制这里了(是的,当时并没想到selinux,平常没接触过这层),但是时间比较紧急,所以先去确认了一下生产站上传功能是否正常,结果是正常的,这时候我就很迷惑,因为预发布和测试站结果不同很合理,毕竟操作系统和服务器(apache/nginx)都不一样,但是预发布和线上站应该是一样的啊?(作为开发人员我的原则是不碰线上站的东西,所以没见过线上站的服务器,结果它还真【此处自主规制】不一样,太打脸了)
由于线上没有问题,这个问题就先告一段落了

本来想着反正部署本来就不是我的活,就算了,然后上班路上突然想起来一件事:结合vmware的共享文件夹功能是不是可以实现windows下开发,生产环境调试?于是我准备了一个laravel项目,在虚拟机上打开共享,考虑到在Centos上踩过坑,系统就选用的CentOS 8,安装nginx+php-fpm,配置好之后,很好,访问404,查看nginx日志显示 *16 stat() “/mnt/hgfs/workspace/laravel/public/favicon.ico” failed (13: Permission denied) ,这个没跑了,肯定是权限问题,chmod,chown一气呵成,刷新网页一看,很好,根本没有效果,于是把代码文件复制到虚拟机磁盘上,修改配置文件重启nginx,至少php解析没问题了,但是提示写日志失败,没有权限,那就给权限呗,于是从455到777试了一遍还是不行,不行咋整啊?上网搜吧,转了一圈,基本都是在说权限没给够,都777了肯定不是权限没给够了,然后我看到了一篇文件无法写入的文[1],提到了selinux,我记得这是一个独立的权限系统,那事情就简单了,百度:selinux 配置

先看到了怎么配置关闭,我信了你的邪,我去服务器上还能把selinux关了是咋的,走你,下一个。

之后是selinux配置说明[2],很长,看到那个fcontext的命令,我就知道怎么整了 ,但是得有理有据是不是,比如那个-t后面的参数是怎么来的?

再之后看到了以Apache举例配置selinux的[3],都是服务器软件,理论上是一样的,既然能看进程的selinux context,那就好说了


ps -eZ | grep php
# 可以看到context是httpd_t
# 既然可以查看selinux 开放的端口列表,应该可以查看上下文列表吧,于是我试了一下
semanage fcontext --list
# 的确,输出了好多东西,我来找一下看看
semanage fcontext --list | grep :httpd_
# 出现了很多context,命名很有规则,可以看到httpd_sys_rw_content_t应该就是我想要的了
# httpd所属 rw权限
# 如果还没有context的话,添加
semanage fcontext -a -t httpd_sys_rw_content_t '/opt/endercaster/laravel(/.*)?'
# 如果有context的话,修改
semanage fcontext -m -t httpd_sys_rw_content_t '/opt/endercaster/laravel(/.*)?'
# 然后让设置立即生效
restorecon /opt/endercaster/laravel
# 记得确认一下
ls -Z /opt/endercaster/laravel

等等,刚才的vmhgfs的问题是不是也是这个导致的?于是我采用了最简单暴力的方法:把selinux关掉(编辑/etc/selinux/config)事实证明真的是selinux的问题,但是vmware共享不能修改标签……

你以为还有下文?至此两个问题都已经解决了。是的,都解决了

部署不会用vmware共享文件夹,而不用共享文件夹的selinux设置已经解决了。

而使用vmware共享文件夹做环境测试只需要关闭selinux即可。

[1] linux下文件权限777了,file_put_contents()却不能写入,为什么?

[2]如何配置selinux

[3]SELinux中Apache的配置

编译安装ss-qt5

OS: Ubuntu Desktop 18.04

相关wiki:


sudo apt-get update
#环境
#如果下面编译报错请使用apt-cache search 来查找相似名称的包
sudo apt-get install \
    cmake\
    qtbase5-dev\
    libqrencode-dev\
    libzbar-dev\
    libappindicator1\
    git\
    libbotan-2-dev

OPT_BASE=~
OPT_BASE=${OPT_BASE}/opt
mkdir ${OPT_BASE}
cd ${OPT_BASE}
#编译libshadowsocksqt5
git clone https://github.com/shadowsocks/libQtShadowsocks
cd libQtShadowsocks
git checkout stable
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr
make -j4
sudo make install
#编译shadowsocks-qt5
cd ${OPT_BASE}
git clone https://github.com/shadowsocks/shadowsocks-qt5
cd shadowsocks-qt5
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr
make -j4
sudo make install

在wordpress头部或底部添加自定义代码

前两天要在自己的主页添加百度统计代码,百度谷歌了好多都告诉我要改主题代码,这是wordpress不推荐的,那,我是拒绝这么改的,因为我喜欢用最新代码,所以一定会过几天更新就失效了,我看到百度经验都是说要改主题的footer或者header文件,船到桥头自然直嘛,不试试怎么能找到更好的方法呢,就先点进去看了一眼,如图

footer.php-twentyfifteen 主题 by wordpress

在红色框起来的地方,怎么看都是WordPress自带的函数吧,那么顺藤摸瓜的找过去(这时我下了一份在本地,用vscode打开了),用全局搜索,找到wp_footer

general-template.php

看见没有,还有一个wp_head,这个我们顾名思义就知道它是用来初始化Header的啊,而且一般统计代码放在header里面,那么我们来看看这个函数的实现,do_action,这个不用想,去官网看文档应该有


//https://developer.wordpress.org/reference/functions/do_action/
function my_callback( $should_be_an_array ){
   var_dump($should_be_an_array);
}
add_action( 'my_action', 'my_callback' );
do_action( 'my_action', array(new stdclass()) );
do_action( 'my_action', array( 'array_item_thats_not_an_object') );

在这段代码中我们可以看见使用add_action向某一个key添加需要执行的函数,通过do_action来执行某一个key下所有的函数,那么我们要做的就是新增一个百度统计代码的函数,然后把它放在”wp_head”这个key中

那么放在哪个文件里比较好呢?我在之前看到过对WordPress进行diy的大佬们都在functions.php中进行修改,试着在里面搜了一下,有add_action的调用,说明在执行的时候可以调用到这个方法(因为现在的还是没改过的,官方要是犯这么低级的错误就很尴尬了),于是在文件末尾添加如下内容

百度统计

注意红色圈起来的部分,我也是头一次真切的感受到php是真的适合做网站(虽然和jsp里直接写html一个感觉),这么写就相当于把内容输出到相应的位置上,最后一句是把函数添加到wp_head这个函数里

最后,保存文件,刷新WordPress,查看统计代码安装是否成功(如果打开了supercache记得先删除缓存)

OBS-Studio 默认设置卡顿

最近可能是电脑老化了,直播和录制的过程中总是莫名的卡顿,日常编码器过载
首先因为是软件源中直接安装的,有时候软件源中安装的总会产生莫名其妙的错误,所以我先卸载手动编译安装了一次,依旧没有解决问题。
那么,还有两种可能性,一个是硬件性能跟不上,这个暂时没办法解决,另一个是设置问题,可能是一个突破口,试试也没有坏处,那就试试

obs 卡顿 原设置
调整前的输出编码设置

↑这里是原始设置,已经调的相当低了,占用还是会彪到70%+,而且用CPU的程序还会偶尔卡死,那应该是用“简单”输出模式解决不了的问题了,于是我调到了“高级”设置

obs 卡顿 调整值
调整后的输出编码设置

我们注意到编码器多了一个FFmpeg的选项,因为之前编译的时候有特别编译了FFmpeg,我觉得这是个很好的现象,先换过去看看,又进行了一次测试,CPU占用在12%-15%,这个果然是用核显的,至此,问题解决