docker run -it --name mysite3 -p 8000:8000 \
-v /data/code/maple:/var/Maple \
-d django_mysite_img:v1
docker run -it -p 8080:8080 --name mysite-nginx \
-v /data/code/maple/static:/usr/share/nginx/html/static \
-v /data/code/maple/media:/usr/share/nginx/html/media \
-v /data/code/maple/compose/nginx/log:/var/log/nginx \
-d mynginx:v1
docker build -t maple_web2:v2 .
docker run -it -p 8000:8000 --name maple_web -d maple_web2:v2
docker exec -it maple_web bash
docker exec -it maple_web /bin/bash start.sh
docker exec -it -d maple_web_1 /bin/bash start.sh
docker rm -f < Container_ID>
docker rmi -f <Image_name>
pkill gunicorn
sudo docker-compose build
# 查看當前的鏡像
sudo docker images
# 背景執行docker-compose
sudo docker-compose up -d
# 重新build docker-compose後,背景執行docker-compose
sudo docker-compose up -d --build
# 關閉docker-compose
docker-compose down
# 查看運行中的容器
sudo docker ps
# 移除none images
docker rmi $(docker images -f "dangling=true" -q)
SECRET_KEY=xxx
DJANGO_SETTINGS_MODULE=Maple.settings.heroku
DEBUG=False
DATABASE_HOST=xxx.com
DATABASE_NAME=xxx
DATABASE_USER=xxx
DATABASE_PORT=5432
DATABASE_PASSWORD=xxx
DATABASE_URI=postgres://xxx
heroku config:set $(cat .env | sed '/^$/d; /#[[:print:]]*$/d')
- 部屬Heroku流程
- 增加Procfile
web: gunicorn Maple.wsgi --log-file -
release: python manage.py migrate
- 指定heroku上面python的版本(runtime.txt)
- 確保當前套件都有引入
pip freeze > requirements.txt
- 部屬到heroku上面
- git init
- git add .
- git commit -m "init project"
- heroku login
- heroku config:set $(cat .env | sed '/^$/d; /#[[:print:]]*$/d')
- heroku config
- git push heroku `your-branch`:master
- heroku run python manage.py createsuperuser
- Debug
- heroku pg
- heroku logs -t
- heroku logs --dyno sched
- heroku logs --source app --dyno worker
- heroku run python manage.py shell
- 其他語法
- heroku releases
- heroku addons
- heroku maintenance:on
- heroku local -f Procfile.windows
- heroku run python manage.py shell
- heroku run python manage.py migrate
- heroku run bash -a <app_name>
- 下載fly io
- 配置新的fly.toml、Dockerfile。這邊需要選擇DB規格
- 進行部屬
- 遇到的問題
- DB無法進入新增的專案
fly postgres attach --app mapleweb2 mapleweb2-db # 再次進行專案與DB間的附加 來找錯誤
fly doctor # 用來找bug
flyctl wireguard reset # 嘗試重新設定wireguard
iptables -A INPUT -p udp --dport 51820 -j ACCEPT # 允許某個port進行訪問
- 其他語法
fly ssh console -C 'ls -l /app'
fly ssh console -C 'python /app/manage.py shell'
fly ssh console -C 'python /app/manage.py migrate'
fly secrets list # 取得所有環境變數
fly secrets set REDIS_PASSWORD=mypassword
fly secrets set DJANGO_SETTINGS_MODULE=Maple.settings.fly # 設定環境變數
fly secrets unset DJANGO_SETTINGS_MODULE # 移除某個環境變數
- 在對應的apps底下創建新的redis服務
- 創建之後會給fly上面的redis url就能進行連線了
import redis
url = ""
r = redis.from_url(url)
r.ping() # If true, the connection is successful.
deploy:
name: Deploy Django
needs: tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: superfly/flyctl-actions/setup-flyctl@master
- run: flyctl deploy --remote-only
env:
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}
- 相同的查詢條件下,比較各種部屬方式(Postman)
{server_url}/exchange/product-list?category=武器&type=雙手劍&stage_level=普通
| server_url |
平均執行時間 |
備註 |
| 127.0.0.1:8000 |
22ms |
local端連接VM端DB |
| 192.168.223.127:8080 |
24ms |
VM端連接VM端DB |
| ngrok |
800ms |
ngrok https + VM端連接VM端DB |
| 127.0.0.1:5000 |
3.69s |
heroku端連接heroku端DB |
- 寫在view.py內
- 欄位判斷(是否存在、是否有共存關係)
- 是否是對應的使用者
- 寫在serializer.py內
- CRUD的實際操作邏輯(某些欄位不進行更新)
- 修改真正要顯示的欄位內容
建議搭配著linux中的zsh-autoswitch_virtualenv使用
mkvenv --python=$(which python3.7) --把該專案設定成指定的python版本
curl https://www.toptal.com/developers/gitignore/api/python,pycharm+all,django > .gitignore
[教學文章](https://kavenc.gitlab.io/blog/post/django-google-cloud-storage/#gsc.tab=0)