---
# System prepended metadata

title: AWS(Lightsail)+Django+Gunicorn+Nginx+Supervisor網站建置筆記
tags: [Django, Lightsail, Nginx]

---

#    AWS(Lightsail)+Django+Gunicorn+Nginx+Supervisor網站建置筆記
###### tags: `Lightsail` `Django` `Nginx`
##    AWS-Lightsail
選擇Instance地點，這邊選擇日本
然後選擇Linux+Django的組合
![](https://photos.smugmug.com/photos/i-cLRRqbq/0/f6578d8d/O/i-cLRRqbq.png)

並命名
![](https://photos.smugmug.com/photos/i-SScHWZ5/0/e4a3353d/O/i-SScHWZ5.png)

建立之後要等一下
然後點選紅圈處可以進行連線
![](https://photos.smugmug.com/photos/i-QGwCBb9/0/b8345c50/O/i-QGwCBb9.png)

Networking那邊記得加TCP(8000)

## Django/Gunicorn
在Lightsail裡面創立我們要的資料夾
```
cd htdocs
mkdir wensite
cd wensite
mkdir static
cd static
mkdir css
cd ..
mkdir templates
```
創立一個虛擬環境
```
python3 -m venv env
```
接著使用這裡面的python與安裝django、gunicorn
```
source env/bin/activate
python -m pip install django
pip install gunicorn
```
創建專案與app
```
django-admin startproject wensite .
python manage.py startapp homepage
```
將homepage/view.py檔案內增加
```
def home(request):
    return render(request, 'test.html',{'data':''})
```

將原先urls.py檔案內的
```
urlpatterns = [
    path('admin/', admin.site.urls),
]
```
改成
```
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', home),
    url(r'^static/(?P<path>.*)$', static.serve, {'document_root': settings.STATIC_ROOT}, name='static'),
]
```
將原先setting.py檔案內
加上import os
BASE_DIR改成```os.path.dirname(os.path.dirname(os.path.abspath(__file__)))```
DEBUG改False
ALLOWED_HOSTS填入Public IP或你的網址
INSTALLED_APPS加上'homepage',
templates改
```
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates').replace('\\', '/')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
```
database改
```
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
```
TIME_ZONE改'Asia/Taipei'
加上STATIC_ROOT = os.path.join(BASE_DIR, 'static')

新增gunicorn.conf.py檔案
加入
```
import os

bind = '0.0.0.0:8000'
```

## Nginx
安裝
```
sudo apt-get install nginx
```
修改/etc/profile
在
export PATH前增加
PATH=$PATH:/etc/nginx

/etc/nginx/sites-available/default這邊
server_name 改你的網址
加
```
location /static {
    root /home/bitnami/htdocs/wensite/static;
}
```
改完restart
```
sudo service nginx restart
```

## Supervisor
安裝
```
sudo apt-get install supervisor
```
```
cd /etc/supervisor/conf.d/
```

加入wensite.conf
```
[group:wensite]

programs=site


[program:site]

directory=/home/bitnami/htdocs/wensite

command=/home/bitnami/htdocs/wensite/env/bin/gunicorn -c gunicorn.conf.py wensite.wsgi:application
environment=PATH="/home/bitnami/htdocs/wensite/env/bin/"

user = root

autostart=true

autorestart=true

stdout_logfile=/home/bitnami/supervisor.log

```
輸入
```
sudo supervisorctl reread
sudo supervisorctl reload
sudo supervisorctl status
```

看看wensite:site有沒有處於RUNNING狀態
有的話Terminal視窗關掉網站也可以繼續運作!!

主要參考文章:
[Django Tutorial in Visual Studio Code](https://code.visualstudio.com/docs/python/tutorial-django)
[Django + Gunicorn + Nginx 部署之路](https://www.cnblogs.com/hippieZhou/p/11488514.html)
[Django Tutorial for Programmers: 25. Deploy to Ubuntu Server](https://ithelp.ithome.com.tw/articles/10161146)


