美好的一天,哈布罗夫斯克!有空闲时间,并且渴望制作一个小型Web应用程序。有一个想法(从天气传感器接收数据,将其存储在数据库中,然后做一些有趣的事情),也是一个在centos上的免费服务器。关于设置的教程似乎也一样。但是在撰写本文时,还没有找到一个完全可以正常工作的教程。如果您还想使用python3 在CentOS 7.4服务器上部署应用程序*捆绑包,uwsgi和nginx,欢迎使用cat。因此,本文应该已经涵盖了什么,而将不会涵盖什么:- 运行CentOS 7.4的物理或虚拟服务器(不保证其他操作系统和版本的性能)。
- 使用超级用户特权访问服务器*如果服务器是虚拟的,则假定存在通过SSH连接到服务器的能力。
以root用户身份连接后,第一步是创建一个具有管理员权限的新用户(这不是必需的,但至少要有一个良好的基调):adduser developer
passwd developer
在这里您需要输入并确认用户密码usermod -aG wheel developer
将用户添加到本地管理员组su - developer
切换到新创建的用户。现在准备环境:sudo yum install -y epel-release
sudo yum install -y python3 python3-pip python3-devel nginx gcc
sudo yum update -y python36 python2
sudo yum groupinstall -y "Development Tools" "Development Libraries"
sudo yum install -y python3-devel python36-virtualenv
我想提请注意倒数第二行- “开发工具”和“开发库”对于正确启动虚拟环境是必需的。我们使用标志,以便团队完成而不要求确认。现在,您可以开始创建工作目录:sudo mkdir /opt/myproject && cd /opt/myproject
sudo chown -R developer /opt/
python3 -m venv myprojectenv
source myprojectenv/bin/activate
pip3 install --upgrade pip
pip3 install uwsgi flask
现在,我们vi /opt/myproject/wsgi.py
将准备该Web应用程序的入口点:(以下,我将使用vi编辑器,但这只是一个问题)def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return ["<h1 style='color:blue'>Testing Success!</h1>"]
启动后的这段代码将使我们能够确保之前采取的所有步骤均成功。要测试,请运行该服务:uwsgi --socket 0.0.0.0:8080 --protocol=http -w wsgi
通过物理ljcnegt或rdp连接,可以在浏览器中以0.0.0.0:8080检查结果。通过SSH连接,打开一个新会话并使用curl测试:curl -v 0.0.0.0:8080
-v标志使您可以查看完整的输出。测试完成后,您应按CTRL + C终止服务(否则,您必须查找进程并用kill杀死它。这也是退出,但绝对不太方便)。现在,您可以制作主要的Web应用程序:vi /opt/myproject/myproject.py
from flask import Flask
application = Flask(__name__)
@application.route("/")
def hello():
return "<h1 style='color:blue'>Hello There!</h1>"
if __name__ == "__main__":
application.run(host='0.0.0.0')
测试过程与上一个非常相似-我们使用命令启动应用程序python3 /opt/myproject/myproject.py
并进行检查。结果应该是相同的。现在编辑入口点,以便在调用该入口点时,我们的应用程序启动:vi /opt/myproject/wsgi.py
from myproject import application
if __name__ == "__main__":
application.run()
现在最困难也最有趣。是时候使用此应用程序制作服务了,该服务将在后台自动运行。首先,为uwsgi准备ini文件:vi /opt/myproject/myproject.ini
[uwsgi]
wsgi-file = myproject/wsgi.py
master = true
processes = 2
uid = developer
socket = /tmp/uwsgi/myproject.sock
chown-socket = nginx:nginx
chmod-socket = 666
vacuum = true
die-on-term = true
在这里,我要注意以下几行:- socket = /tmp/uwsgi/myproject.sock-为了加快服务速度,您应该使用unix-socket,为了让nginx连接到它,请在临时文件夹/ tmp / uwsgi中创建它
- chown-socket = nginx:nginx会将套接字使用权转让给nginx用户
- chmod-socket = 666-与上一个目的相同。不同的手册和技巧具有不同的参数值-664、665、777-但通过实验确定666是最低工作水平。
现在,您可以直接继续创建服务:sudo vi /etc/systemd/system/myproject.service
[Unit]
Description=uWSGI instance to serve myproject app
After=network.target
[Service]
ExecStartPre=-/usr/bin/bash -c 'mkdir -p /tmp/uwsgi chown nginx:nginx /tmp/uwsgi'
ExecStart=/usr/bin/bash -c 'cd /opt/myproject; source myprojectenv/bin/activate; uwsgi --ini myproject.ini'
ExecStartPost=/usr/bin/bash -c 'setenforce 0'
PrivateTmp=false
[Install]
WantedBy=multi-user.target
所有有趣的行都在Service块中:- ExecStartPre是系统管理员在启动服务之前将执行的命令。
-/ usr / bin / bash -c宣布下一个命令序列的开始,“ mkdir -p / tmp / uwsgi chown nginx:nginx / tmp / uwsgi”为套接字创建一个临时文件夹,并将权限转移给nginx用户。 - ExecStart是直接启动服务的命令,在该命令中,我们将依次进入工作目录,激活虚拟环境并从ini文件启动uwsgi-server。
- ExecStartPost-服务启动后运行的命令。在我们的情况下,需要将请求从Nginx服务器正确传输到uwsgi服务器。
- PrivateTmp = false是使创建的临时文件夹对其他进程可见的参数。
现在运行服务:systemctl start myproject
systemctl status myproject
systemctl enable myproject
服务器重启后,最后一条命令将使其自动启动。最后一个问题-我们将配置nginx服务器,并使我们的Web应用程序可用于外部网络。始终可以使用以下命令查看他的工作日志journalctl -u myproject
sudo vi /usr/lib/systemd/system/nginx.service
找到[Service]块,最后添加PrivateTmp = false。之后,使用命令重新启动守护程序,systemctl daemon-reload
现在我们直接进行服务器配置:vi /etc/nginx/nginx.conf
http {
. . .
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
. . .
找到http块并添加新服务器:server {
listen 80;
server_name server_domain_or_IP;
location / {
include uwsgi_params;
uwsgi_pass unix:/tmp/uwsgi/myproject.sock;
}
}
现在仍然可以打开服务器并在防火墙上编辑规则:systemctl start nginx
systemctl enable nginx
firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload
现在,通过域名或IP地址访问服务器时,我们将收到Flask应用程序的响应。我希望这些材料会有用。