项目部署在linux中
项目部署,代码上线 https://www.cnblogs.com/wupeiqi/articles/8591782.html
内容详细及步骤:
- 上线 1. 本地代码配置相关操作 2. 打包上传 测试版: windows: yum install lrzsz 压缩zip包,拖进来。(我们的文件拖来之后,记得解压,用unzip XXX文件名) mac: scp /home/xx/s8day145.zip root@192.11.11.11:/data/ 3. 安装Python3 a. 下载Python:https://www.python.org/ftp/python/3.5.4/ b. 解压 tar -xvf Python-3.5.4.tgz c. cd Python-3.5.4 d. 先装依赖: - yum install openssl-devel - yum install sqlite-devel e. 编译安装(这就是编译安装python) - ./configure - make - make install /usr/local/bin python3 f. 安装django (如果用的是flask就用flask) pip3 install django==1.11.7(注意切换到python3.5.4文件加下)
ps:上面两个步骤yum install的话,同学说,先不安装这个,等部署报错说没有安装这个sqlite的时候再进行安装,到时候具体问题具体分析吧
4. 第一版本上线:简单粗暴 (这个版本我们是用pycharm来操作的) cd /data cd s80523(这是项目名) 执行下面这句------> python3 manage.py runserver 0.0.0.0:8000 #执行完毕之后,显示下面的这就表示启动成功了,若出现sqlite的错误,则回到python3.5.X的目录下,重新编译安装python ''' System check identified no issues (0 silenced). You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run 'python manage.py migrate' to apply them. May 23, 2018 - 13:06:45 Django version 1.11.7, using settings 's80523.settings' Starting development server at http://0.0.0.0:8000/ Quit the server with CONTROL-C. ''' http://10.0.0.130:8000/index/#输入这个就能访问了,这个10.0.0.130是我们虚拟机的ip,通过连接的xsell直接就能看到
第二版本上线:uwsgi (这个其实就是属于django程序) uwsgi 缺点:处理静态文件会差点,因为他是处理动态文件比较NB; 请求越多,压力越大(因此需要下面的负载均衡) pip3 install uwsgi - 使用uwsgi启动一个脚本: cd /data vim app.py 然后把下面直接放进去,保存退出即可 def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello World"] #直接输入这个就是运行起来了,访问的时候在浏览器上把端口改成9001即可 uwsgi --http :9001 --wsgi-file app.py - 如果是flask程序: app.py app = Flask(....) @app. ... uwsgi --http :9002 --wsgi-file app.py --callable app#需要加上这个 - 如果是django程序 方式一: #wsgi这个是在我们的项目里面也有这个,可以ll 项目名,进行查看 uwsgi --http :9003 --chdir /data/xxxx项目名(或文件名)/ --wsgi-file 项目名(或文件名)/wsgi.py #执行了上面的之后,表示启动成功,然后浏览器上端口修改成9003即可访问 方式二:#上面的参数太长,因此下面是把它设置成一个文件 #这个是自己设置的,最好以ini结尾,下面的是文件里面的内容;这个是在自己的项目下又创建的文件 xxx.ini #s8day145_uwsgi.ini [uwsgi] http = 0.0.0.0:9005 chdir = /data/项目名/ #eg:s80523 wsgi-file = 项目名/wsgi.py processes = 4 #这是开4个进程,可开1个 static-map = /static=/data/项目名/allstatic #这表示以后会去=/data/项目名/allstatic找静态文件 #执行启动,这就是启动起来这个进程了,且会帮我们携带参数 uwsgi --ini xxx.ini #这是上面创建的文件名,然后即可访问,访问的时候,注意上面写的端口,要访问上面写的端口才行 收集静态文件:#收集了静态文件之后,才能进行显示出来步骤;先设置,再收集 - settings.py #设置这个文件,直接执行下面vim这句 vim xxx/settings #xxx是项目名,执行这句 DEBUG = False #修改debug STATIC_ROOT = "allstatic" #到最后一行写这个,这是allstatic所有的静态文件 - python3 manage.py collectstatic #然后执行这个,就是都设置好了,可进入到allstatic里面查看我们所收集的图片 uwsgi --ini xxx.ini #收集完毕之后,在执行,再次访问浏览器,就能看到图片了
第三版本上线:uwsgi + nginx nginx作用: - 处理静态文件 - 反向代理 - 负载均衡(LVS、haproxy)#解决压力问题 uwsig作用: - 处理动态请求 ps:这是我电脑启动nginx的命令,[root@oldboys8-0425 nginx-1.12.2]# /application/nginx-1.12.2/sbin/nginx nginx配置:/etc/nginx/nginx.conf #这是老师的代码,需要修改很多配置,因此不用这个 #配置nginx文件,在nginx目录下,cd conf,再vim nginx.conf (这是以我的电脑为例) user root; worker_processes 4; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; include /etc/nginx/mime.types; default_type application/octet-stream; upstream django { server 127.0.0.1:8001; server 127.0.0.1:8002; } server { listen 80; charset utf-8; # max upload size client_max_body_size 75M; location /static { alias /data/s8day145/allstatic; } location / { uwsgi_pass django; include uwsgi_params; } } } 下面的是我自己电脑的nginx配置 #include网上有很多跟老师的步骤不同,因此自己要设置 注意:server 127.0.0.1:8002; 这个是我提前加的,若只启动了8001,那么这个不要加 user root; worker_processes 4; error_log /application/nginx-1.12.2/logs/error.log; pid /application/nginx-1.12.2/logs/nginx.pid; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /application/nginx-1.12.2/logs/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; include /application/nginx-1.12.2/conf/mime.types; default_type application/octet-stream; upstream django { server 127.0.0.1:8001; server 127.0.0.1:8002; } server { listen 80; charset utf-8; # max upload size client_max_body_size 75M; location /static { alias /data/s80523/allstatic; #注意自己的项目名 } location / { uwsgi_pass django; include uwsgi_params; } } } 然后进行这一步配置 uwsgi配置:/data/s8day145/ s8day145_uwsgi_8001.ini #这个是mv s8day145_uwsgi.ini s8day145_uwsgi.ini 复制一份得到的 [uwsgi] socket = 127.0.0.1:8001 #这个端口是修改的 chdir = /data/s8day145/ wsgi-file = s8day145/wsgi.py processes = 1 s8day145_uwsgi_8002.ini #这是把8001复制了一份,起名为8002 [uwsgi] socket = 127.0.0.1:8002 chdir = /data/s8day145/ wsgi-file = s8day145/wsgi.py processes = 1 启动:#这个不要按照老师的操作了,因为我安装nginx和老师的不一样,因此启动命令不同 uwsgi:#先启动这个 uwsgi --ini s8day145_uwsgi_8001.ini & #这是后台运行的,用and符号 uwsgi --ini s8day145_uwsgi_8002.ini & nginx:#再启动这个 /etc/init.d/nginx start #这是centos6中的 /bin/systemctl restart nginx.service /bin/systemctl start nginx.service /bin/systemctl stop nginx.service 我电脑启动的nginx的命令: /application/nginx-1.12.2/sbin/nginx -s reload 启动好之后http://10.0.0.130:8001/index/浏览器查看,即可看到我们在pycharm使用的效果
最后一个这个supervisor没有测试,,未完待续????
7. 如果进程挂了,supervisor帮助你自动将服务重新启动。 /etc/supervisord.conf [program:s8day145] command=/usr/local/bin/uwsgi --ini /data/s8day145/s8day145_uwsgi_8001.ini ;命令 priority=999 ; 优先级(越小越优先) autostart=true ; supervisord启动时,该程序也启动 autorestart=true ; 异常退出时,自动启动 startsecs=10 ; 启动后持续10s后未发生异常,才表示启动成功 startretries=3 ; 异常后,自动重启次数 exitcodes=0,2 ; exit异常抛出的是0、2时才认为是异常 stopsignal=QUIT ; 杀进程的信号 stopwaitsecs=10 ; 向进程发出stopsignal后等待OS向supervisord返回SIGCHILD 的时间。若超时则supervisord将 使用SIGKILL杀进程 user=root ; 设置启动该程序的用户 log_stdout=true ; 如果为True,则记录程序日志 log_stderr=false ; 如果为True,则记录程序错误日志 logfile=/var/log/cat.log ; 程序日志路径 logfile_maxbytes=1MB ; 日志文件最大大小 logfile_backups=10 ; 日志文件最大数量 systemctl start supervisord.service - 公司中的部署步骤及负责人: - 开发提交代码 - 测试人员开始测试 - 运维人员进行上线 使用软件:jenkins+自己写脚本,运维人员点点点。 - 从git上啦代码到一个服务器,在该服务器上对代码进行编译(c/vue/java) - 通过以下工具 将代码同步到每台服务器上 - saltstack - ansible - 执行命令启动程序 - 自己搭建yum源
浙公网安备 33010602011771号