起因
个人认为学习一门技术最好是能够做一些项目,『这儿』是一个基于Flask搭建的轻博客,用户可以发帖关注等基本功能。从开发到基本上能用花了大概三个星期时间,我学习这个是跟随这《Flask Web开发》这本书开始做起来的。全书共205页,薄薄的一本,这本书是去年和公司同事凑单买下来的。一只放在书桌上没看,十一月份正好没有什么其他事情,就像做这个项目练练手。
网址:
http://zheer.me
github:
https://github.com/hsiunien/Phantom
主机:阿里云
域名邮箱:
以前注册了几个域名一直空置在那里没有用,这次正好可以用上,系统注册后会发一份邮件给用户,用自己的域名配上一个noreply@xxx.com 是不是很高大上?,没想到还非常简单,其实很多邮箱服务商提供域名邮箱的,如果自己有域名,只需把域名mx解析到域名服务提供商提供的地址,经过简单的验证就OK啦。
我之前选择的是网易免费域名邮箱,但是发现阿里云封了25端口,只能用其自己的服务,我花了1快钱买了他们的企业邮箱推送服务(贱但是还算良心)。
nignx配置:
因为我只有阿里云一台国内主机,因此很多域名都是解析到阿里云上的,而阿里云尽然没有备案的域名是不让解析到阿里云的服务器上的,但是发现通过https可以绕过这一环。
之前我用 proxy_pass http://127.0.0.1:5000转发到我的flask程序上,但是会弹出备案提示,应该也是内部通过http转发还是会被阿里云拦截的。换成uwsgi 就可以了,而且之前如果是发送邮件的话绝对地址会变成127.0.0.1,很坑爹,下面是我的配置参考:
server{ server_name www.zheer.me zheer.me; root /var/www/{path}; listen 443 ssl; ssl_certificate /etc/nginx/ssl/{path}/ca_chain.crt; ssl_certificate_key /etc/nginx/ssl/{path}/private.key; ssl on; location /{ include uwsgi_params; uwsgi_pass 127.0.0.1:5001; } } server{ listen 80; server_name www.zheer.me zheer.me; add_header Strict-Transport-Security max-age=15768000; return 301 https://$server_name$request_uri; }
数据迁移:
最开始参照的是书本中的做法用的sqlite3 由于是轻量级的数据库,操作简单方便,但是上线后感觉这样不是很安全,为了以后拓展,改用mysql(MariaDb,由于mysql已经被orical收了,所以用MariaDb,目前因为没有用太多功能,没有发现有多大不兼容),连接头需要改成如下格式并且安装mysql的适配器(轮子,我喜欢这个词)PyMySQL
mysql+pymysql://username:pwd@localhost/database_name
迁移发现最大的坑是不同数据库数据的迁移,虽然说数据量不多但是我想从sqlite3中把数据导出来到mysql却不是那么容易,
1.首先mysql的数据库表结构可以通过 sqlalchemy 重新构建
2. sqlite3 data.sqlite .dump >> back.sql
3. 连接mysql 并use相应数据库, 运行source back.sql
什么?报错了是吧?
因为sqlite生成的sql语句是不适用于mysql的,比如会把insert table 加上字符串单引号,但是,mysql中是只能用反单引号的。因此特地写了一个py脚本去转换 参考这里 https://github.com/hsiunien/Phantom/blob/master/migratedata.py
并顺带学习了一下正则的知识。
生成出来后,要人工核对一下,可能(一定)有bug的。我只把其中的insert抽出来,到一个文件然后运行source changed.sql 即将老数据导入到了mysql。