瀏覽標籤:

Linux

[Docker][NetCore] Win7 可以在 Docker 下 Debug ASP.NET Core 嗎?

今天心血來潮想試試看可不可以把 ASP.NET Core 部屬在 Docker 裡面 Debug,但我的測試機是 Win7 無法安裝新版 Docker for Windows 於是乎抱著僥倖下載 Docker Toolbox 來試試看
兩者最大差異在於 Docker Toolbox 是運行在 Oracle VM VirtualBox,而 Docker for Windows 則是可以在微軟的虛擬化技術 Hyper-V 底下運行

肉身測試開始

如果想要讓現有專案支援 Docker 的話只要對 專案右鍵 -> 加入 -> Docker Support 強大的 Visual Studio 2017 就會搞定基礎設定

這邊的話要選擇 Linux 上面的 Windows 是給 Docker for Windows 選的
接著 Visual Studio 就會幫你下載與設定一些基本環境

接著直接按 F5 執行偵錯模式
噹噹… 他竟然說我沒有安裝 dotnet sdk

-------------------------------------------------------------------
You may only use the Microsoft .NET Core Debugger (vsdbg) with
Visual Studio Code, Visual Studio or Visual Studio for Mac software
to help you develop and test your applications.
-------------------------------------------------------------------
Did you mean to run dotnet SDK commands? Please install dotnet SDK from:
http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409
The target process exited without raising a CoreCLR started event. Ensure that the target process is configured to use .NET Core. This may be expected if the target process did not run on .NET Core.
The program '[24] dotnet' has exited with code 145 (0x91).
'' 程式以返回碼 145 (0x91) 結束。

 

 

翻了很久才翻到一篇文章 Docker debugging for ASP.NET Core application is not working 國外也有個勇者想在 Win7 利用 Docker 來 Debug ASP.NET Core

最後被加上了 Closed - Won't Fix 的 Tag 看來這個問題應該是不會修正了

結論

想要在 Docker 上玩 ASP.NET Core 還是乖乖用 Win10 吧
哪天有空了來試試看在 Win10 安裝 Docker 玩玩看
不知道會不會又有其他地雷引爆

       

[Linux] 在 Ubuntu 上安裝 Jenkins CI Server 來 Bulid NetCore 2.0

近期都在研究 NetCore 但如果要上 Linux 的話就變成每次都要下指令重建專案 ,剛好有看到 Jenkins 支援 NetCore 且可以省去我在 SSH 上自己下指令的動作,於是乎就跑去研究了一下這塊,這邊留個筆記方便日後查閱。

Jenkins 安裝

  1. 下載套件清單 (否則搜尋不到)
    wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
    sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
    sudo apt-get update
  2. 安裝 Jenkins
    sudo apt-get install jenkins
  3. 接著輸入 http://localhost:8080 並在 /var/lib/jenkins/secrets/initialAdminPassword 找到的你管理員密碼
  4. 這邊可以選擇要安裝社群建議的套件還是自訂套件,因為我是第一次安裝所以先選擇左邊

  5. 安裝完後會要求你設定管理員帳號密碼,設定完後就安裝完畢囉 !!

  6. 接著從左邊選單點選 管理 Jenkins -> 設定全域安全性
  7. 確認 Allow anonymous read access 是沒有打勾的,否則大家都可以亂搞囉
       

[Linux][MySQL][phpMyAdmin] 預設語系修改為 utf8

因為Mysql是瑞典人開發的所以預設語系是Latin1,如果想把他修改為utf8的話可以參考以下設定

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

[mysql]
default-character-set=utf8
init-connect='SET NAMES utf8'  
character-set-server = utf8 

[client] 
default-character-set=utf8

phpmyadmin可以在config.inc.php新增一行

/* 預設語系 */
$cfg['DefaultCharset'] = 'utf8';
       

[IIS] 在 Windows Server 上執行 PHP 莫名的慢

原本在Linux非常順暢的Wordpress移植到了Windows Server上卻發生一個頁面要Loading一秒以上,餵狗了一下找了幾種方法來優化一下。

  1. 修改php.ini
    output_buffering修改為Off

    output_buffering = Off
  2. 將php內用到localhost的通通修改為127.0.0.1
  3. 關閉Router的防DDOS功能 <-- 這個功能害我測了好久

修改完後有快一點點了,但還是比不上Linux的速度,可能這就是Windows Server先天上的吃資源吧。

 

 

來源:https://forums.iis.net/t/1153459.aspx?PHP+very+slow+on+IIS7

       

Selinux 安全性設定造成php-mysql無法正常連線

今天在測試Google Cloud SQL的時候,明明權限設定沒有問題,但不知為何在我CentOS上面就是無法執行mysql_connect函式,搞了幾個小時,發現又是Selinux安全性在搞鬼,找到問題來源自然好解決。

  1. 取得 selinux 和httpd有關的參數
    getsebool -a | grep 'httpd'

    未命名

  2. 把他打開就可以了
    setsebool httpd_can_network_connect_db 1
       

CentOS 7.X fail2ban防止駭客暴力破解密碼

每次看到我的SSH登入LOG都一堆嘗試紀錄,看來真的有很多無聊人士在那邊try我的密碼,就找了fail2ban來防止無聊人士。

 

  1. 安裝fail2ban
    sudo yum install fail2ban
  2. 打開文件/etc/fail2ban/jail.conf設定規則
    搜尋

    [sshd]

    在下方增加

    enabled = true
  3. 搜尋[DEFAULT],設定相關參數
    白名單

    ignoreip = 127.0.0.1/8

    禁止秒數

    bantime  = 3600

    依據秒數(例:在3600秒內錯誤5次則BAN掉)

    findtime = 3600

    嘗試次數

    maxretry = 5
  4. 開啟服務與日後開機自動啟用
    sudo service fail2ban start
    sudo chkconfig fail2ban on

 

補充指令

查詢已ban掉的IP清單

fail2ban-client status sshd

解除ban

fail2ban-client set sshd unbanip IPADDRESS
       

CentOS 7.X 安裝VPN PPTP

  1. 安裝yum第三方EPEL套件庫
    sudo yum install epel-release -y

    清除快取

    sudo yum clean all -y

    更新套件庫

    sudo yum update -y
  2. 安裝PPTP
    sudo yum install ppp pptpd -y

    01

  3. 備份設定擋
    cp /etc/pptpd.conf /etc/pptpd.conf.bak
  4. 打開/etc/pptpd.conf,拉到最下面新增
    localip 10.0.10.1
    remoteip 10.0.10.2-254
  5. 備份設定擋
    cp /etc/ppp/options.pptpd /etc/ppp/options.pptpd.bak
  6. 搜尋ms-dns,將前面#去掉如下
    ms-dns 8.8.8.8
    ms-dns 8.8.4.4
  7. 備份設定擋
    cp /etc/sysctl.conf /etc/sysctl.conf.bak
  8. 將下面的設定貼上去
    net.core.wmem_max = 12582912
    net.core.rmem_max = 12582912
    net.ipv4.tcp_rmem = 10240 87380 12582912
    net.ipv4.tcp_wmem = 10240 87380 12582912
    net.core.wmem_max = 12582912
    net.core.rmem_max = 12582912
    net.ipv4.tcp_rmem = 10240 87380 12582912
    net.ipv4.tcp_wmem = 10240 87380 12582912
    net.core.wmem_max = 12582912
    net.core.rmem_max = 12582912
    net.ipv4.tcp_rmem = 10240 87380 12582912
    net.ipv4.tcp_wmem = 10240 87380 12582912
    net.ipv4.ip_forward = 1
  9. 打開/etc/rc.d/rc.local,新增設定
    iptables -t nat -A POSTROUTING -s 10.0.10.0/24 -o eth0 -j MASQUERADE
  10. 設定防火牆
    firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -i eth0 -p tcp --dport 1723 -j ACCEPT
    firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p gre -j ACCEPT
    firewall-cmd --permanent --direct --add-rule ipv4 filter POSTROUTING 0 -t nat -o eth0 -j MASQUERADE
    firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i ppp+ -o eth0 -j ACCEPT
    firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i eth0 -o ppp+ -j ACCEPT
    firewall-cmd --reload
  11. 設定帳號密碼/etc/ppp/chap-secrets
    username pptpd password *
  12. 啟動pptp
    service pptpd start
    chkconfig pptpd on

參考:

  1. CentOS 7 快速部署 PPTP VPN 服務
  2. Setup PPTP Server on CentOS
       

CentOS 7.X Wrodpress 上傳的檔案無法被移動至wp-content/uploads/

在移植完Wrodpress測試是否正常時,發生了媒體無法上傳的問題,錯誤訊息給出上傳的檔案無法被移動至wp-content/uploads/,就翻了之前寫的文章WordPress 資料權限修復,這邊有一點點不太一樣的就是在CentOS裡面Apache的使用者不是www-data而是apache,修正完資料夾權限後竟然還是無法正常上傳媒體,爬文爬了一整晚將近12小時,下了各種關鍵字都找不到原因,最後快要放棄時逛逛PTT Linux版時無意間看到了這篇,才發現原來除了預設的資料夾權限以外,還多了SELinux安全性的問題。

解決方法有兩種如下:

  1. 給予權限寫入資料 (推薦!!)
    • 給予httpd讀取的權限
      sudo chcon -t httpd_sys_content_t /var/www/html/ -R
    • 給予寫入的權限
      sudo chcon -t httpd_sys_rw_content_t /data/www/html/sofast/wp-content/* -R
  2. 完全關閉SELinux (不推薦)
    • 開啟路徑
      /etc/sysconfig/selinux
    • 搜尋SELINUX修改為disabled
      //預設enforcing為開啟,disabled為關閉
      SELINUX=disabled
    • 重開機

查詢SELinux是否開啟(Enforcing為開啟,disabled為關閉)

getenforce

參考:

  1. CentOS 7 + SELinux + PHP + Apache – cannot write/access file no matter what
  2. CentOS 關閉SELinux方式
  3. [問題] CentOS 7 apache資料夾權限
       

CentOS 7.X Lamp環境安裝 (Linux+Apache+MariaDB+PHP)

看到網路上的人都推說,Linux Server使用CentOS架設比較適合,從預設開啟防火牆就知道了,我就來試試看CentOS與目前本站使用的Ubuntu Server差在哪。

安裝CentOS與更新套件清單

  1. CentOS官方網站下載最新版CentOS-7-x86_64-DVD-1511.iso,安裝過程就省略了,本人是使用最小安裝,所以只有指令介面,反正要當Server使用,如果安裝GUI的話反而浪費資源對吧?
  2. Ubuntu與CentOS安裝套件的方式有點不太一樣,Ubuntu是使用apt-get這個指令來安裝,但CentOS是使用yum來安裝套件,這點需要注意一下。首先先更新一下列表吧,使用管理員權限的帳號輸入
    sudo yum update -y

    -y 是忽略詢問是否同意直接更新

安裝Apache網頁伺服器

  1. 安裝前記得先使用上面的指令更新套件清單唷,不然可能會有奇怪的問題。
  2. 輸入指令
    sudo yum install httpd -y
  3. 安裝完畢後接著就要啟用服務拉,輸入指令
    service httpd start

安裝MariaDB(MySQL)資料庫伺服器

  1. 在CentOS 7.X中MySQL是被替換成MariaDB的,所以就借此也來體驗看看MariaDB的資料庫囉。
    輸入指令

    sudo yum install mariadb mariadb-server -y

    這樣就安裝成功囉!
    01

  2. 來啟動服務吧
     service mariadb start

    01

設定MariaDB伺服器

  1. 安裝完畢後,就來設定一些資料庫的基本設定吧!
    輸入指令

    /usr/bin/mysql_secure_installation

    這裡因為是第一次安裝,所以直接按Enter繼續即可。
    01

  2. 是否要設定root的密碼,輸入y開始設定
    01
  3. 重複輸入兩次相同的密碼
    01
  4. 是否要刪除匿名帳號,輸入y同意刪除,不然日後會有很多安全性問題
    01
  5. 是否要開放root管理員透過外網登入,這邊請輸入y限制管理員只能從本地連線較為安全
    01
  6. 是否刪除test資料庫輸入y
    01
  7. 是否重新載入權限表輸入y
    01
  8. 設定完成!
    01

安裝PHP+phpMyAdmin管理資料庫

  1. 安裝php與連接資料庫套件
    sudo yum install php php-mysql -y

    01

  2. 安裝yum第三方EPEL套件庫
    sudo yum install epel-release -y

    清除快取

    sudo yum clean all -y

    更新套件庫

    sudo yum update -y
  3. 安裝phpMyAdmin
     sudo yum install phpmyadmin -y

    01

  4. 重新啟動網頁伺服器
     service httpd restart

設定防火牆

  1. 永久允許網頁伺服器通過防火牆
    sudo firewall-cmd --add-service=http --permanent
  2. 若需要https服務則輸入
    sudo firewall-cmd --add-service=https --permanent

    查詢防火牆規則

    firewall-cmd --list-all --permanent

    --permanent為永久規則

  3. 重新啟動防火牆
     service firewalld restart

設定phpMyAdmin

  1. 預設除了本地是不允許訪問phpMyAdmin,但因為我們現在要設定所以需要修改一下預設值,使用WinSCP連線到主機上面打開
    /etc/httpd/conf.d/phpMyAdmin.conf
  2. 找到
    <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
    </RequireAny>

    Require ip ::1下方新增自己的IP

    <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
       Require ip 你的IP
    </RequireAny>
  3. 重啟網頁伺服器
    service httpd restart
  4. 這樣就可以正常登入囉!
    01

 

開機自動啟動服務

每次開機都要手動啟用服務,這樣實在太麻煩了,輸入以下指令可以在每次開機後自動啟用服務

chkconfig httpd on
chkconfig mariadb on

 

參考:

  1. [Centos7] 新的防火牆firewalld
  2. Installing LAMP (Linux, Apache, MariaDB, PHP/PhpMyAdmin) in RHEL/CentOS 7.0
       

MySQL 修改 timeout 時間以改善效能

環境:Ubuntu Server 15.10 x64

剛剛在後台發現一堆連線數以sleep狀態卡在那,
感覺就怪怪的,如果沒有使用的話為什麼不會timeout呢?
查了一下才發現,

SHOW variables;

0
原來mysql預設的數字是八小時…
這也太久了吧,不會造成連線數都卡死嗎??
於是乎開始修改找資料嘗試修改,
不知道為何,我的lamp套件與別人的安裝路徑都不一樣,
最後我是在

/etc/mysql/mysql.conf.d

裡面加上下面這幾行,儲存重開mysql服務後解決

# 防止連線數卡死
wait_timeout = 180
interactive_timeout = 180

 

參考1:http://note.tc.edu.tw/421.html

參考2:http://dba.stackexchange.com/questions/1558/how-long-is-too-long-for-mysql-connections-to-sleep