nginx +gunicorn 部署flask web

概述:

此文記錄我如何在一臺全新的騰訊雲主機上部署一個flask web,

一般我們的博客都會在完成後整理成一個最優解,但

這篇文章我不準備做任何整理,完全展現我部署的整個思維方式,希望給更多的人一種另外一種啓示

服務部署地址

 

nginx安裝

#nginx 編譯依賴庫 

1.yum install pcre pcre-devel          

2. yum install openssl openssl-devel 

#nginx 下載網址

http://nginx.org/download/nginx-1.15.10.tar.gz   

#創建nginx賬號

useradd  nginx -s /sbin/nologin -M    # -M  不創建家目錄  -s /sbin/nologin 禁止shell登錄

#解壓

tar -zxvf nginx-1.15.10.tar.gz 

#編譯,安裝目錄/usr/local/app/nginx/

./configure --user=nginx --group=nginx --prefix=/usr/local/app/nginx/ --with-http_stub_status_module --with-http_ssl_module


#編譯顯示的信息
  nginx path prefix: "/usr/local/app/nginx/"
  nginx binary file: "/usr/local/app/nginx//sbin/nginx"
  nginx modules path: "/usr/local/app/nginx//modules"
  nginx configuration prefix: "/usr/local/app/nginx//conf"
  nginx configuration file: "/usr/local/app/nginx//conf/nginx.conf"
  nginx pid file: "/usr/local/app/nginx//logs/nginx.pid"
  nginx error log file: "/usr/local/app/nginx//logs/error.log"
  nginx http access log file: "/usr/local/app/nginx//logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

#

#測試nginx

cd  /usr/local/app/nginx/sbin
./nginx -t 
nginx: the configuration file /usr/local/app/nginx//conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/app/nginx//conf/nginx.conf test is successful

#nginx 重載命令

nginx -s reload 

#放通80端口
iptables -I INPUT -p tcp --dport 80 -j ACCEPT 


#nginx  配置
去掉#和空行 生成 新的 nginx.conf  配置文件  
egrep -v "#|^$" nginx.conf.bak  >nginx.conf

# nginx配置文件如下

[root@VM_0_12_centos conf]# pwd 
/usr/local/app/nginx/conf

[root@VM_0_12_centos conf]# cat nginx.conf

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
			proxy_pass http://127.0.0.1:8000;
			proxy_set_header Host $host;
			proxy_set_header X-Forwarded-For $remote_addr; 
            proxy_buffer_size 4k;
			proxy_buffers 4 32k ;
			proxy_busy_buffers_size 64k;
			proxy_temp_file_write_size 64k;
			#root   html;
            #index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
[root@VM_0_12_centos conf]# 

 

 

vim設置4空格

在修改nginx 配置的時候,tab鍵不是4空格就順手改了

#vim 簡單配置 設置tab鍵爲4個空格
cp  /etc/vimrc  ~/.vimrc 
set  ts=4

python 安裝

#linux python 安裝  linux 可以通過wget 下載安裝包,但是下載太慢了,我就本地開代理下載後,直接通過scp上傳的
1.wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz  #雲主機wget太慢

2.scp  ./Python-3.6.5.tgz   [email protected]:~  #scp上傳python安裝包

#解壓

tar -zxvf Python-3.6.5.tgz
cd Python-3.6.5

#配置-編譯-安裝
./configure --prefix=/usr/local
make&&make install 

#
python3.6程序的執行文件:/usr/local/bin/python3.6
python3.6應用程序目錄:/usr/local/lib/python3.6
pip3的執行文件:/usr/local/bin/pip3.6
#

git安裝

yum install git  
#安裝git 的原因我想直接在github clone web工程,後來發現速度太太慢了,後來還是自己本地上傳的

gunicorn 安裝

#安裝

pip3 install gunicorn

啓動命令

gunicorn -w 2  -D --log-level info --access-logfile /usr/local/app/gun_log/access.log --error-logfile /usr/local/app/gun_log/error.log -b 127.0.0.1:8000 blog:app

-w 進程數
-b 設置端口

-D 後臺啓動 

mysql安裝

在gunicorn 啓動後,遠程訪問,報錯了,纔想起來mysql 沒有安裝。。。。。

#通過yum 安裝,簡單粗暴,但是我想安裝5.7的mysql 所以我手動通過方式二安裝的mysql
yum install mysql

方式二:

# groupadd mysql 
# useradd -s /sbin/nologin -g mysql -M mysql 

#安裝mysql
# wget https://repo.mysql.com//mysql57-community-release-el7-8.noarch.rpm
# yum -y localinstall mysql57-community-release-el7-8.noarch.rpm
# yum -y install mysql-community-server

#啓動

service mysqld start  #我習慣這種方式啓動mysql
systemctl start mysqld
systemctl restart mysqld

#開機啓動
systemctl enable mysqld

systemctl daemon-reload

#mysql安裝完成之後,在/var/log/mysqld.log文件中給root生成了一個臨時的默認密碼。

vi /var/log/mysqld.log

    1 [Note] A temporary password is generated for root@localhost: d6#(*YXu!x92

#mysql -u root  -p 
修改root 密碼
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '你自己的密碼';
授權遠程登錄
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Onionxxxxxx' WITH GRANT OPTION;
查看編碼
mysql> show variables like '%character%';

mysql> show variables like '%character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)


修改mysql編碼
# vim /etc/my.cnf
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'

#修改後記得重啓mysql,
 

登錄mysql 創建blog數據庫

mysql> create database blog;

 進入工程生成數據

cd  /home/onion/project/blog/app

python3 data_fake.py   #執行報錯app 找不到

手動在data_fake.py 中加入如下幾行

import sys
sys.path.append("/home/onion/project/blog")

 

自此 整個工程部署完成

後記

部署結果

點擊左上角onion博客,會彈出登錄界面,

賬號:[email protected] 

密碼:zhou

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章