Flask nginx gunicorn在Centos7.4上的部署

1. 服务器初始化配置

1.1 用户及权限

增加用户,设置密码

useradd git
passwd git

获取管理员列表的写权限

chmod u+w /etc/sudoers

修改管理员列表

vi /etc/sudoers

在root ALL=(ALL) ALL下添加:

git ALL=(ALL) ALL

退出vim后,撤销写权限

chmod u-w /etc/sudoers

1.2 zsh安装配置

su git
cd
sudo yum -y install zsh git
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh
chsh -s /bin/zsh

先在root用户安装oh-my-zsh可能会导致权限问题

1.3 ssh无密码登录

在本地终端运行这两行命令。

ssh-keygen -t rsa 
ssh-copy-id root@server

如果出现WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!,那么rm ~/.ssh/known_hosts或者删除其中对应的ip项。

1.4 python3.4安装配置

安装python36请看文章末尾。

  • 安装python34
sudo yum -y install python34
  • 修改pip源
mkdir ~/.pip && vi ~/.pip/pip.conf

添加如下内容

[global]
trusted-host=mirrors.aliyun.com
index-url=http://mirrors.aliyun.com/pypi/simple/
  • 备份python2.7,修改默认为python3
sudo mv /usr/bin/python /usr/bin/python.bak
sudo ln -s /usr/bin/python3 /usr/bin/python
  • 修改yum使用python2.7(不支持python3)
sudo vi /usr/bin/yum
#!/usr/bin/python2.7   # 修改为python2.7
  • 修改urlgrabber
sudo vi /usr/libexec/urlgrabber-ext-down
#!/usr/bin/python2.7  # 使用python2.7
  • 安装pip3
sudo mv /usr/bin/pip /usr/bin/pip.bak
wget bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py

2. 数据库安装配置

2.1 安装并启动mariadb

mariadb是mysql在centos上的默认版本,建议去网上了解下

sudo yum install mariadb-server python34-devel readline-devel
sudo pip install pymysql3

2.2 数据库中创建git用户并授权

切换到root用户,进入数据库

su -
mysql

在mysql> 提示符下创建用户

insert into mysql.user(Host,User,Password) values("localhost","git",password("gitpasswd"));

# 这样就创建了一个名为:git  密码为:gitpasswd  的用户。

flush privileges;

# 赋予用户权限

GRANT ALL ON *.* TO 'git'@'localhost';

2.3 修改默认使用utf-8

sudo vi /etc/my.cnf

添加以下内容

[mysqld]
character_set_server = utf8

[mysqld_safe]
character_set_server = utf8

[mysql]
default-character-set = utf8

[mysql.server]
default-character-set = utf8

[client]
default-character-set = utf8

进入mysql

 SET NAMES 'utf8';

详情点击查看

2.4 创建可能会使用的数据库(示例)

不能通过flask-sqlalchemy创建数据库,必须要进入mysql手动创建

create database data;
create database data_dev;
create database data_test;

3. vim、zsh和虚拟环境配置安装

3.1 virtualenvwrapper并配置

sudo pip install virtualenvwrapper
source /usr/bin/virtualenvwrapper.sh
mkvirtualenv -p /usr/bin/python3 env1

3.2 复制vim和zsh的配置(仅对作者有效)

scp /mnt/d/molokai.vim git@host:/usr/share/vim/vimfiles/colors
scp /mnt/d/.vimrc git@host:/home/git
scp /mnt/d/.zshrc git@host:/home/git

3.3 修改zshrc以适合Centos

source /usr/bin/virtualenvwrapper.sh
workon env1
export ZSH=/home/git/.oh-my-zsh  #(此行仅对git用户有效)

4. nginx安装配置

需要挂载数据盘请看文章末尾。

4.1 安装

sudo yum install nginx

4.2 备份config并修改

sudo mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
sudo cp /etc/nginx/nginx.conf.default /etc/nginx/nginx.conf
sudo vi /etc/nginx/nginx.conf

4.3 修改其中的server部分

server {
    listen 80;
    # 这是服务器的外部域名(不建议用IP地址)
    server_name example.com www.example.com;

    location / {
        # 这里是指向gunicorn服务器的端口
        proxy_pass http://localhost:8080; 
    }
    
    location /static {
        # 配置静态文件的相对地址
        alias /mnt/www/app/static
    }
  }

4.4 解决80端口占用问题

pgrep nginx

# 杀死进程
sudo killall -9 nginx

4.5 运行修改后的conf

# 启动默认的/etc/nginx/nginx.conf
sudo nginx

# 使用其他conf
sudo nginx -c /etc/nginx/nginx_your_config.conf

# 如果已经在运行了,则可以用非中断启动
sudo nginx -s reload

5. Git源码控制

5.1 创建裸仓库和工作目录(在服务器终端)

裸仓库用来进行推送及多人合作,工作目录用来运行应用。

  • 创建裸仓库
cd /mnt
sudo git init --bare www.git
  • 在同一位置创建工作目录
sudo git clone www.git
  • 修改两个目录的权限
sudo chown -R git:git /mnt/www
sudo chown -R git:git /mnt/www.git

5.2 拉取裸仓库,修改后推送(在本地终端)

  • 拉取裸仓库
git clone git@host:/mnt/www.git
  • (添加代码后)推送到远程
git add --all
git commit -m '第一次更新'
git push origin master

5.3 使用git钩子自动拉取更新(在服务器终端)

现在本地修改只能推送到裸仓库www.git,需要每次手动在服务器的工作目录下git pull origin master,现在我们来实现自动拉取。
-在服务器上编写自动更新钩子

cd /mnt/www.git/hooks
vi post-receive  

添加如下内容

#!/bin/sh
cd /mnt/www
unset GIT_DIR    //清空git的工作目录,git才可以进入/mnt/www/工作目录(否则会报错:remote: fatal: Not a git repository: '.')
git config --list
git pull origin master

给钩子文件添加执行权限

sudo chmod +x post-receive

5.4 Git配置参考资料:

服务器上的 Git - 配置服务器

通过Git钩子自动部署 (Git钩子必须使用裸仓库)

github网站必须用git协议,要修改git remote,点击查看详情


6. gunicorn安装配置

6.1 安装

pip istall gunicorn gevent

6.2 运行

切换到/mnt/www目录,并运行其中的wsgi文件中的application应用

cd /mnt/www
gunicorn -w 8 -t 90 -k 'gevent' -b 127.0.0.1:8080 wsgi:application

-k 'gevent'使用gevent异步模式,提高了响应速度。-t 90设置了超时时间为90秒,不然有时会出现404错误。


7. 服务器绑定多域名和守候进程

7.1 服务器绑定多域名

阿里云域名的管理中,可以转移到其他账号。
在nginx.conf中,添加一个server块,修改域名和代理不同的端口。然后用gunicorn在这个端口上运行不同的应用。

7.2 守护进程

  • sudo yum install screen 安装screen
  • screen 命令进入screen子界面
  • 运行你的程序,按下 Ctrl + a 放开,再按 d 键切回主界面。(此时可以断开ssh)
  • screen -ls 查看子界面代号(重连ssh后)
  • screen -r 子界面代号 运行子界面

8. 其他

8.1 安装python36

https://janikarhunen.fi/how-to-install-python-3-6-1-on-centos-7.html
如果nltk暂时不支持3.6,就先安装3.5。

8.2 挂载数据盘

https://help.aliyun.com/document_detail/25426.html?spm=5176.doc25422.2.4.a5TLTr

你可能感兴趣的:(Flask nginx gunicorn在Centos7.4上的部署)