阿里云ECS服务器部署django

参考


服务器安装的是Centos 系统。

uwsgi是使用pip安装的。

nginx是使用yum install nginx安装。

python 2.7, mysql 5.5使用 yum安装。


它们之间的逻辑关系如下:


the web client <-> the web server <-> the socket <-> uwsgi <-> Django

uswgi负责从Django拿内容,通过socket传给 web server如nginx, 最后显示到 网页浏览器。


在django的项目下,建文件 uswgi.ini,可以不用在uswgi后面写一串选项。


# uwsgi.ini file
[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           = /var/www/html/
# Django's wsgi file
module          = app.wsgi:application
# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 10
# the socket (use the full path to be safe
#socket          = 127.0.0.1:8001
socket		 = /tmp/site.sock
# ... with appropriate permissions - may be needed
chmod-socket    = 666
# clear environment on exit
vacuum          = true
process		= 4
threads		= 2

# Django's wsgi file这个对应你自己Django项目的就好。

chdir就是Django的所在目录,和manage.py同一目录。

其他可以默认。


同样建立nginx.conf


# nginx.conf

# the upstream component nginx needs to connect to
upstream django {
    server unix:///tmp/site.sock; # for a file socket
    #server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}

# configuration of the server
server {
    # the port your site will be served on
    listen      80;
    # the domain name it will serve for
    server_name demo.mmm.com; # substitute your machine's IP address or FQDN
    charset     utf-8;

    # max upload size
    client_max_body_size 128M;   # adjust to taste

    # Django media
    location /media  {
        alias /var/www/html/media;  # your Django project's media files - amend as required
    }

    location /static {
        alias /var/www/html/static; # your Django project's static files - amend as required
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass  django;
        include     /var/www/html/uwsgi_params; # the uwsgi_params file you installed
    }
}


uwsgi_pass django; 中的django和upstream django 相对应。

两头的socket名字要一样。uwsgi里要改sock的权限为666,默认的664,nginx会连不上,在/var/log/nginx/error.log里可以看到connect is denied。


据说使用socket比端口要好,注意unix://这个前缀,加上后面sock的路径,是3个///,看起来不好看。

无论使用socket还是TCP端口,uwsgi的socket和nginx的server值要对应,否则没法接通路径。


server_name demo.mmm.com; 看文章时,把server_name这个词看成域名,给修改掉,结果nginx启动失败。可以用域名或者IP。

ln -s  /var/www/html/nginx.conf   /etc/nginx/conf.d/

链接后,这样在conf.d 配置目录里会有Django下建立的nginx.conf,比较方便。


uwsgi_params文件在/etc/nginx下面有,老外说是拷贝到Django目录下,不知道直接使用会有什么区别。


最后:

使用chkconfig nginx on  把nginx设置成自启动服务。

在/etc/rc.local里加一行 uwsgi /var/www/html/uwsgi.ini  --uid www  --gid www


我没加uid和gid,以root运行uwsgi会被警告的。


原来是打算用apache的,所以有个/var/www/html目录。mod-python报错后,不知道怎么处理。 

系统自带Python2.6,mod-python就是调用的2.6。


nginx不能从uwsgi获得数据时,就会输出nginx的默认页面。还会输出 Bad Gateway提示。


linux最大的麻烦是,程序和配置文件分散,装好一个程序,都不知道它在哪里。

### 部署Django项目至阿里云ECS #### 准备工作 为了确保部署过程顺利,在开始之前需确认已具备如下条件: - 已注册并登录阿里云账号。 - 购买了适合配置的ECS实例,推荐选用Ubuntu Server作为操作系统版本[^1]。 #### 安装依赖软件包 通过SSH连接到新创建的ECS实例后,更新系统包列表,并安装必要的基础工具和库文件。对于基于Debian/Ubuntu系统的服务器而言,命令如下所示: ```bash sudo apt-get update && sudo apt-get upgrade -y sudo apt-get install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx curl -y ``` #### 设置Python虚拟环境与安装项目依赖项 建议为每个Web应用程序单独建立一个隔离化的Python运行时环境来管理各自的第三方模块集合。具体操作步骤如下: ```bash cd ~ python3 -m venv myproject_env source myproject_env/bin/activate pip install --upgrade pip setuptools wheel gunicorn psycopg2-binary django deactivate ``` 上述指令会创建名为`myproject_env`的新目录用于存放独立于全局解释器之外的所有资源;激活该环境之后即可利用Pip工具下载指定版本号范围内的扩展组件;最后记得退出当前作用域以便后续设置Nginx反向代理服务时不受到干扰。 #### 构建PostgreSQL数据库实例并与之关联 由于大多数情况下都会选择关系型数据管理系统存储业务逻辑层面的信息实体模型对象,则有必要提前准备好对应的持久化层支撑结构体。这里以官方文档为例简单描述一下基本流程: ```sql sudo -u postgres psql CREATE DATABASE myproject; CREATE USER myprojectuser WITH PASSWORD 'password'; ALTER ROLE myprojectuser SET client_encoding TO 'utf8'; ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed'; ALTER ROLE myprojectuser SET timezone TO 'UTC'; GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser; \q ``` 完成以上SQL语句执行动作以后便意味着成功搭建起一套可供测试使用的简易版RDBMS设施了。 #### 将本地代码迁移到远程主机之上 借助Git仓库托管服务平台或者SCP协议直接上传源码压缩包两种途径均可达成目的。假设采用后者的话则只需一条简单的Shell脚本就能搞定一切: ```bash scp -r ./local_project_directory username@your_server_ip:/home/username/ ``` 紧接着切换回目标机器内部继续完善剩余环节的工作事项。 #### 应用程序初始化设定 进入刚刚传输过来的应用根路径下面依次调用以下两条命令完成ORM映射表单同步以及静态资源收集两项重要任务: ```bash cd ~/path_to_your_django_app ~/myproject_env/bin/python manage.py makemigrations ~/myproject_env/bin/python manage.py migrate ~/myproject_env/bin/python manage.py collectstatic ``` 这些准备工作能够有效保障在线环境下各个功能模块正常运转不受影响[^3]。 #### Gunicorn进程守护者配置 编辑位于用户家目录下的`.profile`文件追加一行导出变量声明语句指向实际存在的Wsgi入口函数位置处: ```bash echo "export DJANGO_SETTINGS_MODULE=myapp.settings.production" >> ~/.profile source ~/.profile ``` 随后编写Gunicorn启动参数模板保存成文本形式存放在合适的地方比如说是`/etc/systemd/system/gunicorn.service`内方便日后维护调整: ```ini [Unit] Description=gunicorn daemon After=network.target [Service] User=username Group=www-data WorkingDirectory=/home/username/myproject ExecStart=/home/username/myproject_env/bin/gunicorn \ --workers 3 \ --bind unix:/home/username/myproject.sock \ myapp.wsgi:application [Install] WantedBy=multi-user.target ``` 重启Systemctl使更改生效的同时也开启了监听端口等待来自外部世界的HTTP请求到来。 #### Nginx Web服务器前端接入 打开/etc/nginx/sites-available/default这个默认站点配置文件按照实际情况修改server_name字段值以及其他必要选项从而建立起有效的转发机制让客户端浏览器可以直接访问网站主页而无需暴露真实IP地址信息给公众知晓: ```nginx server { listen 80; server_name your_domain_or_IP; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /home/username/myproject; } location / { include proxy_params; proxy_pass http://unix:/home/username/myproject.sock; } } ``` 别忘了重新加载Nginx主控单元使得最新的改动立即得到体现出来。 #### Supervisor自动恢复机制集成 考虑到长时间连续运作过程中难免会出现意外情况导致某些子服务突然停止响应的问题所在因此引入Supervisord监控插件不失为一个好的解决方案之一。先安装再新建相应的控制策略定义文档放置在预设好的扫描范围内例如说是在`/etc/supervisor/conf.d/django.conf`里头: ```ini [program:gunicorn] directory=/home/username/myproject command=/home/username/myproject_env/bin/gunicorn --workers 3 --bind unix:/home/username/myproject.sock myapp.wsgi:application autostart=true autorestart=true stderr_logfile=/var/log/gunicorn.err.log stdout_logfile=/var/log/gunicorn.out.log [group:django] programs:gunicorn ``` 最终一步就是通知后台线程刷新缓存区内容进而接管整个生命周期管理工作啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

容沁风

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

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

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

打赏作者

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

抵扣说明:

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

余额充值