---
# System prepended metadata

title: Ubuntu部署Django 4專案系列-Nginx安裝流程與常用指令

---

# Ubuntu部署Django 4專案系列-Nginx安裝流程與常用指令

> [name=Sharon Mai] [time=20230404, Thu] [color=#907bf7]

## ↪️總目錄：[Ubuntu部署Django 4專案全系列](https://hackmd.io/@ppp300a/ubuntu-django-4/%2F9uS81RV_QNCjDNqeEiyfJg)

{%hackmd a0ktF64jQXalgAyZHtiXbQ %}


:::success
前提：已有Django專案。
:::



## Nginx常用指令[(建議先從下方【Nginx流程】開始)](#Nginx流程)

### Nginx啟動
```
sudo systemctl start nginx
```
### Nginx重啟
```
sudo systemctl restart nginx
```
### Nginx停止
```
sudo systemctl stop nginx
```
### Nginx查看狀態
```
sudo systemctl restart nginx
```
### Nginx清除所有端口與運行
```
sudo pkill -f nginx & wait $!
```


## 收集所有靜態文件
> 會將app底下的static靜態文件複製一份到跟manage.py同層級中
1. 先進入到虛擬環境 [(啟動進入虛擬環境)](/t1KY6gxtT1GaZ8yY3SqP1g#進入、啟動虛擬環境)
2. 收集所有靜態文件
    ```
    (yingmi_env) python manage.py collectstatic
    ```
4. 成功
![](https://i.imgur.com/Dt2WLpM.png)

## Nginx流程

### Nginx安裝
```
sudo apt install nginx
```

### Nginx測試是否安裝成功
1. 啟動
    ```
    sudo systemctl start nginx
    ```
2. 開啟瀏覽器，網址輸入 `localhost:80`
    ```
    127.0.0.1:80/
    ```

3. 網頁中出現 **Welcome to nginx!** 的字表示安裝且運行成功
4. 若沒有：表示已有其他服務已使用端口80，則需寫個[測試用配置文件](#Nginx測試用配置文件)另用的別的端口使用服務
    
### Nginx測試用配置文件
> 詳細配置說明可參考[官方文檔](https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/tutorials/Django_and_nginx.html)

1. 到默認的配置文件路徑
    ```
    cd /etc/nginx/site-enable/nginx.conf
    ```
2. 編輯配置文件，端口改為8001
    ```
    nano /etc/nginx/site-enable/nginx.conf
    ```
3. 端口改為8001

    ```
    upstream django {
        server 127.0.0.1:8001;
    }
    ```
4. [再次執行測試流程，網址輸入 127.0.0.1:8001](#Nginx測試是否安裝成功)
### Nginx正式配置文件
> 詳細配置說明可參考[官方文檔](https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/tutorials/Django_and_nginx.html)

1.  到默認的配置文件路徑
    ```
    cd /etc/nginx/site-enable/nginx.conf
    ```
-  查內部網路IP位置
    :::info
    此範例為公司內部網路測試，故需要先查詢內網IP。
    :::
    - 開啟終端機查詢IP(詳細可參考此[連結](https://kknews.cc/zh-tw/code/999z5bj.html))
        ```
        ip addr show
        ```
    - 得到
        ```
        16x.x.x.x
        ```
2. 編輯配置文件
    ```
    nano /etc/nginx/site-enable/nginx.conf
    ```
3. Nginx配置文件設定
    :::info
    將內網IP輸入到 server_name
    :::
    

    ```
    upstream django {
        server unix:///tmp/uwsgi.sock
    }

    server {

        listen      8000;              # 端口沒特別指定會默認使用預設80
        server_name 16x.x.x.x;         # 此次範例使用為內網IP
        charset     utf-8;
        location / {
           uwsgi_pass  django;
           include     uwsgi_params;   # 會自動指向/etc/nginx/uwsgi_params，除非換文件路徑
        }
        location /media  {
            alias /home/專案/media;     # (通常只需要下方的static即可，此為專案需求而定)指定到Django專案路徑的相關靜態文件中
        }

        location /static {
            alias /home/專案/static;    # 指定到Django專案路徑的相關靜態文件中
        }
    }

    ```

### Nginx正式啟動

1. 啟動
    ```
    sudo systemctl start nginx
    ```
2. 輸入內網IP網址`16x.x.x.x`
3. 後面輸入media或static等靜態文件路徑，完整網址如下:
    ```
    16x.x.x.x/media/images/cafe_01.PNG
    ```
4. 出現圖片，表示成功！(此處media命名拼錯)
![](https://i.imgur.com/Ig4AgFg.png)

