1.Ubuntu === 更新套件(ssh用完才處理) --- ``` sudo apt update sudo apt list --upgradable #列出需要更新的是哪幾個套件 sudo apt upgrade (直接enter) sudo apt install vim ``` 其他設定 --- ``` vim .bashrc #修改history的行數 HISTSIZE=1000000 HISTFILESIZE=2000000 #一律使用vim alias vi='vim' ``` 2.Python === 安裝 Python(先跳過,Ubuntu22,預設就應該是3.10) --- ``` #sudo apt install python3.10-venv #venv(先不用) python3 --version #測試真的有安裝python sudo apt-get install python3.10 #(無效) ls /usr/bin/python* #python3 -m venv base #安裝python通用環境(先不用) ``` ![](https://hackmd.io/_uploads/H1mqZYeJ6.png) 安裝 pip --- ``` cd ~ mkdir Tools cd Tools wget https://bootstrap.pypa.io/get-pip.py python3 get-pip.py #如果看到:[ModuleNotFoundError: No module named 'distutils.cmd'],那代表Ubuntu版本可能裝錯喽!! ``` ![](https://hackmd.io/_uploads/r1QZ_Fg16.png) ``` cd ~ vi ~/.bashrc #在最後加上: export PATH=$PATH:/home/eric325/.local/bin ``` ``` source ~/.bashrc ``` 安裝 Python套件 --- |大數據相關|後端相關|地理資訊|資料庫連線|圖像影像相關|其他| |:--|:--|:--|:--|:--|:--| | numpy | django |gdal|cx-Oracle|matplotlib|pytz| | pandas | django-extensions ||SQLAlchemy|python3-tk|asyncio| | polars | django-cors-headers||| opencv-python|bleak| 依實際需求安裝 ``` pip3 install numpy pip3 install matplotlib pip3 install pytz pip3 install asyncio pip3 install bleak pip3 install django pip3 install django-extensions pip3 install django-cors-headers pip3 install pandas pip3 install polars pip3 install opencv-python pip3 install SQLAlchemy sudo apt-get install python3-tk pip3 install cx-Oracle ``` 安裝 gdal套件(linux) --- ``` sudo apt update sudo apt install software-properties-common sudo add-apt-repository ppa:ubuntugis/ppa sudo apt-get update sudo apt-get install gdal-bin ogrinfo --version #查看版本 sudo apt-get install libgdal-dev export CPLUS_INCLUDE_PATH=/usr/include/gdal export C_INCLUDE_PATH=/usr/include/gdal ogrinfo --version #查看版本 pip3 install GDAL==<GDAL VERSION FROM OGRINFO> #輸入版本 ``` 3.Postgres === 安裝 Postgres --- ``` sudo apt install postgresql postgresql-contrib sudo systemctl start postgresql.service sudo systemctl enable postgresql.service sudo apt install postgis #(先不要) ``` ``` sudo -u postgres psql CREATE DATABASE ericdb; CREATE USER eric WITH PASSWORD 'abc123'; ALTER ROLE eric SET client_encoding TO 'utf8'; ALTER ROLE eric SET default_transaction_isolation TO 'read committed'; ALTER ROLE eric SET timezone TO 'UTC'; #(先不要) GRANT ALL PRIVILEGES ON DATABASE ericdb TO eric; \du \l \q ``` 設定 Postgres --- ``` sudo vi /etc/postgresql/14/main/pg_ident.conf #(可以先不做) ``` ![](https://hackmd.io/_uploads/r1tsNy1Ja.png) ``` sudo vi /etc/postgresql/14/main/pg_hba.conf ``` ![](https://hackmd.io/_uploads/rJEmAP-16.png) ![](https://hackmd.io/_uploads/Sk9Ke_-k6.png) #舊 ![](https://hackmd.io/_uploads/BkfC3aCC3.png) ``` sudo systemctl start postgresql sudo systemctl restart postgresql sudo systemctl enable postgresql #下載postgis sudo apt install postgis ``` 補充:重啟postgre的語法 ``` sudo systemctl restart postgresql ``` 進入 Postgres --- ``` SYSTEM_USERNAME 與 PG-USERNAME 不同時要輸入USER(-U) psql ericdb -U eric abc123 ``` 4.Apache === 安裝 Apache --- ``` sudo apt install httpd httpd-devel#(這個不做,非Ubuntu,centOS) [error內容] E: Package 'httpd' has no installation candidate E: Unable to locate package httpd-devel sudo apt install apache2 sudo systemctl start apache2.service sudo systemctl enable apache2.service sudo vi /etc/apache2/sites-available/000-default.conf ``` ``` #在"DocumentRoot /var/www/html"下面加上一行: Options +FollowSymLinks ``` ``` #這句重要: cd ~ chmod +x ./ ``` ``` sudo apachectl restart #這樣就可以直接做軟連結到/var/www/html/ mkdir /home/eric325/Public cd /var/www/html sudo ln -s /home/eric325/Public #這樣就可以用http://ip/Public連上了 ``` ``` ---------------------------------------- ``` 啟用防火牆並設定權限(舊,先不做) --- ``` sudo apt install ufw #如果沒有ufw的話先跑這行 sudo ufw allow 22 #ssh 要先開不然ssh會斷掉 sudo ufw allow http #若不希望開80prot可以不要開 sudo ufw allow https # 下面這兩行好像預設就有 sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw enable #防火牆 啟動 sudo ufw status verbose #查看防火牆狀態 ``` 安裝 Apache(舊,先不做) --- ``` sudo apt update && sudo apt install apache2 #更新存儲庫(Repositories)和安裝 Apache sudo ufw allow OpenSSH #設置防火牆 sudo ufw allow in "Apache Full" sudo ufw enable #啟用防火牆 sudo ufw status #查看防火牆狀態 sudo service apache2 status #測試Apache狀態 ``` ![](https://hackmd.io/_uploads/SkpWw50Cn.png) ``` sudo apt install net-tools #下載net-tools sudo netstat -ntulp #查看Apache ``` ![](https://hackmd.io/_uploads/ryj7P5CA2.png) 確認 Apache(舊,先不做) --- 輸入ip ![](https://hackmd.io/_uploads/BkmD9cCAn.png) 建立軟連結(舊,先不做) --- ``` sudo vi /etca #在"DocumentRoot /var/www/html"下面加上一行: Options +FollowSymLinks 建立頁面 mkdir /home/$USER/Public sudo ln -s /home/$USER/Public /var/www/html/ #建立軟連結 #如果建錯可以unlink資料夾 sudo unlink /var/www/Public ``` 5.SSL === 安裝 SSL --- 選擇裝置後按照網頁說明操作 certbot網頁: https://certbot.eff.org/instructions?ws=nginx&os=ubuntufocal 6.Django === 安裝 Django --- ``` cd ~ #建立專案 django-admin startproject hoonedb cd hoonedb/ #建立app django-admin startapp hoonedata ``` 設定 Django --- ``` vi hoonedb/settings.py #修改以下: ALLOWED_HOSTS = ['104.154.185.193 ','localhost','bot.hoone.com.tw'] #第一欄放自己IP INSTALLED_APPS = [ ... 'django_extensions', 'django.contrib.gis', 'hoonedata', 'corsheaders', ] MIDDLEWARE = [ ... ... 'corsheaders.middleware.CorsMiddleware',#要加在CommonMiddleware前面 ... ] CORS_ORIGIN_ALLOW_ALL = True #加這行 TEMPLATES = [ { ... 'DIRS': [BASE_DIR / 'templates'], ... } ] DATABASES = { 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': BASE_DIR / 'db.sqlite3', 'ENGINE': 'django.contrib.gis.db.backends.postgis', 'NAME': 'ericdb', 'USER': 'eric', 'PASSWORD': 'abc123', 'HOST':'', 'PORT':'', } } LANGUAGE_CODE = 'zh-Hant' TIME_ZONE='Asia/Taipei' USE_TZ = False STATIC_ROOT='/home/eric325/hoonedb/static/' #加這行 STATIC_URL = '/static/' DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' #加這行 SESSION_COOKIE_AGE=31536000 #加這行 MEDIA_URL = '/media/' #加這行 MEDIA_ROOT ='/home/eric325/hoonedb/media/' #加這行 SECURE_CROSS_ORIGIN_OPENER_POLICY=None #加這行(new) ``` 連接 Django+Apache+wsgi --- 設定檔 ``` sudo vi /etc/apache2/site-available/hoone.conf ``` ``` Alias /static/ /home/eric325/hoonedb/static/ Alias /media/ /home/eric325/hoonedb/media/ <Directory /home/eric325/hoonedb/static> Require all granted </Directory> <Directory /home/eric325/hoonedb/hoonedb> <Files wsgi.py> Require all granted </Files> </Directory> <Directory /home/eric325/hoonedb/media> Require all granted </Directory> #WSGIDaemonProcess hoonedb python-path=/home/eric325/hoonedb:/home/eric325/.local/lib/python3/lib/python3.7/site-packages user=eric325 WSGIDaemonProcess hoonedb python-path=/home/eric325/hoonedb:/home/eric325/.local/lib/python3.10/site-packages user=eric325 WSGIProcessGroup localhost WSGIScriptAlias /hoone /home/eric325/hoonedb/hoonedb/wsgi.py process-group=hoonedb ``` 設定檔 ``` cd /etc/apache2/sites-available/ sudo vim 000-default.conf ``` ![](https://hackmd.io/_uploads/Sk3G4leJp.png) ![](https://hackmd.io/_uploads/H1zqBleyp.png) ``` sudo apt install apache2 libapache2-mod-wsgi-py3 sudo a2ensite hoone.conf ``` admin畫面設置 --- 確認honedb/honedb/下的setting.py,STATIC_ROOT路徑正確後 ``` python manage.py collectstatic ``` 會在honedb/下建一個static資料夾,如果沒有建立static,那admin會沒有style。 經確認style還是跑掉了, 路徑應該為:http://bot.hoone.com.tw/static/admin/js/theme.js 結果admin(get)的路徑為:http://bot.hoone.com.tw/hoone/static/admin/js/theme.js 要在setting.py再加上 ``` CSRF_TRUSTED_ORIGINS=['http://bot.hoone.com.tw'] ``` ![](https://hackmd.io/_uploads/ryL94Sxkp.png) get的路徑才正確 創建superuser(暫緩) --- ``` pip install django-extensions pip install django-cors-headers pip install psycopg2 python3 manage.py createsuperuser (eric/hoone@7710) ```