网易的云笔记新版出linux版本了
果然是良心企业。
七牛云的图片图床配置到腾讯云域名解析
官网的链接:
https://developer.qiniu.com/fusion/kb/1322/how-to-configure-cname-domain-name
一般按照上面链接创建就可以了。
这里有个值要注意的,主机记录
描述如下:
主机记录 填写加速域名对应的主机前缀 该参数唯一,请勿自定义
这里你的主机记录是你的二级域名的部分,
比如你的二级域名是 img.30daydo.com
那么这里你的主机记录就是 img
收起阅读 »
https://developer.qiniu.com/fusion/kb/1322/how-to-configure-cname-domain-name
一般按照上面链接创建就可以了。
这里有个值要注意的,主机记录
描述如下:
主机记录 填写加速域名对应的主机前缀 该参数唯一,请勿自定义
这里你的主机记录是你的二级域名的部分,
比如你的二级域名是 img.30daydo.com
那么这里你的主机记录就是 img
收起阅读 »
docker nginx+php部署的wordpress,安装插件不需要ftp账号
使用docker搭建的每一个组件,php,nginx,mysql,弄得wordpress站点。
配置好之后,如果需要安装第三方的应用,每次需要FTP账号,用于远程下载这个插件文件到wordpress的plugin目录下。
不过为了这个插件功能再开个ftp服务,还暴露了端口,有点鸡肋。
于是按照网上的教程倒腾,不过网上的教程都没有使用docker操作,按照他们的操作是没能把问题解决的。
主要是用户名不一样。
1. 进入nginx的容器中,注意是nginx,而不是php
docker exec -it xxxx /bin/bash
2. 修改nginx的 wordpress的根目录所有者权限
注意这里的用户名是 www-data , 而不是www
不要乱信网上的人说,要改为777, 除非你想把你的服务器送给别人做肉鸡。
然后刷新一下页面,就可以直接安装,而跳过那个ftp密码, 收起阅读 »
配置好之后,如果需要安装第三方的应用,每次需要FTP账号,用于远程下载这个插件文件到wordpress的plugin目录下。
不过为了这个插件功能再开个ftp服务,还暴露了端口,有点鸡肋。
于是按照网上的教程倒腾,不过网上的教程都没有使用docker操作,按照他们的操作是没能把问题解决的。
主要是用户名不一样。
1. 进入nginx的容器中,注意是nginx,而不是php
docker exec -it xxxx /bin/bash
2. 修改nginx的 wordpress的根目录所有者权限
注意这里的用户名是 www-data , 而不是www
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
不要乱信网上的人说,要改为777, 除非你想把你的服务器送给别人做肉鸡。
然后刷新一下页面,就可以直接安装,而跳过那个ftp密码, 收起阅读 »
1核2G的服务器 docker跑wordpress真够吃力
性能太烂,预览个主题要等几分钟,甚至无响应。。。。
现在的wordpress加的内容可真多
现在的wordpress加的内容可真多
python3 安装demjson 报错 use_2to3 is invalid
ooking in indexes: https://pypi.douban.com/simple
Collecting demjson==2.2.4
Downloading https://pypi.doubanio.com/pack ... ar.gz (131 kB)
|████████████████████████████████| 131 kB 985 kB/s
ERROR: Command errored out with exit status 1:
command: /root/miniconda3/envs/py37/bin/python -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-pj0ajcpl/demjson_86a1bab6643c4ed7a7b0c6bb6d3a43a2/setup.py'"'"'; __file__='"'"'/tmp/pip-install-pj0ajcpl/demjson_86a1bab6643c4ed7a7b0c6bb6d3a43a2/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-7ve4tu87
cwd: /tmp/pip-install-pj0ajcpl/demjson_86a1bab6643c4ed7a7b0c6bb6d3a43a2/
Complete output (3 lines):
/root/miniconda3/envs/py37/lib/python3.7/site-packages/setuptools/dist.py:760: UserWarning: Usage of dash-separated 'index-url' will not be supported in future versions. Please use the underscore name 'index_url' instead
% (opt, underscore_opt)
error in demjson setup command: use_2to3 is invalid.
记录一下解决办法:
setuptools 降级:
pip install --upgrade setuptools==57.5.0
然后再pip install demjson 即可
如果担心setuptools 修改到系统的其他库,可以创建一个虚拟环境。
然后在虚拟环境里面对setuptools 降级,再安装demjson
来个养眼图:
收起阅读 »
一些个人博客wordpress的内容需要用户扫码关注才可以阅读
这种体验差的一批。
是什么迷之自信让这些作者对自己写的内容如此敝帚自珍?
看到这样的站点,1s都不想停留,直接关闭了。
centos/ubuntu linux 下 python matplotlib 绘图中文标题乱码 解决
出现下图的错误:
测试代码:
每次换机器都遇到这个问题,所以记录下来,以免日后又在折腾
首先找到一个ttf格式的中文字体,windows系统的可以在C盘的system里面找找。
我用的是微软雅黑。msyh.ttf , 需要的可以到公众号里面取。 后台回复: msyh.ttf 即可
或者simhei.ttf
更新缓存
注意,如果你的系统没有上述命令,需要使用yum install mkfontscale mkfontdir c-cache安装
然后接下来这一步,很重要。
清理缓存,不然不会生效!!!!
matplotlib:
同时把这个msyh.ttf的文件复制到matplotlib库下的文件夹:
~python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/
下面
然后运行程序,搞定~
公众号:可转债量化分析
后台回复 : msyh.ttf 或者 simhei.ttf 即可获取字体文件。 收起阅读 »
测试代码:
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib import rcParams
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.sans-serif'] = ['simhei'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False
plt.title(r'宋体 Times New Roman')
plt.axis('off')
plt.savefig('usestix.png')
每次换机器都遇到这个问题,所以记录下来,以免日后又在折腾
首先找到一个ttf格式的中文字体,windows系统的可以在C盘的system里面找找。
我用的是微软雅黑。msyh.ttf , 需要的可以到公众号里面取。 后台回复: msyh.ttf 即可
或者simhei.ttf
cd /usr/share/fonts/
sudo mkdir chinese
sudo cp simhei.ttf /usr/share/fonts/chinese/
sudo chmod -R 755 /usr/share/fonts/chinese
更新缓存
mkfontscale
mkfontdir
fc-cache
注意,如果你的系统没有上述命令,需要使用yum install mkfontscale mkfontdir c-cache安装
然后接下来这一步,很重要。
清理缓存,不然不会生效!!!!
rm -rf ~/.cache/matplotlib
matplotlib:
同时把这个msyh.ttf的文件复制到matplotlib库下的文件夹:
~python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/
下面
然后运行程序,搞定~
公众号:可转债量化分析
后台回复 : msyh.ttf 或者 simhei.ttf 即可获取字体文件。 收起阅读 »
银河证券如何开通科创板及开通条件是什么
中国银河证券股份有限公司(以下简称“公司”)是经国务院批准,在收购原中国银河证券有限责任公司的证券经纪业务、投行业务及相关资产的基础上,由中国银河金融控股有限责任公司作为主发起人,联合北京清源德丰创业投资有限公司、重庆水务集团股份有限公司、中国通用技术(集团)控股有限责任公司、中国建材股份有限公司4家国内投资者,于2007年1月26日共同发起设立的全国性综合类证券公司
首先,科创板开通条件是什么?
重点来了: 开通条件主要检查是否满足以下两个硬性要求
1,资金要求
开通之前的20个交易日以上,证券账户及资金账户内的资产日平均不少于50万人民币
2,交易时间要求
该账户证券交易24个月(两年)以上
其次,若满足以上两个要求,即可开通银河证券科创板,步骤如下:
- 登录银河证券账户
- 点击“我的”
- 点击“业务办理“
- 选择点击科创板权限设置"
- 点击”开通科创板“
恰逢目前银河有万一免五的活动,需要开户的朋友,请扫码联系,备注:银河开户
收起阅读 »
哪个券商打涨停板VIP条件单交易通道速度快 ,支持独立交易单元,最适合打板
关于最近很多朋友提问“哪个券商打涨停板VIP条件单交易通道速度快 最适合打板,支持独立交易单元”
其实每个证券券商都有优缺点,一般来说,大的券商,交易软件,系统投资建设等技术或许较为成熟一些,
小的券商相对来说软件功能可能没那么丰富,但也不存在绝对慢的说法。
另外,如果是高净值,资金量比较丰厚,可以申请vip交易通道。
例如开通支持通达信VIP交易通道或者多种条件单交易,但相对做短线的投资手法,也需要选择一些券商可以保持交易通道的稳定性和速度
目前比较受欢迎运用量化交易策略技术,如Ptade和qmt,获取闪电技术下单的功能。
加上拥有一个低费率且有VIP通道交易的券商,那真的是锦上添花
需要开通低佣万一免五或开通量化交易的朋友,请扫码联系,备注:开户
收起阅读 »
其实每个证券券商都有优缺点,一般来说,大的券商,交易软件,系统投资建设等技术或许较为成熟一些,
小的券商相对来说软件功能可能没那么丰富,但也不存在绝对慢的说法。
另外,如果是高净值,资金量比较丰厚,可以申请vip交易通道。
例如开通支持通达信VIP交易通道或者多种条件单交易,但相对做短线的投资手法,也需要选择一些券商可以保持交易通道的稳定性和速度
目前比较受欢迎运用量化交易策略技术,如Ptade和qmt,获取闪电技术下单的功能。
加上拥有一个低费率且有VIP通道交易的券商,那真的是锦上添花
需要开通低佣万一免五或开通量化交易的朋友,请扫码联系,备注:开户
收起阅读 »
ubuntu安装微信PC版
使用的方案是docker-wechat:
使用一行命令就可以安装:
前提你已经安装了docker
上面的命令不能用sudo安装,
如果所docker需要sudo启动,可以设置一下用户:
如果遇到错误:
mkdir: 无法创建目录 “/home/user/.wine/drive_c/users/user/Application Data/Tencent”: 权限不够
需要把用户目录下的DoWechat 文件夹给一个777的权限。
sudo chmod +R 777 DoWechat
然后重新运行
curl -sL https://gitee.com/mirrors/doch ... at.sh | bash
就可以扫描登陆PC版微信了。
其底层用的就是Wine。 类似与ubuntu下的windows模拟框架。
收起阅读 »
使用一行命令就可以安装:
curl -sL https://gitee.com/mirrors/doch ... at.sh | bash
前提你已经安装了docker
上面的命令不能用sudo安装,
如果所docker需要sudo启动,可以设置一下用户:
sudo usermod -aG docker $USER
如果遇到错误:
mkdir: 无法创建目录 “/home/user/.wine/drive_c/users/user/Application Data/Tencent”: 权限不够
需要把用户目录下的DoWechat 文件夹给一个777的权限。
sudo chmod +R 777 DoWechat
然后重新运行
curl -sL https://gitee.com/mirrors/doch ... at.sh | bash
就可以扫描登陆PC版微信了。
其底层用的就是Wine。 类似与ubuntu下的windows模拟框架。
收起阅读 »
Docker sed: cannot rename /etc/sedyGSbui: Device or resource busy
挂载nginx配置文件时会出现这个问题。
比如挂载命令如下:
如果有文件存在,可以改为挂载其父母录
比如这里:
把它改成
即可解决这个问题。
收起阅读 »
比如挂载命令如下:
docker run -p 80:80 --name mynginx --privileged=true -v /data/nginx/html:/usr/share/nginx/html -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -v /data/nginx/logs:/var/log/nginx -d nginx:1.21
如果有文件存在,可以改为挂载其父母录
比如这里:
/data/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
把它改成
/data/nginx/conf.d:/etc/nginx/conf.d
即可解决这个问题。
收起阅读 »
cronsun 数据备份与恢复
这对于动辄几十几百个任务的朋友来说,备份与恢复很重要。
cronsun提供的csctl工具可以备份和恢复cronsun的任务数据。
备份数据:
恢复数据
把数据导入之后,还需要在新的机器上,web登录,把运行的节点逐个改为新节点。 这个有点不智能,不过,相比每一个都要手动更新全部内容,也很好很多,节省很多时间了。 收起阅读 »
cronsun提供的csctl工具可以备份和恢复cronsun的任务数据。
备份数据:
# 请将 --conf 修改为你自己保存的 base.json 文件的路径
# --file 为备份文件路径,会自动加上 .zip 后缀,这里不需要写后缀
csctl backup --conf={/path/to/base.json} --dir=./ --file=cronsun_data
恢复数据
# 请将 --conf 修改为你自己保存的 base.json 文件的路径
# --file 为备份文件路径
csctl restore --conf={/path/to/base.json} --file=./cronsun_data.zip
把数据导入之后,还需要在新的机器上,web登录,把运行的节点逐个改为新节点。 这个有点不智能,不过,相比每一个都要手动更新全部内容,也很好很多,节省很多时间了。 收起阅读 »
etcd连接带用户名与密码
如果你的etcd设置了密码,使用以下方式进行操作:
这样就把foo的值设为 "Hello World"
同理,如果要读取foo的值,只需要
就可以把你上一个设置的值读取出来。
收起阅读 »
ENDPOINT = http://127.0.0.1:2379
./etcdctl --endpoints=$ENDPOINT put foo "Hello World" --user="root" --password="password"
这样就把foo的值设为 "Hello World"
同理,如果要读取foo的值,只需要
ENDPOINT = http://127.0.0.1:2379
./etcdctl --endpoints=$ENDPOINT get foo --user="root" --password="password"
就可以把你上一个设置的值读取出来。
收起阅读 »
mongodb python同步两个数据库数据
有时候需要做一些迁移工作,需要对mongodb进行迁移。默认的工具貌似也十分好用的。缺少像Navicat 之于mysql的这样神级的软件。
所以自己动手写代码完成:
原理就是不断迭代,不同的数据库,里面的不同的collection。
对于同名collection,通过条数是否一致,来决定是否要把原数据复制过来。
保存上面文件为main.py
执行 python main.py
就可以进行数据同步工作啦。 收起阅读 »
所以自己动手写代码完成:
# -*- coding: utf-8 -*-
# @Time : 2022/4/6 4:41
# @File : database_migrate.py
# @Author : Rocky C@www.30daydo.com
import time
from loguru import logger
import pymongo
ignore_db = ['admin', 'config', 'local',
] # 忽略更新的库
ignore_col = [('db_stock','dfcf_list_full')]
logger.add('mongo.log')
# 数据库同步
def get_client(user, password, host, port):
connect_uri = f'mongodb://{user}:{password}@{host}:{port}'
client = pymongo.MongoClient(connect_uri)
return client
def origin():
return get_client('admin', 'password', '127.0.0.1', '27017')
def target():
return get_client('root', 'password', '127.0.0.1', '27017')
def transfer():
origin_client = origin()
target_client = target()
dbs = get_db_name(origin_client)
for db in dbs:
for col in get_collection_name(origin_client, db):
if (db,col) in ignore_col:
continue
items = []
logger.info(f'正在更新{db} {col}')
for i in get_item(origin_client, db, col):
items.append(i)
insert_item(target_client, db, col, items)
logger.info(f'更新数据库 {db} {col}')
# time.sleep(0.5)
def get_item(client, db_name, col):
return client[db_name][col].find()
def insert_item(client, db_name, col, data):
batch = 1000
count = len(data)//batch + 1
for i in range(count):
item = data[i*batch:(i+1)*batch]
if len(item)==0:
continue
try:
client[db_name][col].insert_many(item)
except Exception as e:
logger.error(e)
logger.error(f'{db_name} {col} 插入出错')
def get_db_name(client):
db_name = client.list_database_names()
dbs = []
for db in db_name:
if db not in ignore_db:
dbs.append(db)
return dbs
def delete_col(client,db,col):
try:
client[db][col].delete_many({})
except Exception as e:
logger.error(e)
logger.error(db)
logger.error(col)
return False
else:
return True
def server_compare():
'''
比较2个数据库是否相同,只是单纯比较条数
'''
origin_client = origin()
target_client = target()
dbs = get_db_name(origin_client)
for db in dbs:
for col in get_collection_name(origin_client, db):
origin_count = origin_client[db][col].count_documents({})
target_count = target_client[db][col].count_documents({})
if origin_count!=target_count:
logger.info(f'collection {db} {col}有区别')
#
if delete_col(target_client,db,col):
items = []
logger.info(f'正在更新{db} {col}')
for i in get_item(origin_client, db, col):
items.append(i)
insert_item(target_client, db, col, items)
logger.info(f'更新数据库 {db} {col}')
time.sleep(1)
def get_collection_name(client, db_name):
collection_names = client[db_name].list_collection_names(session=None)
return collection_names
def main():
server_compare()
if __name__ == '__main__':
main()
原理就是不断迭代,不同的数据库,里面的不同的collection。
对于同名collection,通过条数是否一致,来决定是否要把原数据复制过来。
保存上面文件为main.py
执行 python main.py
就可以进行数据同步工作啦。 收起阅读 »