zoukankan      html  css  js  c++  java
  • centos7 + Nginx+ HTTPS + uwsgi + python3.6 + Docker + Django1.11 + mysql 5.6 + virtualenv 环境搭建

    环境搭建:

    系统:

    ​ centos7.2 x64

    开发环境:

    python3.6、Django 1.11 (从一到七步)

    虚拟环境:

    Docker
    Docker ==>> mysql 5.6
    Docker ==>> redis:3.2

    HTTPS:

    Nginx、uwsgi

    项目启动步骤

    1、创建虚拟环境

    ​ cd /home/evn

    ​ virtualenv --python=/usr/bin/python3 项目名称

    ​ 然后进入:cd /home/evn/项目名/bin

    ​ 启动虚拟环境:source activate

    2、上传项目并设置

    ​ 在settings.py里设置:

    ​ 1.关闭DEBUG模式。

    ​ DEBUG = False

    ​ 2.ALLOWED_HOSTS设置为* 表示任何IP都可以访问网站。

    ​ ALLOWED_HOSTS = ['*']

    ​ 3.数据库配置

    ​ cd /home/www/tencent/

    ​ 上传文件,并解压 unzip 项目名

    ​ cd /home/www/tencent/项目名

    3、设置 uwsgi中的xml

    <uwsgi>    
       <socket>127.0.0.1:90</socket> <!-- 内部端口,自定义 --> 
       <chdir>/home/www/tencent/home/</chdir> <!-- 项目路径 -->            
       <module>home.wsgi</module>  <!-- home为wsgi.py所在目录名--> 
       <processes>4</processes> <!-- 进程数 -->     
       <daemonize>uwsgi.log</daemonize> <!-- 日志文件 -->
    </uwsgi>
    

    新建一个文件,名称:项目名.xml,放入项目根目录

    3、安装项目依赖库

    ​ 执行:pip3 install -r requirements.txt

    ​ 额外安装:pip3 install uwsgi

    4、数据库迁移

    ​ 1.python3 manage.py makemigrations ----记录一下数据库的变化
    ​ 2.python3 manage.py migrate ----将变化同步到数据库中

    5、启动uwsgi

    ​ uwsgi -x 项目名.xml

    6、配置Nginx

    nginx.conf

    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        include /usr/local/webserver/nginx/conf/vhost/*.conf;#主要是这个地方,把新建的两配置文件包含进来
    	server {
            listen 80 default_server;
            server_name _;
            return 404;
            }
    }
    

    www.conf

    ## 将HTTP请求全部重定向至HTTPS
    server {
        listen       80;
        server_name  www.liqianglog.top;
        charset utf-8;
        access_log /home/ssl/tencent/www/log/www-80.access.log;
        error_log  /home/ssl/tencent/www/log/www-80.error.log;
        rewrite ^ https://www.liqianglog.top;
    }
    server {
            listen 443 ssl;
            server_name www.liqianglog.top liqianglog.top;
            root /home/www/tencent/home/;#项目路径
            charset utf-8;
            ssl_certificate    /home/ssl/tencent/www/public.pem;#.pem证书路径
            ssl_certificate_key  /home/ssl/tencent/www/private.key;#.key证书路径
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
            ssl_prefer_server_ciphers on;
            ssl_session_cache shared:SSL:10m;
            ssl_session_timeout 10m;
            error_page 497  https://$host$request_uri;
            location / {
    			root html/www;
               include uwsgi_params;
               uwsgi_pass 127.0.0.1:90;
               uwsgi_param UWSGI_SCRIPT home.wsgi;
               uwsgi_param UWSGI_CHDIR /home/www/tencent/home/;#项目路径
               
            }
            location /static/ {
            alias /home/www/tencent/home/static/; #静态资源路径
            }
            access_log  /home/www/tencent/home/www.liqiangtop.log.log;
            error_log  /home/www/tencent/home/www.liqiangtop.log.error.log;
        }
    

    非Django配置SSL

    如:gitlab.conf

    ## 将HTTP请求全部重定向至HTTPS
    server {
        listen       80;
        server_name  gitlab.liqianglog.top;
        charset utf-8;
        access_log /home/ssl/tencent/gitlab/log/gitlab-80.access.log;
        error_log  /home/ssl/tencent/gitlab/log/gitlab-80.error.log;
        rewrite ^ https://gitlab.liqianglog.top;
    }
    
    ## 请求转发到GitLab容器
    server {
        listen       443 ssl;
        server_name  gitlab.liqianglog.top;
        charset utf-8;
        access_log  /home/ssl/tencent/gitlab/log/gitlab.access.log;
        error_log   /home/ssl/tencent/gitlab/log/gitlab.error.log;
        ssl on;
        ssl_certificate         /home/ssl/tencent/gitlab/public.pem;
        ssl_certificate_key     /home/ssl/tencent/gitlab/private.key;
        ssl_session_timeout     10m;
        ssl_session_cache       shared:SSL:10m; 
        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
        proxy_pass    http://127.0.0.1:20080;#注意这里的20443端口
        }
    	location ~ .*.(js|css|png)$ {
        proxy_pass  http://127.0.0.1:20080;
    	}
    	}
    
    

    命令:

    # 启动个人主页虚拟环境中的uwsgi
    cd /home/evn/home/bin    									#进入虚拟环境所在位置
    source activate														#启动虚拟环境
    uwsgi -x /home/www/tencent/home/home.xml	# 运行uwsgi
    
    											
    pip3 freeze > requirements.txt						 # 生成requirements.txt文件
    pip3 install -r requirements.txt					 # 安装requirements.txt依赖
    
    virtualenv --python=/usr/bin/python3 项目名称	# 创建virtualenv虚拟环境
    source activate															# 启动virtualenv虚拟环境
    deactivate																	# 退出virtualenv虚拟环境
    rmvirtualenv 虚拟环境名称										  # 删除irtualenv虚拟环境
    
    /usr/local/webserver/nginx/sbin/nginx -s reload # 重新载入配置文件
    /usr/local/webserver/nginx/sbin/nginx -s reopen # 重启 Nginx
    /usr/local/webserver/nginx/sbin/nginx -s stop   # 停止 Nginx
    /usr/local/webserver/nginx/conf/vhost					  # conf配置目录
    /usr/local/bin/																	#docker-compose目录 
    
    docker restart 容器名													# 重启容器
    docker stop  容器名														# 停止容器
    docker start 容器名													  # 启动被停止的容器
    docker rm -f 容器名														# 删除容器
    docker exec -i -t 容器名  /bin/bash						# 进入容器
    
    sudo reboot 																	# 重启服务
    
    启动 gitlab 
    	cd /home/gitlab/
    	docker-compose up -d
      
      
    
    
    
    

    自动义开机脚本 shell

    1、自己新建一个脚本,如centnet-service.sh
      经过后面的几个步骤后,这个脚本在开机的时候会执行,在这个脚本里面可以写你开机的时候想执行的命令,如启动tomcat,oracle等服务
    2、在脚本中输入启动服务的命令,my.sh:
      #!/bin/sh 
        #chkconfig: 6 20 80
        DIR=/home/shell
        echo "开始执行脚本" > $DIR/my_log.txt
        docker start mymysql      # 启动MySQL 容器
        docker start goofy_merkle # 启动resis 容器
        docker start elegant_kepler # 启动portainer  docker可视化容器
        docker start gitlab 	  # 启动gitlab 容器
        # 启动个人主页虚拟环境中的uwsgi
        echo "启动个人主页虚拟环境中的uwsgi"
        cd /home/evn/home/bin
        source activate
        uwsgi -x /home/www/tencent/home/home.xml
        deactivate
        # 启动小强云盘虚拟环境中的uwsgi
        echo "启动小强云盘虚拟环境中的uwsgi"
        cd /home/evn/xqyunpan/bin
        source activate
        uwsgi -x /home/www/tencent/xqyunpan/xqyunpan.xml
        deactivate
        # 启动12306虚拟环境中的uwsgi
        echo "启动12306虚拟环境中的uwsgi"
        cd /home/evn/12306/bin
        source activate
        uwsgi -x /home/www/tencent/cp12306/cp12306.xml
        deactivate
        /usr/local/webserver/nginx/sbin/nginx # 启动Nginx
        echo "结束脚本"  > $DIR/my_log.txt
        
        
    3、文件进行转换
    	 yum install -y dos2unix
       dos2unix  /home/shell/my.sh
    3、执行如下命令,将该脚本标记为可执行文件(添加可执行的权限)
      chmod +x /home/shell/my.sh
    4、执行如下命令将/etc/rc.d/rc.local文标记为可执行文件
      在centos7中,/etc/rc.d/rc.local文件的权限被降低了,开机的时候执行在自己的脚本是不能起动一些服务的,执行下面的命令可以文件标记为可执行的文件
      chmod +x /etc/rc.d/rc.local
    5、打开/etc/rc.d/rc.local文件,在最后面添加如下脚本
      . /home/shell/my.sh
      这样,my.sh这个脚本在开机的时候就会被执行了,以后再这里面写启动服务的命令就可以了
      
    
  • 相关阅读:
    codechef Graph on a Table
    CF1063F. String Journey
    BZOJ1547: 周末晚会
    maxsigma
    LOJ#2351. 「JOI 2018 Final」毒蛇越狱
    BZOJ3632: 外太空旅行
    图论:tarjan相关算法复习
    Codeforces 321E. Ciel and Gondolas(凸优化+决策单调性)
    5031. 【NOI2017模拟3.27】B (k次狄利克雷卷积)
    CSAcademy Round 10 Yury's Tree(有根树点分树或kruskal重构树)
  • 原文地址:https://www.cnblogs.com/liqianglog/p/11186567.html
Copyright © 2011-2022 走看看