Sau khi phát triển ứng dụng với Django, anh em sẽ có nhưu cầu triển khai ứng dụng chạy trên server. Bài viết này, xin ghi lại các bước triển khai ứng dụng Django lên máy chủ Ubuntu 16.04 với uWSGI và Nginx.
Các nội dung cấu hình dưới đây mình đã thực hiện để triển khai ứng dụng do mình xây dựng. Các bạn tham khảo, thay đổi nội dụng tài khoản, tên ứng dụng cho phù hợp nhé.
Table of Contents
Cấu hình ứng dụng Django sẵn sàng để triển khai
1. Mở File Setting.py thiết lập ALLOWED_HOSTS
1 |
ALLOWED_HOSTS = ['your_production_domain_or_ip','your_local_domain'] |
Nếu bạn không quan tâm đến tên miền thì có thể thiết lập
1 |
ALLOWED_HOSTS = ['*'] |
Cài đặt các gói, module cần thiết
1 2 |
sudo apt-get update sudo apt-get install nginx mysql-server python3-pip python3-dev libmysqlclient-dev ufw virtualenv |
2. Cho phép ssh trên firewall: sudo ufw allow OpenSSH
3. Cho phép Nginx trên firewall: sudo ufw allow ‘Nginx Full’
4. Xem trạng thái firewall: sudo ufw status
5. Enable firewall: sudo ufw enable
6. Load lại firewall: sudo ufw reload
Gia cố bảo mật và tạo tài khoản trong mysql
1. Gia cố bảo mật cho mysql
1 |
mysql_secure_installation |
2. Tạo tài khoản mysql cho ứng dụng
1 2 3 4 5 |
$ mysql -u root -p mysql> CREATE DATABASE tên_db CHARACTER SET 'utf8'; mysql> CREATE USER 'username của bạn'@'localhost' IDENTIFIED BY 'password của bạn'; mysql> GRANT ALL ON tên_db.* TO 'username của bạn'@'localhost'; mysql> quit |
Upload ứng dụng và cấu hình môi trường
1. Upload ứng dụng và giải nén
1 2 |
scp /Users/etuannv/scraping/adminwebsite.zip caliadmin@67.227.191.57:/home/caliadmin/ unzip adminwebsite.zip |
2. Import cơ sở dữ liệu
mysql -u california_contractors -p california_contractors < db/california_contractors.sql
3. Tạo môi trường ảo
1 2 3 4 |
cd ~/ virtualenv -p /usr/bin/python3 adminwebsite_env source adminwebsite_env/bin/activate pip install -r adminwebsite/requirements.txt |
4. Kiểm tra xem ứng dụng đã hoạt tốt chưa
1 2 |
sudo ufw allow 8000 python adminwebsite/manage.py runserver 0.0.0.0:8000 |
Cài đặt và cấu hình uWSGI
1. Ngưng môi trường ảo: deactivate
2. Cài uWSGI: pip install uwsgi
3. Kiểm tra hoạt động của uWSGI:
1 |
uwsgi --http :8000 --home /home/caliadmin/adminwebsite_env --chdir /home/caliadmin/adminwebsite --module adminwebsite.wsgi |
4. Tạo file cấu hình uWSGI
1 2 |
sudo mkdir -p /etc/uwsgi/sites sudo vi /etc/uwsgi/sites/adminwebsite.ini |
5. Nội dụng file adminwebsite.ini
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[uwsgi] project = adminwebsite uid = caliadmin base = /home/%(uid) chdir = %(base)/%(project) home = %(base)/adminwebsite_env module = %(project).wsgi:application master = true processes = 5 socket = %(base)/%(project).sock chown-socket = %(uid):www-data chmod-socket = 666 vacuum = true |
6. Tạo system unit file cho uWSGI
File này giúp cho uWSGI khởi chạy khi khởi động lại server
1 |
sudo vi /etc/systemd/system/uwsgi.service |
7. Nội dung File uwsgi.service
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[Unit] Description=uWSGI Emperor service [Service] ExecStartPre=/bin/bash -c 'mkdir -p /run/uwsgi; chown caliadmin:www-data /run/uwsgi' ExecStart=/home/caliadmin/.local/bin/uwsgi --emperor /etc/uwsgi/sites Restart=always KillSignal=SIGQUIT Type=notify NotifyAccess=all [Install] WantedBy=multi-user.target |
Cài đặt, cấu hình Nginx
1. Cài đặt, cấu hình website
1 2 |
sudo apt-get install nginx sudo vi /etc/nginx/sites-available/adminwebsite |
2. Nội dung file adminwebsite
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
server { listen 80; server_name 67.227.191.57; root /home/caliadmin/adminwebsite; location = /favicon.ico {access_log off; log_not_found off; } location /static/ { alias /home/caliadmin/adminwebsite/static/; } location / { include /etc/nginx/uwsgi_params; uwsgi_pass unix:///home/caliadmin/adminwebsite.sock; } } |
3. Tạo link cho site-enable
1 |
sudo ln -s /etc/nginx/sites-available/adminwebsite /etc/nginx/sites-enabled/adminwebsite |
4. Kiểm tra cấu hình cho Nginx
1 |
sudo nginx -t |
Thiết lập, khởi chạy Nginx và uWSGI
1. Khởi động Nginx và uWSGI
1 2 |
sudo systemctl restart nginx sudo systemctl start uwsgi |
2. Chọn khởi động cùng hệ điều hành cho Nginx và uWSGI
1 2 |
sudo systemctl enable nginx sudo systemctl enable uwsgi |
Chúc các bạn thành công !
Mình là một lập trình viên tự do với hơn 10 năm kinh nghiệm. Mình chuyên về Web scraping, Web automation, Python, Django