django部署

部署

项目不要放在/root目录下
全新的centos7,阿里云

yum -y update

yum install gcc

yum -y install zlib*

yum install openssl-devel -y

这里先配置一下安全组

ssh安装

不安装也可以,需要配置密匙对
登录时需要使用pem文件+密码的方式进行登陆

yum install openssh-server -y

service sshd restart

#服务端开启密码验证的方法:

vim /etc/ssh/sshd_config
(最后一行)
把PasswordAuthentication项为yes

重启服务

service sshd restart

mysql安装(5.7.23)

安装
下载rpm安装源
官方地址:https://dev.mysql.com/downloads/repo/yum/
rpm文件地址:https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
[root@GYJ ~]# mkdir download
[root@GYJ ~]# cd download/
[root@GYJ download]# wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
--2018-09-30 17:35:27--  https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
Resolving dev.mysql.com (dev.mysql.com)... 137.254.60.11
Connecting to dev.mysql.com (dev.mysql.com)|137.254.60.11|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm [following]
--2018-09-30 17:35:29--  https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm
Resolving repo.mysql.com (repo.mysql.com)... 23.44.160.128
Connecting to repo.mysql.com (repo.mysql.com)|23.44.160.128|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 25680 (25K) [application/x-redhat-package-manager]
Saving to: ‘mysql57-community-release-el7-11.noarch.rpm’

100%[====================================================================================>] 25,680      --.-K/s   in 0.1s    

2018-09-30 17:35:30 (194 KB/s) - ‘mysql57-community-release-el7-11.noarch.rpm’ saved [25680/25680]

安装Mysql源文件

yum localinstall -y mysql57-community-release-el7-11.noarch.rpm

查看MySQL源是否安装成功

[root@GYJ download]# yum repolist enabled | grep "mysql.*-community.*"
mysql-connectors-community/x86_64 MySQL Connectors Community                  65
mysql-tools-community/x86_64      MySQL Tools Community                       69
mysql57-community/x86_64          MySQL 5.7 Community Server                 287
[root@GYJ download]# 

安装MySQL服务

yum install -y mysql-community-server
启动, 重启
systemctl start mysqld
systemctl restart mysqld
修改root登录密码
获取root默认密码(由于Mysql安全策略升级,安装完成后系统自动设置了一个随机密码)
[root@GYJ download]# grep 'temporary password' /var/log/mysqld.log
2018-09-30T09:39:46.046400Z 1 [Note] A temporary password is generated for root@localhost: CRdwG_iRw58q
使用生成的随机密码登陆MySQL
[root@GYJ download]# mysql -uroot -pCRdwG_iRw58q
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.23

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
修改密码
由于Mysql默认要求设置密码复杂度高(必须包含 大小写字母、数字、符号)
mysql> alter user 'root'@'localhost' identified by '123456';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql> 

这样设置是合法的:

mysql> alter user 'root'@'localhost' identified by 'Mysql666!';
Query OK, 0 rows affected (0.00 sec)

mysql> 

关闭Mysql密码校验规则,允许设置简单密码
在Mysql配置文件最后加入:validate_password = off

[root@localhost ~]# vi /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

validate_password = off

重启Mysql服务生效

   systemctl restart mysqld
配置远程用户登录

指定Ip

mysql> grant all privileges on *.* to 'root'@'192.168.1.1' identified by '123456' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> 

允许所有

mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> 
    FLUSH PRIVILEGES;
设置开机启动
 systemctl enable mysqld

 systemctl daemon-reload
安装mysqlclient出问题
    centos 7:
        yum install python-devel mariadb-devel -y

    ubuntu:
        sudo apt-get install libmysqlclient-dev

    然后:
        pip install mysqlclient

设置mysql密码(可以跳过了,使用123456密码可以登陆了)

    进入mysql:
    set password =password('123456');     #密码123456
    FLUSH PRIVILEGES;

安装python3.6

1. 获取

wget https://www.python.org/ftp/python/3.6.5/Python-3.6.2.tgz
tar -xzvf Python-3.6.2.tgz -C  /tmp
cd  /tmp/Python-3.6.2/

2. 把Python3.6安装到 /usr/local 目录

./configure --prefix=/usr/local
make
make altinstall

3. 更改/usr/bin/python链接

ln -s /usr/local/bin/python3.6 /usr/bin/python3

安装virtualenvwrapper

yum install python-setuptools python-devel
pip install virtualenvwrapper

#编辑.bashrc文件
vim ~/.bashrc

#添加进去
export WORKON_HOME=$HOME/.virtualenvs
source /usr/bin/virtualenvwrapper.sh

#sudo find / -name virtualenvwrapper.sh      查看你的virtualenvwrapper.sh在什么地方

#重新加载.bashrc文件
source ~/.bashrc

#虚拟环境保存的路径
cd ~/.virtualenvs/      (创建的虚拟环境都会保存在这个目录,前面设置的)

#创建指定python版本的虚拟环境方法
mkvirtualenv -p /usr/local/bin/python3.6 MxOnline

workon MxShop

#进虚拟环境安装依赖包

首先 pip freeze > requirements.txt 将本地的虚拟环境安装包导出来,上传到服务器

pip install -r requirements.txt

虚拟环境目录: /root/.virtualenvs/
可以通过pycharm远程调试

git安装(也可以直接从本地通过PyCharm的部署功能直接上传到服务器)

yum install git

git config --global user.name "Your Name"
git config --global user.email "youremail@domain.com"

cd ~/ && ssh-keygen -t rsa -C "你的邮箱"

#提示的信息,直接按enter就行

cd .ssh

把公钥文件(id_rsa.pub)中的码复制到github

# 就可以开始clone代码了
git@github.com:coder-gao/MxOnline.git

拉取所有需要的static file 到同一个目录

在django的setting文件中,添加下面一行内容:

    STATIC_ROOT = os.path.join(BASE_DIR, "static")

运行命令

    python manage.py collectstatic

uwsgi的安装和配置

进入虚拟环境,安装uwsgi

    workon MxOnline
    pip install uwsgi

在项目根目录下新建uwsgi.ini 配置文件, 内容如下:

    # mysite_uwsgi.ini file
    [uwsgi]

    # Django-related settings
    # the base directory (full path)
    chdir           = /PyProject/MxOnline
    # Django's wsgi file
    module          = MxOnline.wsgi
    # the virtualenv (full path)
    virtualenv = /root/.virtualenvs/MxOnline

    # process-related settings
    # master
    master          = true
    # maximum number of worker processes
    processes       = 5
    # the socket (use the full path to be safe
    socket          = /PyProject/MxOnline/mxonline.sock
    # ... with appropriate permissions - may be needed
    chmod-socket    = 777
    # try to remove all of the generated file/sockets
    vacuum          = true

    logto = /tmp/MxOnline.log

注:
chdir: 表示需要操作的目录,也就是项目的目录
module: wsgi文件的路径
processes: 进程数
virtualenv:虚拟环境的目录
socket: 可以是127.0.0.1:8000,也可以是sock文件;如果是文件,和nginx通信时会自动创建
chmod-socket:
权限,如果权限不够会显示502
如果使用的不是sock文件通信的话,这里可以不设置

nginx的安装和配置

安装

yum install nginx

/etc/nginx/conf.d下新建MxOnline.conf

# the upstream component nginx needs to connect to
upstream MxOnline {
server unix:///PyProject/MxOnline/mxonline.sock; # for a file socket
# server 127.0.0.1:8000; # for a web port socket (we'll use this first)
}
# configuration of the server

server {
# the port your site will be served on
listen      80;
# the domain name it will serve for
# server_name mxonline.cht3.top; 有域名的话可以直接填域名,没有的话直接写ip
server_name xxx.xx.xx.xx ; # substitute your machine's IP address or FQDN
charset     utf-8;

# max upload size
client_max_body_size 75M;   # adjust to taste

# Django media
location /media  {
    alias /PyProject/MxOnline/media;  # 指向django的media目录
}

location /static {
    alias /PyProject/MxOnline/static; # 指向django的static目录
}

# Finally, send all non-media requests to the Django server.
location / {
    uwsgi_pass  MxOnline;
    include     uwsgi_params; # the uwsgi_params file you installed
}
}

重启nginx,
systemctl restart nginx
进入虚拟环境,
workon MxOnline
,进入项目根路径,执行
uwsgi --ini uwsgi.ini
打开浏览器输入服务器的IP地址,就可以看到网站的页面了
这里推荐一些域名交易网站(域名已备案的那种)
好名网
聚名网
配置好解析后在配置nginx,
重启nginx,浏览器输入域名就可访问了

通过systemctl status nginx.service可以查看启动失败的原因

阿里云要求服务器信息和域名信息一致才行
这里不使用80,在安全组中添加8081端口
nginx中也不再监听80端口,而是监听8081端口

listen      8081;
# the domain name it will serve for
server_name mxonline.cht3.top:8081 mxonline.iceflower.top:8081; 

在线教育

supervisor管理uwsgi

在系统环境,不是虚拟环境,安装supervisor
supervisor不支持3.x,系统的环境是2.7

pip install supervisor
### 生成配置文件,且放在/etc目录下
echo_supervisord_conf > /etc/supervisord.conf

### 为了不将所有新增配置信息全写在一个配置文件里,这里新建一个文件夹,每个程序设置一个配置文件,相互隔离
mkdir /etc/supervisord.d/  

### 修改配置文件
vim /etc/supervisord.conf

### 加入以下配置信息
[include]
files = /etc/supervisord.d/*.conf

### 在supervisord.conf中设置通过web可以查看管理的进程,加入以下代码(默认即有,取消注释即可)    
[inet_http_server] 
port=9001
username=user      
password=123


### 启动supervisord

supervisord -c /etc/supervisord.conf

现在通过 http://ip:9001/ 就可以查看supervisor的web界面了(默认用户名及密码是user和123),当然目前还没有加入任何监控的程序。

/etc/supervisord.d/目录下新建一个MxOnline.conf的文件,内容如下

# 程序的名字,在supervisor中可以用这个名字来管理该程序,随便起
[program:MxOnline]
# 指定运行用户
user = root
# 启动程序的命令
command = /root/.virtualenvs/MxOnline/bin/uwsgi --ini uwsgi.ini
# 项目的目录
directory = /PyProject/MxOnline
# 开始的时候等待多少秒
startsecs = 0
# 停止的时候等待多少秒
stopwaitsecs = 0
# 设置改程序是否虽supervisor的启动而启动
autorstart = true
# 程序挂了是否需要重新将其启动
autorestart = true
# 是否将程序错误信息重定向到文件
redirect_stderr=true
# 输出的log文件(log目录需要手动创建)
stdout_logfile = /PyProject/MxOnline/log/supervisord.log
# 输出的错误文件(log目录需要手动创建)
stderr_logfile = /PyProject/MxOnline/log/supervisord.err

[supervisord]
# log的级别
loglevel = info

忽视这段代码

# 使用supervisorctl的配置
[supervisorctl]
# 使用supervisorctl登陆的地址和端口
serverurl = http://127.0.0.1:9001
# 登陆supervisorctl的用户名和密码
username = admin
password = admin123

# supervisor的服务器,可以通过浏览器进入
[inet_http_server]
port=0.0.0.0:9001
username=admin
password=admin123

重新启动supervisord,或者重新加载配置文件:

supervisorctl reload
### 或者
supervisorctl -c /etc/supervisord.conf

打开浏览器,输入IP:9001
输入账号和密码
即可看到supervisor的web管理界面

阿里云的服务器25端口被封了,邮件无法发送,只能使用465端口了
协议也要使用SSL了

# 发送邮件的setting设置
EMAIL_HOST = "smtp.aliyun.com"
EMAIL_PORT = 465
EMAIL_HOST_USER = "xxxxxx@aliyun.com"
EMAIL_HOST_PASSWORD = "xxxxxx"
EMAIL_USE_SSL= True
EMAIL_FROM = "xxxx@aliyun.com"

服务器重启后查看MySQL和nginx是否重新启动
没有谱的话需要重启

修改系统python版本

安装的python3存放位置

[root@gyj bin]# cd /usr/local/bin/
[root@gyj bin]# ls
2to3-3.6  easy_install-3.6  idle3.6  pip3.6  pydoc3.6  python3.6  python3.6m  python3.6m-config  pyvenv-3.6

创建python3的链接

[root@gyj bin]# ln -s /usr/local/bin/python3.6 /usr/bin/python
ln: failed to create symbolic link ‘/usr/bin/python’: File exists
[root@gyj bin]# pwd
/usr/local/bin
[root@gyj bin]# cd /usr/bin/
[root@gyj bin]# mv python python.back
[root@gyj bin]# ln -s /usr/local/bin/python3.6 /usr/bin/python
[root@gyj bin]# ln -s /usr/local/bin/python3.6 /usr/bin/python3
ln: failed to create symbolic link ‘/usr/bin/python3’: File exists

修改使用系统python的文件,将里面的python改为python2

[root@gyj bin]# cd /usr/bin/
[root@gyj bin]# ls yum*
yum  yum-builddep  yum-config-manager  yum-debug-dump  yum-debug-restore  yumdownloader  yum-groups-manager
[root@gyj bin]# vim yum
[root@gyj bin]# vim yum-builddep 
[root@gyj bin]# vim yum-config-manager 
[root@gyj bin]# vim yum-debug-dump 
[root@gyj bin]# vim yum-debug-restore 
[root@gyj bin]# vim yumdownloader 
[root@gyj bin]# vim yum-groups-manager 
[root@gyj bin]# vim /usr/libexec/urlgrabber-ext-down 
posted @ 2018-09-17 14:22  寒菱  阅读(599)  评论(0编辑  收藏  举报