之前完成了貼吧簽到系統的搭建,筆者想將這個功能分享給更多人使用,所以嘗試搭建了一個網頁,一路遇到了很多問題,最終解決了,記錄下過程分享給大家
首先安裝 uWSGI ,和 Nginx 配套使用,具體用途自行查閱(已配置Python3環境)
pip3 install uwsgi
新建一個 uWSGI 的配置文件,路徑自選,筆者配置文件路徑為 /root/uwsgi.ini ,項目路徑為 /root/flask ,配置文件內容如下
[uwsgi] socket = 127.0.0.1:8000 processes = 4 threads = 2 master = true pythonpath = /root/flask module = manage callable = app memory-report = true
其中需要修改的是 callable 名,即 app = Flask(__name__) 名字,一般是 app ,筆者含有這行代碼的文件名為 manage.py ,所以 module 名為 manage ,socket 最后的8000需要記下,后面配置 Nginx 需要,這個值可以修改成自己需要的
如果已經運行過 uWSGI,可以先殺掉進程
killall -9 uwsgi
然后啟動 uWSGI
uwsgi --ini /root/uwsgi.ini -d /root/uwsgi.log
不要使用 uWSGI -x 命令,一般此命令使用的是 xml 配置文件,如果要用此命令,則需要安裝
yum install libxml*
然后重新安裝 uWSGI 即可
使用yum安裝 Nginx
sudo yum install epel-release
sudo yum install nginx
使用systemctl控制Nnginx
systemctl start nginx
systemctl restart nginx
systemctl enable nginx 設置開機啟動
killall -9 nginx
然后打開Nginx配置文件,路徑一般為
/etc/nginx/nginx.conf
也可以使用以下命令查找路徑
find / -name nginx.conf
編輯配置文件,可以使用vim或者使用ftp軟件,筆者使用的是WinSCP,因為后文需要將本地的項目傳到VPS服務器,找到下文中位置(http段內),添加紅色的兩句,地址填寫上文uWSGI里的地址,如果在 Flask 中配置了錯誤頁面的路由,則不用修改這里的其他內容
location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8000; root html; index index.html index.htm; }
修改防火牆配置,允許HTTP和HTTPS通信
sudo firewall-cmd --permanent --zone=public --add-service=http sudo firewall-cmd --permanent --zone=public --add-service=https sudo firewall-cmd --reload
然后用上文的命令重啟Nginx服務
之后就是配置Flask項目相關的庫,如果有 requirements.txt 文件,可以直接使用以下命令安裝所有依賴包,如沒有則需手動安裝
pip3 install -r /root/flask/requirements.txt
筆者使用的是 MySQL ,所以也記錄下 MySQL 的安裝過程
下載解壓安裝 MySQL
wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm rpm -Uvh mysql57-community-release-el7-10.noarch.rpm yum install -y mysql-community-server
啟動 MySQL 服務,(CentOS7 已經用 systemctl 指令替代了原來的 service 命令)
systemctl start mysqld.service
新版MySQL安裝后又默認密碼,密碼儲存在 /var/log/mysqld.log 中,可以直接使用查找命令獲得
grep 'temporary password' /var/log/mysqld.log
然后使用默認密碼登陸,-p 為帶密碼登陸,回車后再輸入密碼
mysql -u root -p
然后修改密碼強度保護
set global validate_password_policy=0; set global validate_password_length=1;
然后再修改密碼(紅色部分為你的密碼)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourpassword';
就可以正常使用了,退出 MySQL 界面使用 exit 命令
但是 Flask 項目使用 MySQL 時還需要安裝 mysqlclient 庫(如果使用 pymysql 之類的第三方庫就不需要,使用 Flask 自帶的 Flask-SQLAlchemy則需要)
yum install mysql-devel yum install gcc python-devel pip install mysqlclient
MySQL 配置大致如此,然后通過 WinSCP 等 sftp 軟件傳輸到 vps 服務器即可
至此,大部分功能就能夠正常實現了,如果你已經購買了域名,筆者使用的是阿里雲,購買了域名和一年的雲解析服務,然后配置雲解析目標地址為服務器地址,記錄類型為A,域名為 *.你的域名 即可,接下來就可以嘗試打開你的網站了(初步設置完域名解析可能要一段時間才能訪問)
如果一切順利,現在就能顯示你的網站了,如果出現問題,可以通過以下途徑查看問題所在
直接運行 Flask 項目,查看是否是庫安裝的問題
python3 manage.py
如果已經訪問過網站,可以在 Nginx 和 uWSGI 的日志里面查看問題
/root/uwsgi.log
/usr/local/nginx/log/
如果已經能訪問網站,操作數據庫時出現問題,可以查看數據庫的日志
/var/log/mysqld.log
基本能通過日志發現問題,解決方法請自行搜索報錯內容
如果是安裝過程中出現問題,則可以清理完再重新安裝,搜索安裝過的軟件和文件,先卸載軟件再刪除參留文件(以 MySQL 為例)
yum remove mysql mysql-server mysql-libs mysql-server;
如果是 yum 安裝的則用 yum 卸載,用 pip 安裝的用 pip卸載
rpm -qa | grep -i mysql
rpm 查找到的軟件用 yum remove 卸載,因為依賴問題無法卸載可以使用 rpm -e --nodeps卸載,安裝時不要使用 --nodeps 跳過依賴檢查
find / -name mysql
find 查找到的文件用 rm -rf 刪除(記得驗證是否是正確的路徑)
chkconfig --list | grep -i mysql
刪除相關的服務 chkconfig --del mysql
卸載完之后再查找一遍,若清理干凈則可以重新安裝,可同理卸載 Nginx 和 uWSGI
理論上網頁已經能正常運行在VPS上了,如果還出現其他問題,讀者可以自行嘗試解決並留言寫下解決方法
在此感謝以下Geeks
CentOS 7下搭建Nginx+uWSGI+Flask https://blog.csdn.net/qq965194745/article/details/79417976 nginx和uwsgi配置 https://blog.csdn.net/guoqingpei/article/details/52749101
如何在CentOS 7上安裝Nginx
https://blog.csdn.net/oldguncm/article/details/78855000
Centos7.3 安裝Mysql5.7並修改初始密碼 https://blog.csdn.net/zyw_java/article/details/70949596 Centos pip install mysqlclient Error https://blog.csdn.net/cemao4548/article/details/78287086 centos下徹底刪除MYSQL 和重新安裝MYSQL https://www.cnblogs.com/cyl048/p/6879085.html
更新時間 2018.07.21