diff --git a/Pipfile b/Pipfile index e9d7561..41d7135 100644 --- a/Pipfile +++ b/Pipfile @@ -1,6 +1,6 @@ [[source]] name = "pypi" -url = "https://pypi.mirrors.ustc.edu.cn/simple/" +url = "https://mirrors.bfsu.edu.cn/pypi/web/simple" verify_ssl = true [dev-packages] @@ -14,4 +14,4 @@ pyside2 = "*" webdriver = "*" [requires] -python_version = "3.7" +python_version = "3" diff --git a/README.md b/README.md index 5d2fd4c..8c3a370 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,47 @@ # 马自立自动烤肉机重制版 +- [马自立自动烤肉机重制版](#马自立自动烤肉机重制版) + - [简介](#简介) + - [部署文档](#部署文档) + - [一键部署脚本(似乎有问题,不建议使用)](#一键部署脚本似乎有问题不建议使用) + - [手动部署文档](#手动部署文档) + - [使用方法](#使用方法) + - [b 站专栏介绍:庆贺吧,这是集数码暴龙与嵌字 man 力量于一身的烤推机](#b-站专栏介绍庆贺吧这是集数码暴龙与嵌字-man-力量于一身的烤推机) + - [使用感想](#使用感想) + ## 简介 + 这个烤肉机,其实是个推特嵌字机。 出现的初衷因该是,嵌字这件事儿,大家都爱不动了。 -来回p图一样的东西,有些伤不起啊。 +来回 p 图一样的东西,有些伤不起啊。 -于是,为了解决重复性工作,工坊招了程序员,也终于搞出来了这个项目。 +于是,为了解决重复性工作,工坊招了程序员,也终于搞出来了这个项目。 此项目主要感谢以下贡献者 -[FzXiao](https://github.com/fzxiao233) [b站](https://space.bilibili.com/2387011) -[飞雪](https://github.com/wudifeixue) [b站](http://space.bilibili.com/739848) -[鱼鱼](https://github.com/yuyuyzl) [b站](https://space.bilibili.com/1534590) +[FzXiao](https://github.com/fzxiao233) [b 站](https://space.bilibili.com/2387011) +[飞雪](https://github.com/wudifeixue) [b 站](http://space.bilibili.com/739848) +[鱼鱼](https://github.com/yuyuyzl) [b 站](https://space.bilibili.com/1534590) ![HowtoUse](https://raw.githubusercontent.com/cn-matsuri/matsuri_translation/master/tt_how_to_use.gif) -# 部署文档 +## 部署文档 -### 一键部署脚本(似乎有问题) +### 一键部署脚本(似乎有问题,不建议使用) 环境要求: - Ubuntu 18.04 - `wget https://raw.githubusercontent.com/cn-matsuri/matsuri_translation/master/deploy.sh && chmod +x deploy.sh && ./deploy.sh` +```bash +wget https://raw.githubusercontent.com/cn-matsuri/matsuri_translation/master/deploy.sh && chmod +x deploy.sh && ./deploy.sh +``` 提示: -- 部署过程中可能需要键入一次sudo密码 -- 部署成功后会显示pm2的当前任务状况 -- 你可以通过修改程序目录下的celeryconfig.py来更改redis数据库的链接地址 -- 你可以重新更改你的nginx配置通过编辑/etc/nginx/conf.d/1-matsuri_translation.conf +- 部署过程中可能需要键入一次 sudo 密码 +- 部署成功后会显示 pm2 的当前任务状况 +- 你可以通过修改程序目录下的 celeryconfig.py 来更改 redis 数据库的链接地址 +- 你可以重新更改你的 nginx 配置通过编辑/etc/nginx/conf.d/1-matsuri_translation.conf ### 手动部署文档 @@ -37,24 +49,21 @@ 文档编辑者: -[活性酱](https://github.com/inactive-virus) [b站](https://space.bilibili.com/6250373) +[活性酱](https://github.com/inactive-virus) [b 站](https://space.bilibili.com/6250373) ## 使用方法 -### b站专栏介绍:[庆贺吧,这是集数码暴龙与嵌字man力量于一身的烤推机](https://www.bilibili.com/read/cv3081959) +### b 站专栏介绍:[庆贺吧,这是集数码暴龙与嵌字 man 力量于一身的烤推机](https://www.bilibili.com/read/cv3081959) + 打开烤肉机后,输入需要查询的推特永久链接。查询。输入翻译内容,满意后下载图片即可。 打开任意一个模板,然后开始输入你想输入的翻译内容就行了。 -这个模板是完全可以自定义的,自己写HTML就好。 +这个模板是完全可以自定义的,自己写 HTML 就好。 -这里没有提供服务器连接,只是实例example.com -模板打开链接的示例:https://www.example.com/?template=永久链接.txt (这里替换永久链接.txt成一个真的文件链接) +这里没有提供服务器连接,只是实例 example.com +模板打开链接的示例:`https://www.example.com/?template=永久链接.txt` (这里替换永久链接.txt 成一个真的文件链接) - -烤肉机模板源码地址: -https://github.com/cn-matsuri/toastTemplates/ +烤肉机模板[源码地址](https://github.com/cn-matsuri/toastTemplates/) ## 使用感想 ![茶铺使用感想](https://raw.githubusercontent.com/cn-matsuri/matsuri_translation/master/testimonial.png "茶铺使用感想") - - diff --git a/deploy.md b/deploy.md index 60b212a..9e39121 100644 --- a/deploy.md +++ b/deploy.md @@ -2,92 +2,153 @@ > 一键脚本不可贪,手动部署保平安 > -> ​ ——踩过坑的活性酱 +> ——踩过坑的活性酱 + +- [烤推机手动部署文档](#烤推机手动部署文档) + - [Ubuntu 18.04](#ubuntu-1804) + - [全局依赖](#全局依赖) + - [apt 安装以下软件包](#apt-安装以下软件包) + - [npm 安装 pm2](#npm-安装-pm2) + - [第一次使用 npm](#第一次使用-npm) + - [安装 pm2](#安装-pm2) + - [安装 ChromeDriver](#安装-chromedriver) + - [使用 apt 安装(个人推荐)](#使用-apt-安装个人推荐) + - [手动安装 ChromeDriver: 下载地址](#手动安装-chromedriver-下载地址) + - [用户空间](#用户空间) + - [拉取项目并创建配置文件](#拉取项目并创建配置文件) + - [修改配置文件](#修改配置文件) + - [安装 python 依赖](#安装-python-依赖) + - [启动主程序](#启动主程序) + - [配置 Web 服务](#配置-web-服务) + - [Apache2](#apache2) + - [Nginx](#nginx) + - [部署 HTTPS](#部署-https) + - [手动管理 Chrome 进程以节约生命 (20/08/16 更新)](#手动管理-chrome-进程以节约生命-200816-更新) + - [将 Chrome 托管给 PM2](#将-chrome-托管给-pm2) + - [修改后端配置](#修改后端配置) + - [启动新的 workers](#启动新的-workers) ## Ubuntu 18.04 ### 全局依赖 -请在root权限下执行。 +> 请在 root 权限下执行。(每个命令前面加个 `sudo` 就好) -#### apt安装以下软件包: +#### apt 安装以下软件包 -* Web服务器 apache2 / nginx / etc. +- Web 服务器 apache2 / nginx / etc. +- npm +- unzip +- git +- python3 和 python3-pip(现在 3.8 和 3.9 比较方便,所以去掉了 3.7 的限制) +- chromium-browser(这个安装时间会比较长,请耐心等待) +- fonts-noto 和 fonts-noto-color-emoji +- redis -* npm +```bash +apt install apache2 npm unzip git python3 python3-pip chromium-browser fonts-noto fonts-noto-color-emoji redis +``` -* unzip +如果下载速度缓慢,请自行更换源,常用源: -* git +- [清华源](https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/) +- [北京外国语大学源](https://mirrors.bfsu.edu.cn/help/ubuntu/) +- [中科大源](http://mirrors.ustc.edu.cn/help/ubuntu.html) -* python3.7 和 python3-pip +#### npm 安装 pm2 -* chromium-browser +##### 第一次使用 npm -* fonts-noto 和 fonts-noto-color-emoji +如果人在国内并且不方便开代理,建议进行换源: -* redis +```bash +npm config set registry https://registry.npm.taobao.org # 换源 +npm config get registry # 验证换源是否成功 +``` - ```bash - apt install apache2 npm unzip git python3.7 python3-pip chromium-browser fonts-noto fonts-noto-color-emoji redis - ``` +##### 安装 pm2 +在安装 pm2 之前建议先更新 npm ,避免出现 npm 过久导致安不上的情况: +```bash +npm install -g npm # 更新 npm +``` -#### npm安装以下软件包: +再安装 pm2 -* pm2 +```bash +npm install -g pm2 +pm2 startup # 启动 pm2 +``` - ```bash - npm install pm2 -g - pm2 startup - ``` +#### 安装 ChromeDriver +##### 使用 apt 安装(个人推荐) +```bash +apt install chromium-chromedriver +``` -#### 手动安装ChromeDriver: [ https://chromedriver.chromium.org/downloads ] +**为什么推荐使用 apt ?** - * 通过`chromium-browser --version`查询版本,然后下载相应的二进制文件并赋权放入`/usr/local/bin`中 +1. 如果选择下面的手动安装,官方下载链接中,只有 linux64 / win32 / win64 的版本; +2. 如果是 arm64 或者 armhf 架构的硬件则需要额外寻找编译好的适合自己平台的版本,并且可能会下载到不匹配的版本从而浪费时间找错误原因(血泪史) +3. apt 源中已经包含了 arm64 架构的包,并且能够自动适配当前环境中 chromium-browser 的版本 - * Ubuntu 18.04软件源一般提供的是version 76 +##### 手动安装 ChromeDriver: [下载地址](https://chromedriver.chromium.org/downloads) - ```bash - wget https://chromedriver.storage.googleapis.com/76.0.3809.68/chromedriver_linux64.zip - unzip chromedriver_linux64.zip - chmod +x chromedriver - mv chromedriver /usr/local/bin - ``` +- 通过`chromium-browser --version`查询版本,然后下载相应的二进制文件并赋权放入`/usr/local/bin`中 +Ubuntu 18.04 软件源一般提供的是 version 76 +```bash +wget https://chromedriver.storage.googleapis.com/76.0.3809.68/chromedriver_linux64.zip +unzip chromedriver_linux64.zip +chmod +x chromedriver +mv chromedriver /usr/local/bin +``` ### 用户空间 -请在非root权限的用户下执行。 +> 请在非 root 权限的用户下执行。 #### 拉取项目并创建配置文件 ```bash git clone https://github.com/cn-matsuri/matsuri_translation +``` + +如果拉取卡进度,可以将 `github.com` 更改成 `github.com.cnpmjs.org` + +##### 修改配置文件 + +```bash cp matsuri_translation/Matsuri_translation/celeryconfig_example.py matsuri_translation/Matsuri_translation/celeryconfig.py ``` -记得更改最后一行`self_url = 'http://localhost/'`成你需要的链接地址,例如`self_url = 'https://ts.matsuri.design/'` -> 所以为什么不直接把文件放在那里而要加个_example呢 +修改第 5 行的 `self_url = 'http://localhost/'` ,将其替换为你需要的链接地址(你的域名或者 ip),例如`self_url = 'https://ts.matsuri.design/'` + +> 所以为什么不直接把文件放在那里而要加个\_example 呢 +> 因为方便备份恢复 -#### 安装python依赖 +#### 安装 python 依赖 ```bash pip3 install pipenv cd matsuri_translation python3 -m pipenv run pip install -r requirements.txt -python3 -m pipenv run pip install gunicorn -python3 -m pipenv run pip install pypng -python3 -m pipenv run pip install pngquant ``` -如果执行pip3遇到`ImportError: cannot import name main`的错误,请在root下执行`hash -r`刷新一下 +如果遇到下载缓慢的情况,请自行换源,常见源: -> 按说应该把gunicorn放进requirements.txt里吧 +- [清华源](https://mirrors.tuna.tsinghua.edu.cn/help/pypi/) +- [北京外国语源](https://mirrors.bfsu.edu.cn/help/pypi/) +- [中科大源](http://mirrors.ustc.edu.cn/help/pypi.html) + +如果执行 pip3 遇到`ImportError: cannot import name main`的错误,请在 root 下执行`hash -r`刷新一下 + +> 按说应该把 gunicorn 放进 requirements.txt 里吧 +> 有点没搞懂原文档为什么会把额外的三个分别拉出来 #### 启动主程序 @@ -98,27 +159,31 @@ python3 -m pipenv run pm2 start celery_run.sh pm2 save ``` -由`pm2 status`查看各进程均为online即可。 +由`pm2 status`查看各进程均为 online 即可。 如有异常,可用`pm2 logs `来查看各进程的日志输出。 -### 配置Web服务 +- 重启全部进程:pm2 restart all +- 终止全部进程:pm2 kill +- 终止某个进程:pm2 delete \ + +### 配置 Web 服务 -例子中程序部署在**ubuntu**用户的家目录下,域名为**example.com**,请根据实际情况修改。 +例子中程序部署在**ubuntu**用户的 `~` 目录下,域名为**example.com**,请根据实际情况修改。 #### Apache2 将前端连接到网站目录 ```bash -ln -s ~ubuntu/matsuri_translation/Matsuri_translation/frontend /var/www +ln -s ~/matsuri_translation/Matsuri_translation/frontend /var/www a2enmod proxy_http service apache2 restart ``` -建立虚拟主机配置文件 `vim /etc/apache2/sites-available/matsuri.conf` +建立虚拟主机配置文件 `sudo vim /etc/apache2/sites-available/matsuri.conf` -``` +```apche2 ServerName example.com DocumentRoot /var/www/frontend @@ -143,7 +208,7 @@ service apache2 reload > 活性酱不会这个,你们还是另请高明吧 > -> 总之先放个一键脚本里的东西在这里,不能用不怪我哦 +> 总之先放个[一键脚本](./deploy.sh)里的东西在这里,不能用不怪我哦 ```nginx server { @@ -163,33 +228,32 @@ server { } ``` +### 部署 HTTPS +[https://certbot.eff.org/instructions](https://certbot.eff.org/instructions) -### 部署HTTPS - -https://certbot.eff.org/instructions +## 手动管理 Chrome 进程以节约生命 (20/08/16 更新) -## 手动管理Chrome进程以节约生命 (20/08/16更新) +> 测试表明,网页版获取推特截图时 +> 需要 3 到 5 秒的时间启动 Chrome 和加载推特的静态内容 +> 虽然可以通过磁盘缓存部分解决这个问题 +> 但是最好的办法还是把 Chrome 交给 PM2 管理 +> driver 通过 remote-debugging-port 连接到 Chrome,用完断开而不是退出 +> 下次使用的时候就直接重新连接而不是打开,推特的资源也会从内存缓存读取 ->测试表明,网页版获取推特截图时 ->需要3到5秒的时间启动Chrome和加载推特的静态内容 ->虽然可以通过磁盘缓存部分解决这个问题 ->但是最好的办法还是把Chrome交给PM2管理 ->driver通过remote-debugging-port连接到Chrome,用完断开而不是退出 ->下次使用的时候就直接重新连接而不是打开,推特的资源也会从内存缓存读取 +### 将 Chrome 托管给 PM2 -### 将Chrome托管给PM2 +要注意的是这里要启动的是 Chrome 而非 ChromeDriver -要注意的是这里要启动的是Chrome而非ChromeDriver +首先确定你要开几个 Chrome 以及是否需要 Bot 接入 -首先确定你要开几个Chrome以及是否需要Bot接入 +> 估计看这个文档的没人需要 ->估计看这个文档的没人需要 +编辑 chrome_pm2.json,保留你需要的东西即可 +name 改成你喜欢的也可以,我习惯把端口号写上 -编辑chrome_pm2.json,保留你需要的东西即可 -name改成你喜欢的也可以,我习惯把端口号写上 +推特使用的 Chrome 长这样 -推特使用的Chrome长这样 ```json { "name": "chromium9223", @@ -198,7 +262,8 @@ name改成你喜欢的也可以,我习惯把端口号写上 }, ``` -Bot使用的Chrome长这样(其实差了一个UA不加也罢,主要GA的时候用来分辨Bot流量) +Bot 使用的 Chrome 长这样(其实差了一个 UA 不加也罢,主要 GA 的时候用来分辨 Bot 流量) + ```json { "name": "chromium9224", @@ -207,14 +272,16 @@ Bot使用的Chrome长这样(其实差了一个UA不加也罢,主要GA的时 }, ``` -然后使用PM2直接启动这个配置文件 +然后使用 PM2 直接启动这个配置文件 + ```bash pm2 start chrome_pm2.json ``` ### 修改后端配置 -找到celeryconfig.py,按照下方注释修改配置 +找到 celeryconfig.py,按照下方注释修改配置 + ```python # 新特性加速,使用前请理解以下配置项含义 @@ -231,17 +298,18 @@ chrome_twitter_port=range(9222,9224) # 使用了任务路由但仍然希望worker启动Chrome则传None chrome_auto_port=range(9224,9226) ``` -你也可以不用range直接传list进去,反正前面的json里开了哪几个端口这里就写哪几个 -如果不用auto模式的话这里传一个None,之后不开auto队列的worker即可。 +你也可以不用 range 直接传 list 进去,反正前面的 json 里开了哪几个端口这里就写哪几个 + +如果不用 auto 模式的话这里传一个 None,之后不开 auto 队列的 worker 即可。 -### 启动新的workers +### 启动新的 workers -编辑celery_run_twitter.sh,将 --concurrency=2 的数值改为你需要的worker个数 +编辑 celery_run_twitter.sh,将 --concurrency=2 的数值改为你需要的 worker 个数 ->到现在你应该知道这里要写啥了吧 +> 到现在你应该知道这里要写啥了吧 -如果需要全自动模式的话对celery_run_auto.sh也做同样的修改 +如果需要全自动模式的话对 celery_run_auto.sh 也做同样的修改 然后 @@ -258,4 +326,4 @@ pm2 stop celery_run pm2 delete celery_run ``` -完成升级 \ No newline at end of file +完成升级 diff --git a/requirements.txt b/requirements.txt index 56e04a8..d85e009 100644 --- a/requirements.txt +++ b/requirements.txt @@ -26,4 +26,9 @@ six==1.12.0 typed-ast==1.4.0 urllib3==1.25.3 vine==1.3.0 -Werkzeug==0.15.4 +Werkzeug>=0.15.4 # 0.15.4 似乎有 bug + +# 额外的东西 +gunicorn +pypng +pngquant