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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,412评论 9 163
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,360评论 6 343
  • 使我介然有知,行于大道,唯施是畏。 使:让。我:真我。介然有知:介入大道,尔后获得真知。真我介于自我与大道之间,是...
    度朴阅读 576评论 0 51
  • “老吾老,以及人之老;幼吾幼,以及人之幼。”尊老爱幼,是我们中华民族源远流长的传统美德。这种美德,是社会发展的需要...
    逗比客栈阅读 360评论 0 8