Deploy code to Django-based servers (Tencent Cloud)

Posted by Atomic Taco on Tue, 21 Sep 2021 18:23:49 +0200

Note: This article is my own note, no logic, just for myself

Essential information:

 python:3.6.8
 Django:2.1.15
_System: Cent OS 7
_Server: Tencent Cloud
Django Official Website

One: Some linux commands used

  • Use django-admin to create a Django project
django-admin startproject mysite
#This mysite is the project name

  • Start Server
python manage.py runserver 8000

Note that you want to execute it in the MySite directory, for example, cd mysite, and execute the above statement

  • Enter mysql database
mysql -u root -p
  • See
#Command:
#Used to display tcp, udp ports and processes, etc.
netstat -tunlp
"""
ps:
-t (tcp)Show Only tcp Related Options
-u (udp)Show Only udp Related Options
-n Refuse to display aliases, convert all numbers to numbers
-l Only listed are Listen(Monitor)Service Status
-p Show the name of the program that made the relevant link
-a Lists all service states, connected by default
"""
#View process port number and running programs
netstat -atunp

#View process id from port number port(8000)
netstat -anp |grep 8000


  • Stop it
#Command:
#Kill the specified process according to PID (process id): 
kill pid
#Force kill specified process according to PID (process id): 
kill -9 pid


  • View nginx processes in the system
ps -ef|grep nginx

2. Common problems and Solutions

  • nginx: [error] invalid PID number "" in "/run/nginx.pid"

Execution of nginx-t is OK after server restart, but error occurred while executing nginx-s reload

nginx: [error] invalid PID number "" in "/run/nginx.pid"

Solution:

Need to execute first

nginx -c /etc/nginx/nginx.conf

The path to the nginx.conf file can be found in the return of nginx -t.

nginx -s reload

3. File Path

  • Related file directories

Project path: /root/mysite/

[root@VM-8-3-centos ~]# cd /root/mysite
[root@VM-8-3-centos mysite]# tree
.
├── db.sqlite3
├── manage.py
├── mysite
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-36.pyc
│   │   ├── settings.cpython-36.pyc
│   │   ├── urls.cpython-36.pyc
│   │   └── wsgi.cpython-36.pyc
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── mysite.ini



_Nginx path: /etc/nginx

4. Configuration and Code

1. [uwsgi] Configuration

Create a mysite.ini configuration file in the root directory of the project mysite, with a customizable file name
Path to mysite.ini file:
root/mysite/mysite.ini
Execute statement:

uwsgi --ini mysite.ini
[uwsgi]
# Django-related settings
socket= :8000

# the base directory (full path)
chdir=/root/mysite

# Django s wsgi file
module=mysite.wsgi

# process-related setttings
# master
maseter=true


buffer-size=65536
evil-reload-on-rss=256
evil-reload-on-as=256

# maximum number of worker processes
processes=4

# ... with appropriate permissions - may be needed
# chmod-socket  = 664
# clear environment on exit
vacuum=true

  • Other
    When you do this, you've done it before completing your uWSGI server detection
    Detect if uWSCI is functioning properly:
    After completing the code configuration (mainly modifying the database, etc.), enter the uwsgi command in the CentOS7 system to test whether the uWSGI server can function properly, as follows:
# /root/mysite is the absolute address of the project MySite
# mysite.wsgi is the wsgi.py file for the project mysite
uwsgi --http :8000 --chdir /root/mysite -w mysite.wsgi

After the command runs, you can enter the IP address of the virtual system + port 8000 in the browser of the local system to view the test results.htttp://114.132.242.162:8000, we can see the information on the first page of the project mysite. (Note: 114.132.242.162 is the server's public ip)

2.Nginx Deployment Project

Edit/etc/nginx/nginx.conf file

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    # set up the Nginx server configuration of the project mysite
    server {
	listen 80;
	server_name	114.132.242.162;
	charset utf-8;
	client_max_body_size	75M;
	# configure media resoure files
	location /mysite {
		expires 30d;
		autoindex on;
		add_header Cache-Control private;
		alias /root/mysite/mysite/;
	}
	# configure static resource files
	location /static {
		expires 30d;
		autoindex on;
		add_header Cache-Control private;
		alias /root/mysite/static/;
	}	
	# configure uWSGI server
	location / {
		include uwsgi_params;
		uwsgi_pass 127.0.0.1:8000;
		uwsgi_read_timeout 2;





}

}
    

# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2;
#        listen       [::]:443 ssl http2;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

}



  • Then execute under / etc/nginx/directory:
nginx -t

Test configuration for syntax issues

  • If the syntax is okay, you can restart the nginx server:
nginx -s reload

5. Deployment process

With no problem with source code data changes (mainly database configurations, etc.) for sites such as settings.py, deploying the site to a server requires only uwsgi and nginx.
With the code and configuration of uwsgi and nginx written, execute the following command to start the service:

# ->Nginx section
# Reread Configuration File
nginx -t
# If nginx: [error] invalid PID number "" in "/run/nginx.pid" appears
# Execute nginx-c/etc/nginx/nginx.conf
nginx -s reload

# ->uWSGI section
# Start uWSGI server
cd /root/mysite/
uwsgi --ini mysite.ini

Topics: Python Django Nginx