ChatGPT国内镜像站,国内使用ChatGPT中文版本
欢迎体验:
支持
- 模拟浏览器登录访问原始chatgpt网站,ChatGPT Plus付费版本
- 支持最新的gpt-3.5-turbo 0301 API访问
- 支持你自己的chatgpt账号中的API key 调用访问
界面是React修改而来,比较简单,不需要登录,直接就能提问
ChatGPT国内镜像站,国内使用ChatGPT中文版本
欢迎体验:
支持
界面是React修改而来,比较简单,不需要登录,直接就能提问
1 | wget https://www.inet.no/dante/files/dante-1.4.3.tar.gz |
vi /etc/sockd.conf
1 | internal: 0.0.0.0 port=1080 |
127.0.0.1 替换成 x.x.x.x/8 即可。
配置说明: https://www.inet.no/dante/doc/1.4.x/config/server.html
直接以daemon模式运行1
sockd -D
使用内置的-V命令测试sockd.conf文件是否正确,若正确则无任何输出
1 | sockd -V |
测试能否正常使用
1 | curl --proxy 'socks5://127.0.0.1:1080' 'https://api.ipify.org/' |
可以使用 netstat -lntp
看启动状态1
tcp 0 0 0.0.0.0:1080 0.0.0.0:* LISTEN 16769/sockd
vi /etc/rc.local
1 | /usr/local/sbin/sockd -f /etc/sockd.conf & |
killall sockd
Google的API一般是下面这种使用方法,使用的是oauth2client
1 | from oauth2client.service_account import ServiceAccountCredentials |
众所周知的原因,在国内你这样使用,必须得用代理,使用requests包非常方便,但是如果是上面的代码,使用代理有点小麻烦
你需要在代码前面加上
1 | import socket |
比较麻烦。
可以用requests代替上面的操作,一般如下
1 | http = httplib2.Http(proxy_info=httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_SOCKS5, '127.0.0.1', 1080)) |
参考代码: https://github.com/googleapis/oauth2client/blob/master/oauth2client/transport.py
在 LNMP 安装目录下找到 lnmp.conf 这个文件,编辑这个文件,在 Nginx_Modules_Options 里加上 --with-http_realip_module
,修改的命令如下:
1 | Nginx_Modules_Options='--with-http_realip_module' |
保存后执行 ./upgrade.sh nginx 来升级下 NGINX 就可以了。升级需要输入新的 NGINX 版本号,如果不想改动版本,直接输入原来的版本号即可。
修改配置文件 /usr/local/nginx/conf/nginx.conf
创建文件 touch /usr/local/nginx/conf/cloudflare_ip.conf
然后,在 server {}
里面加上下面这一行:
1 | include cloudflare_ip.conf; |
在 /root 目录下创建下面文件:
1 | update_cloudflare_ip.sh |
1 | #!/bin/bash |
执行一次脚本:/bin/bash /root/update_cloudflare_ip.sh
保存之后,配置 crontab 每周更新一次 Cloudflare 的 IP 地址(crontab -e):
1 | 0 5 * * 1 /bin/bash /root/update_cloudflare_ip.sh |
还是修改 /usr/local/nginx/conf/nginx.conf
这个文件,在 http {}
中间加入下面几行:
1 | map $HTTP_CF_CONNECTING_IP $clientRealIp { |
注意: 如果include cloudflare_ip.conf;
放在 http {}
中,$remote_addr会替换为真实的ip地址,不需要上面的修改了。
然后在网站记录的日志定义使用main这个日志格式
1 | access_log /home/wwwlogs/abc.com.log main; |
最后重载下nginx
1 | /etc/init.d/nginx reload |
这时就全部搞定了。
开了 CDN 之后使用 iptables 是没法封禁真实 IP 地址的。
Wordpress 使用 Eelementor 插件时,编辑内容,会保存到wp_postmeta中,对于中文一些替换插件 Better Search Replace
等没有问题,但如果是中文,你会发现使用替换工具替换后,内容不变。
这主要是因为中文内容保存为json格式后,会编码为unicode格式,所以无法替换,可以使用下面方法替换。
1 | select count(*) from wp_postmeta where meta_value like '%\\\\u539f\\\\u59cb\\\\u5b57%\\\\u7b26'; |
SELECT语句中四个反斜杠(\)代表一个.
在mysql的like语法中,like后边的字符串除了会在语法解析时转义一次外,还会在正则匹配时进行第二次的转义。因此如果期望最终匹配到””,就要反转义两次,也就是由”\”到”\”再到””。
如果是普通的精确查询(=),则无需第二次的正则转义,和INSERT语句一样。
比如 原始字符
替换为 替换字符
1 | UPDATE wp_postmeta |
可以使用js的
escape
来把中文转为unicode编码
1 | UPDATE wp_options SET option_value = replace(option_value, 'http://www.yoursitename.com', 'http://localhost') WHERE option_name = 'home' OR option_name = 'siteurl'; |
在操作前,无论使用插件还是sql语句,都要先备份数据库
1 | sudo mysqldump -u root wordpress > wordpress.sql |
1 | sudo tar -cpvzf wordpress.tar.gz /home/wwwroot/wordpress/ |
上面的命令包含5个参数,分别为:
执行上述命令后,/home/wwwroot/wordpress/
文件夹下的所有文件都会被归档和压缩。
安装centos7时,有一个提示,是否加密磁盘,选择此选项后,每次启动系统都会要求你输入密码,这样可以保证磁盘如果没有密码,放到其它电脑上也无法使用。对数据会更加安全。
但每次手动输入密码还是比较麻烦,最好是把密钥放到U盘里,插上后就可以自动解锁,不需要输入人工输入密码。
我搜索了下,网上关于此的教程都无法完美解决,没有非常完善的文档,下面两个教程是最靠谱的,我也是根据这些教程,在虚拟机上测试成功后才找到具体的原因。
https://forums.centos.org/viewtopic.php?t=53452
https://community.spiceworks.com/how_to/168683-cenos-7-encrypt-my-data-and-use-usb-key-for-unlock
以下为完整的操作步骤:
使用fat格式即可,这样在windows电脑上也能使用
先通过lsblk blkid命令,查看系统上的硬盘情况。
1 | [root@localhost ~]# lsblk |
1 | [root@localhost ~]# blkid |
上面/dev/sda3
为加密的磁盘,/dev/sdb1
为U盘(FAT文件系统)。记下他们的uuid,分别为535d89c0-9b67-4138-a0f3-0879ef2a6cc6
和 A06A-C2D3
先挂载U盘,并创建相应的文件
1 | mount /dev/sdb1 /media |
测试下添加的密钥文件有没有成功:
1 | [root@localhost ~]# cryptsetup luksOpen -v --key-file /media/cryptboot/boot.key --test-passphrase /dev/sda3 |
出现上面命令就是成功了。
1 | cp /etc/default/grub /etc/default/grub.original |
即是在 /etc/default/grub
中GRUB_CMDLINE_LINUX这一行添加 rd.luks.key=cryptboot/boot.key:UUID=A06A-C2D3
下面是修改后的
1 | GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.luks.uuid=luks-535d89c0-9b67-4138-a0f3-0879ef2a6cc6 rd.luks.key=cryptboot/boot.key:UUID=A06A-C2D3 rd.lvm.lv=centos/swap rhgb quiet" |
### 修改下文件/etc/dracut.conf
1 | echo 'add_drivers+="vfat nls_cp437 nls_iso8859-1 ext4"' >> /etc/dracut.conf |
1 | grub2-mkconfig -o /boot/grub2/grub.cfg |
之前一直不成功的原因是,我的电脑 是uefi启动方式+GPT磁盘,所以应该使用 grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
。这点很重要。
之后重启电脑就可以了。
1 | lsof | grep deleted |
第2列是进程id,第4列是文件描述符
1 | ls -l /proc/进程id/fd/文件描述符 |
1 | cp /proc/进程id/fd/文件描述符 Newfilename |
使用上面的命令恢复文件后,发现mysql数据库只恢复了.ibd
文件,.frm
文件无法使用lsof恢复
使用其它的表结构,复制到数据库目录,或者重新创建一个表drop table tbl_name
。
1 | ALTER TABLE tbl_name DISCARD TABLESPACE; |
这个命令会删除相应的ibd文件。
从备份文件中复制ibd文件到数据库目录,然后执行下面的命令。
1 | ALTER TABLE tbl_name IMPORT TABLESPACE; |
lnmp centos下mysql迁移数据目录到新硬盘
电脑中已经挂载了一个1T的新硬盘,最初安装centos系统时原先的nfts硬盘 sdb
。
lsblk
1 | NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT |
fdisk -l
1 | Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes, 1953525168 sectors |
需要重新创建分区,把原先的分区重新分配
1 | # parted /dev/sdb |
parted之后的参数是设备名。mkpart命令的三个参数分别是分区名(随便起),开始地址,结束地址-1表示至结尾,前面留出的空间可能是用于存放分区信息,不留的时候会有警告。print查看分区结果
mkfs.ext4 /dev/sdb1
或
mkfs.xfs /dev/sdb1
mkdir /data
mount /dev/sdb1 /data
修改/etc/fstab文件,在末尾加上一行:
/dev/sdb1 /data xfs defaults 0 0
先关闭mysql
/etc/init.d/mariadb stop
创建文件夹
mkdir /data/mysql/
复制datadir
到新文件夹中
cp -a /usr/local/mariadb/var /data/mysql/
备份原数据目录
mv var var.bak
添加软链接
ln -s /data/mysql/var/ /usr/local/mariadb/
重启mysql即可
/etc/init.d/mariadb start
df -h
查看磁盘还有空间,但无法创建任何文件,提示磁盘空间已满(No space left on device
)。1
2
3
4
5
6
7
8
9[root@centos-fra ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 17M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/vda1 80G 73G 7.1G 92% /
tmpfs 379M 0 379M 0% /run/user/0
/dev/sda 100G 26G 69G 28% /mnt/volume_fra1_01
最终发现下面的解决办法。
用 df -i
查看下索引节点(inode),会发现已经用满(IUsed=100%)。
这会导致无法创建文件和目录,并且提示 No space left on device
。
1 | [root@centos-fra ~]# df -i |
cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。
linux里每个文件都有些元信息像创建时间,文件大小,文件名啊之类的,这些元信息就存在inode了。这样如果小文件过多的话,可能磁盘没满但inode空间已分配完,这时磁盘就跟满了一样无法写入.
挂载之前 使用下面命令增大inode数量,如果已经挂载,需要先卸载。
但执行下面的命令后,磁盘相当于重新格式化,之前的数据就消失了。
1 | mkfs.ext4 -N 20000000 /dev/path/to/volume |
还有一个解决办法:
用软连接将空闲分区/home/wwwroot/中的newcache目录连接到/mnt/volume_fra1_01/.cache,使用/home分区的inode来缓解/mnt分区inode不足的问题:
DigitalOcean浮动IP是可以分配给您的某个Droplet的可公开访问的静态IP地址.
由于工作需要,需要给VPS绑定一个新的IP,并且要求请求特定IP时,使用新IP的接口。
1 | # 查看下你的浮云IP是设置成功 |
得到网关地址为 10.13.0.1
在路由中添加新路由
1 | ip route add 10.0.1.3 via 10.13.0.1 dev eth0 |
这样访问10.0.1.3时,就会使用新ip的网关口请求了。