本篇文章最初發表於 2018-01-26。node
本文包含部署使用 python3 編寫的 Django 代碼到 Digital Ocean 的通常步驟,涉及到 git, pyvenv, mysql, pm2 等技術,對於 Django 部署具備必定的參考借鑑意義。python
開始部署前,你須要準備一臺遠程服務器,一個域名,而且將這個域名 A 記錄解析到這臺遠程服務器。mysql
使用 Git 做爲版本控制工具。linux
$ sudo adduser git $ su git $ cd $ mkdir .ssh && chmod 700 .ssh $ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
$ cd $ ssh-keygen
$ cd $ cd .ssh $ ssh-copy-id -i id_rsa.pub git@<servername.com>
$ sudo mkdir -p /gitbase/<projectname> $ sudo chown -R git:git /gitbase $ su git $ cd /gitbase/<projectname> $ git init --bare
$ cd ~/projects/<projectname> $ git init $ git add . $ git commit -m 'first commit.' $ git remote add origin git@<servername.com>:/gitbase/<projectname> $ git push origin master
$ sudo mkdir -p /deploy/<projectname> $ sudo chown -R <user>:<user> /deploy/<projectname> $ cd /deploy/<projectname> $ git clone git@<servername.com>:/gitbase/<projectname> .
替換上述的 <user>
和 <servername.com>
爲實際的用戶名和遠程服務器域名,下同。也可以使用 gitee來做爲版本控制服務器。更多可參考Git on the Servernginx
使用 pyvenv 來管理 python3 的運行環境,python2 的代碼能夠使用 python3 的lib2to3 模塊工具來轉義成 python3 代碼。git
$ python3 -m lib2to3 -w <mycode.py>
$ cd $ python3 -m venv py3env $ source py3env/bin/activate $ cd /deploy/<projectname> $ pip install -r requirements.txt
測試代碼是否能正常運行,切換到項目根目錄,並執行sql
$ python manage.py migrate $ python manage.py createsuperuser $ curl -i localhost:8000
$ sudo apt-get install mysql-client mysql-server
$ mysql -uroot -p yourpass mysql> grant all on *.* to user_name@'%' identified by 'user_password';
找到 bind-address = 127.0.0.1 這一行,咱們將它註釋掉。npm
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
確保 3306 端口的開啓狀態vim
$ sudo netstat -an | grep 3306
重啓 mysql 服務bash
$ sudo service mysql restart
想了解更多能夠參考Ubuntu 下開啓 Mysql 遠程訪問的方法。
使用 mysql 遠程用戶名和密碼將備份的數據傳輸到遠程服務器,能夠直接使用 mysql 命令行,也能夠使用可視化的 mysql 管理工具,例如 workbench、HeidiSQL、navicat、Sequel 等。
從 node 官網下載 node linux 平臺的可運行包,並利用 npm 安裝 pm2。
$ cd $ wget https://nodejs.org/dist/v8.9.4/node-v8.9.4-linux-x64.tar.xz $ xz -d node-v8.9.4-linux-x64.tar.xz $ tar -xf node-v8.9.4-linux-x64.tar $ cd node-v8.9.4-linux-x64 $ sudo cp -r {bin,include,lib,share} /usr $ npm i -g pm2
切換到項目根目錄 /deploy/<projectname>
,而後執行
$ touch process.yml $ vim process.yml
將以下配置保存爲 process.yml
apps: - name: mysite script: manage.py args: ['runserver', '0.0.0.0:8000'] cwd: . interpreter: ~/py3env/bin/python3
運行 pm2
$ pm2 start process.yml
查看 pm2 的運行結果
$ pm2 status
測試網站是否能訪問
$ curl -i localhost:8000
確認 8000 和 80 端口開啓後,而後再本地測試遠程站點是否能夠訪問,若不能訪問,則排查具體緣由。繼續使用nginx 來反向代理遠程服務器上的 http服務,將內部站點端口映射到服務器的 80 端口,將相應域名的根目錄映射爲內部站點的子目錄,以及加載靜態資源文件等實現。具體能夠參考網上文檔,本文再也不贅述。