# demo **Repository Path**: researchimage/demo ## Basic Information - **Project Name**: demo - **Description**: No description available - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2017-05-24 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 1. 软件包结构 ├──bin(脚步文件什么的) └──sj ├── handlers(所有控制器) ├── extends(第三方依赖库) ├── static(静态文件,能够直接通过HTTP请求) ├── templates(模板) ├── util(通用函数与类库) └── app.py(运行Server) ├── README.md(项目说明) └── requirements.txt(python库依赖) ## 2. 系统构成 ###2.1 软件支持 - Python3, (注意:是python**3**) - Tornado, 基于Python的web框架 - Mongodb, nosql数据库,主数据库 - Redis, 内存数据库,用于session持久化 ###2.2 服务支持 - Supervisord 进程管理工具,基于python2.* ,注意:是python **2.\*** - Nginx 负载均衡服务器 ## 3. 安装支持软件 - 安装基础组件 - 安装python2.\* & python3.\* - 安装Tornado - 安装mongodb - 安装redis *注1:基于centos6构建,其他服务器略有出入* *注2:自定义软件一般安装到/usr/local* ## 4. 安装系统服务 - 安装supervisord - 安装nginx ## 5. 配置 ### 源码布置 源码下载, `git clone git@git.oschina.net:yiyern/sj.git` 源码服务器位置,`/data/web/` ### 创建配置文件 echo_supervisord_conf > /etc/supervisord.conf ### 启动supervisor #使用默认的配置文件 /etc/supervisord.conf supervisord #明确指定配置文件 supervisord -c /etc/supervisord.conf #使用 user 用户启动supervisord supervisord -u dev ### 添加supervisord配置文件 `位置:/etc/supervisord.d/tornado.conf` [group:myapps] programs=myapp-0,myapp-1,myapp-2 [program:myapp-0] command=/usr/local/bin/python3 /data/web/sj/sj/app.py --port=8001 directory=/data/web/www user=dev autorestart=true redirect_stderr=true stdout_logfile=/data/web/logs/tornado.log loglevel=info [program:myapp-1] command=/usr/local/bin/python3 /data/web/sj/sj/app.py --port=8002 directory=/data/web/www user=dev autorestart=true redirect_stderr=true stdout_logfile=/data/web/logs/tornado.log loglevel=info [program:myapp-2] command=/usr/local/bin/python3 /data/web/sj/sj/app.py --port=8003 directory=/data/web/www user=dev autorestart=true redirect_stderr=true stdout_logfile=/data/web/logs/tornado.log loglevel=info ### 查看操作进程状态 [dev@localhost ~]$ sudo supervisorctl myapps:myapp-0 RUNNING pid 9795, uptime 2 days, 0:34:37 myapps:myapp-1 RUNNING pid 9794, uptime 2 days, 0:34:37 myapps:myapp-2 RUNNING pid 9793, uptime 2 days, 0:34:37 # 停止运行tornado-1服务器进程 supervisor> stop myapps:myapp-1 myapps:myapp-1: stopped supervisor> status myapps:myapp-0 RUNNING pid 10012, uptime 1:23:19 myapps:myapp-1 STOPPED Mar 12 06:46 PM myapps:myapp-2 RUNNING pid 10013, uptime 1:23:19 # 停止运行整个tornado服务器进程组 supervisor> stop myapps: myapp-1: stopped myapp-2: stopped supervisor> status myapps:myapp-0 RUNNING pid 9795, uptime 2 days, 0:36:16 myapps:myapp-1 RUNNING pid 9794, uptime 2 days, 0:36:16 myapps:myapp-2 RUNNING pid 9793, uptime 2 days, 0:36:16 ### 补充:supervisorctl命令介绍 停止某一个进程,program_name 为 [program:x] 里的 x supervisorctl stop program_name 启动某个进程 supervisorctl start program_name 重启某个进程 supervisorctl restart program_name 结束所有属于名为 groupworker 这个分组的进程 (start,restart 同理) supervisorctl stop groupworker: 结束 groupworker:name1 这个进程 (start,restart 同理) supervisorctl stop groupworker:name1 停止全部进程,注:start、restart、stop 都不会载入最新的配置文件 supervisorctl stop all 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程 supervisorctl reload 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启 supervisorctl update ### NGINX配置 `位置:/etc/nginx/nginx.conf` upstream tornadoes { server 127.0.0.1:8001; server 127.0.0.1:8002; server 127.0.0.1:8003; } server { listen 80; } location / { proxy_pass_header Server; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_pass http://tornadoes; } ### 注意事项 1. 系统使用python3编写。比较仓促,没有测试。 2. Windows环境尚未测试,能否使用未知,未来预计不支持Windows。 3. 无需初始化数据库,直接运行mongodb即可,无需手工创建db、table等。 ### 安装与运行步骤 - 安装并运行Mongodb、Redis - Mongodb: https://www.mongodb.org/ - Redis: http://redis.io/ 注意,Mongodb、redis请保持端口不要对外开放(监听127.0.0.1,而不是你的外网IP),或者设置密码。 注意,mongodb版本需要在2.6及以上!请优先确认版本!! - 启动Mongodb、Redis 系统需要监听本地一个端口,默认为8888,则用户可以通过localhost:8888访问。 - 运行后没有管理员。你可以在sj根目录下运行: `python3 bin/initdb.py` 根据提示,输入管理员账号/密码即可新增一个管理员,并初始化数据库(主要是增加一些索引)