nginx+uwsgi或nginx+python中manage部署多个网站

现在遇到一个问题自己有两个网站需要发布,但是自己只有一台服务器,想要发布两个网站。自己研究了两种方案。

一个服务器部署多个网站。

方案一:不推荐

1、blog 网站

1
2
使用python虚拟环境进入/home/code/blog_web目录
使用python manage.py 启动项目

2、学习 网站

1
2
使用python虚拟环境进入/home/code/study_web目录
使用python manage.py 启动项目

3、启动nginx

注:

Debian系统需要编译安装nginx

下面的命令是Debian系统的启动命令

1
2
启动  nginx 
关闭  nginx -s stop

centos的启动命令是

1
2
3
4
systemctl start nginx   启动
systemctl stop nginx   停止
systemctl restart nginx 重启
systemctl status nginx 查看nginx状态

4、nginx配置

单独启动两个网站使用 python manage.py文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#网站1端口转发
server {
    listen       80;
    server_name  www.blog.com;
    access_log /home/code/blog_web/logs/blog_web.log;
    error_log /home/code/blog_web/logs/blog_web.error;
    
    #将所有请求转发给demo_pool池的应用处理
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8000;
    }
}
#网站2端口转发
server {
    listen       80;
    server_name  www.study.com;
    access_log /home/code/study_web/logs/study_web.log;
    error_log /home/code/study_web/logs/study_web.error;
    
    #将所有请求转发给demo_pool池的应用处理
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8001;
    }
}

这个需要在后台一直运行的话可以使用linux自带的nohup命令 到有manage.py文件夹下面运行:

1
nohup python manage.py &

不推荐这种方案。

方案二:推荐

1、nginx配合uwsgi的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#网站一端口转发
server {
    listen       80; 
    server_name  www.blog.com;
    access_log /home/code/blog_web/logs/blog_web.log;
    error_log /home/code/blog_web/logs/blog_web.error;
    
    #将所有请求转发给demo_pool池的应用处理
    location / { 
        include uwsgi_params;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        uwsgi_pass 127.0.0.1:8000;
    }   
}
#网站二端口转发
server {
    listen       80; 
    server_name  www.study.com;
    access_log /home/code/study_web/logs/study_web.log;
    error_log /home/code/study_web/logs/study_web.error;
    
    #将所有请求转发给demo_pool池的应用处理
    location / { 
        include uwsgi_params;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        uwsgi_pass 127.0.0.1:8001;
    }   
}

2、blog网站uwsgi配置

blog的uwsgi配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[uwsgi]
# chdir — 项目所在的目录
chdir=/home/code/blog_web
# virtualenv — 项目虚拟环境的目录
virtualenv = /home/blogenv
# 启动的model
module = manage:app
# 启动文件
wsgi-file=manage.py
callable=app
#启动一个master进程来管理其他进程,以上述配置为例,其中的4个uwsgi进程都是这个master进程的子进程,如果kill这个master进程,相当于重启所有的uwsgi进程
master=true
#进程数量
processes = 4 
#线程数量
threads=2
###使进程在后台运行,并将日志打到指定的日志文件或者udp服务器,日志文件会自动创建
daemonize=/var/log/uwsgi/blog_web.log
#其中socket是用来uwsgi与nginx之间通信的
socket = 127.0.0.1:8000

3、学习 网站uwsgi配置

学习网站uwsgi配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[uwsgi]
# chdir — 项目所在的目录
chdir=/home/code/study_web
# virtualenv — 项目虚拟环境的目录
virtualenv = /home/studyenv
# 启动的model
module = manage:app
# 启动文件
wsgi-file=manage.py
callable=app
#启动一个master进程来管理其他进程,以上述配置为例,其中的4个uwsgi进程都是这个master进程的子进程,如果kill这个master进程,相当于重启所有的uwsgi进程
master=true
#进程数量
processes = 4 
#线程数量
threads=2
###使进程在后台运行,并将日志打到指定的日志文件或者udp服务器,日志文件会自动创建
daemonize=/var/log/uwsgi/study_web.log
#其中socket是用来uwsgi与nginx之间通信的
socket = 127.0.0.1:8001

推荐方案:也是我现在用的方案。

部署一个网站可以参考文章《Flask项目部署

原创出品,喜欢可以收藏转载哦!!!

作者:lizhonglin

github: https://github.com/Leezhonglin/

blog: https://leezhonglin.github.io/

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是基于 Ubuntu 20.04 操作系统的 nginx+uwsgi+docker+django4.0+python3.9+mysql8.0 部署步骤: 1. 首先安装必要的软件和依赖: ``` sudo apt-get update sudo apt-get install -y git python3-pip python3-dev python3-venv build-essential libssl-dev libffi-dev nginx docker.io docker-compose mysql-server ``` 2. 创建并激活 Python 虚拟环境: ``` python3 -m venv myprojectenv source myprojectenv/bin/activate ``` 3. 安装 Django 和 uWSGI: ``` pip install django==4.0 uwsgi ``` 4. 创建 Django 项目: ``` django-admin startproject myproject cd myproject ``` 5. 配置 Django 数据库设置: 打开 `myproject/settings.py` 文件,在 `DATABASES` 添加以下内容: ``` DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'myprojectdb', 'USER': 'myprojectuser', 'PASSWORD': 'mypassword', 'HOST': 'localhost', 'PORT': '3306', } } ``` 6. 创建 MySQL 数据库和用户: 登录 MySQL: ``` sudo mysql ``` 创建数据库: ``` CREATE DATABASE myprojectdb CHARACTER SET UTF8; ``` 创建用户: ``` CREATE USER 'myprojectuser'@'localhost' IDENTIFIED BY 'mypassword'; ``` 授权用户访问数据库: ``` GRANT ALL PRIVILEGES ON myprojectdb.* TO 'myprojectuser'@'localhost'; ``` 刷新权限: ``` FLUSH PRIVILEGES; ``` 退出 MySQL: ``` exit ``` 7. 测试 Django 项目是否能够正常运行: ``` python manage.py runserver ``` 在浏览器访问 `http://localhost:8000`,如果能够正常显示 Django 的欢迎页面,说明 Django 项目已经成功搭建。 8. 配置 uWSGI: 创建 `myproject/uwsgi.ini` 文件,添加以下内容: ``` [uwsgi] socket = :8001 chdir = /path/to/myproject module = myproject.wsgi:application master = true pidfile = /tmp/myproject-master.pid processes = 4 threads = 2 vacuum = true max-requests = 1000 harakiri = 60 ``` 9. 启动 uWSGI: ``` uwsgi --ini myproject/uwsgi.ini ``` 10. 配置 nginx: 创建 `/etc/nginx/sites-available/myproject` 文件,添加以下内容: ``` server { listen 80; server_name myproject.com; access_log /var/log/nginx/myproject.access.log; error_log /var/log/nginx/myproject.error.log; client_max_body_size 20M; location /static/ { alias /path/to/myproject/static/; } location /media/ { alias /path/to/myproject/media/; } location / { uwsgi_pass 127.0.0.1:8001; include /etc/nginx/uwsgi_params; } } ``` 11. 创建软链接: ``` sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/ ``` 12. 测试 nginx 配置是否正确: ``` sudo nginx -t ``` 如果没有错误,重启 nginx: ``` sudo systemctl restart nginx ``` 13. 创建 Dockerfile: 在 Django 项目根目录下创建 `Dockerfile` 文件,添加以下内容: ``` FROM python:3.9 RUN apt-get update \ && apt-get install -y nginx \ && rm -rf /var/lib/apt/lists/* RUN pip install uwsgi COPY ./requirements.txt /app/requirements.txt RUN pip install -r /app/requirements.txt COPY . /app WORKDIR /app RUN python manage.py collectstatic --noinput COPY ./myproject-nginx.conf /etc/nginx/sites-available/myproject RUN ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/ RUN rm /etc/nginx/sites-enabled/default EXPOSE 80 CMD service nginx start && uwsgi --ini /app/uwsgi.ini ``` 14. 创建 docker-compose.yml 文件: 在 Django 项目根目录下创建 `docker-compose.yml` 文件,添加以下内容: ``` version: '3' services: web: build: . ports: - "80:80" depends_on: - db volumes: - ./static:/app/static - ./media:/app/media environment: - DB_HOST=db - DB_NAME=myprojectdb - DB_USER=myprojectuser - DB_PASSWORD=mypassword db: image: mysql:8.0 volumes: - db_data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=rootpassword - MYSQL_DATABASE=myprojectdb - MYSQL_USER=myprojectuser - MYSQL_PASSWORD=mypassword volumes: db_data: ``` 15. 构建和运行 Docker 容器: ``` sudo docker-compose up --build ``` 16. 测试 Django 项目是否能够正常运行: 在浏览器访问 `http://localhost`,如果能够正常显示 Django 的欢迎页面,说明 Django 项目已经成功部署到 Docker 容器。 至此,nginx+uwsgi+docker+django4.0+python3.9+mysql8.0 部署完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kujirashark

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值